SlideShare a Scribd company logo
1 of 99
非同期プログラミング
   with Perl

           2010/08/07
   Japan Perl Association 代表理事
         株式会社ライブドア
    牧    大 輔 (@lestrrat)
さっそくですが


 「複数URLに接続して
HTTP GETするコード」
普通の書き方
use strict;
use LWP::UserAgent;

my @urls = qw(
   http://www.livedoor.com/
   http://www.dena.jp/
   http://mixi.jp/
   http://www.gaiax.co.jp/
);

my $ua = LWP::UserAgent->new();
foreach my $url (@urls) {
   my $res = $ua->get( $url );
   ...
}
ポイント
•シンプル!
•命令を順番に処理
•ソケットからの読み込みに時間がか
かると次の処理に進めない
理想
•とりあえず可能な限りのホストに接続
•接続できたらとりあえずHTTPリクエ
スト発行
•読み込み可能なところ(先に返信が来
たところから)読み込む
read
•read(2) は読み込めるデータが到着
するまでブロックする
•一個だけ遅いホストがあると全体が
遅くなる :/
効率よくread
効率よくread

     ソケット1
効率よくread

     ソケット1

     ソケット2
効率よくread

     ソケット1

     ソケット2

     ソケット3
効率よくread

    読める?     ソケット1
  (データ来た?)
             ソケット2

             ソケット3
効率よくread

             ソケット1

    読める?     ソケット2
  (データ来た?)
             ソケット3
効率よくread

             ソケット1

             ソケット2

    読める?     ソケット3
  (データ来た?)
効率よくread

             ソケット1

             ソケット2

    読める?
    来た!      ソケット3
  (データ来た?)
   読み込め!
効率よくread

             ソケット1

             ソケット2

    読める?
  (データ来た?)
効率よくread

    読める?     ソケット1
  (データ来た?)
             ソケット2
効率よくread

    読める?
     来た!     ソケット1
  (データ来た?)
    読み込め!
             ソケット2
効率よくread

    読める?
  (データ来た?)
             ソケット2
効率よくread

    読める?     ソケット2
  (データ来た?)
効率よくread

     来た!
    読める?     ソケット2
    読み込め!
  (データ来た?)
効率よくread

    読める?
  (データ来た?)
効率よくread
イベント駆動
メインループ
(プログラムの進行)
 を他人に任せる
イベントループ




          =
              while ( $still_alive ) {

                  ... 処理 ...

              }
ループから呼ばれる
コールバックを登録する
イベントループ           キュー

                  コールバック   実行!
                  コールバック


                  コールバック


                  コールバック




          このイベントを待っている
イベント発生!
          コールバックがあるか確認
イベント?非同期?
• イベント駆動の仕組みの中でI/O処理→ファイル
ハンドル等を「非同期モード」にする


• イベント駆動のメリットを生かすにはI/O等ブロッ
クする処理が多いときに使う


•よって「非同期プログラミング」と「イベント駆動
プログラミング」は同義で使うことが多い
AnyEvent
なんで?
POE
Danga::Socket
IO::Async
Event
Glib Qt
お互いに
互換性無し
AnyEvent
非同期フレームワークのラッパ
汎用API           これだけ覚えていればOK




              AnyEvent
デフォルト




                   Event




                                  その他
                           Glib
        POE

              EV
standard API++
混ぜることもできる

 例:POE+EV
新規に書くなら
AnyEventでおk
先にお知らせ
名前空間
AnyEvent
   vs
   AE
スタイルの違いだけ
AnyEvent->timer(
    after => $after,
    interval => $interval,
    cb => sub {
        ....
    }
);



AE::timer $after, $interval, sub {
    ...
};
ここではAEを
 使います
基本コンポーネント

•ループ
•ウォッチャー
•コンディション変数
•ガード
ウォッチャー
AnyEventコンポーネント

        IO    コールバック
                       実行!
       タイマー   コールバック




                 「ウォッチャー」
AnyEventを使う =
 ウォッチャーの管理をする
Timer
my $timer;
$timer = AE::timer 0, 1, sub {
    warn “timer invoked”;
    undef $timer;
};
I/O
my $io;
$io = AE::io $fh, $read_or_write, sub {
    .... # $fhから読んだり、$fhに書いたり
    undef $io;
};



          注意:$fhは非同期モードに指定しておく
fh_nonblocking

use AnyEvent::Util qw(fh_nonblocking);

my $fh = get_socket(...);
fh_nonblocking $fh, 1;

my $io;
$io = AE::io $fh, 0, sub { ... };
シグナル
my $sig;
$sig = AE::signal "TERM", sub {
    ...
    undef $sig;
};
子プロセス
my $child;
$child = AE::child $pid, sub {
    ...
    undef $child;
};
待機状態
my $idle;
$idle = AE::idle sub {
    ...
    undef $idle;
};
なにこれ?
my $timer;
$timer = AE::timer 0, 1, sub {
    warn “timer invoked”;
    undef $timer;
};
Perl:
スコープが終わると
メモリが解放される
AnyEvent:
ウォッチャーが解放されると
イベントがキャンセルされる
NG
{
    my $timer = AE::timer 0, 1, sub {
        warn “timer invoked”; # 走らない!
    };
} # ここにたどり着いた時点で $timerが解放




       スコープ終了。リソース解放され
        $timerも解放されてしまう
Good
my $timer;
$timer = AE::timer 0, 1, sub {
    ...           # どこかで $timer を使うコード
    undef $timer; # 明示的に解放しないと消えない
}



    クロージャで使用されているため
    明示的に解放されるまで生き残る
コンディション変数
• いくつかの違う機能が同居してる
• ちょっと混乱しやすい
• が、重要
• 以降 「condvar」と表記
1. 何かを待つ
•現処理の流れを「止める」
•「知らせ」を待つ
•スクリプトレベルでは「ループに制御
を渡す」
#!perl
use strict;
use AnyEvent;

my $cv = AE::cv {
   print "Endn";
};
my $timer;
$timer = AE::timer 10, 0, sub {
   print "Waited 10 seconds!n";
   undef $timer;
   $cv->send;
};

$cv->recv;
#!perl
use strict;
use AnyEvent;

my $cv = AE::cv {
   print "Endn";
};
my $timer;
$timer = AE::timer 10, 0, sub {
   print "Waited 10 seconds!n";
   undef $timer;
   $cv->send;
};

$cv->recv;


             知らせ が来るまでこの次にはいかない
               (→イベントループが起動)
#!perl
use strict;
use AnyEvent;

my $cv = AE::cv {
   print "Endn";
};
my $timer;
$timer = AE::timer 10, 0, sub {
   print "Waited 10 seconds!n";
   undef $timer;
   $cv->send;      タイマーが起動したら 知らせ を送る
};

$cv->recv;
#!perl
use strict;
use AnyEvent;

my $cv = AE::cv {
   print "Endn";
};
my $timer;
$timer = AE::timer 10, 0, sub {
   print "Waited 10 seconds!n";
   undef $timer;
   $cv->send;
};

$cv->recv;


        知らせ が来たら次の処理へ
         (→スクリプト終了)
#!perl
use strict;
use AnyEvent;

my $cv = AE::cv {
   print "Endn";
};
my $timer;
$timer = AE::timer 10, 0, sub {
   print "Waited 10 seconds!n";
   undef $timer;
   $cv->send;
};

$cv->recv;
#!perl
use strict;
use AnyEvent;

my $timer;
$timer = AE::timer 10, 0, sub {
   print "Waited 10 seconds!n";
   undef $timer;
};
#!perl
use strict;
use AnyEvent;

my $timer;
$timer = AE::timer 10, 0, sub {
   print "Waited 10 seconds!n";
   undef $timer;
};



            何も「待つ」ことがなかったので
             イベントループも起動しない
#!perl
use strict;
use AnyEvent;

my $timer;
$timer = AE::timer 10, 0, sub {
   print "Waited 10 seconds!n";
   undef $timer;
};
2. 複数の知らせを待つ

•フラグをあげる→落とす
•一つでもフラグがあがっていれば待つ
•フラグが全部落ちるとお知らせ
#!perl
use strict;
use AnyEvent;

my @delay = (1, 2, 5, 10);

my $cv = AE::cv { print "All timers are donen" };

foreach my $delay (@delay) {
   my $timer;
   $cv->begin;
   $timer = AE::timer $delay, 0, sub {
      print "Timer for delay = $delayn";
      undef $timer;
      $cv->end;
   };
}

$cv->recv;
#!perl
use strict;
use AnyEvent;

my @delay = (1, 2, 5, 10);

my $cv = AE::cv { print "All timers are donen" };

foreach my $delay (@delay) {
   my $timer;
   $cv->begin;             フラグをあげる
   $timer = AE::timer $delay, 0, sub {
      print "Timer for delay = $delayn";
      undef $timer;
      $cv->end;
   };
}

$cv->recv;
#!perl
use strict;
use AnyEvent;

my @delay = (1, 2, 5, 10);

my $cv = AE::cv { print "All timers are donen" };

foreach my $delay (@delay) {
   my $timer;
   $cv->begin;
   $timer = AE::timer $delay, 0, sub {
      print "Timer for delay = $delayn";
      undef $timer;
      $cv->end;             フラグを落とす
   };
}

$cv->recv;
#!perl
use strict;
use AnyEvent;

my @delay = (1, 2, 5, 10);

my $cv = AE::cv { print "All timers are donen" };

foreach my $delay (@delay) {
   my $timer;
   $cv->begin;
   $timer = AE::timer $delay, 0, sub {
      print "Timer for delay = $delayn";
      undef $timer;
      $cv->end;
   };
}

$cv->recv;        フラグが全部落ちたらお知らせ
#!perl
use strict;
use AnyEvent;

my @delay = (1, 2, 5, 10);

my $cv = AE::cv { print "All timers are donen" };

foreach my $delay (@delay) {
   my $timer;
   $cv->begin;
   $timer = AE::timer $delay, 0, sub {
      print "Timer for delay = $delayn";
      undef $timer;
      $cv->end;
   };
}

$cv->recv;
3. 処理終了時の
     コールバック
•何か戻り値が必要な時処理結果を待つ
•ウォッチャーを作る関数に知らせて欲
しいcondvarを渡す
#!perl
use strict;
use AnyEvent;

sub add {
   my ($x, $y, $cv) = @_;
   my $timer;
   $timer = AE::timer 5, 0, sub {
       $cv->send( $x + $y );
       undef $timer;
   };
}

my $cv = AE::cv {
   my $cv = shift;
   my ($result) = $cv->recv;
   print "Result = $resultn";
};

add( 3, 2, $cv );
$cv->recv;
#!perl
use strict;
use AnyEvent;

sub add {
   my ($x, $y, $cv) = @_;
   my $timer;
   $timer = AE::timer 5, 0, sub {
       $cv->send( $x + $y );
       undef $timer;
   };
}

my $cv = AE::cv {
   my $cv = shift;
   my ($result) = $cv->recv;
   print "Result = $resultn";
};

add( 3, 2, $cv );      結果を受け取るコールバックを渡す
$cv->recv;
#!perl
use strict;
use AnyEvent;

sub add {
   my ($x, $y, $cv) = @_;
   my $timer;
   $timer = AE::timer 5, 0, sub {
       $cv->send( $x + $y );        計算結果をcondvarに渡す
       undef $timer;
   };
}

my $cv = AE::cv {
   my $cv = shift;
   my ($result) = $cv->recv;
   print "Result = $resultn";
};

add( 3, 2, $cv );
$cv->recv;
#!perl
use strict;
use AnyEvent;

sub add {
   my ($x, $y, $cv) = @_;
   my $timer;
   $timer = AE::timer 5, 0, sub {
       $cv->send( $x + $y );
       undef $timer;
   };
}

my $cv = AE::cv {
   my $cv = shift;
   my ($result) = $cv->recv;        結果を受け取る
   print "Result = $resultn";
};

add( 3, 2, $cv );
$cv->recv;
#!perl
use strict;
use AnyEvent;

sub add {
   my ($x, $y, $cv) = @_;
   my $timer;
   $timer = AE::timer 5, 0, sub {
       $cv->send( $x + $y );
       undef $timer;
   };
}

my $cv = AE::cv {
   my $cv = shift;
   my ($result) = $cv->recv;
   print "Result = $resultn";
};

add( 3, 2, $cv );
$cv->recv;
基本はこれだけ
•ウォッチャーとcondvarだけで基本
的に全てまかなえる
•実際にはこれらを使った高レベルライ
ブラリを使う
AnyEventで


 「複数URLに接続して
HTTP GETするコード」
AnyEvent::HTTP
use strict;
use AnyEvent;
use AnyEvent::HTTP;

my @urls = qw(
   http://www.livedoor.com/
   http://www.dena.jp/
   http://mixi.jp/
   http://www.gaiax.co.jp/
);

my $cv = AE::cv {
   print "Fetched all urls!n";
};

my $guard;
foreach my $url (@urls) {
   $cv->begin;
   $guard = http_get $url, sub {
      print "Got $urln";
      undef $guard;
      $cv->end;
   }
}
$cv->recv;
以上!
•万が一どれかが遅くても、他のURL
は先に処理される
ライブラリ
 AnyEvent::Twitter          AnyEvent::Memcached     AnyEvent::FriendFeed::Realtime




AnyEvent::Twitter::Stream   AnyEvent::ReverseHTTP   AnyEvent::HTTP::MXHR



  AnyEvent::CouchDB         AnyEvent::SuperFeedr       AnyEvent::AIO


  AnyEvent::BDB              AnyEvent::DNS            AnyEvent::Beanstalk



   AnyEvent::DBI            AnyEvent::SNMP             AnyEvent::MP


AnyEvent::Gearman           AnyEvent::XMPP          Cache::Memcached::AnyEvent
Twiggy
Plack用非同期HTTPサーバー
1 スレッド!
複数接続高速処理
plackup -s Twiggy ...
ちょっとずつレスポンス
use strict;
use AnyEvent;

sub {
   my $env = shift;
   return sub {
      my $start_response = shift;
      my $writer = $start_response->( [
         200,
         [ "Content-Type" => "text/plain" ]
      ]);

      my $count = 1;
      my $t; $t = AE::timer 2, 2, sub {
         $writer->write( ($count * 2) . "秒たったよ!n");
         if ($count++ == 5) {
            undef $t;
            $writer->close;
         }
      };
   }
}
用途


                非同期サーバー
•接続後切断しない or              •何らかのイベント待っている
•いつ来るかわからないデー             •メッセージキュー、速いか遅
タを待っている                   いかわからないサービス等
プロキシ
•外部サーバーと連携するサービス
  •サーバーの性能を自分でコントロールできな
  い場合など
•某SNSとか某SNSとか
イベントサーバー
•ブラウザゲーム
•複数のクライアントが同時にイベント
を共有する場合など
注意
•「やりたいから」非同期にすると失敗
する
•「必要があるから」使うべき
•非同期コードは難しくなる
非同期にする条件
• リアルタイム性が重要
  • いつ起こるか分からない
  •ポーリングではリクエスト回数が多すぎる
• I/O待ちが多い
  •データを常時送り続けているのは x
  •待ち時間が長いとメリットがある
非同期にしない理由
•コードが複雑になる
•コードが複雑になる
•コードが複雑になる
•コードが複雑になる
•コードが複雑になる
必要な時だけ使う
  =効果絶大
Questions?
ご静聴ありがとう
 ございました

More Related Content

What's hot

Man-in-the-Middle Attack for SSH with Scala and JSch
Man-in-the-Middle Attack for SSH with Scala and JSchMan-in-the-Middle Attack for SSH with Scala and JSch
Man-in-the-Middle Attack for SSH with Scala and JSchAtsuhiko Yamanaka
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015Mikiya Okuno
 
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Yuki Morishita
 
Database concurrency control & recovery (1)
Database concurrency control & recovery (1)Database concurrency control & recovery (1)
Database concurrency control & recovery (1)Rashid Khan
 
Cassandra overview
Cassandra overviewCassandra overview
Cassandra overviewSean Murphy
 
Dissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal ArchitectureDissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal ArchitectureAlvaro Videla
 
ioMemoryとAtomic Writeによるデータベース高速化
ioMemoryとAtomic Writeによるデータベース高速化ioMemoryとAtomic Writeによるデータベース高速化
ioMemoryとAtomic Writeによるデータベース高速化IIJ
 
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話Yahoo!デベロッパーネットワーク
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたNarami Kiyokura
 
gRPC と nginx による HTTP/2 サービスメッシュ構築
gRPC と nginx による HTTP/2 サービスメッシュ構築gRPC と nginx による HTTP/2 サービスメッシュ構築
gRPC と nginx による HTTP/2 サービスメッシュ構築Kazuki Ogiwara
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情Masahiro Tomita
 
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技Yoichi Toyota
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方Funato Takashi
 
金融 API 時代のセキュリティ: OpenID Financial API (FAPI) WG
金融 API 時代のセキュリティ: OpenID Financial API (FAPI) WG金融 API 時代のセキュリティ: OpenID Financial API (FAPI) WG
金融 API 時代のセキュリティ: OpenID Financial API (FAPI) WGNat Sakimura
 
Dockerを活用したリクルートグループ開発基盤の構築
Dockerを活用したリクルートグループ開発基盤の構築Dockerを活用したリクルートグループ開発基盤の構築
Dockerを活用したリクルートグループ開発基盤の構築Recruit Technologies
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaNorito Agetsuma
 
MySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestMySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestI Goo Lee
 
Parts of speech tagger
Parts of speech taggerParts of speech tagger
Parts of speech taggersadakpramodh
 
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3infinite_loop
 

What's hot (20)

Man-in-the-Middle Attack for SSH with Scala and JSch
Man-in-the-Middle Attack for SSH with Scala and JSchMan-in-the-Middle Attack for SSH with Scala and JSch
Man-in-the-Middle Attack for SSH with Scala and JSch
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
 
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
 
Database concurrency control & recovery (1)
Database concurrency control & recovery (1)Database concurrency control & recovery (1)
Database concurrency control & recovery (1)
 
Cassandra overview
Cassandra overviewCassandra overview
Cassandra overview
 
Dissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal ArchitectureDissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal Architecture
 
ioMemoryとAtomic Writeによるデータベース高速化
ioMemoryとAtomic Writeによるデータベース高速化ioMemoryとAtomic Writeによるデータベース高速化
ioMemoryとAtomic Writeによるデータベース高速化
 
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
 
gRPC と nginx による HTTP/2 サービスメッシュ構築
gRPC と nginx による HTTP/2 サービスメッシュ構築gRPC と nginx による HTTP/2 サービスメッシュ構築
gRPC と nginx による HTTP/2 サービスメッシュ構築
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情
 
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方
 
金融 API 時代のセキュリティ: OpenID Financial API (FAPI) WG
金融 API 時代のセキュリティ: OpenID Financial API (FAPI) WG金融 API 時代のセキュリティ: OpenID Financial API (FAPI) WG
金融 API 時代のセキュリティ: OpenID Financial API (FAPI) WG
 
Dockerを活用したリクルートグループ開発基盤の構築
Dockerを活用したリクルートグループ開発基盤の構築Dockerを活用したリクルートグループ開発基盤の構築
Dockerを活用したリクルートグループ開発基盤の構築
 
Why Microservices
Why MicroservicesWhy Microservices
Why Microservices
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
 
MySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestMySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software Test
 
Parts of speech tagger
Parts of speech taggerParts of speech tagger
Parts of speech tagger
 
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
 

Viewers also liked

軽量高機能webサーバーnginx
軽量高機能webサーバーnginx軽量高機能webサーバーnginx
軽量高機能webサーバーnginxngi group.
 
データベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみたデータベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみたHyperleger Tokyo Meetup
 
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)goccy
 
理解したつもりになるGit入門
理解したつもりになるGit入門理解したつもりになるGit入門
理解したつもりになるGit入門Yoshihiro Sasaki
 
Plack::Request with Encoding
Plack::Request with EncodingPlack::Request with Encoding
Plack::Request with Encodingmoznion
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」technocat
 
Google trends to_irc
Google trends to_ircGoogle trends to_irc
Google trends to_ircrarere
 
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
Games::* - Perlで 「ゲーム」しよう #hokkaidopmGames::* - Perlで 「ゲーム」しよう #hokkaidopm
Games::* - Perlで 「ゲーム」しよう #hokkaidopm鉄次 尾形
 
Takao.mt 2013
Takao.mt 2013Takao.mt 2013
Takao.mt 2013moznion
 
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使うYAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使うmoznion
 
YAPCレポートの舞台裏
YAPCレポートの舞台裏YAPCレポートの舞台裏
YAPCレポートの舞台裏Masahiro Honma
 
PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416Yoshihiro Sasaki
 
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
"Ops Tools with Perl" 2012/05/12 Hokkaido.pmRyosuke IWANAGA
 
テーマ「なんでもないようなこと」
テーマ「なんでもないようなこと」テーマ「なんでもないようなこと」
テーマ「なんでもないようなこと」technocat
 

Viewers also liked (20)

Em synchrony について
Em synchrony についてEm synchrony について
Em synchrony について
 
軽量高機能webサーバーnginx
軽量高機能webサーバーnginx軽量高機能webサーバーnginx
軽量高機能webサーバーnginx
 
データベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみたデータベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみた
 
Using Dancer
Using DancerUsing Dancer
Using Dancer
 
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
 
理解したつもりになるGit入門
理解したつもりになるGit入門理解したつもりになるGit入門
理解したつもりになるGit入門
 
Plack::Request with Encoding
Plack::Request with EncodingPlack::Request with Encoding
Plack::Request with Encoding
 
Currying in perl
Currying in perlCurrying in perl
Currying in perl
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」
 
Google trends to_irc
Google trends to_ircGoogle trends to_irc
Google trends to_irc
 
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
Games::* - Perlで 「ゲーム」しよう #hokkaidopmGames::* - Perlで 「ゲーム」しよう #hokkaidopm
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
 
Takao.mt 2013
Takao.mt 2013Takao.mt 2013
Takao.mt 2013
 
Use Carton
Use CartonUse Carton
Use Carton
 
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使うYAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
 
YAPCレポートの舞台裏
YAPCレポートの舞台裏YAPCレポートの舞台裏
YAPCレポートの舞台裏
 
Asset Pipeline for Perl
Asset Pipeline for PerlAsset Pipeline for Perl
Asset Pipeline for Perl
 
PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416
 
YAPC::AsiaとHokkaido.pm
YAPC::AsiaとHokkaido.pmYAPC::AsiaとHokkaido.pm
YAPC::AsiaとHokkaido.pm
 
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
 
テーマ「なんでもないようなこと」
テーマ「なんでもないようなこと」テーマ「なんでもないようなこと」
テーマ「なんでもないようなこと」
 

Similar to Perl 非同期プログラミング

ATSプログラミングチュートリアル
ATSプログラミングチュートリアルATSプログラミングチュートリアル
ATSプログラミングチュートリアルKiwamu Okabe
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)Arata Fujimura
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろkjwtnb
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftTomohiro Kumagai
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門y-uti
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy toolYuki Shibazaki
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia鉄次 尾形
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺちdo_aki
 
Development app-with-elixir
Development app-with-elixirDevelopment app-with-elixir
Development app-with-elixirk1complete
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるjamadam
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門kwatch
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistranokumachang_LL
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発Kentaro Ohkouchi
 
最近つくったrecent_zombies - Perlで始めるTwitterタイムライン分析
最近つくったrecent_zombies -  Perlで始めるTwitterタイムライン分析最近つくったrecent_zombies -  Perlで始めるTwitterタイムライン分析
最近つくったrecent_zombies - Perlで始めるTwitterタイムライン分析Masahiro NAKAYAMA
 
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Masahito Zembutsu
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarSotaro Karasawa
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2Akio Ishida
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数Wataru Terada
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )hiro345
 

Similar to Perl 非同期プログラミング (20)

ATSプログラミングチュートリアル
ATSプログラミングチュートリアルATSプログラミングチュートリアル
ATSプログラミングチュートリアル
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺち
 
Development app-with-elixir
Development app-with-elixirDevelopment app-with-elixir
Development app-with-elixir
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
WCO2012「PHP教室」
WCO2012「PHP教室」WCO2012「PHP教室」
WCO2012「PHP教室」
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
 
最近つくったrecent_zombies - Perlで始めるTwitterタイムライン分析
最近つくったrecent_zombies -  Perlで始めるTwitterタイムライン分析最近つくったrecent_zombies -  Perlで始めるTwitterタイムライン分析
最近つくったrecent_zombies - Perlで始めるTwitterタイムライン分析
 
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 

More from lestrrat

Future of Tech "Conferences"
Future of Tech "Conferences"Future of Tech "Conferences"
Future of Tech "Conferences"lestrrat
 
ONIの世界 - ONIcon 2019 Winter
ONIの世界 - ONIcon 2019 WinterONIの世界 - ONIcon 2019 Winter
ONIの世界 - ONIcon 2019 Winterlestrrat
 
Slicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPISlicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPIlestrrat
 
Oxygen Not Includedをやるべき4つの理由
Oxygen Not Includedをやるべき4つの理由Oxygen Not Includedをやるべき4つの理由
Oxygen Not Includedをやるべき4つの理由lestrrat
 
Rejectcon 2018
Rejectcon 2018Rejectcon 2018
Rejectcon 2018lestrrat
 
Builderscon tokyo 2018 speaker dinner
Builderscon tokyo 2018 speaker dinnerBuilderscon tokyo 2018 speaker dinner
Builderscon tokyo 2018 speaker dinnerlestrrat
 
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)lestrrat
 
Google container builderと友だちになるまで
Google container builderと友だちになるまでGoogle container builderと友だちになるまで
Google container builderと友だちになるまでlestrrat
 
筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーションlestrrat
 
iosdc 2017
iosdc 2017iosdc 2017
iosdc 2017lestrrat
 
シュラスコの食べ方 超入門
シュラスコの食べ方 超入門シュラスコの食べ方 超入門
シュラスコの食べ方 超入門lestrrat
 
OSSの敵になるのもいいじゃない
OSSの敵になるのもいいじゃないOSSの敵になるのもいいじゃない
OSSの敵になるのもいいじゃないlestrrat
 
Coding in the context era
Coding in the context eraCoding in the context era
Coding in the context eralestrrat
 
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)lestrrat
 
Opening: builderscon tokyo 2016
Opening: builderscon tokyo 2016Opening: builderscon tokyo 2016
Opening: builderscon tokyo 2016lestrrat
 
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
Kubernetes in 20 minutes - HDE Monthly Technical Session 24Kubernetes in 20 minutes - HDE Monthly Technical Session 24
Kubernetes in 20 minutes - HDE Monthly Technical Session 24lestrrat
 
小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016lestrrat
 
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれいまさら聞けないselectあれこれ
いまさら聞けないselectあれこれlestrrat
 
Don't Use Reflect - Go 1.7 release party 2016
Don't Use Reflect - Go 1.7 release party 2016Don't Use Reflect - Go 1.7 release party 2016
Don't Use Reflect - Go 1.7 release party 2016lestrrat
 
How To Think In Go
How To Think In GoHow To Think In Go
How To Think In Golestrrat
 

More from lestrrat (20)

Future of Tech "Conferences"
Future of Tech "Conferences"Future of Tech "Conferences"
Future of Tech "Conferences"
 
ONIの世界 - ONIcon 2019 Winter
ONIの世界 - ONIcon 2019 WinterONIの世界 - ONIcon 2019 Winter
ONIの世界 - ONIcon 2019 Winter
 
Slicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPISlicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPI
 
Oxygen Not Includedをやるべき4つの理由
Oxygen Not Includedをやるべき4つの理由Oxygen Not Includedをやるべき4つの理由
Oxygen Not Includedをやるべき4つの理由
 
Rejectcon 2018
Rejectcon 2018Rejectcon 2018
Rejectcon 2018
 
Builderscon tokyo 2018 speaker dinner
Builderscon tokyo 2018 speaker dinnerBuilderscon tokyo 2018 speaker dinner
Builderscon tokyo 2018 speaker dinner
 
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
 
Google container builderと友だちになるまで
Google container builderと友だちになるまでGoogle container builderと友だちになるまで
Google container builderと友だちになるまで
 
筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション
 
iosdc 2017
iosdc 2017iosdc 2017
iosdc 2017
 
シュラスコの食べ方 超入門
シュラスコの食べ方 超入門シュラスコの食べ方 超入門
シュラスコの食べ方 超入門
 
OSSの敵になるのもいいじゃない
OSSの敵になるのもいいじゃないOSSの敵になるのもいいじゃない
OSSの敵になるのもいいじゃない
 
Coding in the context era
Coding in the context eraCoding in the context era
Coding in the context era
 
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)
 
Opening: builderscon tokyo 2016
Opening: builderscon tokyo 2016Opening: builderscon tokyo 2016
Opening: builderscon tokyo 2016
 
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
Kubernetes in 20 minutes - HDE Monthly Technical Session 24Kubernetes in 20 minutes - HDE Monthly Technical Session 24
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
 
小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016
 
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれいまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
 
Don't Use Reflect - Go 1.7 release party 2016
Don't Use Reflect - Go 1.7 release party 2016Don't Use Reflect - Go 1.7 release party 2016
Don't Use Reflect - Go 1.7 release party 2016
 
How To Think In Go
How To Think In GoHow To Think In Go
How To Think In Go
 

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Recently uploaded (10)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

Perl 非同期プログラミング

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n