TridactylのNative Messengerとはなにか

なんだかんだでVim VixenではなくまだTridactyl使ってる。

今回はNative Messengerという機能について。日本語でまとまった情報がなかったので。とはいっても大してまとまってるわけではないか。最低限の情報を。

Native Messengerとはなにか

(多分)FirefoxNative messaging機能を使って、Tridactylに、WebExtensionだけでは実装できない機能を有効化させる*1もの。

どうやってインストールするのか

Tridactylのコマンドライン上で:installnativeするとインストールのためのコマンドがクリップボードにコピーされるので、それを実行する。

Python 3が入っているとスクリプトが、入っていないと(Windowsでは)実行ファイルがインストールされる模様。

インストール成功後に:nativeしてもエラーになる件

インストール後、最後に以下のようなメッセージが表示されるので指示通り:nativeしてみるも、俺の環境ではエラーが出た。

Run ':native' in Firefox to cross-check. :-)

原因はこれかも。とりあえず俺の環境下ではNative Messengerはまだ動いていないのでした……。

Native messenger can't be detected · Issue #544 · tridactyl/tridactyl · GitHub

追記: Native Messengerインストールできました

こっちが問題だったっぽい。リンク先コメントの実行ファイル使うと動作しました。細かいところの確認はできてないけど、とりあえず:restartなんかは動いた。

なお環境はWindowsです、一応。

デブサミ2018関西行ってきたのでセッションの感想など

ほんのり暇だった時期に、Twitterでフォローしてる人の登壇するよツイートで開催を知ったので、会場が市内ということもあり行ってみることに。参加を決めたときにはまさかまだ暇なままだとは思ってもいなかったが……仕事ー。

セッションの感想

【C-1】Mackerelの200週連続リリースの舞台裏とこれから

はてなの人によるMackerel(スペルが覚えられない)のリリース関係の話。なんだけど、それよりもはてな開発プロセスのホワイトさに目が行った。

時間かけて実装する機能にかける時間が、週あたり2日分(丸1日+半日*2)という話がなんとも興味深かった。

"マネージャーの最も大切な仕事 95%の人が見過ごす「小さな進捗」の力" って本に、進捗があることが生産性につながるから、マネージャーは管理対象の進捗をサポートすればいいよ、みたいなことが書かれてるんだけど、はてなはそれ自然にできてるっぽいなあ、とか。

毎週のリリース自体があきらかに目に見える「進捗」だし。

【B-2】B2Bクラウドサービスをゼロから立ち上げて、利用社数が1000社を超えるまでの道のり(仮)

Re:lation という問い合わせ管理ツールの立ち上げの話。

「利用社数が1000社を超えるまでの道のり」ってあたりを聞きたかったんだが残念ながらその辺の、なんというかグロースハック? 的な話はかなり薄めだった。

話の内容よりもこのサービス自体の方がちょっと気になってたり。

【A-3】今日から始める機械学習はてなの事例〜

意図せずまたはてな機械学習っていっても簡単なのもあるんだよー、的な話。よく考えると俺も簡単なクラスタリングをライブラリ使って仕事で使うくらいはしたことあった。

データの質とか>アルゴリズムとかあたりの話も興味深かった。あとKaggleとか。

【B-4】意外と知らない?!GitHubの新機能を紹介します

GitHub...に限らずGitHub Enterpriseとかなんかクラウドのやつ(名前忘れた)とかも含めた新機能とかの話。

知っておきたいところは大体知ってたし、ちょっと自分の求める方向性と違ってた。

【B-5】農家と流通業者のタッチポイントにLINE Botを導入した話

途中まで気付かなかったんだけどこれと次の話の2セッションを1つの枠でやる、ということだった。

会話にしてコミュニケーションしやすく、からでもこの場合はフォームの方がけっきょくやりやすい、という流れは面白かった。

最近アナログな業種でも、代替わりとかによってデジタル化~、的な話が割とあってその辺に近い話かなあと思ってたが微妙に違った。

【B-5】新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -

Node-REDというNode.jsベースの、IoT向け? のビジュアルプログラミング環境の話。面白かったが、もうちょっと具体的な事例が欲しかったかな。割とどのセッションでもそうだけど。

【B-6】東京本社よりも地方開発拠点を活性化させるコツ!!!!

リアルタイムでツイートしたけど、SansanもEightもさっぱり知らなかった、が、割と使われてるのな。会場で使ってる人挙手したときに3分の1弱くらいいたんじゃなかろうか。

話の内容としては、これもまた働き方に向いた話。

こういう話楽しいけど、最近は聞いてると、一人で働くのも限界あるかなー、みたいなことばかり考えてしまう。

かといって、普通の会社勤めとか今更できる自信もなく。

【B-7】勝てる「開発プロセス」の作り方 ―そのプロジェクト計画、本当に成功を確信して書いていますか?

プロジェクトを成功させるために、開発の状況を実現性トライアングルにあてはめて、適切なバランスで進んでいるかを測る、的な話。

内容もさることながら話もうまいし、いいセッションだった。のだが、この時間になるとだいぶ疲労が溜まっておりあまりちゃんと話を聞けなかった。残念……。

セッション以外の感想

企業主催ということもあってか、スーツ姿の人多くてびっくり。メモ取ってるっぽい人が多い反面、Twitterにつぶやいてる人は少ないっぽいなあとか。

参加者多くてびっくり。男子トイレばかりこんなに混んでるイベント初めて見た。懇親会で実行委員の人が言ってたけど、次は会場変わるかも、ってのもまあそうだよなあ、という感じ。

NoScriptのFirefox Quantum版で一度XSS Warningの設定をやり直す方法

Quantum版のNoScriptはまだ開発途中なのか、XSSの可能性のあるリクエストをブロックした場合に、常時ブロックしたりあるいは許可した場合のリストを編集する方法がないっぽい。

f:id:xxmagai:20180925142516p:plain

大抵は困らないが、間違ってブロックしたくないものをブロックしてしまったりすると困る。

なんとかするには、

  1. 設定をエクスポートする。
  2. 設定はJSONなので修正する。
  3. 設定をインポートする。

で、具体的な修正内容だが、

  // 前略
  "xssUserChoices": {
    "https://blog.hatena.ne.jp>https://magai.hateblo.jp": "block"
  }
  // 後略

みたいな感じになっているので、これをallowにするなり、削除するなり。

ただ一点注意が必要なのは、xssUserChoicesキー自体を削除すると意味がないこと。NoScriptのインポート機能は、既存の連想配列を上書きするような形になっているのではないかと思われる。

だからたとえばぜんぶクリアしたい場合は、

  // 前略
  "xssUserChoices": {
  }
  // 後略

なりする。

Vimperatorの代替をVim VixenにすべきかTridactylにすべきか

この間Quantumでない最後のESRが死んだので、Vimperatorが完全に死にました。いやまあWaterfoxとかもあるけど、そもそもVimperator自体がだいぶ前から死に体だしと。

で、代替はVim Vixenかなあと思ってたんだけど、Tridactylってのもあると知ったので両方調べたり試してみたり。その結果を雑にまとめてみた。

結論から言うと現時点ではクイックマークを使えるという一点だけでもTridactylかなあ、でもどっちもつらいんで、まだ修正しやすそうなVim Vixenを、自力でなんとかするのがベターかな、といった感じ。

Vimperatorで使っていた機能=代替に欲しい機能

これきちんとリストアップしないと、うまく比較できないのでは、と思いリストアップ。

  • Vim風の操作
    • ページを開く操作。
      • :open(o, O), :tabopen(t, T), go, gn, gu, gU
        • :open系では、ブックマーク・履歴等からの総合的な検索(多分Firefoxのアドレスバー同等?)や、prefixによる各種検索。
      • f, Fはそこまで使ってなかった。
      • p, Pは誤爆多いので潰してた。
    • 履歴移動。
      • CTRL-O, CTRL-I
    • タブ操作。
      • gt, gT, d, u, :tabm[ove], :tabo[nly]
    • ページ内移動。
      • j, k, h, l, CTRL-D, CTRL-U, CTRL-F, CTRL-B, gg, G
      • m, `でのマーク移動もたまに使ったが、まあなくても。
    • ページ内検索。
      • /, n, N. ?はあまり使ってなかったと思うけどまあ/実装するなら?あるよね。
      • また検索履歴の呼び出し。
    • 入力コントロール内での操作。
      • i_CTRL-BをLeftにマップしたり、i_CTRL-FをRightにマップしたり、シェル風操作に。
    • 表示の操作。
      • zi, zI, zo, zO, zz
    • その他操作
      • i, INSによる一時的な機能の無効化。
      • :ec[ho]を電卓代わりにして計算とかもちょっと。
      • :res[tart]
  • その他
    • :styleによるページごとの細かなCSSの調整。
    • addUserCommandでちょっとしたスクリプト
  • プラグイン
    • feedSomeKeys
      • 一部サイトで一部キーをサイト側に流すようにして。またマップすることでサイト側のキー操作をカスタマイズする感じにしたりして。
    • copy.js
      • y, YでそれぞれURL, titleのコピーをできるように。

欲しい機能の、Vim Vixen, Tridactylそれぞれでの実装状況

機能 Vim Vixen Tridactyl
o, O, t, T △ (ブックマークからの検索ができず、候補の編集もできない)
M, go, gn ×
gu, gU
f, F
CTRL-O, CTRL-I ○ (デフォルトではマップされてない)
gt, gT
d, u
:tabm[ove] ×
:tabo[nly] ×
h, j, k, l
CTRL-D, CTRL-U, CTRL-F, CTRL-B
gg, G
m, ` × ×
/, n, N ○ (検索履歴を辿れない) × (Firefox自体のページ内検索が出るが、その挙動も不完全?)
i_*(フォームコントロール内のマッピング) × ○ (一応実装されているようだがWebExtensionsの問題か制限が多過ぎる)
zi, zo, zz
zI, zO × ×
i, INS × (<S-Esc>でアドオン丸ごとの無効化は可能)
:echo × × (コマンド自体は存在しているっぽいが出力されない)
:restart × ? (実装されているようだがNative Messenger? が必要とのこと)
:style × ×
addUserCommand × ×
プラグイン × ×
feedSomeKeys相当 × (ブラックリストでサイトごとのアドオン丸ごとの無効化は可能) ×
copy.js相当

その他の気になる点

  • Vim Vixen
  • Tridactyl
    • j, kの挙動がページによって怪しい気がする。
    • h, lで左右両端まで行くと、次にページトップに飛ぶような。
    • コマンドの省略ができないのが地味につらい。:tabmoveなら、:tabmで駄目とか。
    • gnXで、Xが未定義の場合にgnが無視されてXが通ってしまうのがちょっとアレ。

Kindle Paperwhite マンガモデルを一ヶ月くらい使ってみての追加の感想

買って一週間くらい? の感想はこちら。これの続きみたいな。

magai.hateblo.jp

よいところ

  • 専用ハードウェアなこともあって立ち上げがとにかく速い。
    • Kindleアプリ、少なくともAndroidのは立ち上げが異常に遅い(キャッシュ効いてないと分単位でかかる。割と最近に一回改善されて、その後また昔と大差なくなった)。これがいちばん便利なところかな。

よくないところ

  • ネットつないでないとマンガの次の巻がわからない。情報ローカルに持っとけないの?
  • カラーの本や雑誌を読むモチベーションがだいぶ下がる。
  • Kindleにロックインされまくる。買うちょっと前くらいに、マンガはeBookJapanも併用しようかなー、と思ってたのが台無しに。

Kindle Paperwhite マンガモデルは電子読書ガチ勢にはそこそこおすすめ

プライムデーで、キャンペーン情報なしモデルが10,980円になってたのを買ってしまったので感想。不満も多いが、すでにメインの読書端末になってしまっている。

じゃあおすすめなのかと言うと、せいぜいガチ勢にはそこそこおすすめ、くらいかなあと。一般人や、ましてや初心者にはおすすめできない。そういう人はまずKindle Fireとかから手を出した方が腐らせにくいと思う。

自分はもう何年も電子書籍メインで読書してて、ばらつきはあるけど概ね年に漫画500冊~、文字だけの本50冊~くらい読む感じ。9インチ級のタブレットと、5インチ級のスマホで読んでいた。

Kindle Paperwhite マンガモデルがもたらした読書体験

まずとにかくサイズがちょうどよかった。文庫本サイズで、その気になればじっさいの文庫本と同じくらいの文字数を表示することもできる。漫画を読む場合も、文庫の漫画本くらいのイメージ。

Kindle Paperwhite マンガモデルと文庫本

かつ、このサイズでありながらスマホなどよりは見やすい。紙と比べるとさすがにつらいが。

最後が、読書(ほぼ)専用の端末なので読書に専念できるってあたり。スマホだとどうしても本以外のものを開いちゃうし。

ということでこれという決め手があるわけではないんだよね。

Kindle Paperwhiteの欠点

これがもうたくさんあって……。

  • ハードウェア起因のもの。
    • ほこりや汚れがつきやすい本体。ブラックを選んだので余計目立つのかも。
    • フレーム内枠の反射が気になる。スマホタブレットのようにフラットじゃないせいか。これもホワイトだったら気にならなかったかも。
    • 持ちづらい。普通に持った状態で、ページめくりがかなりしづらい。多分人によっては致命的。Oasisでは解消されてそう。
  • ソフトウェア起因のもの。
    • ページ遷移時に全画面反転する。まあこれはわかっていたことだし、むしろ文字だけの本だと反転しない場合が多くて、予想よりはよかった。
    • 特に漫画で、残像がかなり残って気になる場合がある。
    • ダウンロード直後にもどこまで読んでいるかのパーセント表示が出るため、読み終わった本と、再読のためにダウンロードした本の区別がつかない。
    • 位置No.での移動時、左下に表示していないと現在の位置No.がわからない。
    • スリープ周りの設定ができない。10分経ったらスリープするデフォルトの挙動か、隠しコマンドによる、自動でスリープせず手動スリープも無効になる(!)挙動かの二択だが、どちらもつらい。指定した時間が経ったらバックライトだけオフにするという設定が欲しかった。

それでもメインに使う理由

自分にとってサイズや視認性がちょうどよく、読書専用というところも合っていて、かつモノクロなところや、各種欠点は一応許容範囲内だったから、というところか。

だから最初に書いたように一般人や初心者にはおすすめできないし、ガチ勢でも、各種欠点のうち一つでも許容できない人にはつらそう。

ただまあ、読書を捗らせることに全力をかける人には、一応選択肢としてありじゃないかなあと。もっともお金ある人はOasis買った方がいいかも。

フェアじゃないので、細かい美点も

  • 高速ページめくりは確かに便利。ただこれ、アプリでも実装できるよね。
  • 脚注をその場でプレビューできるのも便利。ただこれも略。
  • サンプルを読んでる途中に購入すると、読んでる位置をそのままで読み続けられる。これもアプリではできなかったはず。
  • 電池がそこそこ持つ。1日2、3時間、機内モードオフで、バックライトの明るさは主に中くらいで読んで、満充電からバッテリー警告出るまで1週間持った。

次買うなら

  • 反転・残像などを許容範囲に調整して、
  • 持ちやすくなって、
  • スリープの設定くらいできるようになったら、

買い替えてもいいかも。この辺がどうにもならないようなら、故障しても7インチタブレットとか選んじゃいそう。

結論

なんかだいぶけなしてる感じになっちゃったけど、ごちゃごちゃ言いつつも完全にメインの読書端末になっちゃってるので、そういうことです。

Linuxbrewでgccが入っている状況で、外側にあるライブラリを使ってビルドしたかった

Linuxbrewを使っててちょっとはまることがあった。

  1. Linuxbrewが入っていて、Linuxbrewでgccその他ビルド関連ツールが入っている。
  2. Linuxbrew関係のパスが通っており、gccなどはLinuxbrew以下のものが使われる。
  3. Linuxbrewの外、/usr/local/libにライブラリがある。
  4. 3のライブラリを使ってプログラムをビルドしたい。

具体的にはcmigemoを使って、migemoを有効にしてVimをビルドしようとした。

まず普通にやるとLinuxbrewのgcc(というかld)が、cmigemoを見つけてくれなかったようで、以下のようなエラーが出た。

/home/linuxbrew/.linuxbrew/bin/ld: cannot find -lmigemo

これは当たり前っちゃ当たり前。Linuxbrewのgccは同じくLinuxbrew内のld使ってて、そっちにはcmigemoは登録されてなかったので。

ということでとりあえずLinuxbrewのldからcmigemoというか、/usr/local/lib内のライブラリを使えるようにしようとした。Linuxbrew内のld.so.conf/usr/local/libのパスを追加した上でldconfig. これでldconfig -pなどすると、cmigemo(というかlibmigemo.so)が見えるようになった。

だがこれでもビルドできなかった。

未だに原因はよくわかってないんだけど、試行錯誤の上、最終的には以下のように対応して、とりあえずビルドできた。

  1. cmigemoを手動でLinuxbrew以下に入れた。./configure --prefix=/home/linuxbrew/.linuxbrew/Cellar/cmigemo/0みたいな感じ。
  2. brew link cmigemoでシンボリック・リンク作った。

ただこれは、Linuxbrew下に手動で突っ込むというのがイケてないのであまりやらない方がよさそう。もうちょっとマシな方法としては、

  • そもそもcmigemoやVim用のFormula書いちゃって、ぜんぶLinuxbrew任せにできるようにする。
  • そこまではしなくても、brew diyくらいは使っといた方がいいかも。ここの記事が参考になる。
  • Linuxbrewのパスは使わないときは通さずにしておいて、無関係のものはシステムのgccでビルドする。
    • これするとLinuxbrewの意味があまりない気がするのがネック。

なおそもそも元ネタのHomebrewは、/usr/local下にぜんぶ突っ込むっぽく、そのせいで問題になってないのではないかと思うんだけど、ではなんでLinuxbrewはそうしないのだろう。その辺がまずわかってない。

とりあえずLinuxbrewいろいろ難しい。日本語での情報少ないのもつらい。