2014/10/25

Vimperator が Mac で素直に make できるようになった話

Vimperator を Mac で make する時は、GNU の sed とか使わないといけなかったので記事 を書いてたのだけれど、素直に make できるようになった。

手順

  • git clone git://github.com/vimperator/vimperator-labs.git
  • cd vimperator-labs
  • make
  • open -a 'firefox' downloads/vimperator*.xpi
前回の記事で紹介した時は Google Code の mercurial repository だったのだけれど、いつの間にか Github に移ってるので git で。
make するだけで downloads の下に vimperator の最新版が手に入るようになりました。便利。

経緯

前回 pull request を送った時に取り込んで貰ったけれど、最新版が make できなくなってました。
どうやら xargs と find を Make 時に使うようなったけれどそのオプションが GNU の find と xargs にしか付いてなくて、Mac の default のものだコケるみたい。

findutils とかを入れて対処しようにもコマンドがベタで書かれてるので、その部分を変数にして、せめて環境によってコマンド名変えさせてくれー、って言ってみた
そうしたら、GNU への依存を消してくれたので make が楽に。ありがたい。

2014/10/13

Vimperator in Mac で C-[ とかが効かなかくなっていたので修正してみた

普段のブラウジングは Vimperator を使っているのですが、いつからか C-[ で Escape できなくなってました。
なんか面倒臭いなー、と思ったらソースが Github で公開されているっぽいので修正して Pull Reqest を投げてみたら merge されたやったー、というお話。

環境

Mac OSX 10.9.5
Firefox 32.0.3
Vimperator(22faadf35b32fb7d31cac323a5206c104efc4b6f)

Vimperator の key handling

ソース読んでたら、打たれたキーは最終的に toSttring される みたいで、 ctrlKey は押されているかー、とかkeyCode は何かー、とかチェックしている様子。
それで整形されて String になって処理が続いていく様子。たぶん map とかを replce するために文字列化とかしているのかな。

それはさておき、Mac の Firefox にはバグがあるっぽくて、コントロールを押すと keyCode が変わってしまうので、その場で対処している、とのこと

Firefox in Mac での KeyCode 調べと修正

window.addEventListener('keypress', function(e) { window.hoge = e; }, false);
とかして今の Mac の keyCode を見るとこんなんだった。

] keypress Control { target: <body#gsr.hp>, key: "[", charCode: 0, keyCode: 219 }
- keypress Control { target: <body#gsr.hp>, key: "-", charCode: 0, keyCode: 173 }
_ keypress Control-Shift { target: <body#gsr.hp>, key: "_", charCode: 0, keyCode: 173 }
\ keypress Control-Shift { target: <body#gsr.hp>, key: "_", charCode: 0, keyCode: 173 }
^ keypress Control-Shift { target: <body#gsr.hp>, key: "^", charCode: 0, keyCode: 54 }
全然違ったのでそれぞれで動くように ad-hoc な if 修正やら switch を追加やら
んで C-[ でちゃんと insert も抜けるようになったし

inoremap <C-]> ]]]
inoremap <C--> ---
inoremap <C-_> ___
inoremap <C-\\> \\\
inoremap <C-^> ^^^
とかも動くようになたので、C- 付きの記号5つの対応はできたっぽい。

オチ

どうせなので Pull Reqest にすっかー、ってなことで投げたら merge された。やったー。

C-[ が使えなくて困ってる Mac User の方、直りましたよー、って言おうとしたけれど build がコケる。
一応それも原因は分かったのでまた Pull Reqest 投げてます。merge されたらまた記事を書くはずなので解説はその時

2014/10/04

Windows で管理していた mp3 を Mac の iTunes に import する時の文字化けへの対処

Windows で管理していた mp3 を Mac の iTunes に import する時の文字化けへの対処です。
タイトルからして長いけれど、紆余曲折して結構長い話。


そもそもの経緯

  • Windows で mp3 の音楽を管理していた
  • tag の encoding とかは気にしてなかった(というかたぶん当時知らなかった)
  • その Windows を数年くらい放置(なので Windows の iTunes はとても古いはず)
  • データだけ NAS に移してマシン放棄
  • NAS から mac に音楽を import すると文字化けしているさあ大変

問題と面倒な部分

  • mp3 の tag が SJIS
  • iTunes 11 on Mac は Latin1 と ASCII と UTF8 しか対応していないらしい
  • 文字化けをどうやって変換するか

先人達の対処方法


試した対処方法とその結果

  • iTunes によるタグ変換
    • どう変換かませても無理だった
    • UTF8 を修正だろうと latin1 -> ASCII だろうと化けてる
  • id3v2 による変換
    • シェルスクリプト書いて変換してみた
    • "TALB" "TIT2" "TPE1" を SJIS から UTF8 に変換
    • しても iTunes は認識せず
    • というか iTunes できちんと認識されている日本語のエンコーディングが謎
    • id3info を grep して nkg -g すると ASCII 扱いになってるので id3v2 じゃ無理っぽい
  • mac 上で SJIS サポートしてるソフトを使う
    • 有償だった
  • Win機で変換してから送ってくる
    • Win機が無い。

最終的な対処方法

  • Wine + SuperTagEditor
Win機無いならエミュレートすれば良いじゃない状態。というか Mac さんなんかその辺りの解決方とか用意ないのかなー。

環境


Super Tag Editor を起動するまで

  • brew install wine
  • wget https://gist.githubusercontent.com/mattintosh4/6591305/raw/b86e0a9b6132aaa8b6cb5febf7255d60f6c0375a/osx-wine.inf
  • wine osx-wine.inf
  • export LC_ALL=ja_JP.UTF-8
  • wine SuperTagEditor.exe
まず wine を入れます。参考にしたのはここ
設定ファイルを作ってくれた方がいらっしゃるようなので、 gist から落としてきて実行。
あと locale が ja_JP じゃないと豆腐が出てきたので export してから実行。別に LC_ALL=ja_JP.UTF-8 wine SuperTagEditor.exe とかでも良いんだけれど。
そして落としてきた SuperTagEditor を実行する、と。

Super Tag Editor で Tag Info を直す

  • ファイルを選択
  • 変換 > ID3v2 形式に変換
  • 変換 > ID3v2バージョン/文字エンコードの変換
  • v2.4/UTF-8 にする
どうやら手順としてはこんな感じらしい。一旦 v2.4/UTF16 してから v2.3 にするって謎の手順を推奨する方法もあるみたいだけれど。とりあえずこれでどうにかなった。

まとめ

  • SuperTagEditor で ID3v2 tag を 2.4/UTF-8 にすると良い
  • 正直 Win でやった方が楽そう
  • 最悪 wine でもどうにかなったけれど

結局の結論

  • Windows から Mac に音楽を移す時は Windows 側で id tag を v2.4 とかにしてから移しましょう
  • Mac 側でやる手段は割と無いっぽさげ?

おまけ

この記事を書いてる時に python で実行できそうな文字化け修正方法を見つけたりした。
というか参照記事とかの年とか、やってることが何年も前のことしてる気がした。

2014/09/22

Kernel/VM探検隊@沖縄 に行ってきた

2014/09/21(Sun) に Kernel/VM探検隊@沖縄 があったので行ってきました。

いわゆる低レイヤーとかておい人達の集まりらしい Kernel/VM が沖縄でもやるらしいやったー、てな感じで行ってきました。

とりとめもなく列挙していくと

過激に含まれる C++ 成分、interactive に plot される graph、発表中に消えるPC、 Terminal なのに出てくる画像、セキュリティポリシな上から目線(?)、Linux kernel reading by gbd + qemu-kvm、 セキュリティフィックスだけになっちゃった ELILO、突然のMonad、計算機(物理)、lisp祭りとツッコミ祭り、Kernel探検 to CPU Idle Time、とつぜんの 98 とか Windows NT

という流れ。発表聞いた身からするとだいたいあっているのだけれど列挙だけするとカオスっぽい。

個人的にておかったのは @fadis_ さんの LLVMで後からコンパイルするC++ ですかねー。
コンパイル時の型チェックをぶん投げて実行時型チェック+実行コード生成。
実行時にコンパイルするという謎の手法でした。
C++分からない+レイヤ低いの分かないので若干謎。
利点があるのかもしれないけれど型チェックぶん投げてるので何そのコンパイラ再実装ー、って感じでした。


懇親会ではぱいかじ。
懇親会で話を聞いてて思ったけれど kernel level のレイヤはそんなに触ってないので異文化っぽかったかなー、と。
Serial の話とかを当然のようにしたりするけれどあまり分からなかったりなので。
ボードとか触るぜー、みたいなことやってないなー。
何気に型の話が結構あって気になるんだけれど型なー、ってなったりした Kernel/VM でした。

2014/09/21

Slack + github + Travis CI で gem の開発環境を作ってみた話

noir って gem を作ってたりするのですが、テストは書いているけれど CI 回していなかったので Travis CI を導入してその通知を Slack で受け取る、みたいな環境にしてみた忘備録。


Slackの導入

Slack は開発用のチャットみたいなサービスらしいです。
各 room ごとにメンバーは招待制。
github や Travis CI といったサービスとの連携がデフォルトで結構できるようになってます。

まずは Slack からアカウントの作成。
company なんてものは無いので atton で作ってみる。
そうすると atton.slack.com とかでアクセスできるようになるみたいです。
そこから room の作成。 今回は noir にしてみました。
ちなみに公式のクライントが Mac, iOS, Android ともにあるみたいです。

github 通知の導入

room 名から Configure Integrations を押すと導入する一覧が出てくるので github を選択。 
github でサインインして通知する channel を選択。
通知用の notifications channel を作っておいたのでそこを選択。
すると push したりするとその channel に通知が流れてくるようになります。

Travis CI 通知の導入

また Configure Integrations を押して Travis CI を選択。
Travis CI の場合は .travis.yml に設定を書いてねー、と言われるのでそれに従う。
今回は notification channel に通知を送りたいので
$ bundle install travis
$ travis encrypt "company_name:token" --add notifications.slack
 を設定。そうするとテストの通知が流れてくるようになりました。便利。


Slack の notification 設定が細かくて結構便利なので暫く使ってみようかなー、ってしてます。
何気に Travis CI の設定ログとか書いてないのでそこもあとで書くかなー。