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

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

880

Published on

2013/3/23 に開催された Chiba.pm#2 でトークしたLTのスライドです。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
880
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

クリップボード監視と外部コマンド実行 #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. ご清聴ありがとうございました
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×