Successfully reported this slideshow.
Your SlideShare is downloading. ×

クリップボード監視と外部コマンド実行 #chibapm

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 18 Ad

More Related Content

Slideshows for you (20)

Viewers also liked (17)

Advertisement

More from 鉄次 尾形 (20)

Recently uploaded (20)

Advertisement

クリップボード監視と外部コマンド実行 #chibapm

  1. 1. クリップボード監視 と外部コマンド実行 尾形 鉄次 (OGATA Tetsuji) Twitter: @xtetsuji 2013/3/23 Chiba.pm#2 LT
  2. 2. 自己紹介 • 尾形 鉄次 (OGATA Tetsuji) • Twitter: @xtetsuji • Blog: http://post.tetsuji.jp/
  3. 3. クリップボード監視 • 今回はMacの話 • Macでの正式名称は「ペーストボード」 • クリップボードに変更があったら何か フックを仕掛けることができるか
  4. 4. 新ジャンルコピペ • 所定形式の文字列がコピーされたら、 自動的にどこかにペースト、もしくは 事前定義済みのコールバックを実行 • いわゆるクリップボード監視
  5. 5. pbcopy / pbpaste • Mac OS X 標準コマンド pbcopy / pbpaste • pbcopy: 標準入力をペーストボードへ • pbpaste: ペーストボードを標準出力へ • 詳しくは man 1 pbcopy、man 1 pbpaste
  6. 6. 外部コマンド呼び出しは コストがかかる • 個人用途ではそれほど気にならないか もしれないけど外部コマンド呼び出し はコストがかかる • Perl では system()、piped open、そして ``, qx// (backtick) など
  7. 7. 外部コマンド呼び出しは コストがかかる • ありがちな考え • 「load averageを監視して負荷が大き いときは処理を控えよう」 • my $uptime = `uptime`; ... • uptime外部コマンド自体の呼び出しの コストが無視できない
  8. 8. `uptime`の代わり • CPANで「load average」で検索すると、 UNIX / Linux / *BSD それぞれで uptime 外部コマンドを使わずに load average を 取得できるモジュールが出てくるので それを使おう
  9. 9. 話を戻しまして…
  10. 10. Mac::Pasteboard • use Mac::Pasteboard; • pbpaste() と pbcopy() 関数をインポート • XS実装で外部コマンド呼び出しは無い • ただUTF-8マルチバイト文字列が化ける (要望どこに出せばいいんだろう)
  11. 11. 使い分け • とりあえずMac::Pasteboardのpbpaste()で 以前のクリップボード内容を監視し、 違いがあれば`pbpaste`で取り出す • 多数の呼び出しが発生する監視処理に だけMac::Pasteboardを使えばOKだろう
  12. 12. ループ • while (1) { ... } • pboverve.pl & • 用途に応じて AnyEvent->timer(...) を使っ ても良いかも(個人的にwhileループは、 うっかりバグが多くて結構気を使う) • デーモン化が好きな人はApp::Daemon
  13. 13. 今回の事例 • STOT形式: Twitterの発言形式: • xtetsuji: 今日はこれから飲む。久々の飲み会?かも。 [http://twitter.com/xtetsuji/status/ 314300949604749312] • こういう形式の文字列を捕捉したら、 自分のIRCチャンネルにメモする
  14. 14. 処理の流れ • Mac Twitterクライアント「夜フクロウ」 • ツイートをSTOT形式でコピー • Perlで作った常駐プログラムがフック • IRCに書き込み(Ikachan的手法)
  15. 15. 他への応用 • STOT形式以外でも使えるかも • URL文字列をコピーしたら、SQLiteとか で作った自分専用閲覧履歴辞書に格納 とか
  16. 16. Mac以外では • Windowsではクリップボード内容をget/ setするコマンドはなさそう • Win32::Clipboard • 原始的なX.org環境ではxsel/xclipとか? • きっとモジュールもあるはず
  17. 17. コピペ繰り返す音 • 職場で響くリズミカルな音 • Windowsでコピー→ペーストを何回も • こういう人を同じ手法で救えないかな • それ以前にVBAとか?
  18. 18. ご清聴 ありがとうございました

×