SlideShare a Scribd company logo
YAPC::Asia 2009 Tokyo 2009/9/10 Gosuke Miyashita
Speaker Gosuke Miyashita ( mizzy ) Technical manager at paperboy&co. Have most kids in Japan Perl world? 3 kids.Even with Yappo. 4 th  kid will be born in November.
 
 

Recommended for you

톰캣 #04-환경설정
톰캣 #04-환경설정톰캣 #04-환경설정
톰캣 #04-환경설정

설치 이후에는 사용하고자하는 환경에 맞게 몇가지 설정을 변경할 필요가 있습니다. setenv.sh 라고 아시나요?? - 리스너 - Java Options - ClassLoader - setenv? - web.xml - Log

톰캣톰캣 환경설정
PowerShell: Automation for everyone
PowerShell: Automation for everyonePowerShell: Automation for everyone
PowerShell: Automation for everyone

PowerShell is a rich and powerful automation language. Due to its self describing nature it's also dead easy to learn.

microsoftpowershellautomation
appache_1
appache_1appache_1
appache_1

This document provides instructions for configuring Apache server and Perl for CGI (Common Gateway Interface) on Windows. It details how to install Apache server from the Apache website, download and install ActivePerl, edit the httpd.conf file to enable CGI, test the server, place CGI scripts in the cgi-bin folder, and provides an example "Hello World" CGI script and output. It also demonstrates printing environment variables using a CGI script.

Agenda Asynchronous processing with event driven programming Asynchronous processing with Danga::Socket Overview of Perlbal asynchronous processing How to write asynchronous Perlbal plugins Summary
 
Event driven programming A programming paradigm in which the flow of the program is determined by events Counter paradigm of flow-based programming
Events I/O On I/O read ready or write ready Timers On time passed Signal On getting a signal Child process On child process exit

Recommended for you

LvivPy - Flask in details
LvivPy - Flask in detailsLvivPy - Flask in details
LvivPy - Flask in details

1) The document provides details on various aspects of Flask application development including typical project structure, blueprints, databases, forms and validation, management commands, assets management, testing, and debugging. 2) It discusses Flask extensions for these areas such as Flask-SQLAlchemy, Flask-Werkzeug, Flask-Assets, Flask-Mail, and Flask-DebugToolbar. 3) The document raises some issues around porting Flask to Python 3 and the size and scope of the Werkzeug library that Flask is built upon.

flaskoverview
WP Weekend #2 - Corcel, aneb WordPress přes Laravel
WP Weekend #2 - Corcel, aneb WordPress přes LaravelWP Weekend #2 - Corcel, aneb WordPress přes Laravel
WP Weekend #2 - Corcel, aneb WordPress přes Laravel

The document discusses using Laravel and the Corcel library to integrate WordPress with other projects. It provides an overview of Laravel features like routing and Eloquent ORM. Corcel allows using WordPress as a backend for any PHP project using Eloquent to retrieve WordPress data. Examples show retrieving WordPress posts, users, and custom post types from Laravel or other projects using Corcel.

wordpresswpweekendczcorcel
Capistrano Overview
Capistrano OverviewCapistrano Overview
Capistrano Overview

This document provides an overview of how to set up and use Capistrano for deploying Ruby on Rails applications to servers. It includes instructions for installing Capistrano, setting up the required files and folder structure, customizing deployment settings and tasks, and performing common deployment operations like deploying code, migrating databases, and rolling back changes.

capistrano
Main loop Also called “event loop” On each loop, check that events are occurred or not, and process the events. After process the events, return to the loop and repeat the loop till next events occur This is the flow of asynchronous processing
Eaxmple of main loop Process timers Wait I/O events Process I/O events Post main loop process
 
Events supported by Danga::Socket I/O Timers

Recommended for you

GTLAB Overview
GTLAB OverviewGTLAB Overview
GTLAB Overview

The document discusses installing and building GTLAB, which contains a Grid portal, workflow suite, web services, and gadget container. It can be checked out from SVN or downloaded as a TAR file. To build GTLAB, edit the pom.xml file, run mvn clean install, and start the Tomcat server. Examples are provided and users can create new JSF pages and tags.

gadgetsogcetaglibrary
Ruby C10K: High Performance Networking - RubyKaigi '09
Ruby C10K: High Performance Networking - RubyKaigi '09Ruby C10K: High Performance Networking - RubyKaigi '09
Ruby C10K: High Performance Networking - RubyKaigi '09

This document discusses using the EM-Proxy Ruby gem to build a high performance proxy for monitoring and load testing web applications. It describes how to configure EM-Proxy to duplicate requests to both a production and test server, modifying requests and responses as needed. Examples are given to demonstrate transparent port forwarding, response alteration, and running post-processing steps after each request.

rubykaigieventmachineruby
Flask – Python
Flask – PythonFlask – Python
Flask – Python

This document provides an overview of Flask, a microframework for Python. It discusses that Flask is easy to code and configure, extensible via extensions, and uses Jinja2 templating and SQLAlchemy ORM. It then provides a step-by-step guide to setting up a Flask application, including creating a virtualenv, basic routing, models, forms, templates, and views. Configuration and running the application are also covered at a high level.

flaskwsgisqlalchemy
Process I/O events Danga::Socket supports 3 I/O event notification facility kqueue epoll poll Select adequate facility automatically
Add I/O watcher with Danga::Socket use   base  ‘Danga::Socket’; sub   new  { # pass file descripter $self->SUPER::new( $fd );  } sub   event_read  { # process when $fd is read ready } sub   event_write  { # procdess when $fd is write ready }
Add I/O wathcer (pattern 2) Danga::Socket->AddOtherFds( $fd  =>  sub  { # process when $fd is read ready }, );
Add I/O watcher (pattern 3) Danga::Socket::Callback->new( handle   =>  $fd , on_read_ready   =>  sub  { # process on read ready  }, on_write_ready  =>  sub  { # process on write ready }, );

Recommended for you

Mcollective introduction
Mcollective introductionMcollective introduction
Mcollective introduction

Mcollective is an open source framework for server orchestration and parallel job execution. It provides asynchronous and event-driven communication between nodes using a message broker like RabbitMQ. Nodes can be targeted based on facts, classes, or other criteria. Plugins allow mcollective to manage configurations, run puppet, install packages, manage firewall rules, and more across large server fleets. It provides a scalable and decentralized alternative to SSH loops for orchestrating infrastructure changes and operations.

melbournemcollectiveinfrastructurecoders
Task Scheduling and Asynchronous Processing Evolved. Zend Server Job Queue
Task Scheduling and Asynchronous Processing Evolved. Zend Server Job QueueTask Scheduling and Asynchronous Processing Evolved. Zend Server Job Queue
Task Scheduling and Asynchronous Processing Evolved. Zend Server Job Queue

This document discusses Zend Server Job Queue, which allows offloading PHP code execution to improve perceived performance and manage load. It describes how to create and schedule jobs using the ZendJobQueue PHP API. Jobs can be created to run immediately, periodically on a schedule, or at a deferred time in the future. Parameters can be passed to jobs and their execution status reported.

phpzendcron
Design patterns as power of programing
Design patterns as power of programingDesign patterns as power of programing
Design patterns as power of programing

This document discusses design patterns in programming and provides examples of common patterns like singleton, registry, dependency injection, factory, and decorator. It explains what each pattern is used for and provides PHP code samples to illustrate how each pattern can be implemented. The document also discusses programming frameworks and languages like PHP, Java, and others. It aims to explain the power and usefulness of design patterns in programming.

design patternsphpjandbeyond
Add timer watcher with Danga::Socket Danga::Socket->AddTimer( 10, sub  { # process after 10 seconds }, }
Start main loop with Danga::Socket Danga::Socket->EventLoop();
Main loop(again) Process Timers Wait I/O events Process I/O events Post main loop process
 

Recommended for you

Making Symofny shine with Varnish - SymfonyCon Madrid 2014
Making Symofny shine with Varnish - SymfonyCon Madrid 2014Making Symofny shine with Varnish - SymfonyCon Madrid 2014
Making Symofny shine with Varnish - SymfonyCon Madrid 2014

The document discusses using Varnish as a cache accelerator in front of Symfony applications. It provides an overview of Varnish configuration using VCL, the request flow through Varnish, and new features in Varnish 4. It also covers specific techniques for caching Symfony applications, including normalizing URLs and cookies, load balancing backends, handling internationalization, and invalidating caches.

Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...

This document provides an overview of Flask, a Python-based web application framework. It begins with an introduction to Flask, explaining what Flask is and its advantages like being open source with a large community. It then covers topics like installing Flask, creating Flask applications, routing, templates, static files, the request object, cookies, redirects and errors. It concludes by mentioning some popular Flask extensions that add additional functionality for tasks like email, forms, databases and AJAX. The document appears to be from an online training course on Flask and aims to teach the basics of how to use the Flask framework to build web applications.

flask tutorial for beginnerspython flask tutorialflask tutorial
Introducing Revel
Introducing RevelIntroducing Revel
Introducing Revel

Presentation for Go Meetup in Warsaw introducing main concepts of developing web applications in Revel.

revelgolangweb development
Perlbal mechanism(as reverse proxy) BackendHTTP ClientProxy TCPListener Client Server ClientProxy Client BackendHTTP Danga::Socket based objects
Perlbal with a plugin (on start_proxy_request hook) BackendHTTP ClientProxy TCPListener Client Server Plugin::Hoge Target of this session
 
Hooks Perlbal has many plugin hooks Explain with start_proxy_request hook in this session

Recommended for you

Puppet Camp DC 2014: Managing Puppet with MCollective
Puppet Camp DC 2014: Managing Puppet with MCollectivePuppet Camp DC 2014: Managing Puppet with MCollective
Puppet Camp DC 2014: Managing Puppet with MCollective

Puppet Camp DC 2014: "Puppet Type and Provider Execution Presentation" by Jon Mosco, Corporation Services Company

devopspuppet camp
Real Time Event Dispatcher
Real Time Event DispatcherReal Time Event Dispatcher
Real Time Event Dispatcher

Pushing symfony events in real time to your clients This talk, held at the symfony live Paris unconference, gives an overview about how events thrown in symfony can be dispatched in real time to web clients. It describes the architecture of the solution and provides examples using the open source comet server APE

apeajaxevents
Tanz!
Tanz!Tanz!
Tanz!

Komm und tanz! mit Dancer, es ist einfach zu erlernen, effizient zu programmieren und trotzdem ausdrucksstark genug für mittlere und größere Projekte. In unserer Tanzschule üben wir die wichtigsten Elemente (Routes, Plugins, Templates, Sessions, Konfiguration). Die abschließende Tanzkür zeigt exemplarisch die Einrichtung einer Produktionsumgebung mit Perlbal, Starman und einem Startskript für die Dancer-Anwendung.

dancerpluginstarman
In case of a synchronous plugin ClientProxy TCPListener Client Server Plugin::Sync Client
In case of an asynchronous plugin ClientProxy TCPListener Client Server Plugin::Async Client ClientProxy
How to write asynchronous plugins? Write the main process based on Danga::Socket process within the main loop of Danga::Socket Create Danga::Socket based class Or use Danga::Socket::Callback Or use Danga::Socket::AddTimer Also other libraries need to be non-blocking You can use Gearman::Client::Async with blocking processes
How to write asynchronous plugins? When finish asynchronous process, go to next phase Call back function Also need to fix Perlbal itself

Recommended for you

Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - Func
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
yapcasia2009
YAPC Asia 2010 30days Albumの裏側 後日談
YAPC Asia 2010 30days Albumの裏側 後日談YAPC Asia 2010 30days Albumの裏側 後日談
YAPC Asia 2010 30days Albumの裏側 後日談

関西オープンソース 2008でお話しした、ペパボでは珍しくPerlをふんだんに つかっているサービス「30days Album」について、その後どうなったのか、 という話を、主にMogileFS運用上の苦労話、といった観点からお話ししたい と思います。 関西オープンソース 2008での発表資料はこちらです。 http://www.slideshare.net/mizzy/2008-30days-album-presentation http://yapcasia.org/2010/talks/63D6A01E-BC8C-11DF-8791-B9FC0F276C45

30daysmogilefsperlbal
Main process of a plugin package   My::Drizzle ; use   base   ‘Danga::Socket’ ; use   Net::Drizzle  ':constants' ; sub   new  { $self->SUPER::new($fh); $self->watch_read(1); } sub   event_read  { # Check db request status and call back when finished }
Attention You can also use Danga::Socket::Callback You cannot use AddOtherFds() File descriptors added by Add AddOtherFds() are only evaluated at the beginning of the main loop So if already in the main loop, AddOtherFds() are meaningless. You can call epoll_ctl, EV_SET and so on directly, but no portability
plugin register package   Perlbal::Plugin::AsyncDb ; sub   register  { my  ( $class, $svc ) = @_; $svc->register_hook( 'Async' => 'start_proxy_request',   &request_db , ); return  1; }
Call asynchronous process sub   request_db  { my  Perlbal::ClientProxy $client =  shift ; My::Drizzle->new( callback  =>  sub  { # call back }, ); return  1;  # very important! }

Recommended for you

Inside Sqale's Backend at YAPC::Asia Tokyo 2012
Inside Sqale's Backend at YAPC::Asia Tokyo 2012Inside Sqale's Backend at YAPC::Asia Tokyo 2012
Inside Sqale's Backend at YAPC::Asia Tokyo 2012

This document summarizes the backend architecture of Sqale, a cloud application platform similar to Heroku. Key components include containers deployed on EC2 instances that are assigned to individual users, an SSH router that routes SSH connections to the appropriate file repository, Git server, or user container, and a web proxy that load balances traffic across containers using dynamic configuration from Redis. The architecture aims to provide isolated virtual environments for each user's applications through the use of Linux containers and a customized kernel.

Puppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPADPuppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPAD
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012

This document summarizes the backend architecture of Sqale, a cloud application platform. It uses Linux containers hosted on Amazon EC2 instances. Containers are assigned to individual users and act as virtual environments. Traffic is routed to containers through an Nginx load balancer using dynamic configuration based on availability. An SSH router routes Git, SFTP, and SSH connections to the appropriate file or container servers using authorized keys scripts. Deployments are handled by separate servers.

In case of “return 0” BackendHTTP ClientProxy TCPListener Client Server Plugin::Async Go to next step even if Plugin::Async is not  finished
“ return 1” & “call back” BackendHTTP ClientProxy TCPListener Client Plugin::Async Stop the process and go to main loop Server return 1 call back
Call back function If plugin process finished, ClientProxy must go to the next process(call BackendHTTP) Stopped at the following code of handle_request() : return   if  $svc->run_hook( 'start_proxy_request', $self ); ClientProxy must start processing from the next of this code
Call back function my  Perlbal::ClientProxy  $client =  shift ; My::Drizzle->new( callback  =>  sub  { $client->{async_complete} = 1; $client->handle_request; }, );

Recommended for you

Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
Flow based programming in golang
Flow based programming in golangFlow based programming in golang
Flow based programming in golang

Flow-based programming is a paradigm that defines applications as networks of black box processes that exchange data via message passing through predefined connections. Processes have ports for communication and are connected externally without awareness of each other. This approach improves workflow visualization and allows processes to be reused. GoFlow is a Golang library that implements this model by defining components as processes with input/output ports and connecting them to build an application graph. It supports various concurrency models and locking for state management.

golang go meetup lazada
Node.js: CAMTA Presentation
Node.js: CAMTA PresentationNode.js: CAMTA Presentation
Node.js: CAMTA Presentation

The document discusses Node.js, which is a server-side JavaScript environment that uses an asynchronous event-driven model. Some key points: - Node.js uses the V8 JavaScript engine and allows handling requests via JavaScript on the server-side rather than a separate language like PHP, Java, etc. - It has non-blocking I/O to avoid blocking the entire process when waiting for slow resources like files or databases. Callbacks are used to handle asynchronous operations. - The document discusses how Node.js could provide access to MUMPS databases to take advantage of the benefits of global storage while using the popular JavaScript language.

node.jsnosqlmumps
Patch of ClientProxy::handle_request -  return   if  $svc->run_hook( -   'start_proxy_request', $self -  ); +   unless  ( $self->{async_complete} ) { +   return if  $svc->run_hook( +   'start_proxy_request', $self +   ); +  } +  $self->{async_complete} = 0;
 
Points of asynchronous Perlbal plugins Process within the Danga::Socket main loop return 1 when plugin called Restart  ClientProxy process by a call back function when plugin finished Also need to fix Perlbal itself Be careful with order of plugins Following plugins on a same hook are ignored when after a plugin returns 1
 

Recommended for you

Tatsumaki
TatsumakiTatsumaki
Tatsumaki

Tatsumaki is a non-blocking web framework for Perl built on Plack and AnyEvent. It allows building asynchronous applications that can handle thousands of concurrent connections. Tatsumaki uses psgi.streaming to enable asynchronous responses. It includes a non-blocking HTTP client and pure Perl message queue for building real-time applications like chat and comet. The framework is in a beta stage but plans include services for XMPP/IRC bots and a standard comet interface.

perl psgi plack web frameworks
Please look at the attach See.doc. I am getting this error all th.docx
Please look at the attach See.doc. I am getting this error all th.docxPlease look at the attach See.doc. I am getting this error all th.docx
Please look at the attach See.doc. I am getting this error all th.docx

Please look at the attach: See.doc. I am getting this error all the time 4 Lecture 1 The Socket API For Chapter 4 of your second textbook You need to read your book and practice the exercises. This is just an extra note for the chapter. Read this lecture after you have read chapter 4 of your second textbook. Note: I included extra file for those students who do not have SSH on their Windows. Introduction For the first part of the semester we study distributed programming. The programs are in Java. You can either use windows (XP, Vista, 7), and/or Linux. I assume you have a good knowledge in Java. However if you need tutorial in this language I can post or email my tutorial. But this tutorial is rather sizeable and may take a lot of your time. We use eclipse. I have a small tutorial about installing Java, eclipse, a couple of simple java programs to help you to trace a Java program using the debugging facilities of eclipse. As always I try to clarify the subject by small programs rather than the big programs in the book to make it easier to follow. Note: A good website on sockets is: http://docs.oracle.com/javase/tutorial/networking/TOC.html 4.1 Background Through this part we like to have access to 2-3 computers. Let us assume a client program would like to request implementation of a task via a number server programs. I suggest having one server program in your Windows operating system and one in your account in our school server. Below are a couple of simple examples. I explain the APIs later. Just run those to make sure things are under control. Example 1: In the following program the client asks a server to add numbers 5 and 7. The server program: import java.io.*; import java.net.*; publicclass MyServer { publicstaticvoid main(String[] args) throws IOException { ServerSocket serverSocket = null; try {//Keep this number. For the pace server this is the number we must use. serverSocket = new ServerSocket(16790); Socket clientSocket = null; clientSocket = serverSocket.accept(); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); out.println("5 + 7 is: 12"); out.close(); clientSocket.close(); serverSocket.close(); } catch (IOException e) { System.out.println("Error: " + e); System.exit(0); } } } The client program: import java.io.*; import java.net.*; publicclass MyClient { publicstaticvoid main(String[] args) throws IOException { Socket clientSocket = null; BufferedReader in = null; int ip; try {//Keep this number. For the pace server this is the number we must use. ip = 16790; InetAddress host = InetAddress.getByName("localhost");//("vulcan.seidenberg.pace.edu"); clientSocket = new Socket(host, ip); in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String s = in.readLine(); while(s != null){ System.out.println(s); s = in.readLine(); } i.

JUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleJUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by example

The document discusses using Drools Planner, an open source optimization tool, to solve planning problems like bin packing processes on cloud servers. It describes how Drools Planner models planning problems, defines score rules to evaluate solutions, and uses optimization algorithms like first fit, tabu search, and simulated annealing to improve solutions. It provides an example of using Drools Planner to optimize assigning processes to servers on a cloud to minimize costs while meeting constraints. The document advocates that organizations can benefit from using tools like Drools Planner to optimize their planning problems.

drools plannerdroolsautomated planning

More Related Content

What's hot

IRC HTTP Stream in YAPC::Asia 2009
IRC HTTP Stream in YAPC::Asia 2009IRC HTTP Stream in YAPC::Asia 2009
IRC HTTP Stream in YAPC::Asia 2009
Yusuke Wada
 
Learn flask in 90mins
Learn flask in 90minsLearn flask in 90mins
Learn flask in 90mins
Larry Cai
 
Capistrano
CapistranoCapistrano
Capistrano
Travis Roberts
 
톰캣 #04-환경설정
톰캣 #04-환경설정톰캣 #04-환경설정
톰캣 #04-환경설정
GyuSeok Lee
 
PowerShell: Automation for everyone
PowerShell: Automation for everyonePowerShell: Automation for everyone
PowerShell: Automation for everyone
Gavin Barron
 
appache_1
appache_1appache_1
appache_1
Maisa Al-Khudair
 
LvivPy - Flask in details
LvivPy - Flask in detailsLvivPy - Flask in details
LvivPy - Flask in details
Max Klymyshyn
 
WP Weekend #2 - Corcel, aneb WordPress přes Laravel
WP Weekend #2 - Corcel, aneb WordPress přes LaravelWP Weekend #2 - Corcel, aneb WordPress přes Laravel
WP Weekend #2 - Corcel, aneb WordPress přes Laravel
Brilo Team
 
Capistrano Overview
Capistrano OverviewCapistrano Overview
Capistrano Overview
Travis Roberts
 
GTLAB Overview
GTLAB OverviewGTLAB Overview
GTLAB Overview
marpierc
 
Ruby C10K: High Performance Networking - RubyKaigi '09
Ruby C10K: High Performance Networking - RubyKaigi '09Ruby C10K: High Performance Networking - RubyKaigi '09
Ruby C10K: High Performance Networking - RubyKaigi '09
Ilya Grigorik
 
Flask – Python
Flask – PythonFlask – Python
Flask – Python
Max Claus Nunes
 
Mcollective introduction
Mcollective introductionMcollective introduction
Mcollective introduction
Javier Turégano Molina
 
Task Scheduling and Asynchronous Processing Evolved. Zend Server Job Queue
Task Scheduling and Asynchronous Processing Evolved. Zend Server Job QueueTask Scheduling and Asynchronous Processing Evolved. Zend Server Job Queue
Task Scheduling and Asynchronous Processing Evolved. Zend Server Job Queue
Sam Hennessy
 
Design patterns as power of programing
Design patterns as power of programingDesign patterns as power of programing
Design patterns as power of programing
Lukas Lesniewski
 
Making Symofny shine with Varnish - SymfonyCon Madrid 2014
Making Symofny shine with Varnish - SymfonyCon Madrid 2014Making Symofny shine with Varnish - SymfonyCon Madrid 2014
Making Symofny shine with Varnish - SymfonyCon Madrid 2014
Barel Barelon
 
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Edureka!
 
Introducing Revel
Introducing RevelIntroducing Revel
Introducing Revel
Zhebr
 
Puppet Camp DC 2014: Managing Puppet with MCollective
Puppet Camp DC 2014: Managing Puppet with MCollectivePuppet Camp DC 2014: Managing Puppet with MCollective
Puppet Camp DC 2014: Managing Puppet with MCollective
Puppet
 
Real Time Event Dispatcher
Real Time Event DispatcherReal Time Event Dispatcher
Real Time Event Dispatcher
Peter Dietrich
 

What's hot (20)

IRC HTTP Stream in YAPC::Asia 2009
IRC HTTP Stream in YAPC::Asia 2009IRC HTTP Stream in YAPC::Asia 2009
IRC HTTP Stream in YAPC::Asia 2009
 
Learn flask in 90mins
Learn flask in 90minsLearn flask in 90mins
Learn flask in 90mins
 
Capistrano
CapistranoCapistrano
Capistrano
 
톰캣 #04-환경설정
톰캣 #04-환경설정톰캣 #04-환경설정
톰캣 #04-환경설정
 
PowerShell: Automation for everyone
PowerShell: Automation for everyonePowerShell: Automation for everyone
PowerShell: Automation for everyone
 
appache_1
appache_1appache_1
appache_1
 
LvivPy - Flask in details
LvivPy - Flask in detailsLvivPy - Flask in details
LvivPy - Flask in details
 
WP Weekend #2 - Corcel, aneb WordPress přes Laravel
WP Weekend #2 - Corcel, aneb WordPress přes LaravelWP Weekend #2 - Corcel, aneb WordPress přes Laravel
WP Weekend #2 - Corcel, aneb WordPress přes Laravel
 
Capistrano Overview
Capistrano OverviewCapistrano Overview
Capistrano Overview
 
GTLAB Overview
GTLAB OverviewGTLAB Overview
GTLAB Overview
 
Ruby C10K: High Performance Networking - RubyKaigi '09
Ruby C10K: High Performance Networking - RubyKaigi '09Ruby C10K: High Performance Networking - RubyKaigi '09
Ruby C10K: High Performance Networking - RubyKaigi '09
 
Flask – Python
Flask – PythonFlask – Python
Flask – Python
 
Mcollective introduction
Mcollective introductionMcollective introduction
Mcollective introduction
 
Task Scheduling and Asynchronous Processing Evolved. Zend Server Job Queue
Task Scheduling and Asynchronous Processing Evolved. Zend Server Job QueueTask Scheduling and Asynchronous Processing Evolved. Zend Server Job Queue
Task Scheduling and Asynchronous Processing Evolved. Zend Server Job Queue
 
Design patterns as power of programing
Design patterns as power of programingDesign patterns as power of programing
Design patterns as power of programing
 
Making Symofny shine with Varnish - SymfonyCon Madrid 2014
Making Symofny shine with Varnish - SymfonyCon Madrid 2014Making Symofny shine with Varnish - SymfonyCon Madrid 2014
Making Symofny shine with Varnish - SymfonyCon Madrid 2014
 
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
 
Introducing Revel
Introducing RevelIntroducing Revel
Introducing Revel
 
Puppet Camp DC 2014: Managing Puppet with MCollective
Puppet Camp DC 2014: Managing Puppet with MCollectivePuppet Camp DC 2014: Managing Puppet with MCollective
Puppet Camp DC 2014: Managing Puppet with MCollective
 
Real Time Event Dispatcher
Real Time Event DispatcherReal Time Event Dispatcher
Real Time Event Dispatcher
 

Viewers also liked

Tanz!
Tanz!Tanz!
Tanz!
LinuXia
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - Func
Gosuke Miyashita
 
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
Gosuke Miyashita
 
YAPC Asia 2010 30days Albumの裏側 後日談
YAPC Asia 2010 30days Albumの裏側 後日談YAPC Asia 2010 30days Albumの裏側 後日談
YAPC Asia 2010 30days Albumの裏側 後日談
Kensuke Nagae
 
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
Inside Sqale's Backend at YAPC::Asia Tokyo 2012Inside Sqale's Backend at YAPC::Asia Tokyo 2012
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
Gosuke Miyashita
 
Puppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPADPuppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPAD
Gosuke Miyashita
 
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Gosuke Miyashita
 
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
Gosuke Miyashita
 

Viewers also liked (8)

Tanz!
Tanz!Tanz!
Tanz!
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - Func
 
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
 
YAPC Asia 2010 30days Albumの裏側 後日談
YAPC Asia 2010 30days Albumの裏側 後日談YAPC Asia 2010 30days Albumの裏側 後日談
YAPC Asia 2010 30days Albumの裏側 後日談
 
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
Inside Sqale's Backend at YAPC::Asia Tokyo 2012Inside Sqale's Backend at YAPC::Asia Tokyo 2012
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
 
Puppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPADPuppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPAD
 
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
 
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
 

Similar to How Danga::Socket handles asynchronous processing and how to write asynchronous Perlbal plugins

Flow based programming in golang
Flow based programming in golangFlow based programming in golang
Flow based programming in golang
Anton Stepanenko
 
Node.js: CAMTA Presentation
Node.js: CAMTA PresentationNode.js: CAMTA Presentation
Node.js: CAMTA Presentation
Rob Tweed
 
Tatsumaki
TatsumakiTatsumaki
Please look at the attach See.doc. I am getting this error all th.docx
Please look at the attach See.doc. I am getting this error all th.docxPlease look at the attach See.doc. I am getting this error all th.docx
Please look at the attach See.doc. I am getting this error all th.docx
randymartin91030
 
JUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleJUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by example
Geoffrey De Smet
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpm
som_nangia
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpm
wilburlo
 
ReactPHP
ReactPHPReactPHP
ReactPHP
Philip Norton
 
Plack - LPW 2009
Plack - LPW 2009Plack - LPW 2009
Plack - LPW 2009
Tatsuhiko Miyagawa
 
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...
Gosuke Miyashita
 
Finagle and Java Service Framework at Pinterest
Finagle and Java Service Framework at PinterestFinagle and Java Service Framework at Pinterest
Finagle and Java Service Framework at Pinterest
Pavan Chitumalla
 
Catalyst MVC
Catalyst MVCCatalyst MVC
Catalyst MVC
Sheeju Alex
 
PSGI and Plack from first principles
PSGI and Plack from first principlesPSGI and Plack from first principles
PSGI and Plack from first principles
Perl Careers
 
Phpconf 2013 - Agile Telephony Applications with PAMI and PAGI
Phpconf 2013 - Agile Telephony Applications with PAMI and PAGIPhpconf 2013 - Agile Telephony Applications with PAMI and PAGI
Phpconf 2013 - Agile Telephony Applications with PAMI and PAGI
Marcelo Gornstein
 
Writing Prefork Workers / Servers
Writing Prefork Workers / ServersWriting Prefork Workers / Servers
Writing Prefork Workers / Servers
Kazuho Oku
 
course slides -- powerpoint
course slides -- powerpointcourse slides -- powerpoint
course slides -- powerpoint
webhostingguy
 
WebTalk - Implementing Web Services with a dedicated Java daemon
WebTalk - Implementing Web Services with a dedicated Java daemonWebTalk - Implementing Web Services with a dedicated Java daemon
WebTalk - Implementing Web Services with a dedicated Java daemon
Geert Van Pamel
 
Multithreading in PHP
Multithreading in PHPMultithreading in PHP
Multithreading in PHP
dimitriyremerov
 
Intro to PSGI and Plack
Intro to PSGI and PlackIntro to PSGI and Plack
Intro to PSGI and Plack
Tatsuhiko Miyagawa
 
Writing Pluggable Software
Writing Pluggable SoftwareWriting Pluggable Software
Writing Pluggable Software
Tatsuhiko Miyagawa
 

Similar to How Danga::Socket handles asynchronous processing and how to write asynchronous Perlbal plugins (20)

Flow based programming in golang
Flow based programming in golangFlow based programming in golang
Flow based programming in golang
 
Node.js: CAMTA Presentation
Node.js: CAMTA PresentationNode.js: CAMTA Presentation
Node.js: CAMTA Presentation
 
Tatsumaki
TatsumakiTatsumaki
Tatsumaki
 
Please look at the attach See.doc. I am getting this error all th.docx
Please look at the attach See.doc. I am getting this error all th.docxPlease look at the attach See.doc. I am getting this error all th.docx
Please look at the attach See.doc. I am getting this error all th.docx
 
JUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleJUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by example
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpm
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpm
 
ReactPHP
ReactPHPReactPHP
ReactPHP
 
Plack - LPW 2009
Plack - LPW 2009Plack - LPW 2009
Plack - LPW 2009
 
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...
 
Finagle and Java Service Framework at Pinterest
Finagle and Java Service Framework at PinterestFinagle and Java Service Framework at Pinterest
Finagle and Java Service Framework at Pinterest
 
Catalyst MVC
Catalyst MVCCatalyst MVC
Catalyst MVC
 
PSGI and Plack from first principles
PSGI and Plack from first principlesPSGI and Plack from first principles
PSGI and Plack from first principles
 
Phpconf 2013 - Agile Telephony Applications with PAMI and PAGI
Phpconf 2013 - Agile Telephony Applications with PAMI and PAGIPhpconf 2013 - Agile Telephony Applications with PAMI and PAGI
Phpconf 2013 - Agile Telephony Applications with PAMI and PAGI
 
Writing Prefork Workers / Servers
Writing Prefork Workers / ServersWriting Prefork Workers / Servers
Writing Prefork Workers / Servers
 
course slides -- powerpoint
course slides -- powerpointcourse slides -- powerpoint
course slides -- powerpoint
 
WebTalk - Implementing Web Services with a dedicated Java daemon
WebTalk - Implementing Web Services with a dedicated Java daemonWebTalk - Implementing Web Services with a dedicated Java daemon
WebTalk - Implementing Web Services with a dedicated Java daemon
 
Multithreading in PHP
Multithreading in PHPMultithreading in PHP
Multithreading in PHP
 
Intro to PSGI and Plack
Intro to PSGI and PlackIntro to PSGI and Plack
Intro to PSGI and Plack
 
Writing Pluggable Software
Writing Pluggable SoftwareWriting Pluggable Software
Writing Pluggable Software
 

More from Gosuke Miyashita

Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1
Gosuke Miyashita
 
Serverspec at Testing Framework Meeting
Serverspec at Testing Framework MeetingServerspec at Testing Framework Meeting
Serverspec at Testing Framework Meeting
Gosuke Miyashita
 
NoSQLに関するまとめ
NoSQLに関するまとめNoSQLに関するまとめ
NoSQLに関するまとめ
Gosuke Miyashita
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
 
Maglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayacMaglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayac
Gosuke Miyashita
 
DevOps とは何か 何であるべきか
DevOps とは何か 何であるべきかDevOps とは何か 何であるべきか
DevOps とは何か 何であるべきか
Gosuke Miyashita
 
Inside Sqale's Backend at RubyConf Taiwan 2012
Inside Sqale's Backend at RubyConf Taiwan 2012Inside Sqale's Backend at RubyConf Taiwan 2012
Inside Sqale's Backend at RubyConf Taiwan 2012
Gosuke Miyashita
 
Ia型超新星とチャンドラセカール限界
Ia型超新星とチャンドラセカール限界Ia型超新星とチャンドラセカール限界
Ia型超新星とチャンドラセカール限界
Gosuke Miyashita
 
How Perl Changed My Life
How Perl Changed My LifeHow Perl Changed My Life
How Perl Changed My Life
Gosuke Miyashita
 
10分でわかるDevOps
10分でわかるDevOps10分でわかるDevOps
10分でわかるDevOps
Gosuke Miyashita
 
Xen Summit 2008 Tokyo - Operating Xen domains through LL(Perl/Python) with li...
Xen Summit 2008 Tokyo - Operating Xen domains through LL(Perl/Python) with li...Xen Summit 2008 Tokyo - Operating Xen domains through LL(Perl/Python) with li...
Xen Summit 2008 Tokyo - Operating Xen domains through LL(Perl/Python) with li...
Gosuke Miyashita
 
関西オープンソース 2008 30days Albumの裏側
関西オープンソース 2008 30days Albumの裏側関西オープンソース 2008 30days Albumの裏側
関西オープンソース 2008 30days Albumの裏側
Gosuke Miyashita
 
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13
Gosuke Miyashita
 

More from Gosuke Miyashita (16)

Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1
 
Serverspec at Testing Framework Meeting
Serverspec at Testing Framework MeetingServerspec at Testing Framework Meeting
Serverspec at Testing Framework Meeting
 
Serverspec at hbstudy #45
Serverspec at hbstudy #45Serverspec at hbstudy #45
Serverspec at hbstudy #45
 
NoSQLに関するまとめ
NoSQLに関するまとめNoSQLに関するまとめ
NoSQLに関するまとめ
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
Maglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayacMaglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayac
 
DevOps とは何か 何であるべきか
DevOps とは何か 何であるべきかDevOps とは何か 何であるべきか
DevOps とは何か 何であるべきか
 
Inside Sqale's Backend at RubyConf Taiwan 2012
Inside Sqale's Backend at RubyConf Taiwan 2012Inside Sqale's Backend at RubyConf Taiwan 2012
Inside Sqale's Backend at RubyConf Taiwan 2012
 
Ia型超新星とチャンドラセカール限界
Ia型超新星とチャンドラセカール限界Ia型超新星とチャンドラセカール限界
Ia型超新星とチャンドラセカール限界
 
How Perl Changed My Life
How Perl Changed My LifeHow Perl Changed My Life
How Perl Changed My Life
 
10分でわかるDevOps
10分でわかるDevOps10分でわかるDevOps
10分でわかるDevOps
 
DevOpsって何?
DevOpsって何?DevOpsって何?
DevOpsって何?
 
Puppetのススメ
PuppetのススメPuppetのススメ
Puppetのススメ
 
Xen Summit 2008 Tokyo - Operating Xen domains through LL(Perl/Python) with li...
Xen Summit 2008 Tokyo - Operating Xen domains through LL(Perl/Python) with li...Xen Summit 2008 Tokyo - Operating Xen domains through LL(Perl/Python) with li...
Xen Summit 2008 Tokyo - Operating Xen domains through LL(Perl/Python) with li...
 
関西オープンソース 2008 30days Albumの裏側
関西オープンソース 2008 30days Albumの裏側関西オープンソース 2008 30days Albumの裏側
関西オープンソース 2008 30days Albumの裏側
 
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13
 

Recently uploaded

Best Programming Language for Civil Engineers
Best Programming Language for Civil EngineersBest Programming Language for Civil Engineers
Best Programming Language for Civil Engineers
Awais Yaseen
 
DealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 editionDealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 edition
Yevgen Sysoyev
 
WPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide DeckWPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide Deck
Lidia A.
 
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdfWhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
ArgaBisma
 
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant
Bert Blevins
 
The Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU CampusesThe Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU Campuses
Larry Smarr
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
shanthidl1
 
Coordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar SlidesCoordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar Slides
Safe Software
 
Research Directions for Cross Reality Interfaces
Research Directions for Cross Reality InterfacesResearch Directions for Cross Reality Interfaces
Research Directions for Cross Reality Interfaces
Mark Billinghurst
 
Quantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLMQuantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLM
Vijayananda Mohire
 
find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges
huseindihon
 
How Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdfHow Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdf
HackersList
 
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
Chris Swan
 
Best Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdfBest Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdf
Tatiana Al-Chueyr
 
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc
 
Measuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at TwitterMeasuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at Twitter
ScyllaDB
 
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
Toru Tamaki
 
Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation
welrejdoall
 
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly DetectionAdvanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Bert Blevins
 
Calgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptxCalgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptx
ishalveerrandhawa1
 

Recently uploaded (20)

Best Programming Language for Civil Engineers
Best Programming Language for Civil EngineersBest Programming Language for Civil Engineers
Best Programming Language for Civil Engineers
 
DealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 editionDealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 edition
 
WPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide DeckWPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide Deck
 
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdfWhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
 
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant
 
The Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU CampusesThe Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU Campuses
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
 
Coordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar SlidesCoordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar Slides
 
Research Directions for Cross Reality Interfaces
Research Directions for Cross Reality InterfacesResearch Directions for Cross Reality Interfaces
Research Directions for Cross Reality Interfaces
 
Quantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLMQuantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLM
 
find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges
 
How Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdfHow Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdf
 
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
 
Best Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdfBest Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdf
 
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
 
Measuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at TwitterMeasuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at Twitter
 
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
 
Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation
 
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly DetectionAdvanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
 
Calgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptxCalgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptx
 

How Danga::Socket handles asynchronous processing and how to write asynchronous Perlbal plugins

  • 1. YAPC::Asia 2009 Tokyo 2009/9/10 Gosuke Miyashita
  • 2. Speaker Gosuke Miyashita ( mizzy ) Technical manager at paperboy&co. Have most kids in Japan Perl world? 3 kids.Even with Yappo. 4 th kid will be born in November.
  • 3.  
  • 4.  
  • 5. Agenda Asynchronous processing with event driven programming Asynchronous processing with Danga::Socket Overview of Perlbal asynchronous processing How to write asynchronous Perlbal plugins Summary
  • 6.  
  • 7. Event driven programming A programming paradigm in which the flow of the program is determined by events Counter paradigm of flow-based programming
  • 8. Events I/O On I/O read ready or write ready Timers On time passed Signal On getting a signal Child process On child process exit
  • 9. Main loop Also called “event loop” On each loop, check that events are occurred or not, and process the events. After process the events, return to the loop and repeat the loop till next events occur This is the flow of asynchronous processing
  • 10. Eaxmple of main loop Process timers Wait I/O events Process I/O events Post main loop process
  • 11.  
  • 12. Events supported by Danga::Socket I/O Timers
  • 13. Process I/O events Danga::Socket supports 3 I/O event notification facility kqueue epoll poll Select adequate facility automatically
  • 14. Add I/O watcher with Danga::Socket use base ‘Danga::Socket’; sub new { # pass file descripter $self->SUPER::new( $fd ); } sub event_read { # process when $fd is read ready } sub event_write { # procdess when $fd is write ready }
  • 15. Add I/O wathcer (pattern 2) Danga::Socket->AddOtherFds( $fd => sub { # process when $fd is read ready }, );
  • 16. Add I/O watcher (pattern 3) Danga::Socket::Callback->new( handle => $fd , on_read_ready => sub { # process on read ready }, on_write_ready => sub { # process on write ready }, );
  • 17. Add timer watcher with Danga::Socket Danga::Socket->AddTimer( 10, sub { # process after 10 seconds }, }
  • 18. Start main loop with Danga::Socket Danga::Socket->EventLoop();
  • 19. Main loop(again) Process Timers Wait I/O events Process I/O events Post main loop process
  • 20.  
  • 21. Perlbal mechanism(as reverse proxy) BackendHTTP ClientProxy TCPListener Client Server ClientProxy Client BackendHTTP Danga::Socket based objects
  • 22. Perlbal with a plugin (on start_proxy_request hook) BackendHTTP ClientProxy TCPListener Client Server Plugin::Hoge Target of this session
  • 23.  
  • 24. Hooks Perlbal has many plugin hooks Explain with start_proxy_request hook in this session
  • 25. In case of a synchronous plugin ClientProxy TCPListener Client Server Plugin::Sync Client
  • 26. In case of an asynchronous plugin ClientProxy TCPListener Client Server Plugin::Async Client ClientProxy
  • 27. How to write asynchronous plugins? Write the main process based on Danga::Socket process within the main loop of Danga::Socket Create Danga::Socket based class Or use Danga::Socket::Callback Or use Danga::Socket::AddTimer Also other libraries need to be non-blocking You can use Gearman::Client::Async with blocking processes
  • 28. How to write asynchronous plugins? When finish asynchronous process, go to next phase Call back function Also need to fix Perlbal itself
  • 29. Main process of a plugin package My::Drizzle ; use base ‘Danga::Socket’ ; use Net::Drizzle ':constants' ; sub new { $self->SUPER::new($fh); $self->watch_read(1); } sub event_read { # Check db request status and call back when finished }
  • 30. Attention You can also use Danga::Socket::Callback You cannot use AddOtherFds() File descriptors added by Add AddOtherFds() are only evaluated at the beginning of the main loop So if already in the main loop, AddOtherFds() are meaningless. You can call epoll_ctl, EV_SET and so on directly, but no portability
  • 31. plugin register package Perlbal::Plugin::AsyncDb ; sub register { my ( $class, $svc ) = @_; $svc->register_hook( 'Async' => 'start_proxy_request', &request_db , ); return 1; }
  • 32. Call asynchronous process sub request_db { my Perlbal::ClientProxy $client = shift ; My::Drizzle->new( callback => sub { # call back }, ); return 1; # very important! }
  • 33. In case of “return 0” BackendHTTP ClientProxy TCPListener Client Server Plugin::Async Go to next step even if Plugin::Async is not finished
  • 34. “ return 1” & “call back” BackendHTTP ClientProxy TCPListener Client Plugin::Async Stop the process and go to main loop Server return 1 call back
  • 35. Call back function If plugin process finished, ClientProxy must go to the next process(call BackendHTTP) Stopped at the following code of handle_request() : return if $svc->run_hook( 'start_proxy_request', $self ); ClientProxy must start processing from the next of this code
  • 36. Call back function my Perlbal::ClientProxy $client = shift ; My::Drizzle->new( callback => sub { $client->{async_complete} = 1; $client->handle_request; }, );
  • 37. Patch of ClientProxy::handle_request - return if $svc->run_hook( - 'start_proxy_request', $self - ); + unless ( $self->{async_complete} ) { + return if $svc->run_hook( + 'start_proxy_request', $self + ); + } + $self->{async_complete} = 0;
  • 38.  
  • 39. Points of asynchronous Perlbal plugins Process within the Danga::Socket main loop return 1 when plugin called Restart ClientProxy process by a call back function when plugin finished Also need to fix Perlbal itself Be careful with order of plugins Following plugins on a same hook are ignored when after a plugin returns 1
  • 40.