PrsPrsBK’s blog

Princess Princess Burn Knuckle

広告ブロッカーがないと話にならなくなったので導入した

今までは広告ブロッカーを使っていなかった。ウェブサイトがそれで収入を得ているわけだし、そんなに広告を見たくないわけではない。別に困らなかった。

 

ただ、たまに困っていた。ウェブサイトの中には、広告が表示されるまでコンテンツが表示されず、閲覧可能になるまで10秒以上かかるものがある。去年の中頃は、ITmediaのサイトとあとどこか一つくらいだけだったと思うが (IT関係のくせに何やってんだと思ってちょっとバカにしていた)、10秒もかかると見る気がなくなって、実際見るのをやめる。いまだにITmediaのサイトは避けている(※避けているので今どうなっているか判らない、改善されたかもしれない)。アホくさくなるので。「快適な速度を自分が得られる」ことを前提にするのはちょっと違うかもしれないので、「遅い」だけで不快になったとしてもそこに反省の余地があるというか落ち着く余地があるんだけど、「広告のせいで遅い」が嫌なんだろうと思う。

 

で、最近になって、そういうケースが増えた。やはり待っているうちにアホくさくなって見るのをやめてしまう。見るのをやめること自体はまあ機会の損失で済むんだけど、気分がアホくさくなりまくるのは困る。なので広告ブロッカーを使うことにした。という日記。

Adobe Brackets 1.11 (Linux 再リリース版) で日本語入力できるようになった

タイトルの通り。Lubuntu 17.0.10 で確認した。

ただし、拡張機能マネージャーで「Emmet」など入力して検索しようとしても検索窓が反応しないので検索できず、実際問題インストールできない。

検索窓の件については自分は報告しない。Linux 版は使わなくなったので。日本語入力の件は一応確認しただけ。困ってる人は自分で github 行って報告すればいいです。

日本語入力の時も「できないな~」って思いながらダンマリ決めてた、英語での報告もそんなに困らず原因も見当ついてた人いたでしょう。死ねよ、と思っていました。

Thunderbird の Monterail を試した

概要

Thunderbird の次期 UI 案らしい Monterail がテーマとして利用できるようになっていて試した。目に優しい感じだが、未読フォルダの強調色が薄緑色で見づらいので userChrome.css で色を変えた。CSS 要素指定がどこを指しているかまったく知らないので勘でやった (多分困らないのでよしとした)。そのときのメモ。Twitter 検索してみると本当にほとんど触れられていないので寂しくなりこんな内容だが書いた。

やった

1. github のどこかの CSS を見て色指定 #b2f2ff に見当をつけた。
2. プロファイルフォルダの extensions に xpi があるので関係ないところに解凍する。
3. #b2f2ff を探す。chrome/MonterailOverlay/css/messenger.css っぽい。
4. プロファイルフォルダ/chrome/userChrome.css を作ってそれらしい要素指定部分をコピーし、内容に color 指定する。いくつか試す。
5. ダメ。
6. 色ではなく bold に注目したところ、-moz-tree-cell-text(hasUnreadMessages-true) というそれらしいところを見つけて要素指定部分をコピーし、内容に color 指定する。
7. できた。!import 必要。
#folderTree >
treechildren:not(.autocomplete-treebody)::-moz-tree-cell-text(hasUnreadMessages-true) {
  color: #000000 !important;
}

WebExtensions: 指定した文字列をクリップボードに格納する (コピーする)

概要

Firefox の自分用アドオンで、特定のウェブページを見ているときに、その一部から文字列を構成してクリップボードに格納したい。Content scripts で copy イベントのリスナを使った話。

追記: mdn/webextensions-examples の見てなかった方に例があるのでそちらを見ればよく、このブログは読まなくてよい。

1. manifest.json の permissions に "clipboardWrite" を指定する。2. document.addEventListener('copy', onCopy); とする。3.(以下 onCopy の話) copy イベントから DataTransfer オブジェクトを取得する。4. setData()クリップボードに文字列を格納する。

Firefox Developer Edition 54 と 57。なんとなく Google Chrome も試した。

やった

document.execCommand() でやれと述べられるができなかった

見ているウェブページの一部から文字列を構成してクリップボードに格納したい。文字列は選択せずに都合のよいように作りたい。

MDN: Addons: Browser Extensions にニーズそのものである Interact with the clipboard がある。document.execCommand("copy") しろというが、これは文字列を選択しないとコピーできない (ドキュメント)。github mdn/webextensions-examples の selection-to-clipboard もこれを使っている。

WebExtensions 以前はどうやったか。古い話だが、Add-on SDK には clipboard API があり、var clipboard = require('sdk/clipboard'); で利用できた。Comparison with the Add-on SDKAPI 比較対照資料にこう書いてある。

document.execCommand without using select() and similar in the background page.

しかしできない。document.execCommand('copy', false, some_text) とやったができなかった。ほしい文字列 (HTML には存在しない) を選択していることにできればいいが、window.setSelection(任意の文字列) はあるはずがない。

copy イベント経由でデータをセットする

npm モジュールにクリップボードとやり取りするものがあるだろうから (探していない)、それを webpack でバンドルして利用すればできるに決まっている。もっと言えばアドオンでやる必要はない。でもウェブページを見ながらブラウザ上でそのままやりたいしモジュールバンドルはもっとモジュールが明らかに必要な時にやる、ということで情報を探した。

結果 copy イベントがあると判ったので、Ctrl-C でコピーが発生したときのイベントリスナで処理させることにした。

document.addEventListener('copy', onCopy); して次のようにした。できた。

function onCopy(ev) {
  //実際に何か選択してるときは動作させたくない
  if(window.getSelection().toString() === '') {
    //雑に作ったので構成した文字列をグローバル変数に収めている。あとで直せばいい
    setTextForCopy(); //HTML を解析して文字列を作って TO_CLIPBOARD に格納する
    if(TO_CLIPBOARD !== '') {
      ev.preventDefault();
      let transfer = ev.clipboardData;
      transfer.setData('text/plain', TO_CLIPBOARD);
      TO_CLIPBOARD = '';
    }
  }
}
document.addEventListener('copy', onCopy);

Ctrl-C ではなく Ctrl-Y 等別のキーでやりたいときはキー押し下げで document.execCommand("copy") でコピーを発生させればいいけど、このままでは何か選択してたらそれが Ctrl+Y でクリップボードにコピーされてしまう。まあいいか。

なお、Firefox ではなく Google Chrome にローカルフォルダからインストールして使っても動作した。Google Chrome は開発版のリロードが楽でいいですね、という感想を持った。

Adobe Brackets を 1.11 から 1.10 に戻した (Linux)

概要

Lubuntu。uname -r は 4.10.0-35-generic、i686

1.10 では特に何もしなくても「半角/全角」キーで Mozc と表示されて日本語入力できた。sudo apt install ./Brackets.Release.1.10.32-bit.deb で多分問題なくインストールした (困った記憶がない)。

9/26 だったか、OS の更新ダイアログに任せて更新したら日本語入力できなくなった。

とりあえず apt autoremove とやった後、以前使ったファイル(残してあった)で 1.10 をインストールしようとして libgcrypt11 がなくて戻せなくなったが、戻した。

すごく雑に書く。事態をよく把握していないのでダメなことをやっているかもしれないが後で把握する。後で消すかもしれない。

報告したいがイシュー書けるほど把握していない。

なお、Windows10 (64bit) では 1.11 で問題ない。※9/28 追記 カーソルの位置が記録されず、別のファイルを見てから戻るとカーソルがファイルトップ位置にリフレッシュされるという大分だるいことがあったが、使ってなかったVimderbar を削除したら直った。他 InstantLint の挙動が変わってしまったが、「ある程度大きいファイルで改行するだけで動作が遅くなる」が最近嫌だったので削除して問題は解消された。

追記: イシュー報告した

報告した: Can not toggle Mozc input-method to on at Linux #13762

追記2 (2017-11-09): 1.12 で直るかもしれないので待ちましょう

Release plan for Brackets 1.12 #13821 (2017-11-08 02:11 JST)

f:id:PrsPrsBK:20171109011131j:plain

Linux: IME not working after CEF update

追記3 (2018-02-19): もう直っています

今でもアクセスあるようなので追記しました。2017年12月の1.11修正版で確認しました (そのときのブログエントリ)。

やった

1. libgcrypt11_1.5.3-2ubuntu4.5_i386.deb を取得した。

2. sudo apt install ./libgcrypt11_1.5.3-2ubuntu4.5_i386.deb。特に問題なさそう。

3. sudo apt install ./Brackets.Release.1.10.32-bit.deb とやったが「続行しますか? [Y/n] 」で中断した。「注意、'./Brackets.Release.1.10.32-bit.deb' の代わりに 'brackets' を選択します」と表示され、これだと 1.11 がインストールされることになる。

4. sudo dpkg -i ./Brackets.Release.1.10.32-bit.deb。エラーになった。「xxxx はまだインストールされていません。」

5. sudo apt install libpango1.0-0。先の「xxxx」をインストールしようとして失敗。「E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください (または解法を明示してください)。」

6. sudo apt --fix-broken install。色々インストールされた。

以下のパッケージが新たにインストールされます:
  gconf-service gconf-service-backend gconf2-common libgconf-2-4 libpango1.0-0
  libpangox-1.0-0

7. sudo dpkg -i ./Brackets.Release.1.10.32-bit.deb。成功。起動したし日本語入力できる。

Neobundle から dein.vim に移行したときの話

お話

Firefox アドオン開発を web-ext に移行する話の初歩その続きを書いたら Vim の話を思い出した。移行したの二か月くらい前だし今更書いても役に立たない気がしたがどうでもよくなった。書いておく。

github のプロジェクトのページを見た。

(各プラグインの)インストールフォルダを決める。例:"~/.vim/bundles" or "~/.cache/dein" or "~/.local/share/dein"。 回避する例: "~/.vim/plugin"、"~/.config/nvim/plugin" の下。結果、"~/.vim/bundles" にした。NeoBundle のフォルダ "~/.vim/bundle"(sがない) とは別になる。

Readme.md には "If you are using Unix/Linux or Mac OS X."、https://github.com/Shougo/dein.vim/blob/master/bin/installer.sh を取得して sh ./installer.sh {specify the installation directory} する、とある。

Windows については記述がなかった。Git/bin/sh.exe でやっても良いかもしれないけど installer.sh を見たら何するか分かったので手作業でやった。インストールフォルダを作って、その下の repos/github.com/Shougo/dein.vim フォルダに git clone https://github.com/Shougo/dein.vim すればいい。インストールフォルダと git clone 以外は「vimrc にこういう設定書いてね」という案内なので見て、あとで _vimrc にコピペして編集することにした。

1. NeoBundle の除去: 設定消すだけ

プラグインフォルダは dein とは別なのでそのままにしておき移行後エクスプローラから消すことにした。先に消すなら _vimrc から NeoBundle 'foo/bar-vim' 等を削除して NeoBundleClean すれば消える。

2.dein 設定を _vimrc に書く

NeoBundle 設定時点。元々あまりプラグインを使っていないがたまに増減するので、管理が楽になって助かっている。

if has('vim_starting')
    set runtimepath+=~/bin-local/vimfiles/bundle/neobundle.vim/
endif

call neobundle#rc(expand('~/bin-local/vimfiles/bundle/'))

NeoBundleFetch 'Shougo/neobundle.vim'

NeoBundle 'kana/vim-surround'
NeoBundle 'koron/codic-vim'
NeoBundle 'tomasr/molokai'
NeoBundle 'Yggdroot/indentLine'

NeoBundleCheck

if neobundle#is_installed('molokai')
    colorscheme molokai
    autocmd GUIEnter * colorscheme molokai
endif
(その他の設定)

NeoBundle 設定を消してこのようにした。if neobundle#is_installed('molokai') はどう変えるかすぐ分からず、インストール後 dein のヘルプ見てから tap() で良かろうとなり、後で足した。ググると情報があり、vimrc は各人の考え方や事情などがあるようで沢山見ると迷ってしまう (特に分かるようにならない) ので、分かる範囲のことをやりたい。単純に上記の installer.sh とヘルプに従った。喫緊の課題ではないのであとで改善すれば良い。

" Required:
if has('vim_starting')
    set runtimepath+=~/bin-local/vimfiles/bundles/repos/github.com/Shougo/dein.vim/
endif
" Required:
if dein#load_state('~/bin-local/vimfiles/bundles/')
    call dein#begin('~/bin-local/vimfiles/bundles/')
" Let dein manage dein
" Required:
    call dein#add('~/bin-local/vimfiles/bundles/repos/github.com/Shougo/dein.vim/')
" Add or remove your plugins here:
    call dein#add('kana/vim-surround')
    call dein#add('koron/codic-vim')
    call dein#add('tomasr/molokai')
    call dein#add('Yggdroot/indentLine')
" You can specify revision/branch/tag.
"  call dein#add('Shougo/vimshell', { 'rev': '3787e5' })
" Required:
    call dein#end()
    call dein#save_state()
endif
" Required:やるけどもっと下でやる
"filetype plugin indent on
"syntax enable

" If you want to install not installed plugins on startup.
if dein#check_install()
    call dein#install()
endif

if dein#tap('molokai')
    colorscheme molokai
    autocmd GUIEnter * colorscheme molokai
endif
(その他の設定)

TOML はとりあえず使わない。

_gvimrc は set guifont などしか書かれておらず関係ないのでそのまま。

Vim を開いて:call dein#install() せよとあるが vimrc に書いたので Vim 再起動で済ませる。ダイアログウィンドウが表示されてメッセージが出た。OK 押したら起動した。後は問題なし。

3. 一応 source $MYVIMRC してみる

この時点でおかしくなるかどうか調べただけ。dein#check_update はあとでいいか、で終わり。

あと、はてなブログ

code タグの CSS が全然反映されないのが分からないけどまあいいか。

Firefox アドオン開発を web-ext へ移行する:初歩2 (web-ext run 小ネタ)

web-ext run できるようになった、一応

[概要] 前回の続き。web-ext run が思ったようにならなかった。ちょっと困ったことを解消したのでそれを書く。あとは環境変数にオプション指定して動作確認、したところ困難が発生した。環境変数でやるのは止してコマンドラインでオプション指定して次に進む。リファレンスはこれ

--firefox-profile は絶対パスにした

プロファイル指定は名前 (firefox.exe -p で起動してプロファイル選ぶ時の「default」など)か、プロファイルフォルダへの絶対パスということになっている。名前で指定すると、プロファイルがよくあるフォルダ、例えば C:/Users/some_user/AppData/Roaming/Mozilla/Firefox/Profiles/alphnum8.name である場合はうまく行くのだが、別のフォルダ (C:\testprofile とか D:\foo\Profiles\alphnum8.name とか) に置いてあるときはそのプロファイルで起動されなかった。絶対パスならば問題ない。--firefox-profile="D:\path\to\Profiles\alphnum8.name" のようにした。パッと見てイシューにないけどこれ報告したらいいのか?

追記 報告しました #1074

有効でない既存のアドオンを消した

何と書けば正確になるか分からないが、「インストールされたアドオン一覧」で赤文字で「このアドオンはダメです」のように表示されて無効になっているものがあると、プロファイル指定して起動まではできるが、すぐ終了する、かもしれない。実際はアドオンなり Firefox なりの自動更新が関係していた可能性があるが、「ダメです」のアドオン (全部そうだったのだが) を削除したら即座終了は発生しなかった。何年か前に作って放置していたプロファイルで試したらこうなった。

--keep-profile-changes (とりあえず不要)

プロファイルへの変更を保存したい場合は web-ext run --keep-profile-changes --firefox-profile=your-custom-profile らしいが、--keep-profile-changes は デフォルトプロファイルに対してはバグのため現在禁止されているらしく、実行時にメッセージで教えてくれる。危険を知らせてくれて良かった、という感想。

>web-ext run --firefox="C:\path\to\firefox.exe" --firefox-profile="C:\path\to\Profiles\alphnum8.default_marked_user" --keep-profile-changes
Running web extension from c:\path\to\webextensions-examples\beastify
run: UsageError: Cannot use --keep-profile-changes on a default profile ("C:\path\to\Profiles\alphnum8.default_marked_user") because web-ext will make it insecure and unsuitable for daily use.
See https://github.com/mozilla/web-ext/issues/1005

「デフォルト」指定されていなければ --keep-profile-changes できる。「では (普段使っているプロファイルでも何でも) デフォルト指定しなければいいのか? 壊れないのか?」という疑問もあったが、とりあえずは使わないので気にしないことにした。このオプションがない場合、web-ext run ではプロファイルがコピーされるようで、それで足りる。例えば twitter であれば通常の起動をしてログインしておけば、このオプションなしでもそのままログイン状態でいられる。

あとこのオプションなしなら、プロファイルのサイズが大きいとコピーに時間がかかる。普段使ってるものだと嫌になるので、結局新規に開発用のプロファイル作った方が良いと思った。

オプションを環境変数で指定したかった

むずかしい。全然うまくいかない。web-ext build --ignore-files *.bat hoge.txtコマンドラインで指定すれば動くけど環境変数 WEB_EXT_IGNORE_FILES になると狙い通りにならない。まあそれはいいんだけど次が辛い。

web-ext run --firefox="C:\path\to\firefox.exe" が動作して、WEB_EXT_FIREFOX に同じパスを指定してもうまくいく。この状態で web-ext build するとオプションの説明とともに「Unknown argument: firefox」と表示される。大変厳しい。WEB_EXT_FIREFOX_PROFILE も使うと更に web-ext run がすっきりするが、web-ext build の「Unknown argument」が増える。

github のプロジェクトを確認すると Environment variables get applied as options to any command #793 ということなので、全コマンド共通のオプション以外は使えない。環境変数自体を保留にした。よく見たら別のライブラリのイシューになっているがどうなるのだろう。

※2017-09-09 追記 無視してほしいファイルの件はイシューがあった