• Save
クリップボード監視とAnyEventの基礎 #chibapm
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

クリップボード監視とAnyEventの基礎 #chibapm

  • 1,249 views
Uploaded on

2013/06/08 に行われた Chiba.pm#3 でLTしたスライドです。

2013/06/08 に行われた Chiba.pm#3 でLTしたスライドです。

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,249
On Slideshare
1,236
From Embeds
13
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
1

Embeds 13

https://twitter.com 13

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. クリップボード監視とAnyEventの基礎尾形 鉄次 (OGATA Tetsuji)Twitter: @xtetsuji2013/6/8 Chiba.pm#3 LT
  • 2. 自己紹介• 尾形 鉄次 (OGATA Tetsuji)• Twitter: @xtetsuji• Blog: http://post.tetsuji.jp/• 普段は Apache mod_perl の研究しています
  • 3. Chiba.pmにPerl成分を入れに来ました!
  • 4. 前回までのあらすじ• Chiba.pm#2 で「クリップボード監視と外部コマンド実行」というLTをやった• http://slidesha.re/xtetsuji-chibapm2• 今回はそれの続き• 今はMac OS X限定です、すみません
  • 5. 新ジャンルコピペ• 前回に引き続きご紹介• 所定形式の文字列がコピーされたら、自動的にどこかにペースト、もしくは事前定義済みのコールバックを実行• いわゆるクリップボード監視
  • 6. モジュール作った• AnyEvent::Mac::Pasteboard• https://github.com/xtetsuji/p5-AnyEvent-Mac-Pasteboard• cpanm などで入れられますがCPANにはアップされていません• アップして欲しいというご要望募集中
  • 7. Let’s A::M::Pasteboard• Let’s Install AnyEvent::Mac::Pasteboard!•$ cpanm git://github.com/xtetsuji/p5-AnyEvent-Mac-Pasteboard.git• perlbrewかplenvでユーザPerl環境を作っておくのがオススメです(詳細割愛)
  • 8. DEMO#!/usr/bin/env perluse strict;use warnings;use AnyEvent;use AnyEvent::Mac::Pasteboard;my $cv = AnyEvent->condvar;my $pb_watcher = AnyEvent::Mac::Pasteboard->new(interval => 2, # 2秒おきに監視on_change => sub {my $pb_content = shift;print qq(change pasteboard. content is"$pb_content"n);},);$cv->recv();exit;
  • 9. AnyEventとは• いろいろな「イベント」に応じて何かをしてくれるフレームワーク• イベント?→時間、シグナルハンドラ、色々なI/O、またはそれらの応用• 時間だったらwhileループでいいんじゃない?
  • 10. whileループの罠• whileループを直接書いてもいいけど…• イベントが増えるごとに、管理が面倒くさくなってくる• バグの温床になるケースもある
  • 11. 例題#!/usr/bin/env perluse strict;use warnings;my ($phase_2, $phase_3, $phase_5) = ("foo", "bar","buz");my $cur_time = 1;while (1) {print "[$cur_time] $phase_2n" if $cur_time % 2 == 0;print "[$cur_time] $phase_3n" if $cur_time % 3 == 0;print "[$cur_time] $phase_5n" if $cur_time % 5 == 0;$cur_time++;sleep 1;}
  • 12. 例題を見てみる• sleep 1; を入れ忘れると大惨事• サーバでやらかすと暴走して死亡• ひとつのタイマーをオフにするとか、また面倒• あーもうwhileループ面倒くさい!
  • 13. AnyEvent->timer• AnyEventのタイマー、AnyEvent->timerを利用する• これで結構見やすくなる
  • 14. AnyEventで書き換え#!/usr/bin/perluse strict;use warnings;use AnyEvent;my $cv = AnyEvent->condvar;my ($phase_2, $phase_3, $phase_5) = ("foo", "bar", "buz");my $cur_time = 0;my $ae_timer_2 = AnyEvent->timer(after=>2, interval=>2, cb => sub { print "[$cur_time] $phase_2n"; },);my $ae_timer_3 = AnyEvent->timer(after=>3, interval=>3, cb => sub { print "[$cur_time] $phase_3n"; },);my $ae_timer_5 = AnyEvent->timer(after=>5, interval=>5, cb => sub { print "[$cur_time] $phase_5n"; },);my $incl_timer = AnyEvent->timer(interval=>1, cb => sub { $cur_time++; });$cv->recv();
  • 15. AnyEventで書き換え• 少し長くなったが、こうして構造化しておけば後でいろいろな応用ができる• AnyEventの書き方が長いと感じる人には、短く書けるAEというものも用意されています。e.g. AE::timer 0,1,&cb;
  • 16. AnyEventで書き換え• AnyEventオブジェクトを作っておいてcondvarで得られたオブジェクトにrecvメソッドを投げるところでループ実行• 各イベントはcb(callback)を持っていて、もしループを抜けたい場合はcondvarの値でsendを送ればrecvに戻せる
  • 17. AnyEvnetで豊かな生活• 様々な低層の概念がイベント駆動になっており、それを応用した様々なクライアントやサーバがある• 自前で書くタイマーから、IRCボット、Plackベースウェブサーバなど、様々• 調べてみて活用してみましょう!
  • 18. 続きは懇親会で• 飲みながらAnyEventの話しましょう!• 懇親会が本番• Chiba.pm 今後も盛り上がって欲しい
  • 19. ご清聴ありがとうございました