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

ヤルキデナイズド

Unclassified Articles on Software and IT

Yosemite で AquaSKK の入力モードが切り替わり続ける問題を適当に直した

追記:この修正が取り込まれたバージョンのバイナリはここから入手できる↓

AquaSKK(OS X yosemite対応版) - みずぴー日記


YosemiteAquaSKK を使うと、 Safari などに入力するとき入力モードが高速で切り替わり続けるバグが出ることがある。

理屈は分かってないがそれっぽい箇所を適当に直したらバグが直ったっぽいので一応メモしておく。他への影響は追っていないので知らない。無保証。

修正済みのフォーク:uasi/aquaskk · GitHub

修正点:platform/mac/src/server/SKKInputController.mm#L159-L169あたりを if (activated_) { activated_ = NO; ... } で囲む。

    } else {
        // 個々の入力モードを選択している場合
        SKKEvent param;

        // ex) "com.apple.inputmethod.Roman" => SKK_ASCII_MODE
        param.id = [menu_ convertIdToEventId:(NSString*)value];

        if(param.id != InvalidInputMode) {
            session_->HandleEvent(param);

            modeIcon_->SelectInputMode([menu_ convertIdToInputMode:(NSString*)value]);
        }
    }

    } else {
        if (activated_) {
            activated_ = NO;
            // 個々の入力モードを選択している場合
            SKKEvent param;

            // ex) "com.apple.inputmethod.Roman" => SKK_ASCII_MODE
            param.id = [menu_ convertIdToEventId:(NSString*)value];

            if(param.id != InvalidInputMode) {
                session_->HandleEvent(param);

                modeIcon_->SelectInputMode([menu_ convertIdToInputMode:(NSString*)value]);
            }
        }
    }

Safari 他でスワイプして戻る操作が効かなくなった問題が色々やったら直った

2016年12月13日追記:この問題は jiTouch の One-Fix Two-Slide-Down/Up, One-Fix-Press Two-Slide-Down/Up ジェスチャーを使ったとき起きることが分かった。[jiTouch のサポートページ(http://www.jitouch.com/support/)に問題が起きたときの対処法がいくつか書いてあるが、根本的な解決策は今のところないため、これらのジェスチャーを使わないほうがよさそうだ。(追記ここまで)

SafariXcode の画面で、左右スワイプして戻る/進むと戻りかけのまま画面が固まってスクロールを受け付けなくなる問題が Mavericks でときどき起きていた。体感では10〜20回に1回の割合。さっき Yosemite にアップグレードしたら百発百中で発生するようになったので Apple の品質管理も地に落ちたもんだと思っていたが、あんまり騒いでる人がいないので偶発的なバグかもしれないと思った。で色々試したら直った。以下手順。

  • システム環境設定の「トラックパッド」を開く
  • 「スクロールとズーム」タブで「スクロールの方向:ナチュラル」をオフ
  • 「その他のジェスチャ」タブで全部の項目をオフ
  • スワイプを試してみてうまく動くのを確認し、オフにした項目をオン

元々オフになっている項目があったらオンにしてからオフにするとうまくいくかもしれない。試してないが。

f:id:uasi:20141018222145p:plain

f:id:uasi:20141018222153p:plain

補足、先に試して効果がなかったこと:

  • PRAM リセット
  • 「ページ間をスワイプ」の設定だけ切り替え/オンオフ

Twitter の画像 URL に :orig をつけると元画像が取得できる(できない場合もある)

Twitter にアップロードされた画像は、ある程度の大きさを超えると自動的に縮小される。しかし画像の URL に :orig をつけて https://pbs.twimg.com/media/XXX.jpg:orig にすると元の画像を取得することができる。ただし元画像があまりに大きいと :orig をつけても縮小された画像が返ってくる。

元画像を取得するには

f:id:uasi:20150303173229p:plain

タイムラインに表示された画像を右クリックして「イメージを新規タブで開く」を選ぶ。ブラウザによってはメニュー名が異なる(「新しいタブで画像を開く」など)。

新しいタブで開いた画像の URL は https://pbs.twimg.com/media/XXX.jpg:large という形式になっている。 :large の部分を :orig に変えて開き直す(:large がついていない場合は単に :orig を付け足す)。これで元画像が取得できる。

元画像が取得できる条件

画像の横幅が一定の大きさ以下なら元画像が取得できる。横幅が上限よりも大きくなると上限値まで縮小される。上限は URL 末尾のオプションの有無で変わってくる。

2015年10月10日追記: 最近 :orig のサイズの上限が変更されたようだ。Twitterの画像の:origで投稿時原寸の画像が降ってくるお話 - neotaso’s blogによれば :orig をつけることで6400×3840ピクセルの画像も原寸で表示されるとのこと。

URL 末尾のオプション 横幅の上限
なし 横600ピクセルまで
:large 横1024ピクセルまで
:orig 横2048ピクセルまで 上限なし?

縦幅にも上限がある。横幅は上限に収まるが極端に縦長な画像の場合、縦の上限値まで縮小される。

URL 末尾のオプション 縦幅の上限
なし 縦1200ピクセルまで
:large 縦2048ピクセルまで
:orig 縦2048ピクセルまで 上限なし?

GitHub 風の絵文字の名前で絵文字入力できる SKK 辞書つくった

GitHub Markdown では :+1: で👍を出すとか :smile: が😄になるとかそういうことができる。SKK でも簡単に絵文字を入力したかったので絵文字辞書を作った:

https://github.com/uasi/skk-emoji-jisyo

▽モードに入って smile と入力すると😄を出せる。

その他に使える絵文字は Emoji cheat sheet を参照のこと。ただし Unicode に収録されていない絵文字は出ない。辞書に入ってるのは870文字。

辞書はこれでダウンロードできる:

curl -O https://raw.githubusercontent.com/uasi/skk-emoji-jisyo/master/SKK-JISYO.emoji.utf8

AquaSKK 向けのインストール方法は README に書いた。他はよろしくやってほしい。

ところで Mac で Ctrl+Cmd+Space を押すと絵文字入力パレットが出てこれはこれで便利。使うとよい。

😊😊😊

PS: emot gem 使うと名前と絵文字の Map が取れて便利。

Cintiq 13HD に最初から貼ってある液晶保護フィルムの交換についてサポートに聞いた

最近の Cintiq 13HD には最初から液晶保護フィルムが貼ってある(2013年秋ごろかららしい)。これに傷がついたらどうすればいいか、自分で交換できるのか、というか剥がせないっぽいけど上から他社の液晶保護フィルムを貼っていいのか、ワコムのサポートにメールで問い合わせてみた。

質問と回答

Q 液晶保護フィルムは自分で交換できるか?

A ユーザーが交換することはできない。

Q フィルムに傷がついたらどうするか?

A ワコムの修理センターに送付して修理対応。費用はその都度見積り。

Q 他社製の液晶保護フィルムを上から貼ってもいいか?

A 最初から貼ってあるフィルムは見やすさや書き心地を追求してある。上から他社製のフィルムを貼るとそれが損われることがある。そのため重ね貼りはおすすめしない。ただ、傷が気になるようなら他社製のフィルムを貼ることを検討してほしい。元々のフィルムは剥がさないほうがいい。

Cintiq は画面より芯のほうが柔らかい素材を使っているが、筆圧が強かったり、ペン先が片減りして尖っていたり、同じ箇所を集中的に描いたりすると傷がつきやすいので気をつけてほしい。

というわけで

修理対応だと面倒なので上から液晶保護フィルムを貼ることにした。買ったのはこれ。アンチグレアで見やすい。色味は多少変わるが気にしていない。表面がさらさらして書きやすい。そんなところ。

フィルム貼りは埃対策のため服を脱いで風呂場で行った。端を折って剥がしやすくしたセロハンテープを用意し、フィルム表面にくっつけて引っ張ったりしながら。知恵と気合いが試される。

13インチのフィルムを気泡なく貼るのはしんどいからしばらく交換したくない。

vagrant up すると .dev ローカルドメインを設定してくれる Landrush が便利な話

(2015年3月3日追記: .dev をローカルドメインに使うとゲスト上で gem コマンドが使えなくなる場合がある。 .test などを使うとよさそう)

Rack の世界には Pow というサーバがあって便利。何が便利かというと、ln -s ~/my-rack-app ~/.pow/my-rack-app こうやって Rack アプリへのシンボリックリンクを ~/.pow に入れるだけで、ブラウザで http://my-rack-app.dev にアクセスできるようになって、アクセスしたら自動で Rack サーバを立ち上げてくれる。

自動でローカルドメインをセットアップしてくれるのはすごい便利。 Vagrant でも Landrush というプラグインを使うとそういうことができる。インストールはこう:

vagrant plugin install landrush

Mac だとこれだけでよい。 Linux では設定が必要なので README 読んで。

インストールしたら Vagrantfile に設定を書く。

Vagrant.configure('2') do |c|
  ...

  if defined?(Landrush)
    c.landrush.enabled = true
  end
end

これで vagrant up すると一緒に DNS サーバが起動する。 myhostname.vagrant.dev にアクセスするとVMにリダイレクトされる。

Qiita の開発用サーバをローカルで立ち上げるときもこれを使っている。設定はこんな感じ:

Vagrant.configure('2') do |c|
 ...

  if defined?(Landrush)
    c.landrush.enabled = true
    c.vm.hostname = 'qiita.dev'
    c.landrush.tld = 'qiita.dev'
    c.landrush.guest_redirect_dns = false
  end
end

c.landrush.guest_redirect_dns = false を指定してる理由は忘れた。外すと動かなかった気がする。 c.landrush.tld = 'qiita.dev' を単純に = 'dev' にしない理由は Pow と共存させるため。ここに指定した TLD と同名のファイルが /etc/resolver 以下に生成される。その TLD を持つドメインにアクセスしたら、ファイル内で指定された DNS サーバがそれを処理する。という仕組みになっていて Pow は /etc/resolver/dev を使うので、バッティングを避けている。

これ便利なので使うとよい。

Mac がスリープから復帰したとき Vagrant を動かしっぱなしだったら通知するようにした

Vagrant を立ち上げたままのを忘れてバッテリーが減るの早いなーおかしいなーというのが何度かあったので、スリープから復帰したとき Vagrant が動いていたら通知を出すようにした。

まずスリープから復帰したタイミングで与えられたコマンドを実行する awakened というツールを書いた: https://github.com/uasi/awakened

awakened のインストール手順はこれ:

git clone https://github.com/uasi/awakened
cd awakened
make
cp awakened ~/bin

awakened は第1引数に実行ファイルへの絶対パスを取り、 Mac がスリープから復帰したらそれを実行する。第2引数以降は実行ファイルに渡される。

awakened /bin/sh ~/.awakenedrc

で、これを launchd でデーモン化した。以下の XML~/Library/LaunchAgents/org.exsen.awakened.plist に置いて launchctl load ~/Library/LaunchAgents/org.exsen.awakened.plist する。 XML に書いてあるいくつかのパスは自分の環境に合わせて書き換えてほしい。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>org.exsen.awakened</string>
        <key>ProgramArguments</key>
        <array>
                <string>/Users/uasi/bin/awakened</string>
                <string>/bin/sh</string>
                <string>/Users/uasi/.awakenedrc</string>
        </array>
        <key>KeepAlive</key>
        <true/>
        <key>RunAtLoad</key>
        <true/>
</dict>
</plist>

launchd.plist では引数のメタキャラクタが展開されないので ~/.awakenedrc などと書かずに絶対パスで書く。詳しくは man launchd.plist を見る。

~/.awakenedrc には Vagrant が動いていたら通知するやつを書いた。ついでにスリープ復帰後に不安定になるアプリケーションを再起動するようにした。

# VBoxHeadless プロセスがいたら Vagrant が動いているはず
if pgrep -q VBoxHeadless; then
    osascript -e 'display notification "Vagrant is up and running." with title "awakened"'
fi

# Should I Sleep を再起動する
killall "Should I Sleep"
open -a "Should I Sleep"

快適になった。