🍣絵文字キーの実現
要約
入力メソッドの拡張とキーボードのファームウェア変更により🍣キーを実現した。
ErgoDoxで実現できないキー
ErgoDox EZ等のキー配列を自由に変更できるキーボードがある。 ただし、通常のキーボードにないキーを作ることはできない。
例えば、絵文字を直接入力するキーを作ることはできない。
ファームウェアの制限
ErgoDox EZ等で利用できるファームウェアであるqmk_firmwareにはUnicodeサポート機能がある。しかし実現方法がOSごとに違うため、OSに依存した制限がある。
macOSではUnicode Hex Inputを利用しているが、Unicode Hex Inputは4桁のコードポイントしか受け付けない。そのため4桁を越えるU+1F363
(🍣)を入力するキーは作れない。
絵文字キーの実現
入力メソッドの拡張
4桁を越えるコードポイントを入力できるようAquaSKKを拡張した。(codepoint_inputブランチ)
Ctrl
と Option
を押しながらコードポイントを入力し、最後に u
を入力することで、任意のコードポイントを入力できるようにした。 例えば、 🍣(U+1F363
)を入力したい場合は、 Ctrl
と Option
を押しながら 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: サロゲートペア
@mzp U+D83C U+DF63 でも
— ばんじゅん🍓 (@banjun) 2016年12月24日
別解2: TouchBar
TouchBarには絵文字入力補助があって便利!
🎄AquaSKK 4.4.5: 旧かな入力の対応・数値変換の不具合修正
いくつかのプルリクエストをもらったので、それらを取り込んだAquaSKK 4.4.5をリリースした。
ダウンロード
https://github.com/codefirst/aquaskk/releases/tag/4.4.5
変更内容
旧かな変換ルールの追加
「ゐ」「ゑ」に対応するローマ字が、AquaSKKとL辞書でずれていてうまく変換できなかったため、L辞書のほうに統一した。(#71)
さらに設定画面から有効・無効を切り替えれるようにしたり、「くゎ」や「ぐゎ」を入力できるようにした。(#73)
不具合修正
いくつかの不具合を修正した。
Love💕LivePhotos
NGK2016Bでライブフォトの話をしてきた。
資料
関連資料
- 📷 mov/jpegからのLive Photo生成 - みずぴー日記
- https://github.com/mzp/LoveLiver
- AppleエンジニアにありすLive Photoを見せてきた話 / Story apple engineer meets arisu Live Photo // Speaker Deck
原稿
自己紹介
仕事ではMisocaというWebサービスを作っているが、これはスポンサーセッションではないので、まったく関係ない話をする。
具体的にはiPhoneの話をする。
ライブフォトの紹介
最近のiPhoneにはライブフォトという機能が搭載されている。 普通に写真を撮ると、前後が動画として記録される。
ライブフォトはロック画面に設定することもできる。 そのため、「動くロック画面」が実現できる。
理想
ので、こういうロック画面を作りたい。
問題点
ライブフォトはiPhoneのカメラで撮影しないと作れない。
それでは困るので、任意の画像・動画からライブフォトを生成する方法を探さないといけない。
調査内容
いろいろ調べた結果、movファイルとjpegファイルのメタデータに同じUUIDを書き込んで、Photosアプリに取り込めばライブフォトになることがわかった。
LoveLiver
これをアプリにした。
アプリ名はライブフォトを愛するという意味でlove liverと名付けた。動画ファイルを取り込んで、指定した箇所をライブフォトに変換できる。
その後
以上が一年前の話です。そして、そのあとの一年に起きたことを順番に話す。
題材
iPhoneは縦長かつ高解像度のため、なかなか適した題材がない。
デレステ 縦MV
奇跡的にデレステの縦MVバグ(?)が見つかる。 これは発見直後のまとめで、みんなが大喜びしているのが分かる。
大量のライブフォト
これにより大量のかわいいライブフォトが生成できるようになった。
ちょいちょい寿司の画像がまざっているのは気にしないでほしい。
WWDC
WWDCにはラボと呼ばれるAppleのエンジニアと一対一で会話する機会がある。
そこにLoveLiverのもう一人の開発者がいって、APIの有無を聞いた。ついでに生成されたライブフォトを見せて、coolと言ってもらった。
Tumblr
長い間、ライブフォトの共有方法はなかったが、先日Tumblrが対応した。
タッチバー対応
最近は、新型MacBookProを買ったので、タッチバー対応をしている。 どこをライブフォトにするかを選択できる。
まとめ
きときと
ゆるゆりの舞台訪問のために富山に行った。
ゆるゆり舞台
ゆるゆりなちゅやちゅみの舞台をメインに回った。場所等は以下のサイトを参考にした。
- つればし 『ゆるゆり なちゅやちゅみ!』 舞台探訪(聖地巡礼) ~富山県/高岡エリア~
- つればし 『ゆるゆり なちゅやちゅみ!』 舞台探訪(聖地巡礼) ~富山県/砺波・南砺エリア~
- ☆ ゆるゆり さん☆ハイ! 聖地巡礼(舞台探訪) エリア別ガイド【全話まとめ】 ☆ - nobu cafe♪
砺波平野
なちゅやちゅみのラストシーンのキャンプ場。 スキー場の上に登らないと見えない風景なので、がんばって登った。
らんぶる
序盤にでてきた喫茶店。 せっかくだし、ということであかりちゃんたちが座ってた席を選んだら、すぐ近くにポスターが貼ってあって良さがあった。
最高のカフェきた pic.twitter.com/mYAr9AtrLg
— mzp (@mzp) 2016年10月22日
— mzp (@mzp) 2016年10月22日
ついでに、豆とドリッパーを購入して、滞在期間中に飲むコーヒーも確保した。
その他
その他に高岡市内やココスに寄って、舞台訪問の実績を解除した。
Netflixに加入しておくと舞台で該当のシーンをその場で確認できてよい、という知見を得た。
宿
直前まで予約をさぼっていたら、Jalanで予約できるホテルがすべて埋まっていた。 なので、始めてAirbnbを使ってみた。
そしたらなぜか5階建ての一軒家を貸しきることになって異常に豪華だった。
本日の宿です pic.twitter.com/0gUOO4JYV9
— mzp (@mzp) 2016年10月22日
ゆるゆり聖地巡礼なので茶室もあります pic.twitter.com/bvZrd0lBS2
— mzp (@mzp) 2016年10月22日
いろり、あります pic.twitter.com/GmDkrKTyud
— mzp (@mzp) 2016年10月22日
発表できる雰囲気すらある pic.twitter.com/gZCIG79lhC
— mzp (@mzp) 2016年10月22日
完全にバーだわ pic.twitter.com/cMsl0TtXcD
— mzp (@mzp) 2016年10月22日
セミナールーム(?)でブルーレイが再生できたので、シンデレラガールズ 3rd LIVEのブルーレイをずっとみていた。
寿司
せっかく富山に来たので寿司を食べた。 海老がやたらうまくてびっくりした。
観光
高岡駅の近くに古い町並みが広がっていたので、普通に観光していた。 Wifi案内に大仏の絵が描いてあって徳が高そうだった🙏。
大仏見にきたら、wifiに接続できるようになった🙏🙏🙏 pic.twitter.com/GZKzRwY6LU
— mzp (@mzp) 2016年10月24日
その他
ハロウィンガチャをひく人がいたので、タイムラプスで撮影したらだいぶ楽しい感じになった。
「ハロウィンイベントやってないソシャゲーはないですからね」と言いながらガチャを引いてる人がいる pic.twitter.com/OqFRs6RsNb
— mzp (@mzp) 2016年10月24日
AquaSKK 4.4.[2-4]: JetBrains対応
要約
AquaSKKレベルでJetBrains製品に対応するのをあきらめた。C-j/l/q/L/Qを使用可能にするために、Karabinerを利用するようにした。
ダウンロード
https://github.com/codefirst/aquaskk/releases/tag/4.4.4
使い方
Karabinerのprivate.xmlに以下のように書く。
<?xml version="1.0"?> <root> <include path="/Library/Input Methods/AquaSKK.app/Contents/Resources/karabiner.xml" /> </root>
するとKarabinerの設定画面にJetBrains用の設定が表われるので、それを有効にする。
さらにAquaSKKの互換性で com.jetbrains
に対して「入力ソース同期」を有効にする。
制約
無理矢理やっているため、いくつかの制約がある。
- AquaSKK統合では動作しない
- 入力モードを切り替えたときにポップアップはでない
変更内容
JetBrains製品ではC-j/l/q/L/Qが使えないため、なんらかの回避策が必要となる。
これまでAquaSKK側でいくつかの回避策を取っていたが、JetBrains側の挙動に強く依存しているため、たまに動かなくなったりする。 これまでも何度か対応をしている。
そういった対応もそろそろツラつらくなってきたので、より低レベルな部分で対応できるKarabinerを使うようにした。
そのため、AquaSKK側に以下のような変更を加えた。
- JetBrains用の回避コードをはずした。
- Karabiner側の入力ソース変更にAquaSKKが反応するようにした。
Sierra
KarabinerはまだSierraでは動かないが、JetBrains製品も動かないらしいので、これでいいと思っている。
MacOS Sierra対応を現在進めております。JetBrainsのデスクトップ製品(IDE)をご利用の方は、対応が完了するまでアップグレードを保留していただくことをお勧めいたします
— JetBrains (@jetbrainsjp) September 21, 2016
ちなみにAquaSKK自体はSierraでも動く。
ファミコン エミュレータ
エミュレータを作ってみたいなぁという漠然とした思いがずっとあったので、ファミコンのエミュレータを書いている。スクリーンショットにあるような表示はできる。
ファミコンにした理由
エミュレータは作りたいが、よく知らない機械のエミュレータを作ってもつまらないので、多少は親しんだファミコンにした。
一番印象深いゲーム機はスーパーファミコンだが、スーパーがついてないほうが簡単かな、と思ってファミコンにした。
買ったもの
カートリッジからROMイメージを吸い出すために、吸い出し機をAmazonで購入した。
GAMEBANK-web.comオリジナル「FCダンパー」 / ファミコン ファミリーコンピュータ Famicom Kazzo DUMPER レトロゲーム 吸い出しツール [0217]
- 出版社/メーカー: GAMEBANK-web.com
- メディア: エレクトロニクス
- この商品を含むブログを見る
ゲーム自体は大須のレトロゲームを取り扱ってる店に行って買った。1200円くらいした。
進捗の様子
Hello world
NES研究所にあるサンプル。
最初はこれを動かすのを目標にしていた。作ろうと思ってから、これを動かすまで2週間ほどかかっている。
ギコ猫
ギコ猫でもわかるファミコンプログラミングにあるサンプルを一個づつ動かしていった。ギコ猫なつかしい。
スーパーマリオブラザーズ
一番最初にスーパーマリオブラザーズを動かしたときの様子。 空の色がおかしい。
だいたいの背景色が正しくなったが、一部おかしい。
空の表示はできるようになった。
Sprite 0の当り判定(ヒットフラグ)を実装したら、タイトルがでるようになった。
VRAMの読み込みがおかしかったので修正した。
スプライトの表示をちゃんとしたらマリオっぽいのが表示された。 が体がバラバラになっている。
スプライトの反転処理を実装したら、体がくっついた。
スプライトの背景処理をちゃんとした。
他の画面もそこそこ動く。
実装してないこと
実装してない部分を列挙すると以下のようになる。ゲームとして遊ぶのは無理だと思う。
- mapper 0以外のカートリッジの対応
- タイミング制御。普通に画面がチラつく。
- サウンド
つらさ
うまく動作しないときの原因の特定が、本当に大変だった。
エミュレータは任意のプログラムを入力とするので、許容する入力が圧倒的に多い。さらに、その内容は機械語で書かれているので意図を理解するのが難しい。 だいたいは、以下のような手順でデバッグしていた。
- ディスアセンブルしたコードを読んでなんとなくの動きを把握する。
- そして、その通りに動いてるかどうかをメモリを監視しながら確認する。
- 変な動きをしてるところがあったら命令のログもとって重点的に動きを追っていく。
Rubyで書かれたNESエミュレータであるoptcarrotと動きを比較してみることも多かった。
逆アセンブルしたコードを読んでたら、ジャンプ先がアドレスじゅなくて名前の世界、マジ最高、って気分になってきた
— mzp (@mzp) August 14, 2016
現状
さぼっていた部分がだんだんと致命的になってきてウワーとなっている。
- 上から順に1ラインづつ画面を更新していく、
- CPUとPPUのタイミング動機
がっつり直さないといけないけど、どうしようかな…。
レポジトリ
https://github.com/mzp/famicom/
そろそろGo言語を勉強するか、という気分だったのでGo言語で書いている。深い意図はない。
参考にしたページ
その他
AquaSKK 4.4.1
AquaSKK 4.4.1で設定画面で辞書を追加する際に file:// がついてしまう問題を修正した。詳細は、Issues #55に書いてある。 あとスクリーンショットの壁紙がかわいい。
ダウンロード
https://github.com/codefirst/aquaskk/releases/tag/4.4.1
経緯
デレステ辞書を作るのを手伝っている途中で指摘されたので、「すみません、すみません」と思いながら修正した。
この挙動はかなり前から認識していて、実際たまに困っていた。 ただ、たまになので手動で直して回避してしまっていた。
ちょうどいい機会なので、勢いで直した。
要約
生 産 性 が 上 が り S K K 実 装 の バ グ 取 り が 捗 る デ レ ス テ 辞 書
— マロニー (@mlny_c) 2016年9月2日