SlideShare a Scribd company logo
1 of 18
Download to read offline
クリップボード監視
と外部コマンド実行
  尾形 鉄次 (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 1 pbpaste
外部コマンド呼び出しは
       コストがかかる
• 個人用途ではそれほど気にならないか
 もしれないけど外部コマンド呼び出し
 はコストがかかる

• Perl では system()、piped open、そして
 ``, qx// (backtick) など
外部コマンド呼び出しは
     コストがかかる
• ありがちな考え
 • 「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ループは、
 うっかりバグが多くて結構気を使う)

• デーモン化が好きな人はApp::Daemon
今回の事例

• STOT形式: Twitterの発言形式:
 •   xtetsuji: 今日はこれから飲む。久々の飲み会?かも。
     [http://twitter.com/xtetsuji/status/
     314300949604749312]


• こういう形式の文字列を捕捉したら、
 自分のIRCチャンネルにメモする
処理の流れ

• Mac Twitterクライアント「夜フクロウ」
• ツイートをSTOT形式でコピー
• Perlで作った常駐プログラムがフック
• IRCに書き込み(Ikachan的手法)
他への応用

• STOT形式以外でも使えるかも
• URL文字列をコピーしたら、SQLiteとか
 で作った自分専用閲覧履歴辞書に格納
 とか
Mac以外では
• Windowsではクリップボード内容をget/
 setするコマンドはなさそう

 • Win32::Clipboard
• 原始的なX.org環境ではxsel/xclipとか?
 • きっとモジュールもあるはず
コピペ繰り返す音

• 職場で響くリズミカルな音
• Windowsでコピー→ペーストを何回も
• こういう人を同じ手法で救えないかな
• それ以前にVBAとか?
ご清聴
ありがとうございました

More Related Content

What's hot

TddでFizzBuzzしてみる in Swift
TddでFizzBuzzしてみる in SwiftTddでFizzBuzzしてみる in Swift
TddでFizzBuzzしてみる in Swift
Shoichi Matsuda
 
x86 CPUにejectコマンドを組み込みたい!
x86 CPUにejectコマンドを組み込みたい!x86 CPUにejectコマンドを組み込みたい!
x86 CPUにejectコマンドを組み込みたい!
furandon_pig
 
エンジニアのための痔の話
エンジニアのための痔の話エンジニアのための痔の話
エンジニアのための痔の話
Kouhei Maeda
 

What's hot (20)

TddでFizzBuzzしてみる in Swift
TddでFizzBuzzしてみる in SwiftTddでFizzBuzzしてみる in Swift
TddでFizzBuzzしてみる in Swift
 
ファイルシステム比較
ファイルシステム比較ファイルシステム比較
ファイルシステム比較
 
x86 CPUにejectコマンドを組み込みたい!
x86 CPUにejectコマンドを組み込みたい!x86 CPUにejectコマンドを組み込みたい!
x86 CPUにejectコマンドを組み込みたい!
 
Lfsをやってみよう
LfsをやってみようLfsをやってみよう
Lfsをやってみよう
 
エンジニアのための痔の話
エンジニアのための痔の話エンジニアのための痔の話
エンジニアのための痔の話
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
super_unkoをスーパーキレイにした
super_unkoをスーパーキレイにしたsuper_unkoをスーパーキレイにした
super_unkoをスーパーキレイにした
 
謎PCとの付き合い方(LILO東海道 2015/5発表分)
謎PCとの付き合い方(LILO東海道 2015/5発表分)謎PCとの付き合い方(LILO東海道 2015/5発表分)
謎PCとの付き合い方(LILO東海道 2015/5発表分)
 
ターミナル上でのSwift運用 ver.1.1
ターミナル上でのSwift運用 ver.1.1ターミナル上でのSwift運用 ver.1.1
ターミナル上でのSwift運用 ver.1.1
 
ターミナル上でのSwift運用
ターミナル上でのSwift運用ターミナル上でのSwift運用
ターミナル上でのSwift運用
 
Javaな人が今すぐ使えるG*
Javaな人が今すぐ使えるG*Javaな人が今すぐ使えるG*
Javaな人が今すぐ使えるG*
 
How to use blacklistd
How to use blacklistdHow to use blacklistd
How to use blacklistd
 
魁ここんとーく in おおさか
魁ここんとーく in おおさか魁ここんとーく in おおさか
魁ここんとーく in おおさか
 
S2s websrv201011-presen
S2s websrv201011-presenS2s websrv201011-presen
S2s websrv201011-presen
 
Ren’pyの御紹介
Ren’pyの御紹介Ren’pyの御紹介
Ren’pyの御紹介
 
ぼくnmonです
ぼくnmonですぼくnmonです
ぼくnmonです
 
FreeBSDのpostfixをblacklistd(8)に対応させてみた
FreeBSDのpostfixをblacklistd(8)に対応させてみたFreeBSDのpostfixをblacklistd(8)に対応させてみた
FreeBSDのpostfixをblacklistd(8)に対応させてみた
 
AllwinnerタブレットのOSを作ってみる (途中版)
AllwinnerタブレットのOSを作ってみる (途中版)AllwinnerタブレットのOSを作ってみる (途中版)
AllwinnerタブレットのOSを作ってみる (途中版)
 
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
 
秀丸最強化計画
秀丸最強化計画秀丸最強化計画
秀丸最強化計画
 

Viewers also liked

文字化け2011〜まだまだ化けます〜
文字化け2011〜まだまだ化けます〜文字化け2011〜まだまだ化けます〜
文字化け2011〜まだまだ化けます〜
鉄次 尾形
 
スケジュールに意志を込める〜納期と品質、立ちはだかる優先度。 その時君は何をすべきか。〜
スケジュールに意志を込める〜納期と品質、立ちはだかる優先度。 その時君は何をすべきか。〜スケジュールに意志を込める〜納期と品質、立ちはだかる優先度。 その時君は何をすべきか。〜
スケジュールに意志を込める〜納期と品質、立ちはだかる優先度。 その時君は何をすべきか。〜
Syun Fuji
 

Viewers also liked (17)

最近の話題から 〜2013年秋〜 #hachiojipm
最近の話題から 〜2013年秋〜 #hachiojipm最近の話題から 〜2013年秋〜 #hachiojipm
最近の話題から 〜2013年秋〜 #hachiojipm
 
これからPerlを使っていくみなさんへ #Perl入学式
これからPerlを使っていくみなさんへ #Perl入学式これからPerlを使っていくみなさんへ #Perl入学式
これからPerlを使っていくみなさんへ #Perl入学式
 
大変なときこそ未来を見よう #hachiojipm
大変なときこそ未来を見よう #hachiojipm大変なときこそ未来を見よう #hachiojipm
大変なときこそ未来を見よう #hachiojipm
 
文字化け2011〜まだまだ化けます〜
文字化け2011〜まだまだ化けます〜文字化け2011〜まだまだ化けます〜
文字化け2011〜まだまだ化けます〜
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
 
LTthon in YAPC 2012
LTthon in YAPC 2012LTthon in YAPC 2012
LTthon in YAPC 2012
 
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipmIT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm
 
プロセスの永続化でコスト削減 #perlbeginners
プロセスの永続化でコスト削減 #perlbeginnersプロセスの永続化でコスト削減 #perlbeginners
プロセスの永続化でコスト削減 #perlbeginners
 
日本全国ぶらりPerl旅
日本全国ぶらりPerl旅日本全国ぶらりPerl旅
日本全国ぶらりPerl旅
 
Perlで生きる10年
Perlで生きる10年Perlで生きる10年
Perlで生きる10年
 
スケジュールに意志を込める〜納期と品質、立ちはだかる優先度。 その時君は何をすべきか。〜
スケジュールに意志を込める〜納期と品質、立ちはだかる優先度。 その時君は何をすべきか。〜スケジュールに意志を込める〜納期と品質、立ちはだかる優先度。 その時君は何をすべきか。〜
スケジュールに意志を込める〜納期と品質、立ちはだかる優先度。 その時君は何をすべきか。〜
 
情報収集について
情報収集について 情報収集について
情報収集について
 
YAPC::KANSAI 2017 LT
YAPC::KANSAI 2017 LTYAPC::KANSAI 2017 LT
YAPC::KANSAI 2017 LT
 
イベント駆動とノンブロッキング #hokkaidopm
イベント駆動とノンブロッキング #hokkaidopmイベント駆動とノンブロッキング #hokkaidopm
イベント駆動とノンブロッキング #hokkaidopm
 
First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuning
 
Perl ウェブ開発の中世〜CGI と Plack の間〜
Perl ウェブ開発の中世〜CGI と Plack の間〜Perl ウェブ開発の中世〜CGI と Plack の間〜
Perl ウェブ開発の中世〜CGI と Plack の間〜
 
2017年春のPerl
2017年春のPerl2017年春のPerl
2017年春のPerl
 

More from 鉄次 尾形

More from 鉄次 尾形 (20)

Perl入学式 2018年度の報告
Perl入学式 2018年度の報告Perl入学式 2018年度の報告
Perl入学式 2018年度の報告
 
【公開版】AWS基礎 for 新卒エンジニア
【公開版】AWS基礎 for 新卒エンジニア【公開版】AWS基礎 for 新卒エンジニア
【公開版】AWS基礎 for 新卒エンジニア
 
俺のこだわりデスクのその後
俺のこだわりデスクのその後俺のこだわりデスクのその後
俺のこだわりデスクのその後
 
Hokkaido.pmと7年
Hokkaido.pmと7年Hokkaido.pmと7年
Hokkaido.pmと7年
 
WordPress 運用を支える Perl
WordPress 運用を支える PerlWordPress 運用を支える Perl
WordPress 運用を支える Perl
 
障害対応とその防止策
障害対応とその防止策障害対応とその防止策
障害対応とその防止策
 
働きやすい社内を目指す!二酸化炭素計測ツール
働きやすい社内を目指す!二酸化炭素計測ツール働きやすい社内を目指す!二酸化炭素計測ツール
働きやすい社内を目指す!二酸化炭素計測ツール
 
コードの動的生成のお話
コードの動的生成のお話コードの動的生成のお話
コードの動的生成のお話
 
三角関数の加法定理はなぜ難しいのか
三角関数の加法定理はなぜ難しいのか三角関数の加法定理はなぜ難しいのか
三角関数の加法定理はなぜ難しいのか
 
穏やかにファイルを削除する続き
穏やかにファイルを削除する続き穏やかにファイルを削除する続き
穏やかにファイルを削除する続き
 
穏やかにファイルを削除する
穏やかにファイルを削除する穏やかにファイルを削除する
穏やかにファイルを削除する
 
最近のメールまわりのお仕事のお話
最近のメールまわりのお仕事のお話最近のメールまわりのお仕事のお話
最近のメールまわりのお仕事のお話
 
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム   Gx#20再帰、漸化式、差分方程式とアルゴリズム   Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20
 
超小規模環境のMySQL #mysqlcasual
超小規模環境のMySQL #mysqlcasual超小規模環境のMySQL #mysqlcasual
超小規模環境のMySQL #mysqlcasual
 
mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論
 
東京近郊のPerlコミュニティのご紹介 #lcs2015
東京近郊のPerlコミュニティのご紹介 #lcs2015東京近郊のPerlコミュニティのご紹介 #lcs2015
東京近郊のPerlコミュニティのご紹介 #lcs2015
 
4月16日だからFoursquare 位置情報とライフログ
4月16日だからFoursquare 位置情報とライフログ4月16日だからFoursquare 位置情報とライフログ
4月16日だからFoursquare 位置情報とライフログ
 
設定ファイルに使われそうなデータ形式
設定ファイルに使われそうなデータ形式設定ファイルに使われそうなデータ形式
設定ファイルに使われそうなデータ形式
 
ライフログ、時系列メモ
ライフログ、時系列メモライフログ、時系列メモ
ライフログ、時系列メモ
 
今に伝えるメールの技術 #yapcasia #yapcasiareject
今に伝えるメールの技術 #yapcasia #yapcasiareject今に伝えるメールの技術 #yapcasia #yapcasiareject
今に伝えるメールの技術 #yapcasia #yapcasiareject
 

Recently uploaded

Recently uploaded (12)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

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