Skip to main content

Full text of "The Architecture Of Open Source Applications 日本語訳"

See other formats


The  Architecture  of 
Open  Source  Applications 


The  Architecture  of 
Open  Source  Applications 

Elegance,  Evolution,  and  a  Few  Fearless  Hacks 


Edited  by  Amy  Brown  &  Greg  Wilson 


□ 
□ 
□ 


□ 
□ 
□ 


□□□□□□□□□□□□□□□□□□□□□ 

:Amy  Brown  and  Greg  Wilson 

:Arai  Kunimitsu  and  TAKAGI  Masahiro 


□  □□□□□□  Creative  Commons  □  □  3.0  □□□□□□□  □  (CC  BY  3.0)  □□□□□□□□□□□□ 
□□□□□□□□□□□□□□□□ 

- □□□□□□□□□□□□□□□□□□□□□□□□□ 
- □□□□□□□□□□□□□□□□□□□ 

□□□□□□□□□□□□□□□□□□□ 

-□□—□□□□□□□□□□□□□□□□□□□□□□□□□□□a 
DDDDDDDDDDDDDDDDD 

□□□□□□ 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □  □ 

- □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
- 

- □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□□□□□□□□□□□□ 
- Notice-D  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□□  http  :  //creativecommons .  org/licenses/by/3 . 0/  Q  □  □  □  □  □ 
□□□□□□□ 

DDDDDDDDDDDDDDDDD  http :  //creativecommons .  org/licenses/by/3 . 0/  □□□□□□ 
D  D  Creative  Commons,  444  Castro  Street,  Suite  900,  Mountain  View,  California,  94041,  USA.  □  □  □  ロロ 

□  □  □  □ 


□  □□□□□□  http://www.aosabook.org/  DDDDDDDDDDDD 

( □□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□  □  □ 


□  □□□□□  Peter  Dutton  □□□□□□□□□□□□□□□  Creative  Commons  □  □  -  □  □  □  -  □  □  2.0 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□CD  http://creativecommons.org/ 
licenses/by  -  nc-sa/2.0/  □□□□□□□□  CreativeCommons,  444  Castro  Street,  Suite  900,  Mountain 
View,  California,  94041,  USA.  □□□□□□□□  口 


Revision  Date:  □  □  26  D  H  D 14  D 


DDDDDDDDDDDDD  Brian  Kernighan  □ 

DDDDDDDDDDDDDDDDD 


D  D 

by  Amy  Brown  &  Greg  Wilson 

□ 1 口  Asterisk 

by  Russell  Bryant 

D  2D  Audacity 

by  James  Crook 

D  3D       The  Bourne-Again  Shell 

by  Chet  Ramey 

□  4 口       Berkeley  DB 

by  Margo  Seltzer  and  Keith  Bostic 

U  5Q  CMake 

by  Bill  Hoffman  and  Kenneth  Martin 

U  6D  DDDDDDDDDDDD 

by  C.  Titus  Brown  and  Rosangela  Canino-Koning 

D  7D  Eclipse 
by  Kim  Moir 

D  8Q  Graphite 

by  Chris  Davis 

□  9  口       The  Hadoop  Distributed  File  System 

by  Robert  Chansler,  Hairong  Kuang,  Sanjay  Radia, 
Konstantin  Shvachko,  and  Suresh  Srinivas 


□ 10  口  Jitsi 


by  Emit  Ivov 

D 11D     LLVM  191 

by  Chris  Lattner 


D 12Q     Mercurial  211 

by  Dirkjan  Ochtman 

□ 13  □     NoSQL  □□□□□□□  229 
by  Adam  Marcus 

D 14Q     Python  Packaging  257 

by  Tarek  Ziade 

D 15Q     RiakQ  Erlang/OTP  285 

by  Francesco  Cesarini,  Andy  Gross,  and  Justin  Sheehy 

D 16Q     Selenium  WebDriver  305 

by  Simon  Stewart 

D 17Q     Sendmail  337 

by  Eric  Allman 

D 18Q     SnowFlock  365 
by  Roy  Bryant  and  Andres  Lagar-Cavilla 

D 19Q     SocialCalc  381 

by  Audrey  Tang 

D  20Q     Telepathy  405 

by  Danielle  Madeley 

D  21D     Thousand  Parsec  431 
by  Alan  Laudicina  and  Aaron  Mavrinac 

D  22Q     Violet  451 

by  Cay  Horstmann 

D  23Q     VisTrails  469 

by  Juliana  Freire,  David  Koop,  Emanuele  Santos, 
Carlos  Scheidegger,  Claudio  Sifva,  and  Huy  T.  Vo 


viii   D  D 


D  24Q  VTK 

by  Berk  Geveci  and  Will  Schroeder 

□  25  口     Battle  for  Wesnoth 

by  Richard  Shimooka  and  David  White 


□  D 

Amy  Brown  &  Greg  Wilson 


D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDmDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

ロロ  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

DDD 

□  □□□□□□□□□□□□□"□□□□□□□□□□□"□□□□DO 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

コ □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDD 

□  □□□□□□□□□□□□□□□□□  30  □□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD 

□  □  □ 

Eric  P.  Allman  (Sendmail):  Eric  Allman  □  sendmail □  syslog  □  □  □  trek  □  □□□□□□□ 
Sendmail,  Inc.  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□  "□□□□□□□,'□□□□□□□□□□□□□□□□□□□□□□□□  "□□『□ 

□  □□□□□□□□□□□  ACM  Queue  Editorial  Review  Board  □  □  □  Cal Performances  Board 
of  Trustees  Q  DDDDDDDDDDDDDD  http://www.neophilic.com た e「ic  □  □ 

Keith  Bostic  (Berkeley  DB):  Keith  □□□□□□□□□□□□□□□□□  Computer  Systems 
Research  Group  Q  DDDDDDDDDDD  2.10BSDQ  DDDDDDDDDDD  4.4BSD  D  D 
DDDDDDDDDDDDDDDDDDDDDD  USENIX  Lifetime  Achievement  Award  ("The 

Flame")  D  DDDDDDDD  UnixQ  DDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDD  Distinguished  Achievement  Award  D  □□□□□□□ 

D  D  D  4BSD  D  D  DDDDDDDDDDDDDDDDDDDDDDD  Keith  D  Berkeley  DBQ 
DDDDDDDDDDDDDDDDDD  Berkeley  DB  □□□□□□□□□□□□□□□□□ 
DDDDDDDDDDD 

Amy  Brown  (口  □□□"Amy  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDD10DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD-DDDDDDDDD 
D  D  D  D  D 

C.  Titus  Brown  (Continuous  Integration):  Titus  DDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  Q  Python  Software  Foundation  D  DDDDDDDDDDDDD  http://ivory.idyll.orgD 

D  D  D 

Roy  Bryant  (Snowflock):  □□□□□□□□□□□□□□□  CTo  D  D  D  20Q  D  D  D  D  D  D  Roy 

□  □  Electronics  Workbench (口  □  □  National  Instruments'  Multisim)  □  Linkwalker  Data  Pipeline 
DDDDDDDDDDDDDD  Linkwalker  Data  Pipeline  □  □  Microsoft's  worldwide  Winning 
Customer  Award  for  High-Perfo 腿 nee  Computing  □  2006  DDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD ACM 

□  Eurosys  Conference  in  201 1 □  Snowflock  □  □  Kaleidoscope  □  DDDDDDDDDDDDD 
D  D  D  http://www.roybryant.net/ D  D  D  D 

Russell  Bryant  (Asterisk):  Russell □  Digium,  Inc.  DDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD  2004  D  D  D  D  D  Asterisk  D  □□□□□□ 


xii    □  □ 


DDDDDDDDDDDDDDDDDDDDD  Asterisk  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □  http://www.russellbryant.netD  □  □  □ 

Rosangela  Canino-Koning  (Continuous  Integration):  □□□□□□□□□□□□□□ 13  Q  D 

D  D  D  Rosangela  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □  http://www.voidptr.net  D  D  D  D 

Francesco  Cesarini  (Riak):  Francesco  Cesarini  □  Erlang  □□□□□□□□□□  1995  □  □  □ 
DDDDDDDDD  Ericsson  □□□□□□□□□□□□□□□□□  OTP  Rl □□□□□□□ 
DDDDDDDDD  Erlang  Solutions  □□□□□□□□  O'Reilly  □  Erlang  Programming  □  □ 
DDDDDDDDDD  Erlang  Solutions  □□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 

Robert  Chansler(HDFS):  Robert  □  YahoolQ  DDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
(Tartan Labs)DD  DDD  D  D  D  D  D  D  D  (Adobe Systems)!] □  D  D  D  D  (Adobe Systems, Impresse)D 
SAN  Q  D  (SanNavigator,  McDATA)  DDDDDDDDDDDDDDDD  HDFS  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  2Q  D  3DDDDDDDDD 

James  Crook  (Audacity):  James  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  Audacity  D  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD 

Chris  Davis  (Graphite):  Chris  □□□□□□□□□□□□□□□□□ 口  Google  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDD 12  DDDDDDDDDD  Chris  □ 
Graphite  D  □□□□□□□  2006  D  D  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Juliana  Freire  (VisTrails):  Juliana  DDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□  (□□□□□□□□□□□□□)□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDD /DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  NSF  CAREER  Q  □  □  IBM  Faculty  Award  D  DDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 丽0  MicrosoftQ  Yahoo! 

DDDDDDDDDD 

Berk  Geveci  (VTK):  Berk  □  □  Kitware  DDDDDDDDDDDDDDDDDDD  Para  View 

DDDDDDDDDDDD  ParaView  D  D  VTK  DDDDDDDDDDDDDDDDDDDD 


Amy  Brown  &  Greg  Wilson  xiii 


nnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D 

D 

D 

n 
U 

门门 门门 门门 门门 门门门 

DDDDDDDDDDD 

Andy  Lrross  (Riak):  Andy  Uross  口  Basho  technologies  口  口 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

Basho 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

口口  口  Andy  D  Basho  □□□□□□□□  2007  口 12  □  □ 10  口 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  Basho  □  □  □  Andy  □  DDDDD 

DDDDDDDDDDDDDDDDDDD  Mochi  Media  □  Apple,  Inc.Q  Akamai  Technologies 

DDDDDDDDD 

Bill  Hoffman  (CMake):  BillQ  Kit  ware,  Inc.  □  CTOQ  DDDDDDDDDDDDDD  CMake 

DDDDDDDDDDDDDDDDDDDDD  C++D  □□□□  20  DDDDDDDDDDD 
D  D  D  D 

CayHorstmann  (Violet):  Cay  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Violet D  GridWorld 
DDDDDDDDD 

Emil  Ivov  (Jitsi):  Emil □  Jitsi  □□□□□□  (D  D  D  D  SIP  Communicator 

DDDDDDDDDDDDDDDDDDDDDDD  ice4j.org  D  JAIN  SIPD  DDDDDDDD 
DDDDDDDDDDDD  Emil □  2008  DDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□  Jitsi  DDDDDDDDDDDDDDD 

David  Koop  (VisTrails):  David  □□□□□□□□□□□□□□□□□□□□□□  (2011 □  □ 

DDDDD  )DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  VisTrails  □  □ 
DDDDDDDDDDDDD  VisTrails,  Inc.  DDDDDDDDDDDDDDDDDDD 

Hairong  Kuang  (HDFS)  DDDDDDDDDDDDDDDDDDDDDDD  Hadoop  D  D 

DDDDDDDDDDDDDDDDDDD  YahoolQ  □□□□□□□  FacebookQ  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDD DDDDDDDDDDDDD 

H.  Andres  Lagar-Cavilla  (S 謂 flock):  Andres  DDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  http://lagarcavilla.orgD 
□□□□□□□ 

Chris  Lattner(LLVM):  Chris  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD DDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  LLVMQ DDDDDDDDDDDDDDDDDDDDDDDDD 
Chris  D  DDDDDDDDDDDDDDDDDD  http://nondot.org/~sabre/ D  DDDDD 

Alan  Laudicina  (Thousand  Parsec):  Alan  DDDDDDDDDDDDDDDDDDDDDDD 


xiv    □  □ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  http://alanp.ca/ D  D  D  D  D  D 

Danielle  Madeley  (Telepathy):  Danielle  □□□□□□□□□□□□□□□□□□□□□□  Col- 

laboraLtd.  □  Telepathy  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDD  Plush  Penguin  D  DDDDDDDDDDD  http://blogs.  gnome. 
org/danni/Q  D  D  D 

Adam  Marcus  (NoSQL):  Adam  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  MITQ  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  Twitter  D  DDDDDDDDDDDDDD 
Mechanical  Turk  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  http://blog.marcua.net 
D  D  D  D 

Kenneth  Martin  (CMake):  Ken  □  □  □  Kitware,  Inc.  □  □  □  □  CFO  □  □  □  □  □  Kitware,  Inc.  □ 

DDDDDDDDDDDDDDDDDDDD  Kitware D 1998  DDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 議問問 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Aaron  Mavrinac  (Thousand  Parsec):  Aaron  D  DDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  Thousand  Parsec  DDDDDDDDDDDDDDDDDDDDD 
D  D  D  Python  DCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □  □  □  □  http://www.mavrinac.comD  □  □  □ 

Kim  Moir  (Eclipse):  KimQ  □□□□□□  IBM  Rational  Software  D  □  □  □  □  Eclipse  □  Equinox 
DDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  Architecture  Council □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Equinox  D  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □DDDDDDDDDDDDDDDDDDDD  http :  //relengof  thenerds .  blogspot .  com/ 

D  D  D  D 

Dirkjan  Ochtman  (Mercurial):  Dirkjan  □  2010  DDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDD3DDDDDDDDDDDDDDDD 

Mercurial □  Python  口  Gentoo  Linux  D  D  D  Python  □  CouchDB  DDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  http://dirkjan.ochtman.nl/ 
D  D  D  D 

Sanjay  Radia  (HDFS):  Sanjay  □  Yahoo!  口  Hadoop  □□□□□□□□□□□□□□□□□□ 
Hadoop  □□□□□□□□□□  Apache  Software  Foundation  □  Project  Management  Committee 
DDDDDDDDDDDDDD  Cassatt  □  Sun  Microsystems  □  □  □  INRIA  □□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Sanjay 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Amy  Brown  &  Greg  Wilson  xv 


Chet  Ramey  (Bash):  Chet  □  20  □  □  □  bash  □□□□□□□□□□□ 17  □□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDD  http :  //tiswww.  cwru .  edu/~chet  D  D  D  D 
Emanuele  Santos  (VisTrails):  Emanuele  DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDD  2010  D  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  VisTrails DDDDDDDDDDDDDDDD 

Carlos  Scheidegger  (VisTrails):  Carlos  □□□□□□□□□□□□□□□□□□□□□□□□ 
D  D  AT&TLabsQ  □  DDDDDDDDDDDDDDDD  2007  D  D  IEEE  Visualization  D  2008 
D  D  Shape  Modeling  International  □□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Will  Schroeder  (VTK):  Will □  Kitware,  Inc.  □□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDD VTKQ  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Margo  Seltzer  (Berkeley  DB):  Margo  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  Oracle  Corporation  Q  DDDDDDDDDDDDDDDDDDD  Berkeley 
DB  DDDDDDDDDDDD  Sleepycat  Software  □□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDD  http :  //www.  eecs .  harvard .  edu/~margo  D  D  D  D  D 

□  □  □  □  http: //mis - misinformation . blogspot . com/ 口  □  □  □ 

Justin  Sheehy  (Riak):  Justin  □  Basho  Technologies  □  CTOQ  D  D  D  Webmachine  □  RiakQ  □ 
DDDDDDDDDD  Basho  □  □  □  □  □  MITRE  Corporation  □□□□□□□  Akamai  □  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD 

Richard  Shimooka  (Battle  for  Wesnoth):  Richard  D  DDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  Defence  Management  Studies  Program  DDDDDDDDDDDDDDDD  Battle  for 

Wesnoth  DDDDDDDDDDDDDDD  Richard  DDDDDDDDDDDDDDD  (□□□ 
DDDDDDDDDDDDDDDDDDDDDD)DDDDDDDDDDDDDDDDDD 
D  D  D  D  D 

Konstantin  V.  Shvachko  (HDFS)  □□□□□□  HDFS  □  □  □  □  □  eBay  □  Hadoop  □  □  □  □  □ 

DDDDDDDDDD  Konstantin  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  S-tree □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  S-tree  D  D  D 

D  Linux  DDDDDDDDDDD  treeFS  DDDDDDDDDDD  treeFS  D  D  D  D  reiserFS  □ 

□  □□□□□□  Konstantin  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDD  Apache  Hadoop  □  Project  Management  Committee  DDDDDDDDDD 
Claudia  Silva  (VisTrails):  Claudio  DDDDDDDDDDDDDDDDDDDDDDDDDD 


xvi    □  □ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  1996  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  2011  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Suresh  Srinivas  (HDFS):  Suresh  □  □  Yahoo!  口  □□□□□□□□□□□□□□□  HDFS  □  □ 
DDDDDDDDD  Hadoop  DDDDDDDDDD  Apache  Software  Foundation  □  PMC  □  □ 

□  □□□□□□  口  Yahoo!  口  ロロ  口  Sylantro  Systems  □□□□□□□□□□□□□□□□  口口 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Suresh  □□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Simon  Stewart  (Selenium):  Simon  DDDDDDDDD  Google  □□□□□□□□□□□□□ 
DDDDDDDDDDDDD  Selenium  D  DDDDDDDDDDDDDDDD  WebDriverQ  D 

DDDDDDDDDDDDDDDDDDDDDDDD  Simon  DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  Q  http://www.pubbitch.org/ Q  □  □  □ 

Audrey  Tang  (SocialCalc):  Audrey  DDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  Socialtext  D  DDDDDDDDDDD  "Untitled  Page"  D  D  D  D  D  Apple  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Pugs DDDDDDDD 
DDDDDDDDDDDDDDDPerl6DDDDDDDDDDDDDD  CPAN  □  Hackage  □ 
DDDDDDDDDDDDDDDDDDD  httP://Pugs. blogs.com/audreyt/  D  D  D  D 

Huy  T.  Vo  (VisTmils):  HuyDD20llD5DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  VisTrails,  Inc. 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD 

David  White  (Battle  for  Wesnoth):  David  □  □  Battle  for  Wesnoth  D  DDDDDDDDDDDD 

D  D  D  D  David  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  Frogatto  DDDDDDDDDD  Sabre  Holdings  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDD 

Greg  Wilson  力 Greg  25  □□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (2008  □  □ 
Jolt  Award  D  D  D  D  D  Beautiful  Code  DD)DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  Greg  □ 1993  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 

TarekZiade  (Python  Packaging):  Tarek  DDDDDDDDDDDDDDDD  Mozilla  □  □  □  □ 

DDDDDDDDDDDDDDDDDDD  Python  D  DDDDDDDDDDDDDD  Python  D 
DDDDDDDDDDDDDD 


Amy  Brown  &  Greg  Wilson  xvii 


□  □ 


DDDDDDDDDDDDDDDD 


Eric  Aderhold 
Robert  Beghian 
David  Cooper 
Patrick  Dubroy 
Marcus  Hanwell 
Greg  Lapouchnian 
Jason  Montojo 
Victor  Ng 
Andrey  Petrov 
Todd  Ritchie 
David  Scannell 
Kyle  Spaans 
Miles  Thibault 


Muhammad  Ali 

Taavi  Burns 

Mauricio  de  Simone 

Igor  Foox 

Johan  Harjono 

Laurie  MacDougall  Sookraj 

Colin  Morris 

Nikita  Pchelin 

Tom  Plaskon 

Samar  Sabie 

Clara  Severino 

Sana  Tapal 

David  Wright 


Lillian  Angel 
Luis  Pedro  Coelho 
Jonathan  Deber 
Alecia  Fowler 
Vivek  Lakshmanan 
Josh  McCarthy 
Christian  Muise 
Andrew  Petersen 
Pascal  Rapicault 
Misa  Sakamoto 
Tim  Smith 
Tony  Targonski 
Tina  Yee 


DDDDDDDDDDDDDDDDDD  Jackie  Carter  □□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  aosa@aosabook.org  D  D  D  D  D 
D  D  D  D  D 


xviii   D  D 


□ 1 D 


Asterisk 

Russell  Bryant 

Asterisk1 □  GPLv2  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD 

DDDDDDDDD  1999  □  □  Mark  Spencer  DDDDDDDDDD  Mark  □□□□□□□ 
Linux  Support  Services  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDD  Asterisk  D  DDDDDDDD  Asterisk  D  DDDDDDDDDDD 
D  Digium,  Inc  □  □  □  □  □ 

Asterisk  DDDDDDDD  UNIX  DDDDDDDDDDDDD  *DDDD  Asterisk  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Asterisk  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  PSTN(Public Switched 

Telephone  Network)  DDDDDDDDD  VoIP(Voice  over  IP)  □□□□□□□□□□□□□  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  Asterisk  DDDDDDDDD 

Asterisk  □□□□□□□□□□□□□□□□  Asterisk  □□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 

1.1 □□□□□□□□□□□□□□□□ 

DDDDDDDDDD  Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  Asterisk  D  DDDDDDDDDDDDDDD 


ihttp: //www. asterisk.org/ 


D  D  D  D 


Asterisk  D  DDDDDDDDD  Asterisk  D  DDDDDDDDDDDDDDDD  (D l.l)D  D 
DDDDDDDDDDD  Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  Asterisk  DDDDDDDDDDDD  ast.channel D  D  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 


Asterisk 


Channel 
1 


( Phone  A  J<h 


-a 


D l.l:  □□□□□,□□□□□  □ 


DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□  ADDDDDDDDDDD  BDDDDDDDDDD  2Q  D  D  D  D  D  D  Asterisk  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDD  (D l-2)D 


Asterisk 


-o 


Channel 
1 


Channel 
2 


<3- 


D 1-2:  DDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D  Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  Asterisk  DDDDDDDDDDDDDDDD 


2  Asterisk 


□  □□ 1.2  □□□□□□□□□□□□□□□□□□  ADBDDDDDDDDDDDDDDD 

□  □□□□  AQ  D  D  D  D  BDDDDDDDDDDDDDDDDDD  BQ  D  D  D  D  AQ  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Asterisk  D 
DDDDDDDD  Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  Asterisk  D  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  Asterisk  D  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD1.2DDDDDDD 
DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Asterisk 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Asterisk  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  VoIP  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDCDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□ 1.2  □□□□□□□□□□□ 1.3 

DDDDDDDDDDDDDDDDDDDD 


D  D  D  D 


D  D  D 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

Asterisk  □  □  □  □  □ 

DDDDDDDDD 

D 

D 

D  D 

D 

D  D 

□  D  ast. 

—frame  □ 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD 

DDDDDDDDD 

D 

D 

D  D 

D 

D  D 

D  D  D  D 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD 

DDDDDDDDD 

D 

D 

D  D 

D 

D  D 

D  D  D  D 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD 

DDDDDDDDD 

D 

D 

D  D 

D 

D  D 

D  D  D  D 

D  D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Russell  Bryant  3 


Asterisk 


Call  Slgnalin. 


< —— 1> 


Channel 
2 


sCa//  Signaling 


Phone  A 


Call  Media 


"t>(  Phone  B  ) 


D 1.3:  □□□□□□□□□□□  □ 


D  D  D  D  D  include/asterisk/frame,  h  DDDDDDDDDDDDDDDD 

•  voice:  DDDDDDDDDDDDDDDD 

•  video:  DDDDDDDDDDDDDD 

•  MODEM:  IPD  D  FAX  □□□□□□□□  T.38  □□□□□□□□□□□□□□□□□□□ 
□  □□□□□□□□□□□□□□□□□  FAX  □□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  AUDIO  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD 
- control:  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

•  dtmf—begin:  DDDDDDDDDDDDDDDDDDD  DTMF       2D  D  D  D  D  D  D 
D  D  D  D  D 

•  dtmf_end:  DDDDDDDDDDDDDDDDDDD  DTMF  DDDDDDDDDDD 
□□□□□□□ 


1.2    Asterisk  D  □□□□□□□□ 

Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  main/Q 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


2DTMF  □  Dual-Tone  Multi-Frequency  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□□□□□□DDDDD 


4  Asterisk 


n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnn  a  ct^icV  nnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUU  Asterisk UUUUUUUUUUUUUUUUUUUUUU 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 

u  u 

n 

u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnn 

uuuuuuuuuuu 

D 

D 

D 

D 

D 

I ~~ 1 I ~~ 1 I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I          A       ,           - 1 I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ 1 I ~~ 1 

DDDDDDDDDD  Asterisk  □□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

DDDDDDDDD  Asterisk  D  DDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□□□□ 

Asterisk  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  Asterisk  □  □ 

DDAPIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  Asterisk  □□□□□□□□□□□□□□□□□□□□□□□  Asterisk  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Asterisk  DDDDDDDDDDDDDDDDDDDDD  ast_channel_tech  D  D  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  ast.channel 

DDDDDDDDDDDDDDDDDDD  ast_channel_tech  D  D  D  requester  D  D  D  D  D 

D  D  D  Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDD  ast_channel_tech  DDDDDDDDDDDDD  ast.channel 

DDDDDDDDDDDDDDDDDDDD 

ast.channel  DDDDDDDDDDDD  ast_channel_tech  DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

ast.channelQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Dast_channel_tech 

DDDDDDDDDDDDDDD  D 1.2D  D  2D  D  Asterisk  □□□□□□□□□□□  □ 1.4 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 
ast_channel_tech  DDDDDDDDDDDDDDDDDDD 

•  requester:  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  ast.channel  DDDDDDDDDDDDDDDDDDDDDDDD 

•  call:  DDDDDDDDDD  ast.channel  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD 


Russell  Bryant  5 


Abstract  Channel  Lsyer 

Asterisk 

ast 一 channel 

<  > 

ast 一 channel 

Channel  Technology  Layer 

ast 一 channel— tech 

ast— channel— tech 

( Phone  A  j 

( Phone  B  J 

D 1-4:  DDDDDDDDDDDDDDDDDDDDD 

•  answer:  Asterisk  □  □  ast.channel  DDDDDDDDDDDDDDDDDDDDD 

- hangup:  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

- indicate:  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD 

•  send—digit—begin:  DDDDDDDDDDDDD  (DTMF)  DDDDDDDDDDDD 
□□□□□□□ 

•  send—digit—end:  DDDDDDDDDDDDD  (DTMF) DDDDDDDDDDDDD 
□□□□□□ 

•  「ead:  DDDDDDDDDDDDDD  ast.frame  DDDDDDDDD  Asterisk  □  □  □ 

DDDDDDDD  ast.frame  □□□□□□  (DDDDDDDDDDD)DDDDDDD 
DDDDDDDDD  Asterisk  DDDDDDDDDDDDD 

•  write:  DDDDDDDDDDD  ast.frame  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD 

- bridge:  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 

DDDDDDDD  D  Asterisk  D  DDDDDDDDDDDDDDDD  Dast_channel_tech  hangup 

□  □DDDDDDDD  ast.channel  DDDDDDDDDDDD 


6  Asterisk 


□□□□□□□□□□□□□□□□ 


Asterisk  DDDDDDDDDDD  Asterisk  DDDDDDDDDDDDDDD 

0 

0 

0 

0 

ODD 

□  □□□□□□  /etc/asterisk/extensions  -  conf  D  DDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

0 

0 

0 

0 

ODD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

0 

ODD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

1 J     1 J     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1    1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1    1 1     1 J     L J     1 J 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

ODD 

Asterisk  D  200D[][][][][][][][][][][][][][][][][][][][][][][][][] 

D 

D 

D 

0 

ODD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  Asterisk □  □  □ 

L J     L 1    1 1     1 1    1 1     1 1     1 1    1 1     1 1    1 1     1 1     1 1    1 1     1 1     1 1    1 1     1 1     1 1     1 1    1 1     1 1     1 1     1 1    1 1     1 1     1 1    1 1                                     1 J     1 J     1 J 

APID 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDD  Playback  D  D  D  D  D 

L 1     L 1     1 1     1 1     1 1     1 1     1 1     1 1    1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1     1 1                   J                      \ 1     1 1     1 1     L J     L J 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDD  Voicemail  □□□□□□□□□□□□□□□ 

D 

D 

D 

0 

ODD 

ODD 

Asterisk  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i j  i j 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

1 J     1 J     L 1     1 1    1 1     1 1     1 1     1 1     1 1     1 1    1 1     1 1     1 1     1 1     1 1    1 1     1 1     1 1     1 1     1 1     1 1    1 1     1 1     1 1     1 1     1 1     1 1     1 1    1 1     1 1     1 1     1 1     1 J     1 J 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

0 

ODD 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

D 

D 

D 

n 

u 

n  n  n 

u  u  u 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDD 

DDDDDDDDDDD 1 234  □□□□□□□  Asterisk  □□□□□□□□ 

D 

D 

D 

D 

D  D  D 

D  D  D  D 1234Q  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  DD 

; Define  the  rules  for  what  happens  when  someone  dials 1 234. 


exten  => 1234,1 ,Answer() 

same  =>  n , Playback(demo-congrats) 
same  =>  n,Hangup() 

exten  DDDDDDDDDDDDDDDDDDDDDDDDDD  exten  DDDDDDDDD 
1234  Q  D  D  D 1234  Q  D  DDDDDDDDDDDDDDDDDDDD  1DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Answer  D  D  D 
DDDDDDDDDDDDDDDDDDD  same  DDDDDDDDD  2DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  1234  Q  D  DDDDDDDDDDD 
DDDDDDDDDDnDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD 

D  D  D  Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD4DDDD  digits 

Russell  Bryant  7 


D  D  D  D  D 

exten  =〉  5678,1 ,Answer() 

same  =〉  n , Read(DIGITS , beep, 4) 
same  =>  n , SayDigits(${DIGITS}) 
same  =>  n,Hangup() 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 

int  (大 execute) (struct  ast_channel  *chan,  const  char  *args) ; 

DDDDDDDDDDDDDDDDDDDDDDDD  include/asterisk/Q  D  D  D  D  D  APIs 
□□□□□□ 


□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Verbose 
DDDDDDDDDDDDDDDDD  Asterisk  D  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 

exten  => 1 234 , 1 , Set(MY_VARIABLE=foo) 

same  =>  n,Ve「bose(MY— VARIABLE  is  ${MY_ VARIABLE}) 


D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  AstersiskQ 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

DD 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

ID  Q  Asterisk  D  □□□□□□□□□□□□□□□□□□□□□□  Set  □□□□□□□□□□□ 

D  D  D  D  IDDDDDDDDDDDDD  Verbose  D  set  DDDDDDDDDDDDD  callerid 
DDDDDDDDDDDD 

exten  => 1234,1 ,Verbose(The  current  CallerlD  is  ${CALLERID(num)}) 
same  =>  n,Set(CALLERID(num)=<256>555-1212) 

DDDDDDDDDDDDDD  ast.channel  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


8  Asterisk 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  CDR(Call  Detail  Records)  □□□□□□  CDR  □□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDD 

exten  =>  555,1 , Verbose(Time  this  call  started:  ${CDR(start)}) 
same  =>  n , Set(CDR(mycustomf ield)=snickerdoodle) 


Russell  Bryant  9 


□□□□□□□ 

VOIPD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD  CPU  DDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  Asterisk  DDDDDDDDDDDDDDDDDDDDDDDD 

ODD 

0 

0 

0 

0 

0 

0 

0 

DDDDDDDDD 

n  n 
u  u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n  n  n  n  n  Asterisk  nnnnnnnnnnnnnnnnnnnnnn 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Asterisk 

D  DD 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□(□□□□□□□□□□)□□□□□□□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□  Asterisk  D  DDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

□□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Asterisk  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  (DDDD  PSTNQ 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  IPD 


D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D  SIP(D  D  D  D  D  D  VOIP  DDDDD)DDDDDDD  Asterisk  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD 

l. D  D  D  Asterisk  DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

□□□□□□ 

2.  Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  Asterisk  D  DDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

Asterisk  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 10  □□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD  Asterisk  DDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDD  ast.translator DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


1 0  Asterisk 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D  D  D  APID  D  D  D  D  D  D  D  D  include/asterisk/translate.  hD  main/translate .  c 

DDDDDDDDDDDDDDDDDDDDD  codecs DDDDDDDDDD 


1.3  □□□□ 

Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDDDD  Asterisk  D  □□□□□□ 

□  □□□□□  POSIX  DDDD  API  DDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  Asterisk  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  Asterisk 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (PBX □  □  □ 
DDDDDDDDDDDDDDDDDDDDPBXDDDDDDDDDDDDDDDDDDD 
D  D  D 


□□□□□□□□□□□□ 

DDDDDDDDDDDDDD  Asterisk  □□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDD  (IP  D  PSTN  □□)□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Asterisk 


D  D 

D 

D 

(ast.channel)  DDDD 

□□□□□□□ 

D 

D 

D 

D 

D 

DDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDD 

□  □  □  □  □ 

DDDD 

D 

D 

D 

D  D 

DDDDDDDDD 

□  Asterisk  □  □ 

D 

D 

D 

D 

D 

DDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDD 

D  D  Asterisk  □ 

D 

D 

D 

D 

D 

DDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

D  Asterisk  DDDD 

□  □□□□□□ 

D 

D 

D 

D 

D 

DDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDD 

□  □□□□□□ 

D 

D 

D 

D 

D 

DDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDD 

□□□□□□□ 

D 

D 

D 

D 

D 

DDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDD 

□  □□□□□□ 

D 

D 

D 

D 

D 

DDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

D  D  Asterisk  CLI  □ 

□  □□□□□□ 

D 

D 

D 

D 

D 

DDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDD 

□□□□□□□ 

D 

D 

D 

D 

D 

ast_channel 口 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDD 

DDDDDDD 

D 

D 

ast.channel  DDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

D  D  D  D  D 

Russell  Bryant 1 1 


1.4  □□□□□□ 


D  D  2  □  □  □  □  Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  Asterisk  D  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


n  n 

n 

n 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

□ 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDD  Asterisk  D  DDDDDDDDDD  (ast.channel) 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

口  (口 1.5)0 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDD  extensions. confQ  DDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDD*1 23  DDDDDDDDDDDDDDDDDDDD  VoicemailMain 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

exten 

=> 

大 123,1 ,Answer() 

same 

>  i 

i,VoicemailMain() 

D  D 

D 

D  D 

D 

D 

D 

D  D 

Answer  DDDDDDDDDDDDDDD  Asterisk  DDDDDDDDD 

D  D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

D 

D  D 

ast_channel_tech  DDDDDDDD  answer  D  D  D  D  D 

D 

D  D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

D 

D  D 

DDDIPD  DDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

D 

D  D 

□□□□□□□ 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDD  VoicemailMain(D  1.6)  D  D  D  D 

D 

DD 

D 

D  D 

D  D 

D 

D  D 

D 

D 

D 

app. 

— voicemail  DDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  Asterisk  □ 

D 

D  D 

D 

D  D 

1 2  Asterisk 


Channel  Driver 


receive_incoming_call() 


accept— incoming— call() 


ast  channel  alloc (レ 


PBX  (Dialplan) 
Core 


as し exists  一  extension() 


channel— driver— specific 一  channel— init() 
丄 


r 


ast_pbx_start() 


D 1.5:  □□□□□□□□  □ 


D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD  Asterisk  □  □  □  □ 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D  D  D  D  D  DTMFQ  DDDDDDDDDDDD  Asterisk  D  D  D  D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

Asterisk  □ 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

DDDDDDDDDDDD  Asterisk  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Russell  Bryant 13 


□  □□□□□□  Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD 


Abstract  Channel  Layer 

Asterisk 

ast_channel 

Codec  VoicemailMainf) 

<H>       了        ■  .            O  " 

Translators 

Channel  Technology  Layer 

ast 一 channel— tech 

( Phone  A  J 

u 

1 

1.6:  VoicemailMain  □□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D  D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

Asterisk  □ 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D  D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D  D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D  D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  ast— 

—channel □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD2DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  1234  Q  D  DDDDDDDDDDDDDDDD  Dial  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

exten  => 1234,1 ,Dial(SIP/bob) 

Dial  DDDDDDDDDDDDDDDDDDDD  sip/bob  DDDDDDDDDDDDD  sip 
DDDDDDDDDDDDDDDDDD  SIPD  DDDDDDDDDDbobDDDDD  SIPD  D 
DDDDDDDDDDDDDDDDD  chan.sip DDDDDDDDDDDDDDDDDDDD 
DD  bob  DDDDDDDDDDDDDDDDDDDDDDDD  Bob  DDDDDDDDDDD 
DDDDDDDDDD 


1 4  Asterisk 


Dial  DDDDDDDDDD  SIP/bob  □□□□□□□  Asterisk  DDDDDDDDD  Asterisk 

DDDDDDDDDDDDDDD  SIPD  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  Asterisk  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 
Dial  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  Asterisk  □□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDD  (D l-7)D 


Abstract  Channel  Layer 

Asterisk 

ast 一 channel 

o 

Codec  ^ 
Translators 

ast_channel 

Channel  Technology  Lsyer 

ast 一 channel_tech 

ast_channel_tech 

( Phone  A  J 

( Phone  B 

D 1-7:  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD 1-8  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD 


1.5    Final  Comments 

Asterisk  D  DDDDDDDDDDDDDDD 10  D  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  Asterisk  D  DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  AseteriskQ  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Asterisk  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD  Asterisk SCF(Scalable Communications 
Framework)  □□□□□□□□□□□□□□□□□□□□□□□□□□□  Asterisk  □  Asterisk 

SCFQ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□ 


15 


Channel  Driver 


Channel  Core 


Codec 
Translator 


1. read() 
<  > 


Channel  Driver  2 


2.  framein() 


3.  frameoutO 
<  ► 


. write() 


D 1.8:  DDDDDDDDDDDDDDDDDDDDDDDDD 


1 6  Asterisk 


D  2n 


Audacity 

James  Crook 


Audacity  D  □□□□□□□□□□□□□□□□ /□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Windows □□□□□□□□□ 
Audacity  DDDDDDDDDDDDDDD  Linux  D  Mac  D  D  D  D  D  D 

Dominic  Mazzoni  □  □  □  □  Audacity  □□□□□□  1999  DDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD  Audacity  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDD  Audacity  □□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Audacity  Q  □□□□□□□□□□□□□□□□□□□□□"□□□□,'□□□□□□□□□ 


D  D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

DDDDDDDDDDDDDDDDDDD  Audacity  □  □  □ 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

DDDDDDDDDDDDDDDD 

Audacity  口 

D 

D 

D 

□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D  D  "□□□□□□□□□□『□□□□□□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 

□□□□□□□□□□□□□□□□□□□□□□□□□[ 

D  D  D 

D 

D 

D 

D 

D 

D 

□  Audacity  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

2.1 Audacity  D  D  D 


Audacity  DDDDDDDDDDDDDDDDDDDDDDDDDD  Audacity  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDAPIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

PortAudio  Q  wx  Widgets  □  □  PortAudio  □□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDD  wxWidgets  D  GUID  DDDDDDDDDDDDDDDDDDDD 
□□□□□□□ 

Audacity  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D-DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□  Audacity  □  LADSPA  (Linux  Audio  Developer's  Simple  Plugin 

API)  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  Audacity  □  VAMP  API  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDD  APIQ  D  D  D  D  Audacity  D  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD 

Audacity  □□□□□□□□□□□□□□□□□□□  libFLAC  □ libogg  □  □  □ libvorbis  □ 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  MP3 

DDDDDDDDDDDD  LAMED  D  D  D  FFmpeg  D  DDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD  Audacity D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD  Audacity  □□□□□□□□□□□ 

D  D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□  VSTQ  DDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD  fftw □ 

D  D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D  Audacity  D  DDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD  Audacity  □ 

D  D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D  Audacity  □  □  FFTW  □□□□□□  FFTW  D  D  D  D  D 

D  D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

DDD 

DDDDDDDDDDDDDDDDDDDD  FFTWQ  DDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D  D 

D 

DDDDDDDD  LADSPA  D  DDDDDDDDDDDDDDD 

DD 

D 

D  D 

D  D 

D 

D 

D 

D  D 

D 

D  fftw  DDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

DD 

D 

D  D  Firefox  □  Thunderbird  DDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDD  Audacity  □  □  □  □ 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDD  Audacity  □  □  TCP/IP 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D  D 

D 

DDD  TCP/IP  DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

1 8  Audacity 


n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

Audacity 

D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD  Audacity □ 

D 

D 

D  D  D  D 

DDD 

D 

D 

D 

DDDDDDDD  Audacity  D  DDDDDDDDDDDDDDDD 

D 

D 

DDDD 

D  D  D 

D 

D 

D 

DDDDDDDDDDDDD'DDDDDDDDDDDDDDD 

D 

D 

D  D  D  D 

DDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

Audacity 

Built-in 
effects 

AudioIO 

Blockf iles 

ShuttleGUI 

Commands  レ 

Script 
し snguages 


PortAudio 


wxWidgets 


Platform-specific  Implementation  Layers 


OS 


Other 
Support- 
ing 
Libraries 


□  2.1:  Audacity  D  D  D 

□  2.1 □  □  Audacity  D  DDDDDDDDDDDDDDDDDDDDDDDD  3D  D  D  D  D  D 
DDD  wxWidgets DDDDDDDDDDDDDDDDDDDDDD  Audacity □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  BlockFile 
D  D  D  D  D  wxWidgets  D  wxFiles  DDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  BlockFiles  D  ShuttleGUI  □□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD  "Platform  Specific  Implementation  Layers"  D  DDDDDDDDDD  D  wxWid- 
gets Q  PortAudio  D  DDDDDOSDDDDDDDDDDDDDDDDDDDDDDDDDDD 

'□□DDDD  Lisp  □□□□□□  Nyquist  □  □  □  □  □  Audacity  □□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDD  Audacity  □□□□□□□□□□□□□□□□□□□□□□□□□ 
□□□□□□□□□□ 


James  Crook 19 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

"Other  Supporting  Libraries"  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  wxWidgets DDDDDDDDDDD 

Windows  DDDDDDDDDDDD  Audacity  □□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDD  wxWidgets  D  Audacity  □□□□□□□□□□□□□□□□□□□□ 

DDDDDDDD  2008  DDDDDDDDDDDDDDDDD  wxWidgets  □  □  □  □  DLL  □  □ 
DDDDDDDDDDDDDDDDDDDDDLLDDDDDDDDDDDDDDDDDD 
DLL  D  D  D  wxWidgets  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  wxWidgets  DDDDDDDDDD 
wxWidgets  D  DLLQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  DLL  □□□□□□□□□ 

D  D  D  D  D  D  DLLQ  DDDDDDDDDDDDDDDDDDDDD  Audacity  D  □□□□□□ 

DDDDDDDDDDDDDDLLDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDD  Apache  DDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD  Apache □□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDD  wxWidgets  DDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Audacity  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  Audacity  □□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDD  Audacity  D  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  Audacity  D  DDDDDDDDDDDDDDDDDDD 


20  Audacity 


DDDDDDDDD:  GetLinkQ  D  D 


Audacity  □ 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

D  D 

DDDDDDDDDDDDDDDD  GetLinkQ  DDDDDDDDD 

D  D  D  D  D 

2D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  D 

D  D 

NULL  D  D  D  D  GetLink  DDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  D 

D  D 

□  □□□□□  (GetLink()  !=  NULL)  DDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  D 

D  D 

D  D  D  D  GetLink  D  DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  D 

D  D 

D  D  D  D  D  DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  D 

nD 

DDDDDDDDDDDDDDDDDDD  nQ l D  2Q 

D 

D 

D 

D 

D  D  D  D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

loo  n  n  n 

丄リリ i _ ii _ ii _ i 

n  n 

GetLink  DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  D 

D  D 

D  D  26  □□□□□□ 

GetLinkQ 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  D 

D  D 

D  D  "□『□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D  D  D  D  D 

D  D 

GetLink  DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  D 


D 

D 

D 

D 

D 

D 

D 

D 

D  GetLink  D  D  D  private  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDAPIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAPI 

DDDDDDDDDDDDDDDDDDDDDDDD 


2.2    wxWidgets  GUID  □  □  □  □ 

Audacity  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDD  wxWidgets  GUI  □□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


James  Crook  21 


wxWidgets DDDDDDDDDDDDDDDD  wxstring DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDD  Audacity  □□□□□□□  Audacity 

DDDDDDDDDDDDDDDDDDDDDDDDD  wxWidgets □□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDD  wxWidgets  □  □  OS  □  □  □  □  □  GUI 
DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  wxWidgets  □□□□□□□□□□□□□□□□□ 

□  □□□□□  (sizer)  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD  Audacity  □□□□□□□□□□□□  wxWidgets 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 


D 

D 

D 

D 

□  Audacity  □ 

GUID  DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDD  Audacity  □□□□□□□□□□  (□□□□□□ 

D  D 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

DDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD  (DDDDDDDDDDDD  )DD 

D  D 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  GUI  DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  GUID  □□□□□□ 

D  D 

D  D 

D 

D 

D 

GUID 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDD//D  DDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD 

22  Audacity 


2.3    ShuttleGui  □  □  □  □ 


DDDDDDDDDDDDDDDDDDDDDDDDD  ShuttleGui □□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  ShuttleGui  □ 

DDDDDDDDD  wx  Widgets  □□□□□□  Audacity  □□□□□□□□□□□□□□□□□ 
wx  Widgets  □□□□□□  Audacity  □□□□□□□□□□□□□□□□□□□□□□□□□□ 
2.2  Q  D  D  D  GUI  □□□□□□□  □ 


ShuttleGui  S; 
II  GUI  Structure 
S.StartStatic("Some  Title", . . .); 

S . AddButton ( "Some  Button" ,...); 
S.TieCheckbox("Some  Checkbox" , . . . ) ; 

S.EndStatic() ; 


Some  Title 


Some  Button 


0  Some  Checkbox 


D  2.2:  □□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  startstatic D  Endstatic 

DDDDDDDDDDDDDDDDDDDDDDDD  StartSomething/EndSomething  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  StartSomething/EndSomething  D  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  "//GUI 
structure"  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  ShuttleGui 
DDDDDDDDDDDDDD 

□  □□□□□  Audacity  □  □  □  wxWidgets  DDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D  Audacity  □□□□□□□□□□□□□□□□□□□□□□□□□□□  wxWidget 

DDDDDDDDDDDDDDDDDDDDDDDDD ?D DDDDDDDDDDDDDD 
D  D  Audacity  DDDDDDDDDDDDDD  wxWidgets  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 


James  Crook  23 


2.4  TrackPanel 


Prolecl  Rate  (Hz):  Selection  Start 

v]       SnapToD  |00  h  01 m42  s' 


Actual  Rate:  8000 


D  2.3:  Audacity  DDDDDDDDDDD  Track  Panel  DDDDDDDDDD 


□  □□□□□□□□□  2.3  □  Audacity  D  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  Audacity  DDDDDDDDDDDDDDDD  wx  Widgets  □ 

口  □□□□□□□□□□□□  wx  Widget  Q  DDDDDDDD  TrackPanel D  DDDDDDDDD 

DDDDDDDDDDDDDDD  wx  Widget  D  D  D  D  Audacity  D  DDDDDDDDDDDDQ 
DDDDDDDDDDDDDDDDDDDDD  TrackPanel D  DDDDDDDDDDDDD 

口 

nnnnnnn)nGuinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 


Audacity  □□□□□□□□□□□□□□□□□□□  TrackPanel □  □  □  □  □  Audacity  □  □  □ 
口 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  口 
口 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
口 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDD  wxWidgets □□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDD 


1 Sound 

区 

Fte  Edit  View  Transport  Trades  Generate  Effect  Analyze  Help 

= ►  ~  ig  +■ 

R       ^         |     |  R| 

4>)  w      -24    -12    0 产, .24    -12  0 

4         醫 1«H«|  o|o|  一 「声 糾 *)  -  ' 

-1:00  -30         0  30   1:00       1:30 に ^  1  layback  、ursoi _^ J4m       4^0       5^0  5:3Q 


ime  Kuier  Hi a 


」 Left  Channel  I 


Sterec,  8OOOH2 
16-MPCM 


Q 

I Iracklnfo 


〕 


f 1,1 胃, 曙, 讓 

〔 Right  Channel 


24  Audacity 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnn  gui  n  n  n  n  n 

n  n 

u  u 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  riT  TTrinnnnnnnnnnnnnnnnnnnn 

n  n 
U  U 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  TrackPanelQ  DDDDDDDD  GUI  □  □□□□□□ 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD  GUI  □□□□□□□  wxWidgets  □ 

sizer 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

TrackPanel  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□  □□□□□□  wxWidgets  D  D  D  D  D  sizer  DDDDDDDD  wxWidgets  □  sizer  □  □  □  □  □ 

DDDDDDDDDDDDDDD  sizer  D  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD 

D  D  D  sizer  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDGUIDDDD 
D  D  D  D  wxWidgets  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  wxWidgets  □□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

TrackPanel D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  wxWidgets  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  wxWidgets 


D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD  wxWidget DDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

Flyweight  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDD  wxWidgets  D  sizer  DDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□  API  □□□□□□□□□□□□□□□□□  wxWidgets  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD  TrackPanel  DDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

James  Crook  25 


2.5    PortAudio  D  = 

PortAudio  DDDDDDDDDDDDD  Audacity  □□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Audacity  D  □□□□□□ 
DDDDDDDDDDDDDDDDDDDD  PortAudio  D  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  APIQ  D  D  D  MacQ  Linux 
D  D  D  Windows  D  DDDDDDDDDDDDDDDDDDDDDDDDDDD  PortAudio  D  D 
DDDDDDDDDDDDDD  APIQ  DDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□  PortAudio  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□  Audacity  □  PortAudio  DDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  Audacity  □  □  PortAudio  DDDDDDDDDDDDD  (DD)DDDDDDDDDD 
D  PortAudio  D  DD(DD)DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  API 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD  wxThread □ 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDD  (D  2.4)D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D  D  PortAudio  DDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDD  PortAudio  □□□□□□□□□□ 

D  D  D  D  D  audacityAudioCallback  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDD(5D)DDDDDDDDDDDDDDDDDDDDDD5DDDDDDDDDDD 
DDDDDDDDDD  PortAudio  □□□□□□  wx  Widgets  DDDDDDDDDDDDDDD 

D  D  PortAudio  DDDDDDDDDDD  pthread  □  □  □  □ 

DDDDDDDDDDDDDDDD  Audacity  □  AudiolO  DDDDDDDDDDD  AudiolO 
DDDDDDDDDDDDDDDDDDDDDDDD  Audacity  D  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  AudiolO  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
AudiolO:  rFillBuffersQ  D  D  D  D  D  Boolean  □  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  "software  play  through"  DDDDDDDDDDDDDDD 
DDDDDDDDDDDD  AudiolO  DDDDDDDDDDDD  OS  D  D  D  D  D  10  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


26  Audacity 


□  2.4:  DDDDDDDDDDDDDDDD 


D  D  D  D  D  D  audacityAudioCallbackQ  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


James  Crook  27 


DDDDDDDDDDDDDDDDDDDDDDDDD  Audacity  D  GUID  D  D  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□  GUID  DDDDDDDDlDDD  20D  □□□□□□□□□□□□□□□□□□□□ 
D  D  D  D  D  D  TrackPanel::OnTimerD  D  D  D  D  D  GUIQ  DDDDDDDDDDDDDDDD 

□  □□□□□□  GUI  DDDDDDDDDDDDDDDD  wxWidgets  □□□□□□□□□□□ 
DDDDDDDDDDD  GUI  □□□□□□□□□□□□□□□□□□□□□  GUI  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 


n 
U 

D 

D 

D 

DDDDDDDDDDDDDDDD /DDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

D 

D 

D 

GUID  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

D 

D 

D 

DDDDDD?DDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

D 

D 

D 

DDDDDDDDD  PortAudio  DDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

D  D 

wxWidgets DDDDDDDD  GUI □□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

2.6  BlockFile 

Audacity  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  RAM DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDD  Audacity 

D  D  D  DD 


28  Audacity 


Audacity  D  DDDDDDDDDDDDDDDDDDDDD 

n 
U 

DD 

DDDDDDDD  BlockFile 

nnnnnnnnnnnnn 

n 

n 

n  n  n  n  n  n  n 1 mb 

n 

n 
U 

n 

n 

n 

n 

n 

n 

Audacity  口 

n 

n 

n 

nnnnnnnnnnnnn 

uuuuuuuuuuuuu 

n 

u 

n 

u 

nnnnnnnnnn 

n 

u 

n 
U 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n  n  n  n  n 

u  u  u  u  u 

n 

u 

n 

u 

n 

u 

auD  n  n  n  n  n  n  n  xml  n 

n 

u 

n 

u 

nnnnnnnnnn 

uuuuuuuuuu 

n 

u 

n 
U 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n  n  n  n  n 

u  u  u  u  u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnn 

uuuuuuuuuuuuu 

n 

u 

n 

u 

nnnnnnnnnn 

uuuuuuuuuu 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n  n  n  n  n 

u  u  u  u  u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnn 

uuuuuuuuuuuuu 

n 

u 

n 

u 

aiin n  n  n  n  n  n 

"ui ハハ" nnnnnnnn 

n 
し 

n 
し 

nnnnnnnnnn 
UUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDD 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDD 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D  D 
D  D 


D  D 
ID 


D  D 
D  D 


□  □□□□□  BlockFile  D 
DDDDDDDDDDD 
DDDDDDDDDDD 


Audacity  □  BlockFile  □□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  BlockFile  D  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
BlockFile  DDDDDDDDDDDD  undo  DDDDDDDDDDD 
DDDDDDDDDDD  Audacity  D  BlockFile  D  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBDDD 

□  D  Google  Q  BigTable  □□□□□□□  Unrolled  linked  list  □□□□□□□□□□□□□□□ 
D  2.5  D  D  Audacity  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
D  D  D 


Before 


EF 

/ 

HIJ 

EJ 

After 


D  2.5:  □□□□□□  -aupQ  D  D  D  D  BlockFile  Q  □□□□□□  ABCDEFGHIJKLMNOD  FGHI 

DDDDDDDDDDD  BlockFile  DDDDDDDD 


BlockFile  D  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


James  Crook  29 


n  n  n 
U  U  U 

n 
U 

BlockFile  D  D  D  D  Audacity  □  4DDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D 

D 

D 

DDDDDDDDDDDDDDD 

BlockFile  D  DDDDDDDDDDDDDDDDDD  Audacity  D  □□□□□□□ 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n  n  n 
U  U  U 

n 
U 

n 
U 

nnnnnnnnnnnnn    "i つ、, nnnnnnnnnnnnnnnn 
UUUUUUUUUUUUU.  wav  UUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D 

D 

D 

DDDDDDDDDDDDDD  Audacity □□□□□□□□□□□□ 

. w' 

av 

n 
U 

n 
U 

n 
U 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D 

D 

D 

BlockFile  DDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD ,□ 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D 

D 

D 

D  D  D  D  D  Audacity  D  DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDD ,□ □□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

□  □□□□□  Audacity  D  DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

□  □□□□□  BlockFile  DDDDDDDDDDD 

BlockFile  D  D  D  D  Windows  DDDDDDDDDDDDDD  Windows  D  D  D  D  D  BlockFile 


DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D  Windows  D  D  D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 100D  D  D  D  D  D  D 

D  D 

DDDDDDDDDDD 

BlockFile  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDDDD  -aupQ  □□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D  BlockFile  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD  Audacity 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

2.7  □□□□□ 

Audacity  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


30  Audacity 


DDDDDDDDDDDDDDDDDDDDD  Audacity  D  DDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□  2.6)D 


pipe 


Scripting 


D  2.6:  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□ 

D 

D 

D 

D 

D  D 

D 

D 

) D  D  Audacity  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  TCP/IP DDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

DDDD— DDDDDDDDDDD  Audacity □  □  TCP/IP □□□□□□□ 

D 

D 

D 

D 

D  D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□DLL 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDD  Wiki  □□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D  D 

D 

D 

KDE D  D-Bus DDDD  TCP/IP DDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  D-Bus □ 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDD 

2.8    □  □ 

□  □ 

□  □ 

DD 

ODD 

Audacity  口 

D  D  D 

D  D  D 

D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

DDDD 

D 

D 

D 

□  □□□□□ 

D  D  D 

D  D  D 

D  D  D 

Audacity  DDDDDDDDDDD 

D 

D 

D 

D 

DDDD 

D 

D 

D 

□  □□□□□ 

D  D  D 

D  D  D 

D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

DDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Audacity  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Audacity 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


James  Crook  31 


DDDDDDDDDDDD 


D 

D 

D 

D 

DDDDDDDDDDDDDDD  Audacity  □□□□□□□□□□□ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  Audacity □  □  □  □  □ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD  CleanSpeech  D  D  D  D  D 

D 

D 

D 

D 

D 

D  D  mP3DDDDDDDDDDDDD  CleanSpeech  DDDDDDDD 

D 

D 

D 

- □ 

DDDDDDDDDDDDDDDDDDDD— DDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

□  □□□mp3  □□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  Audacity  D  DDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D  Audacity  D  DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  shuttle 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

CleanSpeech  □  □  □  □  Audacity  □□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDDD  Audacity  D  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDD  "#"  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

□                                                                                Audacity  □ 

mCleanspeech  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD 

CleanSpeech  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  Audacity  D  DDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Audacity 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


32  Audacity 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 

D  D  D  D  D  Audacity  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  Audacity  □□□□□□□□□□□□□□□□□□ 
BlockFile  DDDDDDDDDDDDDDDDDDDDD  Audacity  □□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDD 

DDDDDDDDDDDDDDDD 

D 

DDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDDD 

D 

DDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDD 

DDDD 

2.9    □  □  □ 

□  □□□□□□ 

DDDDDDDDDDDDDDDD 

D 

DDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDDD 

D 

DDDD 

D  D 

D 

D 

D 

D 

•  PortAudio  D 

wxWidgets  □□□□□□□□□□□ 

D 

APID  D 

D  D 

D 

D 

D 

D 

D 

D 

DD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD  API  DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

•  wxWidgets  DDDDDDDD  API  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  wxWidgets  □  □  □  Facade  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD 

•  Audacity  □  TrackPanel  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□  sizerQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  TrackPanel  DDDDDDDDDDDDDDD 


James  Crook  33 


詹 n 

•  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

reri y 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n  n 
U  U 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDD 

D 

D 

D 

D 

D 

D 

■ ~ ii ~ ii ~ ii ~ ii ~ 1 

DDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

DDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDD 

D 

D 

D 

D 

D 

D 

DDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

□□□□□□□ 

D 

D 

□□□□□□ 

DDDDDDDDDDDDDD  Audacity  □□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDD  Audacity  DDDDDDDDDDDDDDDDDDDDDDD  Audacity 


D  D 

D 

□□□□□□ 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

□□□□□□ 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

Audacity  □  □  □  □ 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

□□□□□□ 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

□□□□□□ 

D 

D 

D 

DD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

□  Audacity  □ 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

□□□□□□ 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

□□□□□□ 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □  □  Audacity  □ 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

□  □□□□□ 

D 

D 

D 

D  D 

D 

D 

34  Audacity 


D  3d 


The  Bourne-Again  Shell 

Chet  Ramey 
3.1 □□ 

Unix  □□□□□□□□□□□  OS  □□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDD  (xtermQ  □)□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  bashQ  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  emacs  □□□□□  viQ  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

BashD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

DDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D  D  D  D  D  bash  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

DDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

DDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

DDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDD 

Bash 

Bash  D  GNU  □  □ 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D  D 

Linu ヌ 

DDDDDDDDDDDDDDDDDMacOSXDDDDDDDDOSDDDDDDDDDD 
DDDDDDDDDDDshDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD 

□  □□□□□  Bourne-Again  SHell  □□□□□□□□□□□□  Stephen  Bourne (口  □  □  Unix 
DDDDDDDDD  /bin/sh  DDDDDDDDDDDDDD  Version  7  Unix  □□□□□)□□ 


Input 

Lexical 
Analysis 

and 
Parsing 


Expansion 


Command 

Execution 

Brace 
Expansion 


Tilde 
Expansion 


Variable  and 
Parameter 
Expansion, 
Command, 


Arithmetic 
Substitution 


D  3.1:  Bash  DDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDD  bashQ  □□□□□□  Brian  Fox  D  D  D 

D  Free  Software  Foundation 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  GNUD  DDDDDDDD  DbashQ  DDDDDDDDD  D  DUnixQ  DDDDDDDDDD 
DDDDDDDDDDDD  OS  DDDDDD -DDDDDDDDDDDDDDDD  Windows 

D  D  Cygwin  D  MinGW  □□□□□□□□□□□  QNX  □  Minix  □  □  □  □  Unix  DDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Posix □  □ 

DDDDDDDDDD  Microsoft  □  Services  for  Unix  (SFU)  □□□□□□□ 


3.2  □□□□□□□□□□□□□ 

DDDDDD 

bash  DDDDDDDDDDDDDDDDDDDDDD  (reserved  word)  口  D  D  (word)  口  D  D 
D  D  D  D  (operator)  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


36    The  Bourne-Again  Shell 


□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  if  □  while  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDID>DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD-DDDDDDD 


DDDDDDDDDD 


D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDD  name=value  D  D  D  D  D  D  D 

D 

value  □ 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D  D  D  name  D  D  D  D  D  D  value  D  D  D  D  D 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

name  DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

unset 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

uuu 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

uuu 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

uuu 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DD 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

□  □□□  (□□□□□□□□□□□□□—□□□□ 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□)□□□□□□□□□□□□□□□□ 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

Bash  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Chet  Ramey  37 


DDDDDDDDDDDDDDDDDDDDDD  bashQ  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

echoQ  cd  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


DDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD 

■ ~~ i I ~~ i I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ i I ~~ i 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

■ ~~ i I ~~ i I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ i I ~~ i I ~~ i 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

ロロ  ロロ  ロロ  if- then- else  口  while  口 

D  D 

D 

D 

D 

/->  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I r ― I 

for  □□□[][][]□□ 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDCDDDDDDD 

D  D 

D 

D 

D 

forDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDD 

UnixQ  DDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

D  D 

BashQ  DDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

BashQ  DDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

DD 

D 

D 

DDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

□  □  □  □ 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  DD  D  D 

D 

D 

D 

D 

D 

DD 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

WORD.DESC 口  口 

38    The  Bourne-Again  Shell 


typedef  struct  word— desc  { 

char  *word ;  /*  Zero  "terminated  string.  */ 


int  flags;  ハ Flags  associated  with 

}  W0RD_DESC; 


this  word. 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

typedef  struct  word_list  { 

struct  word_list  *next ; 

W0RD_DESC  *word; 
} 龍 D— LIST; 


word—list  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


3.3  □□□□□ 


bash  D  D  D 

D  D  D  D  D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 

D  D  D  D  D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DD 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 

D  D  D  D  D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

ReadlineD  DDDDDDDDDDDD 

BashD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  Unix  □  □  □  □  □  emacs  □  vi  □  □ 
DDDDDDDDDDDDDDDDDDDDDD 

Bash D  readline DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□  csh  □□□□□□□□□□□□□□□□□  Readline  □  □  □  □  □  bash  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  readline  □  □  bash  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDD  readline  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 

Readline  DDDDDDDDDDDDDDDDD  readline  DDDDDDDDDDDDDDD 

D  D  Readline  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  readline  D  DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 


Chet  Ramey  39 


Readline  ロロ  口 


Readline  □□□□□□/□□/□□/□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDD  readQ  DDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□  (□□□□□□□□□□)□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDD  8Q  D  D  D 1DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  beginning- of- line 

D  D  D  D  readline  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


self-insert  口 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□  (DDDDDDDDDDDDDDDDDDD  )DDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDD  Readline  □  self-insert  □  □  □ 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

u  u  u 
Readline 

D 

D 

D 

D  D 

DDDDDDDDDDD  CD  char □□□□□□□□□□□ 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDD  wchar.t □□□□□□□ 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  readline  D  DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD  emacs □  vi 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

0 

□  D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDD  readline  □□□□□□ 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD  Readline  □ 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDD  readline □□□□□□□ 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD  (D 

D 

D 

D  D 

40    The  Bourne-Again  Shell 


□  □□□□□□□□)  口  ReadlineQ  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
(口: □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□□□□□□□□□□□□□?)□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDD  readline  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD-DDDDDDDDDDDDDDDDDDDD(DDDDDD) 
DDDDDDDDDDDDDDDDDDDD 

ReadlineQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDD  Readline □  □  □ 

Readline  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  readline  D  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  readline □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  bash 30 □□□□□□□ 
DDDDDDDDDDDD  bashQ  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDD  readline  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  readline 


D  D  D  D  D 

D 

□  □□□□□□ 

□  readline  □ 

D 

DDDDDD 

D 

DDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D  D 

□  □  □  □ 

D 

□□□□□□ 

D  D  D  D 

D  D  D  D 

readline  □  □  □  □ 

□□□□□□ 

D 

stdioD  D  D 

D 

DDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

□□□□□□□ 

□□□□□□ 

D 

DDDDDD 

D 

stdioD  D  D 

bash  口 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

□□□□□□□ 

DDDDDD 

D 

D  D  D  Posix  □ 

D 

DDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

□  □□□□□□ 

□□□□□□ 

D 

DDDDDD 

D 

DDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

□  □□□□□□ 

DDDDDD 

D 

DDDDDD 

D 

DDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

□□□□□□□ 

DDDDDD 

D 

DDDDDD 

D 

DDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

□□□□□□□ 

DDDDDD 

D 

DDDDDD 

D 

DDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

□  □□□□□□ 

DDDDDD 

D 

DDDDDD 

D 

DDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

□  □□□□□□ 

DDDDDD 

D 

DDDDDD 

D 

DDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DD  D  D  D 

D 

□  □□□□□□ 

DDDDDD 

D 

DDDDDD 

D 

DDDDDD 

D  D  D 

D 

D 

D 

Chet  Ramey  41 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  readline □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


□□□□□□□□ 


D  D  D  D  D 

DDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

n 
U 

D  D  D  D 

D  D  D 

□□□□□□ 

DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

1 — 11 — 11 ~ ii ~ ii ~~ 1 
D  D  D  D  D 

D 

D 

D 

D  D  D  D 

D  D  D 

□□□□□□ 

DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D  D  D  D 

D  D  D 

D  (CD  char)Q  D  □□□□□□□□  口 

口 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D  D  D  D 

D  D  D 

□□□□□□ 

D  D  D  Readline  □  □  □  □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

(D  D  D  D  D  D  D 

□□□□□□ 

DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D  D  D  D 

D  D  D 

□□□□□□ 

DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

口 

D  D  D  )D 

D 

D 

D 

D  D  D  D 

D  D  D 

□□□□□□ 

DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D  D  D  D 

D  D  D 

□□□□□□ 

DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D  D  D  D 

D  D  D 

□□□□□□ 

DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

3.4  □□□ 


D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

DDDDDDDD 

DDDDDDDDDDD  (D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

□  )□□□□ 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D  D  Tom  Duff  D 

rc(Plan  9DDDD)DDDD 

D 

D 

D 

D 

D 

□  □□□□□□  Bourne  shell  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
Posix  □□□□□□□  Unix  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  Bourne  shell  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDD-DDDDDDDDDDDDDDDD 
bash  D  D  D  D  D  Posix  DDDDDDDDDDDDDDDDDDDDDDDDDDDYaccD 


D  D 

D 

Bison  □□□□□□  Bourne  DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

- □ 

D 

D  D 

D  D 

D 

yacc  DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDD 

D 

D 

DDDDDDDDDDDDDD  readline  D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

一 □ 

D  D 

D 

for  DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

42    The  Bourne-Again  Shell 


for  for  in  for;  do  for=for;  done;  echo  $for 

D  D  D  for  D  D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDD  Bash  □□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□  (□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□ 
D  D  D  bash  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  bash  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□"□□□□□□□□□□□□□□□□□□DO 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □(□□□□□□□□□□□□□□□□□□  )□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  $"..."D  DDDDDDDDDDDDDDDDDDDDDDDD  ANSI  CD  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□ 
DDDDDDDD)DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  ("□  □□□□□□『□□□□□□□□□□)□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  (parse.comsub) DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□ 
D  D  D  D  case  □□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDD  bashQ  DDDDDDDDDDDDD 
DDDDDDDDDDDDD  eval □□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Chet  Ramey  43 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

/^nnnnnnnnnnnnn、nnnnn  pop  n 
(UUUUUUUUUUUUU 川 UUUU ヒりト U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

D 

D 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnn  、",r\3i~co  nnnnnnnnnnn 
UUUUUUUU  yyparse  UUUUUUUUUUU 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

D 

D 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

D 

D 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

DD 

n  n 

u  u 

n 

u 

n 

u 

n 

u 

n 

u 

DD 

n 

u 

n 

u 

n  n 

u  u 

n 

u 

n 

u 

n 

u 

D  bashD  DDDDDDDDDDDDDDDDDDD 

D 

DD 

n  n 

u  u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
u 

D 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDD  readlineD  D 

n  n 

u  u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
u 

D 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuu 

n 

u 

n  n 

n  n 

u  u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
u 

D 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuu 

n 

u 

n  n 

u  u 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
u 

D 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
u 

D 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuu 

n 

u 

n  n 

u  u 

n  n 

u  u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
u 

D 

D 

D 

D  D 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D 

D 

D 

D  D 

n 
U 

n 
U 

n 
U 

DDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D 

D 

D 

D 

DD 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDD  PosixQ  DDDDDDDD 

D 

D  D 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

D 

20  □  □  □ 

n  1 
U  1 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

D 

D 

D 

D 

DD 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDD  Bourne  D  D  D 

D 

D  D 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

D 

D 

D 

D 

D  D 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D 

D 

D 

D 

D  D 

n 
U 

n 
U 

n 
U 

D  CD  D  D  D  (DDDDDDDDDDDDDDDD 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

□□□□□□□)□□□□□□□□□□□□□□□□ 

D 

DD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D  D  D 

3.5  □□□□□ 

DDDDDDDDDDDDDDDDDDD 
DDDDDDDCDDDD  )$ostype  D  D  D  D 


DDDDDDDDDDDDDDDDDDDDD 
"linux-gnu "口  DDDDDDDDDDDDDDD 


DDDDDDDDDDDDD 


D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

44   The  Bourne-Again  Shell 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  ${pa「amete に- wo「d}  口  DDDDDDDDD 
D  D  parameter  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  word  D  D  D  D  D  D  D 


□□□□□□□ 

BashQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD 

pre{one ,  two,three}post 

DDDDDDDDDDDDDDDDDD 

preonepost  pretwopost  prethreepost 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Bash  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  bashQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  bashQ  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  ~alan  □  Alan  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDD  $((exp「ession))  D  D  D  D  D  expression  D  D  D 

DCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDD-DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Chet  Ramey  45 


D  D  D  D  D 


D  D  D 

D 

D 

D 

D 

DDDDDDDDD  ifsd  D 

D  D 

DDDDDDDDDDDDDDDD 

D 

D 

D  DD  D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D  D 

D  $ifsd  DDDDDDDD  'D  D  D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  bash  DDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDDD 

D 

D 

D  D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D  D 

D  D  D  D 

□  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD(DD 
DDDDDDDDD )D DDDDDDDDD 


D  D 


D  D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D  D  D 

D 

D 

D 

D  D  D 

bashQ 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDD  word. 

-DESCQ  D  D  D  D  D 

D  D  D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

flags  D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

DD 

D  D  D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D 

D  D  D  D  D  null D  D  D  ("$x"D  D  D  D  $x  D  D 

D 

D 

D  D 

D  D  null D 

D 

D 

D 

D  D  D 

D 

D 

)DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D 

D  ($#variable)  DDDDDDDDDDDD 

D 

D 

D  D 

D  D  D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D  D  D 

3.6  □□□□□□□ 

bash  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ OS  □ 


46    The  Bourne-Again  Shell 


n  n 
U  U 

n 
U 

nnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDD 

argv 

n  n 
U  U 

n 
U 

n  n  n  n  n  n  n 
U  U  U  U  U  U  U 

n 
U 

n 
U 

nnnnnnnnnnn  tv^iv  n  n  n  n  n  n  n 

n 
U 

n 
U 

n 
U 

n 
u 

n  n 
u  u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n  n 
U  U 

n 
U 

n  nnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
u 

n  n 
u  u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n  n 
U  U 

n 
U 

n  n  n  Koch  nnnnnnnnnnnnnnn 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 

u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D 

D 

DDDDDDDDDDDDDD  bash □  □  □  □  □ 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 


OS  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuu 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

n  n 

u  u 

n 

u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnn 

UUUUUUUUUUUUUUUUUUUUUUUUU 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

n  n 

u  u 

n 

u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnn 

UUUUUUUUUUUUUUUUUUUUUUUUU 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUU 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

n  n 
U  U 

n 
U 

n 
U 

0 

0 

0 

0 

0 

□  □□□□□□□□□□□□□□□□□□□□□□□□ 口 

口 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  (DDDDD)DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

2D  □□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDD  BashD  DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

2[]  □□□□□□□  exec  DDDDDDDDDDD 


Chet  Ramey  47 


DDDDDDDDDDDDDDDDDDDDD  duP2 □□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D  D  D  D         □  DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

exec  DDDDDDDDDDDDDDDD  exec 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDD  bashQ  DDDDDDDDDDDDDDDD  Bourne 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  OD  D  9DDDDDDDD10 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  BashQ  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  bashQ  DDDDDDDDDDDDDDDDDDDDD  (DDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□)□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  close-on-exec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


□□□□□□□□ 


Bash  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

cdQ  D 

□  □□□□□  Unix DDDDDDDDDDDDDDDDDDD  cdQ 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

DDDDDDDDDDDDDDDD 

Bash  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

CDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDD  bashQ  D  D  D 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

DDDDDDDDDDDDD  (declare  Q  export  D  D  )D  D  D  D  D 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD  word.desc □ 

D 

D 

D 

flags  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


48    The  Bourne-Again  Shell 


DDDDDDDDDD 


D 

D 

D 

D 

D 

n  D  D  D  D 

□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

□  D 

D  D 

D 

D 

D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

n 

u 

n 

u 

n 

u 

n  n  n  n  n 

u  u  u  u  u 

DDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D  D  D 

(D  D  D  D  va「=value  DDDDD)DDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

(D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  DD 

D 

D 

D 

D  D  D  D  D 

□  □□□□□□□□□□□□□□□□□□□□□□□)□□ 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  bash  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  path □□□□□□ 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□ 
□□□□□□□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDD 

path  D  D  DDDDDDDDDDD  D  DbashQ  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  path  □□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  bash  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Linux 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD 

DDDDDDDDDDDDDDD  bashQ  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 


□  □  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□(□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  bash 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  ID  □□□□ 


Chet  Ramey  49 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  ID □□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDIDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□ 

□  ) 口  □□□□□□□□□□□□□□□  ID  □□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDIDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  id □□□□□□□  ID □□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□(□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDD)DDDDDDDDDDDDDDDDDDD 

□  □□□□□□  while  DforDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 


□□□□□□ 


D 

D 

D  D 

D 

D 

□□□□□□ 

D 

DDDDDDDDDDDDDDifD  while D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

□□□□□□ 

D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

□□□□□□ 

D 

□□□□□□□□□□□□□□□□□□□□ 口 

口 

口 

D 

D 

D 

DD 

D  D 

D 

D  D 

D 

D 

□□□□□□ 

D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

□□□□□□ 

D 

□□□□□ CDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

□□□□□□ 

D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

□  □  for  □  □ 

D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

inD  D  D  D 

D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

□□□□□□ 

D 

DDDDDDforDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

D  D  D  for  D 

D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDD  break □  continue DDDDDDDDDDDDDDD 


50    The  Bourne-Again  Shell 


DDDDDDDDDDDDDDDDDDDDDforDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


3.7  □□□□□ 


DDDDDDDDDD 


D 

D 

D 

D 

D 

D  20  D  D  D  bashQ  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

- □ 

D 

D 

□                                          ChangeLogQ  DDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D  D  D  ChangeLogQ  DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  BashQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  — Posix 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D  D  D  D  BashQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD GNU 

Project  口 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

gnulib  □  □  □  (gnulib  □□□□□□□□□□□□□□□)□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

DDDBSDDMacOSXDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D  D  D  D 

Chet  Ramey  51 


□□□□□□□□□□□□ 

BashD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D  D 

DDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D  D 

DDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D  D 

DDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D  D 

DDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D  D 

bash  DDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D 

D  DD 


Bash  DDDDDDDDDD 

D  D 

DDDDDDDDDDD 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  (baf 

*-4.2Q  □)□□□□□ 

D  D 

DDDDDDDDDDD 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDD 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDD 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDD 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDD 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D 

D  D  D  D  D 

D  D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDD 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDD 

D 

D  bash  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D 

D  D  bison  D  D  D  D  D 

D  D 

DDDDDDDDDDD 

D 

D  D  D  D 

D 

D 

D 

D 

Posix  口 

D 

D 

D  D  D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDD 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D 

D  D  D  D  D  bash  □  □  口 

D  口 

DDDDDDDDDDD 

D 

DDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDD 

D  D 

DDDDDDDDDDD 

D 

D 

3.8    □  □ 

Bash  □□□□□□□□□□□□□□□□□□□□□□□□□□□  20  □□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  bash  DDDDDDDDDDDDDDDDDDDDDDD 

Bash  DDDDDDDDDDDDDDDDDDDD  Version  7  Unix  DDDD  (Stephen  Bourne 

□  □□□□□)□□□□□□□□□□□□□□□□□□□□□□  Posix  □□□□□□  bash  Q 

□  □□□□□□  Posix  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD 

GNU  Project  DDDDDDDDDD  Bash  DDDDDDDDDDDDD  GNU  □  bash  □  □  □ 
DDDDDDDDDDDD  GNU  □  □  □  □  □  bash  □□□□□□□□□□□□□□□  bash  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  bashD 
DDDD 


52    The  Bourne-Again  Shell 


D  4 口 


Berkeley  DB 

Margo  Seltzer  and  Keith  Bostic 


D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 

D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 

D 
D  D 
D  D 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□?□□□□□□□□□  Seltzer  Q  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD[DDDDDDDDDDDDDDDDDDDDDD?DDDDD 

□  OS  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□"□『□ 
DDDDDDDD  Bostic DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD OOD DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DD 

口 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
D  D  Unix  □□□□□□  "DDDDDDDDDDDDDD  (do  one  thing  well)" D  D 
DDDDDDDDDD  Berkeley  DB  □□□□□□□□□□□□□□□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  get  口  putQ  delete  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□(□□□□□□□!)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


4.1 □□□□ 

Berkeley  DB  □□□□□□□□□□  Unix  □□□□□□□□□□□□□  AT&T  □  □  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDD  Margo  Seltzer  □□□□□□□□□□□□□□□□□□□□□□□□ 
D  D  D  D  Keith  Bostic  □□□□□□□  Computer  Systems  Research  Group  □□□□□□□□□ 
D  Keith  Q  DDDDDDDDD  AT&TQ  □□□□□□□□□□□□□□□□  Berkeley  Software 

Distribution  DDDDDDDDDDDD 

Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDD  hsearch  DDDDDDDDDDDDDDDDDDDD  dbm/ndbm  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDD  Margo  Seltzer  □  □  □  □  [SY91]hash  □□□□□□□  Litwin  □ 
Extensible  Linear  Hashing  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  4kQ  D  D  D  8kQ  DDDDDDDDDDDDDD 
DDDDDDDDDD 

DDDDDDDDDDDDDDDDDD  BtreeQ  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Mike  Olson  D  D 
DDDDDDDD  BtreeD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  Margo  D  hashQ  □□□□□□  Mike  □  Btree  □  DDDDDDDDDDDDDDDDD 
DDDAPIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  Btree  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDD  Mike  Olson  □  Margo  Seltzer  □□□□□□□ 

D  D  D  ([S092])D  DDDDDDDDDDDD  LIBTPQ  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D  Btree  □□□□□□□□□□□  4BSD  □□□□□□□□□□□□□□□  Berkeley 

DB  1.85  DDDDDDDDDDDDD  Btree  DDDDDDDDDDDDDDDDD  B+link  □ 


54    Berkeley  DB 


DDDDDDDDDDD  Btree DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D  Berkeley  DB 1.85  D  D  D  D  API  Q  DDDDDDDDDD  Linux  Q  BSD  □  □  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDD 

Berkeley  DB  1.85  DDDDDDDDDDDDDDDDDDDDDDDD  1996  D  D  Netscape 
D  Margo  Seltzer  □  Keith  Bostic  □□□□□□□  LIBTP  □□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Berkeley  DB  2.0  □  □ 

D  D  D  D  D  Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□  Berkeley 
DB  2.0  (1997)  DDDDDDDDDDD  Berkeley  DB  □□□□□□□  Berkeley  DB  3.0  (1999)  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  Berkeley  DB  4.0  (2001)  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

Oracle  Berkeley  DB  5.0  (2010)        SQL  DDDDDDDDDDD 


D  D 

D 

D 

D 

D  D  D  D  D  Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDOSDDDDDDD 

D 

D  D 

D 

D 

D 

DDD  20  DDDDDDDDDD  Berkeley  DB  □□□□□□□□□□□□□□□ 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D  D  D  D  D 

□  □  □  □ 1 


D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  API  □□□□□□□□□□□□□□□□□□□ 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

(□□□□□□□!)□□□□□□□□□□□□□□ 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  Butler  Lampson  DDDDDDDDDmDD 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  Lampson  DDD 

D 

D 

APID 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  Berkeley  DB  □  □ 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D 

D CDDDDDDDDDD 

4.2  □□□□□□□□□□ 

D  D  D  D  D  Berkeley  DB  DDDDDDDDDDDDDDDDDDDDDDD  libtp  D  D  D 
DDDDDDDDDDDDDDDDDDDDDD 


Margo  Seltzer  and  Keith  Bostic  55 


D  4.1 D  Seltzer  D  Olson  D  DDDDDDDDDDDDDDDDDD  libtp  D  D  D  D  D  D 
DDDDDDDDDDDD  4.2  D  D  Berkeley  DB  2.0  DDDDDDDDDDDDDDDDDD 


Txn  Manager 


unlock 一 sll 


log— commit 
log— unroll 


し ock 
Manager 


wake 
sleep 一 on 


Record  Manager 


buf 一 get 
buf—pin 
buf— unpin 


Buffer 
Manager 


wake 
sleep 一 on 


Process  Manager 


□  4.1:  LIBTP  DDDDDDDDDDDDDDDDDD 


D  4.2:  Berkeley  DB-2.0  □□□□□□□□□□□□□□ 


LIBTP  D  D  D  D  Berkeley  DB  2.0  □□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDD  libtp  D  DDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□/□□□□□□□□□□□□□□□□□□□□□□□ 


56    Berkeley  DB 


□  □□□□□□□□□□□□□□□□□□□  4.4  □□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDD 


D  4.3:  D  D  D  Berkeley  DB  2.0.6  □□□□□□□□ 

DDDDDDDDDDDDDDDDD  db-2.0.6 □□□□□□□□  (口  4.3) □□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  recoveryD  DDDDDDDDDDDDDDD  redo  D  undo  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

"access  method  recovery  routines"  □□□□□□□□□□□□□□□□□□□□  Berkeley  DB  2.0 

DDDDDDDDDDDDDDDDDDDDDDD  libtp  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  4.4  Q  Berkeley  DB-5.0.21  □□□□□□□□□□□□□□□□□□□□ 

APIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
(DDDDDDDDD  logD  logD  dbregQ  DDDD)DDDDDDDDDDD  APIQ  D  D  D 
□  □□□□□□ 

DD10DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Margo  Seltzer  and  Keith 巳 ostic  57 


n  n 
U  U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n  n  n 
U  U  U 

n  n 
U  U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n  n  n 
U  U  U 

n  n 
U  U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n  n  n 
U  U  U 

D  D 

D 

DDDDDDDDDDD  API □□□□□□□□□□□□□□□ 

D 

D 

D 

D  D  D 

D 

DDD 

DD 

D 

D log  D  D  D  D  D  D logD  dbreg  (database  registration)  D  D  D  D 

D 

D 

D 

DDD 

D 

DDD 

DD 

D 

4.8  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

DDD 

D 

DDD 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDD 

D 

DDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD6DDDDDD 
DDDDDDDDDDDDDDDD  APIDDDDDDDDDDDD  (log—get  API  D  D  D 

D  D  D  D log.cursor  API  □□□□□□□□)□□□□□□  Berkeley  DB  □□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAPI 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  fileop DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD(DDDDDDDDDDDDDDDDDDDDD) 
DDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D  D  2 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

Berkeley  DB  □□□□□□□□□□□□□  Unix  DDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


58    Berkeley  DB 


し ock 


□  4.4:  Berkeley  DB-5.0.21  □□□□□□□□ 


D?DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DD?DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 口 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


ヽ ノ 

V-  一  I 

/  \N  ノ 

KL 1 r 


\  一  0  \  

-  2 


ヽ 

一 9 一 


Margo  Seltzer  and  Keith  Bostic  59 


□  □□□□□□□  API 

1. DBP  □  □  □  □  □  □ 

open 
get 
put 
del 

cursor 

2.  DB_ENV  □  □  □  □  □ 
openC..  DB 一 RECOVER り) 

3.  □□□□□□□  □  API 

DB_ENV->txn_begin 

DB_TXN->abort 

DB_TXN->commit 

DB_TXN->prepare 

□  □□□□□□□□□□□  API 

4.  Lock  0 

― lock—downgrade 

― lock 一 vec 

― lock— get 

― lock 一 put 

3.  Mpool □ 

memp  nameop 
― memp_fget 
― memp_fput 
― memp_fset 
― memp_fsync 
― memp_fopen 
― memp_fclose 
― memp— ftruncate 
― memp_extend_freelist 

6.  Log  D 

― log_print_record 

^3il  I  i  s\ 

i-,    O    O    O    O    O  i) 
ri t-i          t-i 1m 1m 

□  □  □  □  □  API 

8.  Lock  □ 

_ lock— getlocker 

_ lock— get_list 

9.  Mpool □ 
― memp_fget 
― memp_fput 
― memp_fset 
—memp— nameop 

10.  Log  n 
― log_compare 
― log_open 
― log_earliest 
― log_backup 
― log—cursor 
― log_vtruncate 

11. Dbreg  □ 
― dbreg_close— files 
― dbreg_mark_re  stored 
― dbreg—init— recover 

12.  Txn  0 
― txn_getckp 
― txn— checkpoint 
― txn— reset 
_ txn_recycle_id 
― txn— findlastckp 
― txn_ckp_read 

DDDDDDDDDDDDDDDD  API 

13.  Lock  D 
― lock 一 vec 
― lock— downgrade 

14.  Mpool D 
― memp— sync 
—memp— nameop 

15.  Log  D 

― log_cursor 

― log_current_lsn 

16.  Dbreg  □ 

_ dbreg_invalidate_files 
― dbreg_close_files 
― dbreg_log 一 files 

DDDDDDDDDDDDDD  API 

17.  Log  □  □ 
_rep_send_message 
_rep_bulk_mess  age 

18.  Txn  □  □ 
― rep_lease_check 
_ rep_txn_applied 
― rep_send_mes  sage 

DDDDDDDDDDDDDDD  API 

19.  Lock  D 
― lock 一 vec 
_ lock— get 
― lock 一 id 

20.  Mpool Q 
― memp_fclose 
― memp_fget 
― memp_fput 
― memp_fsync 

21. Log  □ 

一 log_ge し stable_lsn 

― log_cursor 

― log_newfile 

― log_flush 

― log_rep_put 

― log_zero 

一 log_vtruncate 

22.  Dbreg  □ 
― dbreg_mark_re  stored 
― dbreg_invalidate_files 
_ dbreg_close— files 

23.  Txn  0 
― txn— recycle—id 
― txn— begin 
― txn— recover 
― txn— getckp 
― txn_updateckp 

D  4.1:  Berkeley  DB  5.0.21 Q  API 


D  D  DD 

DDDDDDDDDDDD  Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


4.3  Btree,  Hash,  Recno,  Queue 

Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Btree  D  HashQ  D  D  D  D 
DDD /DDDDDDDDDDDDDD  Recno  □  Queue  DDDDDDDD/DDDDDDDD 
D  D  D  D  D  (Recno  D  DDDDDDDDDDDDDD  Q 置 □  DDDDDDDDDDDDDD 


60    Berkeley  DB 


Btree  □  Hash  □□□□□□□  Btree  □□□□□□□□□□□□□□□□□□□□  Hash  □  □ 

DDDDDDDDDDDDDDDD  Btree  □□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDD  HashQ  DDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  Btree  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D 1990  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD 

Recno  Q  Queue  □  □  □  □  □  Queue  □□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDD  Queue  DDDDDDDDDDDDDDD  Recno  DDDDDDDDDDDD 
DDDDDDDD  Btree  D  Hash  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D  Berkeley  DB  □□□□□□□□□  CRUD  □  □  (Create^  D  D  Read:  口  □  □  □  □ 
Updated  D  D  Deleted  □)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  (DDDDDDDDDDDDDDD  DDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□  )□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D  D  3 


D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

Berkeley  DBD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Margo  Seltzer  and  Keith  Bostic  61 


□  □□□□□□  Btree  □□□□□□□□□□□□□□□□□□□□□□□□  (Recno  □  Btree 

DDDDDDDDDDDDDDDDDDDDD  Queue  D  DDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□)  口 


4.4  □□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD(DDDD 
D  D  D  D  D  JOIN  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□)  口 


D  D  D  D  4 


D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

DD 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D  D  D 

D 

D 

DDDDDDDDDDDDD  APID  DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDD  Berkeley  DB  □  □  □  □ 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDD(DDDDD  __dbc_put_Pp  D  Berkeley  DB  D  D  D  D  D  D  "put"  □ 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  "_pp" 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDD  DDDDDDD)D 

Berkeley  DB  DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Berkeley  DB  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Berkeley  DB  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDD  Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□  APID  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  APID  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□/ 口 


62    Berkeley  DB 


n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 

n 

n 

n 

nnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 

u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnnnnn  iDnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

on  nnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  Berkeley  DB  D  D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  Berkeley  DBQ  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D  D  5 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□(□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  )□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Berkeley 
DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□□□□□□□□□□□□ 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□  )□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDAPIDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD  Berkeley  DB  API  □□□□□□□□□□□□□  Berkeley  DB  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□ 
□□□□□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□ 
D  D  D  APID  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
APID  D  DDDDDDDDDDDDD  _argD  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  put  DDDDDDDDDDDDDDDD  __dbc_Put_arg  D  D  D  D  D  D  D  D 
D  D  D  D  D  D  D  __dbc_Put_pP  DDDDDDDDDDD 


Margo  Seltzer  and  Keith 巳 ostic  63 


n  n 
U  U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

/Ti n  n  n  n  n     r\\-,r~  nnnnnnnnnnnnnnnnnn 

n',t  r~i 

put  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

nnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuu 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

4.5  □□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDD  APIQ  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDD  Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Berkeley  DB  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDD  API  □□□□□□□□  Berkeley  DB  □□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  db.env 

"environment"  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□  (D  DDDDDDDDDD  Berkeley  DB  □□□)□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  6 


D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D  D  D  D 

D 

D 

DDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D  D  D  D 

D 

D 

DDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D  D  D  D 

D 

D 

DDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Berkeley  DB  □  □  □  □  □  □ 
64    Berkeley  DB 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Berkeley 
DB  □□□□□□□□□□□□□  (□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  )□□□□□□(□□□□□□□□□□□□□□□□□□□□□□□□□□□□□)□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  Berkeley  Software  Distribution  queue  DDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD 


D  D  D  D  7 


D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD  Berkeley  DB  □ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

BSDDDDDDDDDD  (queue 

h)  □□□□□□□□ 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

D 

4.6  Mpool 

Berkeley  DB  □  Mpool  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  hashQ  D  D  D  D  D 

DDDDDDDDDDDDDDD  hsearch □  ndbm DDDDDDDDDDDDDD 

Berkeley  DBQ  BtreeQ  DDDDDDDDDDDDDDD  B+Q  □□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Margo  Seltzer  and  Keith 巳 ostic  65 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 
□  □□□□□■□□□□□□□□□□□□□□□□□■□■□□□DO  Berkeley 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDD  Berkeley  DB  □□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Berkeley  DB  □  □  □ 
DDDDDDDDDDDDDDDDDDDDD  Mpool  DDDDDDDDDDDDDD  DDD 
DDDDDDDDDDDDDDDDDD 


Mpool D  □□□□□□□ 

Mpool DD  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  APID 
DDDDDDDDDDD  db.mpoolfile DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Berkeley 

DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  DB—MPOOLFILE 

DDDDDDDDDDDDDDDDDDDDDDDD  Mpool  DDDDDDDDDDD  Mpool 

□  □□□  APID  getQ  D  D  D  D  put  □□□□□□□□  get  □□□□□□  □□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□  put  □□□□□□□□□□□□□□□□□□□□□□□  Berkeley 


DB  □□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D  D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

Mpool □ 

APID 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

DDD 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

Berkeley  DB  DDDDDDDDDDD  WALQ  □  □  □  □ 

D  D  D  D 

DDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDD  Berkeley  DB  □  WAL  DDDDDDDDDDDDDDDDDDDDDDDD  Mpool D 


66    Berkeley  DB 


DDDDDDDDDDDD  Mpool D  D  DDDDDDDDDDDDD  WALQ  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD 

Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□  LSNQ  DDDDDDDD 


D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  WAL □ 

D  D 

D 

D 

D 

D  Mpool  DDDDDDDDDDDDDDDDDDDDDD  LSN  D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDD  Mpool  DDDDDDDD  Berkeley  DB  □  □  □  □  □  □ 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD  Mpool  DDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D  D  D  D  D  setQ  D  D  D  getD  DDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D  db.mpoolfile  D  D  D  D  D  set_lsn_offset  DDDDDDDDDDDDDDDDDDD 
□  □□  LSN  □□□□□□  Mpool  DDDDDDDDDD  WAL  □□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDD  Mpool □  WAL  □□□□□□□□□□□□□□□ 
set.clearlenQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  Mpool  DDDDDDDDD  API  D  D  D  D  D  D  Mpool □ 

Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  Mpool □  □ 

DDDDDDDDDDDDDDDDDDDD 

D  D  D  D  8 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDLSNDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD DDDDDDDDDDDDD 


4.7  Lock 

Mpool D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  [GLPT76]  nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 


PL  e 

□  B 

□  □ 

□  □ 

□  D 

□  D 

□  D 

□  D 

□  D 

□  D 

□  D 

□  D 

□  D 

□  D 

□  D 

□  D 

□  □ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


□ 

o 

o 

p 

B 

D 


□ 

□ 


□ 

□ 


□  _u 

□  _u 

" _u 


□ 

o 

□ 


□ 

c 

e 


k 

c 

o 

□ 


□ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u  _u 

□  _u  _u 

□  _u  _u 

□  _u 


Margo  Seltzer  and  Keith  Bostic  67 


DDDDDDDDDDDDD  conflict  matrixQ  "  D  D  D  D 

□  □□□□  32  DDDDDDDDDDDDD  Berkeley  DB  D  D  D  D  32  □□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□  ロロ  Berkeley  DB  □□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDD  OD  D  0x7fffffffQ  □□□□□□□□ 
DDDDDDDDDDD  0x80000000 □  □  Oxffffffff □  □□□□□□□  id □□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDIDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  APIQ  D  db_env -〉 lock_id  D  db_env- >lock_id_f  「ee 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  id □□□□□□□□□□□□□□□ 


□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  Berkeley  DB  □  □  □  DB—LOCK—ILOCK  □  □□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDD  ID DDDDDDDDDDDDDDD 

DDDDDDDD  Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□  Berkeley  DB  D  D  DDDDDDDDDDDDD  32DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Mpool  □□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDD  id □□□□□□  DB_LOCK_lLOCK □  □ 
D  D  fileid  □□□□  ID  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  type □  □  □ 
D  D  D  DB_PAGE_LOCKD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D  D 

D 

D 

D 

D 

D 

DB—HANDLE—LOCK  □  □  □  □  DB_RECORD_LOCK  □  □  □  □  □ 

queue  □ 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  DB—DATABASE—LOCK  D  D  D 

D  D  D  D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

68    Berkeley  DB 


D  D  D  D  9 

Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

ロロ  Berkeley  DB  □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDD 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D  D 

DDDDDDDD 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D  D 

DDDDDDDD 

D 

D 

DDDDDDDDDDDDDD  id  DDDDDDDD 

D 

D  D 

D 

D 

D  D 

DDDDDDDD 

D 

D 

[requester]  [holder]  DDDDDDDDDDDDDD 

D 

DD 

D 

D 

D  D 

DDDDDDDD 

D 

D 

□□□ ODDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D  D 

□  □□□□  ID  D 

D 

D 

DDDDDDDDDDDDDDDDDD 

□  □□□□□□ 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D  D 

D  Berkeley  DB  □ 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D  D 

DDDDDDDD 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  read  口 

write  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  4.2  Berkeley 
DB  □□□□□□□□□□□□ 


□  □□□□□□□□□□ 

Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Margo  Seltzer  and  Keith  Bostic  69 


□  □□□□□ 

□  □  □  □ 
No-Lock 

Read 

Write 

Wait 

iWrite 

iRead 

iRW 

uRead 

was  Write 

No-Lock 

Read 

Write 

/ 

/ 

/ 

/ 

Wait 

iWrite 

iRead 

/ 

/ 

iRW 

/ 

/ 

/ 

/ 

uRead 

/ 

/ 

/ 

iwas  Write 

/ 

/ 

/ 

/ 

D  4.2:  Read-Writer  □□□□□□□ 


D  D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

DD 

D  D 

D  D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  iReadQ  iWriteQ  D  D  D  iWRDDDDDDDDDDDDD 


DDDDDDDDDD 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  Berkeley  DB  □  DB_ 

ENV -〉 lock— 

_vec 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

Berkeley  DB  □  □  □ 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD  db_env- >lock_vec  DDDDDDDDDDDDDDDDD  Btree  D  D  D 
DDDDDDDDDDDDDDDDDDD  [Com79]D  DDDDDDDDDDDDDDDDD 


70    Berkeley  DB 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Btree □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 


D  D  D  D 10 

Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


D 

D 

D 

D 

D 

D 

D 

D 

D  D 

I ~~ 1 I ~~ I  I ~~ I                     1        1             T ヽ I ヽ 1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1 1 ~~ 1 

D  D  D  Berkeley  DB  □□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

■ ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ i I ~~ I  I ~~ I 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D  D  APID  DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

API 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

4.8  □□□□□□ 


D 

D 

D 

D 

D  D  D  D 

D  D  D 

D 

D  D 

D 

D 

D 

D  D  D  D 

D  D  D 

D 

D  D 

D 

D 

D 

D  D  D  D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D 

D  D  D 

D 

D  D 

D 

D 

D 

DDDDDDDD 

D  D 

D 

D 

D 

(LSN)  口 

D  D  D 

D 

D  D 

D 

D 

D 

D  D  D  D 

D  D  D 

D 

D  D 

D 

D 

D 

D  D  D  D 

D  D  D 

D 

D  D 

D 

D 

D 

D  D  D  D 

D  D  D 

D 

D  D 

D 

D 

D 

D  D  D  D 

D  D  D 

D 

D  D 

D 

D 

D 

D  D  D  D 

D  D  D 

D 

D  D 

D 

D 

D 

D  D  D  D 

] D  :  Log 

DDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD 
DDDDDDD  LSN  D  D  D  D  D 
DDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 


DDDDDDD 

D 

D 

D 

D 

D  D  D 

DDDDDDD 

D 

D 

D 

D 

D  D  D 

D  D  D  DD 

DDDDDDD 

D 

D 

D 

D 

D  D  D 

DDDDDDD 

D 

D 

D 

D 

D  D  D 

DDDDDDD 

D 

D 

D 

D 

D  D  D 

DDDDDDD 

D 

D 

D 

D 

D  D  D 

D  D  D  D  (D  D 

D 

D 

D 

D 

D  D  D 

DDDDDDD 

D 

D 

D 

D 

□  □  ) 口 

DDDDDDD 

D 

D 

D 

D 

D  D  D 

DDDDDDD 

D 

D 

D 

D 

D  D  D 

Margo  Seltzer  and  Keith  Bostic  71 


D  D  D  D 11 


D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD …口  DDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

n 

n  n 

i_i  i_i 

n 

n 

n 

n 

n 

nnnnnnnnnnnnnnnnnnnnnnnnnn 

i_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_ilji_ii_ii_ii_ii_ii_ii_ilji_iljljlj 

n 

n 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDm 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  LSNQ 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD D  DLSNQ □□□□□□ 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD? 

□□□□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

LSNQ 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDD 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□)  口 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDD(DDDDDDDDDDDDDDDDDDDD)DDDD 

DDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD  Berkeley  DB  DDDDDDDDDD 

DDD 

D 

D 

D 

D 

D 

□□□□□□ 

Berkeley  DB  DDDDDDDDDDDDDDDDDDDDDDDDDD 

DDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD  [腦3]  口  DDDDDDDD 

DDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Berkeley 
□□□□□□□□□□□□□□□□□□□□□□□□  (□□□□□□□□□□□□□□□ 
□□□□□□□□□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□ 


72    Berkeley  DB 


DDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□  API  □□□□□□□□□□□□□□□□□□□□□□□□ 

API  (DB—ENV- >log_f  lush)  DDDDDDDDDDD  API  D  D  D  D  D  D  Berkeley  DB  D  D  D  D 
DDDDDDDDDDDDDDDDDDD  Mpool  □□□□□□□□□  Berkeley  DB  □  □  □  □ 
D  LSN  □□□□□□  LSN  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDD  Mpool □□□□□□□□□□□□□□□□□ 


D  D  D  D 12 

Mpool □  Log  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

? 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

DD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDD 

Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Berkeley  DB  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDIDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Margo  Seltzer  and  Keith 巳 ostic  73 


D  D  D  D  D 


D 

D 

D 

D 

DD  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDD  Berkeley  DB  D  D  D  D 

D 

D 

DDD 

□  D 

D 

D 

D 

D 

D  D 

D 

D 

D  D  D  Mpool D  DDD  DDDDDDDDDDDDDDDD 

D 

D 

DDD 

□  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

DD 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

□  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

□  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDD  Berkeley  DB  □  □  □  □  □  □ 

D 

D 

DDD 

□  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDD 

D 

D 

D 

DD 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

□  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

□  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

□  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  Berkeley DBQ 

DDD 

□  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

n  n 
u  u 

n 
u 

n 
u 

D 

D 

D  D 

n 
u 

D 

DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDD?DDDDD  Berkeley  DB  □ 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDD  Berkeley  DB  □  □  □  □ 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDD 

D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDD  (DDDDDDDDD  cached_ckp_lsn 

DDD 

74    Berkeley  DB 


□□□□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
ID  □□□□□□□□□□  ID  □□□□□□□□  dbreg  ("DataBase  REGistration")  □  □  □  □  □ 

DDDDDDDDDDDDDDD  id □□□□□□□□□□□□□□□□□□□□□□□  (D 
D  D  D  D  D  D  dbreg—register)  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD? 

□  □□□□□□□□□□□□□□□□□  Berkeley  DB  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  口 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  private □□□□□□□□□□□  (DDDDDDDDDD 

Berkeley  DB  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□)  口 


D  D  D  D 13 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD DD 

D  D 

D 

typo 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DD 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

□ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


□ 

□ 


□ 

□  _u  _u 


□ 

B 

D 

y 

e 

e 

B 

□ 


□ 

B 

D 

y 

e 

e 

B 


□ 

□ 


□  _u  _u 

□  _u  _u 

□  _u  _u 


□  _u 

□  _u 

□  _u 

□  _u 

□  V 


□ 

□ 


□  _u 

□  _u  _u 


□ 

□ 


□ 


□  _u 

□  _u 


□ 

□  _u 

□  _u 


Margo  Seltzer  and  Keith  Bostic  75 


4.9  =  Txn 


D 
D  D 
D  D 
D  D 
D  D 

D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 

D 
D  D 
D  D 
D  D 
D  D 
D  D 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  ACID □□□□□□□□□ 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□ 

□  )□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  ACID  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□  [Gra81]D  口口  口  (Atomicity)  □□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  (Consistency) □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 
D  D  D  D 


D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D 
D  D  D  D 
D  D  D  D 
DDDDDDDD 

DDDDDDDDDDDDDDD  ACID  □□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDD  beginQ  commit  口  abort  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 
D  D  D  D 
□  D  (beg 


D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  (DDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□)□□ 

D 

D 

DD 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

(abort)  DDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDD DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  [腦3]  口  Berkeley  DB  □□□□□□□□□ 


76    Berkeley  DB 


□  □  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  (DDDDDDDDDDDDDDDDDD 

□  □□)□□□□□□□□□□□□□□□□□  Berkeley  DB  D  D  DDDDDDDDDDDD  2 

□  □□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDD  (UNDO)D  DDDDDDDDDDDDDDDDDDD 

□  □□□□□  (REDO)D  DDDDDDDDDDDDDDDDDDDDDDDDDD 
Berkeley  DBQD  DDDDDDDDD  ID  DDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDD  REDO □  UNDO □□□□□□□ 
D  D  D  dbreg—register  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  dbreg—register  DDDDDDDDDDDDDDDDDDDDDDDDDDD  IDD  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Berkeley  DB  □  □  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDD 


□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

口  w 

口  % 

□  _u 

□  _u 

□  _u 


□ 

□ 


□ 

□ 


□ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


□  _u 

□  _u 

N 

s 

し 


□ 

□ 


□ 

N 


□ 

□ 

B 

D 

e 

B 

□ 


□ 

□ 


□ 

□ 


し 

N 

s 

L 

□  _u 

□  _u 

□  _u 


□ 

□ 

□ 


□ 

o 

o 

p 

□  _u 

□  _u 

□  _u 

□  _u 


□ 

N 

s 

し 

□ 


□ 

□ 


□ 

N 

s 

L 

□ 


□ 

□ 


□ 

□ 


□ 

□ 

N 

s 

し 

□ 


□ 

N 

s 

し 


□ 

□ 


□ 

N 

s 

し 

□ 


□ 

□  _u 


□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□ 


□ 

□ 


□ 

□  □  □ 

□  □  □ 

□  □  □ 

□  □  □ 

□  _u  _u 

□  _u  _u 

□  _u  _u 

□  _u  _u 

□  _u  _u 

□  _u  _u 

□  _u  _u 


Margo  Seltzer  and  Keith  Bostic  77 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  cached_ckP_lsn 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  LSN  □□□□□□□□□□  LSN  □□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDD  LSN  DDDDDDDDDDD  IDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDLSNDDD 
DDDDDDDDDDDDDDDD  Berkeley DB DDDDDDDDDDD  LSN □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  LSN □□□□□□□□□□  □□□□□□□□  LSN □□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  prev.lsn  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  LSND  DDDDDDDD  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 

ckp— record  =  read  (cached_ckp_lsn) 
ckp_lsn  =  ckp_record . checkpoint— lsn 
cur_lsn  =  ckp_record . my_lsn 
while  (cur— lsn  >  ckp— lsn)  { 

ckp— record  =  read  (ckp_record - prev_ckp) 

cur— lsn  =  ckp_record.my_lsn 

} 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  id □□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□  IDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD  id □□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDD  UNDO  DDDDDDDDDDDDDDDD  IDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  LSN  DDDDDDDD  ^DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  REDOD D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□  ロロ  ロロ  ロロ 

□□□□□□□□□ 


78    Berkeley  DB 


1.  DDDDDDDDDDDDDDDDDDDD  LSNQ  DDDDDDDDDDDDDDDD 

2.  □□□□□□□□□□□□□□□□□□□  id □□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDD 

3.  LSN  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDD  UNDO □  □ 

4.  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  REDO □  □ 

5.  DDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 


□  □  □  □ 14 


D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

Margo  Seltzer  and  Keith  Bostic  79 


4.10  ODD 


Berkeley  DB  □□□□□□□□□  20  □□□□□□□□□  Berkeley  DB  □□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  NoSQL □□□□□□□□□ 
DDDDDDDDDDDDDDDD  Berkeley  DB  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (SQLQ  D  D  D 
D  XMLQ  D  D  D  D  NoSQL  D  □□□□□)□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


80    Berkeley  DB 


d  5n 


CMake 

Bill  Hoffman  and  Kenneth  Martin 

1999 DDDDDDDDDD  Kit 雨 e DDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D  Insight  Segmentation  and  Registration  Toolkit(ITK)1 □  □  □  口 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD  Kit 靈 DDDDDITKDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  CMake  □□□□□□  autoconf/libtool  DDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD  CMake DDDDDDDDDDDDDDDDDDDD 

D  D  CMakeQ  CTestQ  CPack  口  □  □  □  CDash  □  □  CMake  □□□□□□□□□□□□□□□□ 

DDDDDDDDD  CTestD  DDDDDDDDDDDDDDDDDDDDDDDDDD  CPack 
DDDDDDDDDDDDD  CMake  D  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  CDash  □□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDD 


5.1 CMakeD  0  0  0  0  0 

CMake  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  UnixQ  D 

D  configure  □□□□□□  Makefile  □  □  Windows  □  □  Visual  Studio  DDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


^ttp: //www. itk.org/ 


DDDDDDDDD  CMake  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 

□  □□□□□□  1999  D  D  VTKQ  DDDDDDDDDDDDDDDD  UnixQ  D  configure  D 
D  D  D  D  D  Windows  DDDDDDDD  pcmaker  DDDDDDDDD  pcmaker  D  CD  D  D  D 
DDDDDDDD  Unix  □  Makefile  □□□□□□  Windows  □  □  NMake  □□□□□□□□□□ 

pcmaker  D  D  D  D  D  D  D  D  VTKCVSD  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□ 

DDDDDDDDDDDDDDDDD  TargeUrQ  D  gmake  DDDDDDDDDDDDDDD 
TargetJrQ  C++D  DDDDDDDDDDDDDDD  SunQ  DDDDDDDDDDDDDDD 


D 

D 

D 

D 

D 

D  D  D 

D  TargetJr  □  □  imake  D  D  D  D  D  Makefile  □□□□□□□  Windows  □  □  □ 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

D  D  D  D  D  gmake  □□□□□□  Unix  □□□□□□□  Windows  □ 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

D  gmake  DDDDDDDDDDDDDDDDDDDDDD  gmake 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

(□□□□□□□□□□□□□□)□□□□□□□ 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

DDDDDDDDD  Windows  DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

D  Windows  D  D  D  D  D  IDE(D  DDDDD)DDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

D  D  D  D  D  Windows  □□□□□  IDE  □□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

DDDDDDDD2DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

IDE  D  D  D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

DDDDDDDDDDDDDDDD  VTK(D  24D  )□□□□□  □ 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

DDDDDDDDDDDDDDDD  libtiff 口 libjpeg □□□□□□ 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

□□□□□□□ 

D 

D 

D 

D 

ITKD 

C++ 口 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D 

D  D  D 

D 

DDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

D  D  D  D  C++D  DDDDDDDDDDDDDD 

Visual  Studio  IDE  □ 

D 

D 

D 

DDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

□  □□□  (DDDDDDDDDDDDDDDDD 

D 

D  D 

D  D 

DDDDDDDDD 

D 

D 

D 

)D DDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D  D 

DDDDDDDDD 

D 

D 

D 

DDDDDDDDDD 

C/C++ 口  D  D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDD  CMake  □  C++D  DDDDDDDD 
DDDDDDDDDD  (C++D  DDDDDDDDDDD  C++D  DDDDDDDDDDDDDD 


82  CMake 


□  □□□)□□□□□□□  Tel  □□□□□□□□□□□□□□□  UNIX  Q  Windows  D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  CMake 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  CMake □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDD  CMake □□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDTclDDDDDDDDDDDDDD 
D  D  D  D  D  CMake  D  TdD  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDD 

IDED  DDDDDDDDDDDDDDDDDD  CMake  D  DDDDDDDDDDDDDDD 

□  □□□□□  CMake  DDDDDDDDD  ideq  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD 腿 □ □□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDD  CMake  D  DDDDDDDDDDDDD  itkq  D  D  D  D  D 

□  □□□□□□  CMake  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  C/C++D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  CMake  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  CMake  DDDDDDDDDDDDDDDDDDDDDDDD  Windows  □  Unix  D 
DDMacDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD VTKQ 

□  □□□□□  C++D  DDDDDDDDDDDDD  TclQ  Python  D  D  D  JavaQ  □□□□□□□ 
DDDDDDDDDDDDDD  C++D  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  C/C++D  DDDDDDDDDDDDDDDDDDD 

□  (□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□  C/C++D  □□□□□□ 
(口  □□□□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDD  IDE  DDDDDDDDDD  Makefile  DDDDDDDDDDD 

DDDDDDDDDDDDDDDDD  C/C++D  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  Autotools  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  CMake  □  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Bill  Hoffman  and  Kenneth  Martin  83 


nnnnnnnnn 

n 

n  n 

n 

n 

n  n  n  n 
i_i  i_i  i_i  i_i 

n  n  n  n  n 
i_i  i_i  i_i  i_i  i_i 

nnnnnnnnnnnnnnnnnn 

l_ll_ll_ll_ll_ll_ll_ll_ll_ll_ll_ILJI_ll_ll_ll_ll_ll_l 

nnnnnnnnn 

i_i  i_i  i_i  i_i i_i i_i  i _ ii _ ii _ i 

□ 

□  □ 

□ 

□ 

□  □  □  □ 

n  n  n  n  n 

1 _ II _ 1    LJ    l_l  l_l 

DDDDDDDDDDDDDDDDDD 

|_|1_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11_1 

门门 门门 门门 门门门 
□  □□□□□□□□ 

门 
□ 

OS 

门 
□ 

门 
□ 

门门 门门 
□  □  □  □ 

门门 门门门 
□    □    □    □  □ 

nnnnnnnnnnnnnnnnnn 
□  □□□□□□□□□□□□□□□□□ 

nnnnnnnnn 

n 
u 

n 
u 

#itdet 丄 inux 

//  Linux  Q  □  □  □  □ 

#endif 

DDDDDDDDD 

D 

D  D 

D 

D 

D  D  D  D 

D  D  D  D  D 

D 

#ifdef  HAS_FEATURE 
#endif 


D  D  D  CMake  □□□□□□  autotools  □□□□□□□□□□□□□□□□□□□□□□□ 


D  D 

D 

D 

D 

D 

D  D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D 

D 

□□□□□□□□□□□□□□□□□□□□□□□□□ 口 

口 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

DD 

D 

D 

D 

D 

D 

D  D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

□  C/C++D 

D 

DDDDD-cDDDDDDDD  -cppD  DDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

□□□□□□□□□□□□□□□□□□□□□□□□□ 口 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D 

D 

DDDDDDDDD  CMake  □□□□□□□□□□□□□ 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  API  DDDDDDDD  CMake  DDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  CMake  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  ITKQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  CMake  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Windows  □ 
Unix  DDDDDDDDDDDDDDDD 


5.2    CMakeD  0  0  0  0 

DDDDDD  CMakeD  DDDDDDDDDDDCD  C++D  DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  CMake □□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDD 


84  CMake 


CMakeQ  □  □  □  □ 

CMakeQ  DDDDDDDDDDDDDDDDDDDD  "D  D  (configure)"  D  DD  D  D  D  CMake 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" 
D  D  (generate)"  □□□□□□□□□□□□□□□□□□□□□ 


□  □□□  (DDDDDDDDDD) 
1999  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

DDDDDDDDDDDDDD  PROJECT—ROOT □  □  □ 

□□□□□□□ 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□□ 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□□ 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

CMake  D  D  DD 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□□ 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDD  CMake  D  □□□□□□□ 

DDDDDDD 

D 

D 

D  D 

D  D 

D 

CMake  Q  D  D  D  D  D  D  D  CMakeCache.txt  D  □□□□□□□ 

DDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  CMake  □ 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD  CMakeCache.txt DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  CMakeLists.txt 
DDDDDDDDDDDDD  CMakeLists.txt  D  DDDDDDD  CMake  D  DDDDDDDD 
DDDDDDDDDDDD  CMake  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  CMakeLists.txt  DDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  CMake  D  D  D  D  D  D  include  D  add—subdirectory  D  D  CMake  DDDDDDD 

□  □□□□□  C++D  DDDDDDDDDDDDDDDD  CMake  DDDDDDDDDDDDD 
DDDDDDD  add_library  Q  ifQ  add.executableQ  add_subdirectoryQ  □  □  □  include 
DDDDDDDDDDDDDDDD  CMake  □□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDD  CMake  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD  CMake  □□□□□  "口 

□  CMake  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  CMakeCache.txt  DDDDDDDDDDD  CMake 
DDDDDDDDDDDDDDDDD 


Bill  Hoffman  and  Kenneth  Martin  85 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  CMake  □□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  CMake  DDDDDDDDD  cmTarget  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDD  cmMakefile DDDDDDDDDDDDD 
cmMakefile  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  cmMakefile  □□□□□□□ 
DDDDDDDDD  cmTarget DDDDDDDDDDDDDDDDDD 


□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  CMake  D  DDDDDDDDDDDDDDD 

□  (□□□□□□□□□□□□□□□□□□□□□□)□□□□□□□□□□□  Visual  Studio 

□  □□  IDE  □□□□□□□□□□  make  □□□□□□□□  Makefile  □□□□□□□□□□□ 

DDDDDDDD  CMake DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  5.1 D  D  D  D 


Configure  Step 


Generate  Step 


Read  CMakeCache. 


CMakeLists.txt  Files 


Write  CMakeCache.txt 


Write 
Makefiles  or 
projects 


D  5.1:  CMake  D  □□□□□□□ 


86  CMake 


cmake: 

一 controls  the  cmake 

process 

一 can  be  created  and 

used  in 

various  GUIs 

Has  one 


、f 


cmGlobalGenerator 

一 abstract  base  class 

- child  classes  responsible  for 

platform-specific  build 

process 

Has  many 

、 

cmLocalGenerator 

一 abstract  base  class 

- child  classes  responsible  for 

platform-specific  build  file 

generation 

Has 

、 

cmGlobalUnixMakeTi LeGenerator 

cmGlobalVisualStudio6Generator 

cmGlobalVisualStudio7Generator 


_ 


Derive  from 


cmLocalUnixMakeTi LeGenerator 

cmLocalVisualStudio6Generator 

cmLocalVisualStudio7Generator 


Derive  from 


cmMakef ile 

一 Stores  all  the  information 
parsed  from  a  CMakeLists . txt 
file 

一 List  of  targets  and  variables 

- Optional  flags 

一 し ist  of  "Libraries 

一 List  of  include  paths 

一 Parses  CMakeLists . txt  files 


cmCommand 

- abstract  base  class 

一 child  classes  responsible  for 

implementing  all  commands  in 

CMake 


八 


Derive  from 


cmRemoveCommand 
cmSetCommand 
cmAddTest Command 


D  5.2:  CMake  □□□□□□□□ 


CMake:  □  □  □  □  □ 
CMake  DDDDDDDD 

CMake  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  C++D  DDDDDDDDDDDDDD  5.2Q  D  D  D 

D  D  D  CMakeLists.txt  DDDDDDDDDDDDD  cmMakefile  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  cmMakefile  □□□□□□□ 
CMakeLists.txt  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  lex/yacc  DDDDDDDD  CMake  DDDDDDDD  CMake  □□□□□□□ 

DDDDDDDDDDDD  CMake  DDDDDDDDDDDDDD  lexD  yacc  □□□□□□ 
DDDDDDDDDDDDDD  lexD  yacc □□□□□□□□□□□□□□□□□□□□□□ 
source  D  DDDDDDDDDDDDD 


Bill  Hoffman  and  Kenneth  Martin  87 


CMake  DDDDDDDDDDDDD  cmCommand  DDDDDDDD  CMake  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  cmUnsetCommand  DDDDDDDDDDDD 
DDDDDDDDD 


88  CMake 


virtual  const  char 大 GetTerseDocumentation() 

return  "Unset  a  variable,  cache  variable,  or  environment  variable. 

大 More  documentation. 

大 / 

virtual  const  char*  GetFullDocumentation() 
return 

" unset(<variable>  [CACHE])\n" 

"Removes  the  specified  variable  causing  it  to  become  undefined. 
"If  CACHE  is  present  then  the  variable  is  removed  from  the  cache 
"instead  of  the  current  scope . \n" 

"<variable>  can  be  an  environment  variable  such  as:\n" 
" unset(ENV{LD— LIBRARY— PATH})\n" 

"in  which  case  the  variable  will  be  removed  from  the  current  " 
"environment  ノ'; 


□  □□□□□□ 

CMake  DDDDDDDDDDDDDDDDDDDDDDD  Fortran  D  CD  D  D  C++  D  D  D 
DDDDDDDDDDDDDDDDDD  (IDE) □□□□□□□□□□□□□□□□□□□□ 

□  □□IDE  □□□□□□□□□□  CMake  DDDDDDDDDDDDDDDDDD  IDE  DDD 

□  □□□□□  CMake  D  IDED  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDD  IDED  DDDDDDDDDDDDDDDDDDDDDDD  IDEQ  DDDDDDDDD 
DDDDDDDDD 

Makefile  □□□□□□□□□□□  make  DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDD  CMake  □  □  □  □  □  CD  C++D  Fortran  □□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDD  CMake  D  DDDDDDDDDDDDDDDDDD 
D  D  D  D  D  CMake  DDDDDDDDDDDD  make  DDDDDDDDDDDDDDDDDD 
D  D  CMake  DDDDDDDD 

D  D  D  D  D  CMake  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  depend .make 口  flags.makeD  build. makeD  DDD  Dependlnfo. cmake 口  4Q  D  D  D  D  D 

□  □□□□□□  D  Ddepend.  makeQ  D  DD  D  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  flags.makeD  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Dependlnfo.  cmake 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Bill  Hoffman  and  Kenneth  Martin  89 


DDDDDDDDDDDDDD  build,  make  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDD.hDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


CTest  D  D  D  CPack 

DDDDDDDD  CMake □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
cmake  D  GUI  D  D  D  D  D  D  CMake  DDDDDDDDDDDDDDDDD  CTest  D  D  D  D  D 
DDDDDDDDD  CPack  DDDDDDDDDDDDDD  CTest  □  CPack  D  CMake  D  D  D 

DDDDDDDDDDDDDD  CMake  D  □□□□□□□□□□□□□□□□□□□□□□□ 

□□□□□□□ 

□  □□□□□  ctest  DDDDDDDDDDDDDDDD  CTest  □□□□□□□□□□□□ 
D  D  add—test  DDDDDDDDDDDDDDDDDDDDDD  CTest  DDDDDDDDD 

□  □□□□□□  CDash  DDDDDDDDDDDDDDDDDDDDDDDDDDD  CTest  □ 
CDash  D  DDDDDDDDDDDDDDDDDDD  Hudson  D  DDDDDDDDDDDDDD 

□  □□□□□□  CTest  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  CDash 
DDDDDDDDDDDDD  Hudson  DDDDDDDDDDDDDDDD  ssh  □□□□□□ 
Hudson  DDDDDDDDDDDDDDDDDD 

□  □□□□□  cpackQ  DDDDDDDDDDDDDDDDDDDDDDD  CPack  D  D  D  D 
CMake  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  Windows  DDDDDDDDDDDDDDD  NSIS  DDDDDDDDDDDDDDDDDD 
D  D  D  D  CPack  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  NSIS  DDDDDDDDDDDDDDDDDDDDDD  CPack  D  DDDDDDDDD 

D  D  D  D  RPMQ  Debian  .debQ  D  D  D  D  .tar  口  .tar.gzQ  DDDDDDDDD  tar  D  D  D  D 

D  D  D  D 


□□□□□□□□□□□□□□ 

DDDDDDDDDDDD  CMake  DDDDDDDDDD  CMake  DDDDDDDDDDD 
DDDDDDDDD  CMake  D  DDDDDDDDDDDDDDDDD  QtD  DDDDDDDDD 
DDDDDDDDDDDDDDDD  curses  DDDDDDDDDDDDDDDDDD  GUID  D 
CMakeCache.txt  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  configure (口  □  )  □  generate(D  D)DDDDDDDDDDDDDDDDDDDDDD 

D  D  CMake  DDDDDDDDDDDDDD  curse  □  □  □  □  GUID  D  Unix  D  D  TTY  □  □  □  □ 

D  D  D  D  D  CygwinD  DDDDQtD  GUID  DDDDDDDDDDDDDDDDDDDDDD 
D  GUI  □  □  □  □  □  5.3  D  D  5.4  □  □  □  □ 


90  CMake 


一 deuelopncnt 


c]  to  conf iour©         Press  [g]  to  generate  and  «xit 

h]  for  help  Preee  [q]   to  quit  without  generating 

t ]   to  toqqle  advanced  mode  ( Current  In  Off) 


D  5.3:  DDDDDDDDDDDDDDDD 


Wnere  is  Ihe  source  code:    [c:A»ftnwi^r  Buids/CMske  IBrowse  Soifce...| 

Where  U  bid  the  brahet:  C;^»ftm»nWy  BJds/CMake*uld26   一  I  BnmseBiid...  I 


Press  ConfigLre  to  i^xlate  and  dSptay  new  vakjes  ri  red,  then  press  Generate  to  generate  tetected  txJC  Se». 


f onflgure 」 ; eiefa 色     Qrrent  Gcneritorr  Uhbi  W^aifci 


D  5.4:  DDDDDDDDDDDDDDDDDD 


D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

DDDDDDDD 

口  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

DDDDDDDD 

口  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

DDDDDDDD 

口  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDD  CMakeLists 

txt 

DDDDDDDD 

口  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

DDDDDDDD 

口  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

DDDDDDDD 

口  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

DDDDDDDD 

口  D 

D 

D 

D 

D 

GUI  口 

"generate"  DDDDDDDDDDDD  configure  □ 

D  D 

DDDDDDDD 

口  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

口  D 

D 

D 

D 

D 

D  D  D 

generate  DDDDDDDDDDDDD 

r  r  r  r 

p  p  p  p 


Bill  Hoffman  and  Kenneth  Martin  91 


CMakeD  □  □  □ 

CMake  DDDDDDDDDDDDDDDDDDDDDDDDDD  CMake  □□□□□□□ 

DDDDDDDDDDDDDD  CMake  D  DDDDDDDDD  (CMakeQ  CTest 口  CPackQ  D  D 


CDash)  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD  CMake □□□□□□ 

i j  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i _ i  i _ i  i _ i  i _ i  i j  i j 

D 

D 

D 

(CTest 

□  □□□)□□□□□□□□  CDash  DDDDDDDDDDDDDDDDDDD 

L J     L J     L J     L J    ノ    1 1     1 1    1 1    1 1     1 1     1 1     1 1     1 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1  1 _ 1     1 J     1 J 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

i j  i j  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i i  i j  i j 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  CMake  □ 

D 

D 

D 

D 

D 

D 

nnnnnnnn  nn  n  n  n  n  n  n  n  rMakp  nnnnnnnnnnnnnnn 

n 
u 

n 
u 

n 
u 

D 

D 

D 

DDDDDDDDDDDD  CMake  □□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

5.3    □  □ 

CMakeD  ITKQ  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  CMake  DDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 


□  □  □  □ 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D  CMakeD  DDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDD 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

DDDDDDDD 

D 

D  CMake DDDDDDDDDDDDDDDDDDDD 

CMake 

D  D 

D 

D 

D 

DDDDDDDD 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

□  CMake  2.6  □  □ 

D 

DDDDDDDDDDDDDDDDD  CMake  □  □  □  □ 

D  D  D 

D  D 

D 

D 

D 

DDDDDDDD 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

DDDDDDDD 

D 

D  D  D  D  CMake  D  □□□□□□  CMakeLists.  txt  D  D 

D  D  D 

D  D 

D 

D 

D 

DDDDDDDD 

D 

□  □□□□□□  CMake  DDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

DDDDDDDD 

D 

DDDDDDDD 

92  CMake 


DDDDDDDDDD 


CMakeD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  CMake □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
D  D  D  CMake  DDDDDDDDDDDDDDDDDDDDDDDDDDD  lex/yacc  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDD  CMake  □□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□  LuaQ  DDDDDDDDDDDDDDDDDDDDDDDDD  LuaQ  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


nnnnnnnnnn! 

CMake  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDD  CMake  D  □□□□  <:□□□□□□ 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD CD 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDD32DDD/64DDDD  Windows □ 

Linux  口 

D 

D 

D 

D 

D 

D 

D 

API 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  CMake  □□□□□□  CMake  DDDDDDDDDDDD 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDD  CMake  D  D  D  D  D  D 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDD 

D  D  apid  D  D 

CMake  DDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDD  CMake  D  DDDDDDDDDDDDDDDDDD  CMake 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  CMake □□□□□□ 
DDDDDDDDDDDDDDDD  CMake DDDDDDDDDDDDDDDDDDDDDD 
D  DD 


93 


d  6n 


□□□□□□□□□□□□ 

C.  Titus  Brown  and  Rosangela  Canino-Koning 


D  D 

D 

D 

D 

D 

D 

D  D  D  D  D  (Continuous  Integration:  CI)  D  D  D  D  D 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□CI 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

□  CI  口 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DCID  DDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  Buildbot □  □  □ 

D 

□  / 口 

D 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  CDash  DDDDDDDDDDD  Jenkins  D  D  D  D 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

Pony-Build  □ 

Python  D  DDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D 

D  D 

D  D  D 


6.1 □□ 


n 
U 

n 
U 

D  D 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n  n 
U  U 

n 
U 

DD 

n 
U 

n 
U 

n 
U 

nnn/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n  n 
U  U 

n 
U 

n 

n 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n  n 
U  U 

n 
U 

n 

n 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

D 

D 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnn  Rm'iHhrvt  nnnnnnnnnnnnn 

D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□  buildmaster  □□□□□□□□□□□□□□□□□□□□□□ 

DD 

D 

D 

D 

D 

D 

D 

DDDDDDDDD  buildd 顯 DDDDDDDDDDD  buildmaster  □  □  □ 

DD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  buildslave  □  buildmaster  DDDDDDDDDDDDDDDD  buildslave 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

buildmaster  □□□□□□□  buildslave  □  □  buildmaster  DDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D 

DDDDDDDDDDDDDDDDDD  CDash  D  D  D  D  D  Kitware,  Inc.  Q  Visualization 
Toolkit  (VTK)/Insight  Toolkit  (ITK)  □□□□□□□□□□□□□□  CDash  □□□□□□□□ 


D 

D  D 

D 

D 

D 

D 

D 

D  D  CMake  D  D  D  CTest  □□□□□□□□□□□□□□□□□□□□□□ 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  CDash  □□□□□□□□□□□□□□ 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD  CDash  D  D  D  D  D  D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDD  Jenkins  (D  D  D  D  Hudson  DDDDDDDD  2011 D 

D 

D  D 

D 

D 

D 

D 

D 

)□□□□□□□□□□□□□□□□□□□□  Jenkins  DDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  Jenkins  □  □ 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  Jenkins  DDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD  BuildbotQ  CDash D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□(□□□□)□□□□□□□□ 

D 

D  D 

D 

D 

D 

D 

D 

D 

? D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD -DDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD? 

96  □□□□□□□□□□□□ 


□  □  □  □  □ 

□□□□□□□□□□□□□□□ 

□  D  ? 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

□  □□□  cronDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

vcs  □□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D  UNIX  □□□□□□  Python  □  □  □  □ 

DDDDDDDD7DDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D  D  D  D 

cd  /tmp  &&  \ 

svn  checkout  http://some.project.url &&  \ 
cd  project—directory  &&  \ 
python  setup. py  build  &&  \ 
python  setup. py  test  | |  \ 

echo  build  failed  |  sendmail  not if ication@project . domain 
cd  /tmp  &&  rm  -f r  project—directory 


D 

6.1 D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D  DD 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D  D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D  D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D  D 

D 

D 

D  (CPUD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D  D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D  D 

D 

D 

DDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDD 

□□□□□□□)□□□□□□□□□ 

DDDDDDCIDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDD 


D 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□  CI  □□□□ 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

□  □□□  VCS  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  (Mac  OS  X  □  Windows  D  UNIX  D 

D 

)OSD 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDOSDDDDDDDDD 

□  □(□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D)DDDDDDDDDDDDDDDDDDDDDDCIDDDDDDDDDDDDD 
DDDDDDDDDDDDD 


C.  Titus  Brown  and  Rosangela  Canino-Koning  97 


Build  configuration 


Remote  execution 


Build  outcome 


Build 
monitoring 


Product 
aggregation  and 
reporting 


□  6.1:  DDDDDDDDDDDDDDDDDDDDD 


□  □□□□□□ /□□□/□□□  (DDDDDDDDDD 


D 

D 

D 

D 

D 

□                                (□□□□□□  )□□□□□□□□□□  (□□ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD)DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

□  □(□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

□  □□□□?)□□□□□□□□□(□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

?)  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDCIDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

98  □□□□□□□□□□□□ 


|— 1 

D 

D 

D 

D 

D 

D 

i ~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ i  i ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~ ii ~ i 

□ 

□ 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□ 

C] 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□ 

□ 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD 

i— i 

D 

i— i 

D 

D 

D 

D 

n 

D 

门门门门门门门门门门门门门门门门门门门门门门门门门门门门门 /~it  n 

□ 

□ 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□ 

□ 

D 

D 

D 

D 

DDDDDDDDDDDDD  CPU  DDDDDDDDDDDDDDDDD 

□ 

□ 

D 

D 

D 

D 

DDDDDDDDDDDDD 

门 

□ 

门 

□ 

门 

□ 

门 

□ 

门 

□ 

n 

门门 门门 .门门 门门 门门 门门 门门 门门 门门 门门 门门 门门 门门 门门 门门 门门 

门 

□ 

门 

□ 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□ 

□ 

D 

D 

D 

D 

CIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□ 

□ 

D 

D 

D 

D 

□  □  □  □  □ 

D 

D 

D 

D 

D 

D 

□ 

□ 

DD5DDDDDDDDDDDDDDDDDDDDDDDDDDD30DDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

6.1 □□□□□□□□□  CID 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


□  □  □  □  □ 

□ 

□  □  □  □  □ 

□ 

□  □  □  □  □ 

□ 

□□□□□□ 

□  D 

□  □  □ 

DDDDDDDDD 

□  □  □  □  □ 

DDDDDDDDD 

□  □□□□□ 

□ 

□□□□□□ 

□  D 

□  □  □ 

□ 

□ 

□□□□□□ 

□  D 

□  □  □ 

DDDDDDDDD 

□  □  □  □  □ 

DDDDDDDDD 

□  □□□□  (□□□□  RSSD  RPC  □□)□□□□□□□□□□□□□  (□□□□  Twitter  口 
PubSubHubbub 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D  D  D 

D 

D  D 

D 

D  D 

D  D 

D 

D 

RPCDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

□  □□□□□□  (DDDDDDDDDDD)DDDD 

D 

D  DD 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDD  CI  DDDDDDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDD 


D  D  D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDD  VCS  □□□□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□  RPC 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

RPCQ 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDD 

C.  Titus  Brown  and  Rosangela  Canino-Koning  99 


n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 

rpc  nnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 

nnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

nnnnnnnnnnnnnnn  r^i nnnnnnnnnnnn 
UUUUUUUUUUUUUUU し 1UUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD  CID 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDD 

6.2  □□□□□□□ 

Buildbot D  CDash DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□  (□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


□  Buildbot 


D  6.2:  Buildbot  DDDDDDDD 

Buildbot  Q  □□□□/□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


100  DDDDDDDDDDDD 


n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n  n 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 

u  u 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

nnnnnnnnnnnnnnnnnnnn ひ' n  n  n  n  n  n  n  n 

n  n 

D  D  D 

D 

D 

D 

n 
U 

)U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 

D  D  D 

D 

D 

D 

n 
U 

n  n  n 

u  u  u 

nnnnnnnnnnnnosnnnnnnnnnnnnnnn 

n  n 

u  u 

D  D  D 

D 

D 

Buildbot  口 

n 
U 

n  n  n 
U  U  U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DD 

D  D  D 

D 

D 

D 

n 
U 

n  n  n 
U  U  U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

n 
U 

n  n  n 
U  U  U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

GUI 

D  D  D 

D 

D 

D 

n 
U 

n  n  n 
U  U  U 

□  □□□□□□□□□□□□□□□□□□□□□□□□  OS 

D  D 

D  D  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDD 

Buildbot  口 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD  Buildbot  □  buildmaster  □□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Buildbot 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□ 
□□□□□□□□□□□□□□□□□□)□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  buildslave 
DDDDDDDDD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  buildslave 


DDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDD  OS  D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDD 

Buildbot  DDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  buildslave DDDDDDDDDDDDDD  buildmaster DDDDDDDDDDDDDDDD 
D  D  APID  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Buildbot  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  buildmaster 
D  buildslave DDDDDDDDDDDDDDDDDDDDDDDDRPC DDDDDDDDD 
DDDDDDDDDDDDDDDDDD 

□  □□□/□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
D  D  D  buildslave  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD 


C.  Titus  Brown  and  Rosangela  Canino-Koning 101 


DDDDDDDD  CPU □□□□□□  build 匪 ter DDDDDDDDDDDDDDDDDD 
D  D  D  D  build 匪 terQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

buildmaster  □□□□□□□□□□□ 


□  CDash 


D  6.3:  CDash  □ 


□  □□□□□□ 


Buildbot  □□□□□□□  CDash  DDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  CDash  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  XMLQ  DDDDDDDDDDDDDDDD  "□□『□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD  CDash  □  □  □  □  □  Kit 靈 □  □  □  □  □ 

□  □□  (DDDDDDDDDDDD  CMakeQ  DDDDDDDDDD  CTestQ  DDDDDDDD 
DDDDDDDDD  CPack)  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  OS  □□□□□□□□□□□ 

CDash  DDDDDDDDDDDDDDDDDDDDDDDD  CI  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□  (□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□"□□□□□"□DO 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  CDash  □  □  Buildbot  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

102  DDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD-DDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□ 

D  D  D  CDashQ  DDDDDDDDDDDDDDDDDDDD  "@Home"D  DDDDDDDD 
DDDDDDDDDDDDD  CDash □□□□□□□□□□□□□□□□□□□□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  2010  □ 10  □□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 

n 

n 

n 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 

n 

n 

n 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 

u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnnn                 nnnnnnnnnnnn          "D,,ii/~i n 
UUUUUUUUUUUUUU    ^Home  UUUUUUUUUUUU  rony-tsuua  □ 

n 
U 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDD 

□  Jenkins 

Jenkins  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  Java  □  □ 

D 

D 

D 

D 

D  D  2011 D  D  D  D  D  D  Hudson  D  DDDDDDDDDDDDDDDDDDDD  CID 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  JUnitQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  XMLD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Jenkins  D  D  D  SunQ  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD 

Jenkins  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□□□□□□□□□ 

□  )□□□□□□  BuildbotQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Jenkins  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  SSHQ  D 
DDDDDDDDDDDDDDDDDDDD 肌 P  (Java  Web  Start)  □□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Jenkins  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDD  Jenkins  □  □ "locks"  □□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  2011 □ 1 □  □  □  □  □ 

□  □□□□□ 


C.  Titus  Brown  and  Rosangela  Canino-Koning 103 


□  Pony-Build 


D  6.4:  Pony-Build  □□□□□□□□ 

Pony-Build  D  □□□□□  CIDDDDDDDDDDDDDDD  Python  D  □□□□□□  6.4  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDVCSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

APID  DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□  WebHookQ  RPC  □□□□□□□□□□□□□ 

D 

D  D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□  vcs  □□□□□□□□□□ 

D 

D  D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD  PubSubHubbub (PuSH) □  □  □  □  □ 

D 

DD 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD  "口  □□□『□□□□  (DDDDDDDD 

D 

D  D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

□  □□)□□□□  Push  WebHook  DDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  WebHookQ  □□□□□□ 


104  DDDDDDDDDDDD 


D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

i— i i— i 

D  D 

D 

D 

D 

□                                              WebHookD  DDDDDDDDDDD 

D 

D 

D 

□  □□□□□□  WebHookD  DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

nnnnnnnnnnnn 

uuuuuuuuuuuu 

D  D 

D 

D 

D 

nnn-nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

D 

D 

D 

nnnnnnnnnn 

uuuuuuuuuu 

i— i i— i 

D  D 

D 

T—l 

u 

n 

D 

n-nnnnnnnnnnnnnnnn  pvthnn  nnnnnnnnnnnnn 

n 
U 

n 
U 

D 

D 

D 

nnnnnnnnn 

i— i i— i 

D  D 

D 

D 

D 

nnnnnn-nnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
u 

n 
u 

D 

D 

D 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 

u 

n 

u 

D 

D 

D 

nnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuu 

vcs 

i— i 

D 

D 

D:DDDDDDDDDDDDDDDDDDDDDDDDDVCSDDDD 

D 

D 

D 

T—l 

D 

T—l 

D 

D  D 

D  D  D 

n 
U 

n 
U 

D 

D 

D 

n 
U 

n 
U 

D  D  D  D  D  XML-RPCD  DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDD 

DDDDDDDDDDDDDDDDDD  CDash DDDDDDDDDDD 


D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  CDash  □  □ 

DDCIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDCD  DDDDDDDDDDD  )D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD 


C.  Titus  Brown  and  Rosangela  Canino-Koning 105 


D  D  D 

nnnnnnnnn-nnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

n  n 

nnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

n  n 

n  I-!  Rnilrlhrvt 门门门门门门门门门门门门门门门门门门门门门 

U  U  d  una  Dot  UUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

u 

n  n 

u  u 

nnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D 

DD 

I ~~ 1 I ~~ 1 I ~~ 1 • 1 "           . 1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1  1 ~~ 1 1 ~~ 1 

D  D  D  Buildbot  DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

(□□□□□□□□□□□□□□□□□□)□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDD  Pony-Build (口  DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

□)□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Pony-Build  口 

D 

D 

D 

D 

CIDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□ 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 


D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

CDash  DDDDDDDD 

DDDDDDDDDDD  CDash  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  CMake  Q  CTest  □  □  □  CPack  □□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

DDDDDDDDDDD  CIQDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

DDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

DDDDDDDDDDDD  Python  □  □ 

D  D 

D 

distutils  □ 

distutils2  D 

D 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

Python  D  DDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D  D  D  D  distutils  D 

□  □□□  (DDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

106  DDDDDDDDDDDD 


□  D 


□  □□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCIDDDDDD 
DDDDDDDDDDDDDDD)DDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□  (□□□□□□□□□□□□□□□□□□□□)  口 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Python  □□□□□□ 
D  D  D  D  D  distutils2D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
CI  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


□□□□□□□□□ 

DDDDDDDD  RPCD  WebhookQ  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
(口  □/□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

CIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

CDash  Q 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

□□□□□□ 

D  D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□  "口  □□□□□□ 

" 

D 

D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

□  □□CI  □□□□□□□□□□□□□□□□□□□□□□□ 

C.  Titus  Brown  and  Rosangela  Canino-Koning 107 


6.3    □  □ 


Pony-Build  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□DO 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDCIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (DSL) □  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□DO 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□  Perl  □□□□□□□□□□□□□  TAP(The  Test  Anywhere  Protocol) 

D  JavaQ  DDDDDDDDDDDD  JUnit  D  XMLQ  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□□DO 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□ 
DDDDDDDDDDD  )APID  □□□□□□□□□  CI  □□□□□□□□□□□□□□ 
DDDDDDDDDDDDDD 


□  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Jenkins □□□□□□ 
□□□/□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


108  DDDDDDDDDDDD 


n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnn  d ハ n,r  "d,"'"m  n  n  n  n  n 
UUUUUUUUUUUUUUUUUUUUU  Fony-Bmld  U  U  U  U  U 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  r^r^ocK  nnnnnnnnnnnnnnnnnnnnnnn 

D  D  D 

D 

D 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnn  d 八 d";"m  nnnnnnnn 
UUUUUUUUUUUUUUUUUU  Fony-build  UUUUUUUU 

D  D  D 

D 

D 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

D  D  D 

D 

D 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

Buildbot  D 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnnnn  Da«,,  d,,;"m  nnnnnnnnnnn 

UUUUUUUUUUUUUUU  Pony-Build uuuuuuuuuuu 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  Buildbot  Q  CDash  D  D  D  Jenkins  □□□□□□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD  Buildbot  D  CDash  D  DDDDDDDDDDD 

D  D  D  D  D  Jenkins  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  CDash  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  Buildbot  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD  Buildbot  D  DDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDD  Jenkins  □□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDD  GUID  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD? 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDD  Buildbot □□□□□□ 

D  D  D  D  D  Pony-Build  DDDDDDDDDDDDDDDDDDDDDDDDDDD  Buildbot 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 


C.  Titus  Brown  and  Rosangela  Canino-Koning 109 


□  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  (□□  Pony-Build) □□□□□□□□□□ 

DDDDDDDDDD  Pony-Build  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


110  □□□□□□□□□□□□ 


d  7n 


Eclipse 

Kim  Moir 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  Eclipse  DDDDDDDDDDDDDDDDDDDDD  2010  □  6  □  □ 

Eclipse  Foundation  □  Helios  □□□□□□□□□□  39  □□□□□□□□□□□  40  D  D  D  D  D 

D  D  D  D  490  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  Eclipse  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
2001 □ 11 □  7DDDDDDDDDDDDDDDDDDDDDDD  l-OD  DDDDDDDD 


D  D 

D 

D 

EclipseQ  D  D  D  Eclipse  □□□□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  Eclipse  □□□□□□□□□□□ 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDD  EclipseQ  DDDDDDDDDDDDDDDDDDD 
Eclipse  SDK  DDDDDDDDDDDDDDDDDDD  Eclipse  SDK  DDDDDDDDDD 
D  D  Eclipse  SDK  □  □  □  □  Eclipse  DDDDDDDDDDDDDDDDDDD 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  EclipseQ  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDIBMDDDDD  VisualAge  for  Java  D  D  D 
DDDDDDDDDDDDD  Eclipse  D  DDDDDDDDDDDDDDDDDDDDD  IBMD 

□  □□□□□  Object  Technology  International  (OTI)  DDDDDDDDDDDDDDDDDD 


DDDDDDDD  Eclipse DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  D  D  D  D  D  D 

□  □□□□□□□□□□□□□□  BorlandD  IBMD  Merant  口  QNX  Software  Systems  口  Rational 
SoftwareQ  RedHatQ  SuSEQ  □  □  □  TogetherSoft  □  □  □  □ 


D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  □ 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

Linux  DDDDDDDDDDDDDD  2004  □  □  □  □  Eclipse  Foundation  □ 

D 

D 

D 

D 

DD 

D 

D 

D  D  D  Eclipse  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  D  DDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDD 170  D  □□□□□□  1000  D  DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  "Eclipse"  DDDD  SDK  □□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□  2010  D  7Q  D  D  D  D  D  eclipse.org  DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

250  D  D  D  D  D  C/C++D  PHP  D  D  D  Web  □□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD  (TLP) □□□□□□□□□□□□□□□  (PMC) □ 

D 

D 

D 

D 

D 

D 

DPMCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse1 

D  D  D  Eclipse  SDK  DDDDDDDD  Equinox2  □□□□□□□□□□□□□□□□□□□□ 
Eclipse  DDDDDDDDDDDDDDDDDD  Eclipse  □□□□□□□□□□  3.0D  3.4Q  D 
DD4.0DDDDDDDDDDD 


7.1 ODD  Eclipse 


21 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD  Eclipse  DDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD  Eclipse  DDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

Java  Development  Tools  (JDT)  DDDDJDTDDDDDDDDDDD 

Java  口 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDD 

!http: //www. eel ipse. org 

2http: //www. eel ipse.org/equinox 


112  Eclipse 


Eclipse  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  Eclipse  SDKQ  D  D 
口  □□□□□□□□□□□□  Eclipse  □□□□□□□□□□□□□□□□□  Java  □□□□  口 
口 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  口 
口 □□□□□□□□□□□□ 


D  7.1:  Java  D  D  D  D  D  D  D  D 
DDDDDDDD  Eclipse  SDK  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□[J  JDT  (Java  Development 
Tools)  口  ロロ  口  PDE  (Plug-in  Development  Environment)  口  口 

DDDDDDDD 

Eclipse  DDDDDDDDD  Java  DDDDDDDDDDDDDD  Java  VM  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDD  JAR DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  plug-in. xml □□□□□□□ 

DDDDDDDDD  JDT  QD  Java  DDDDDDDDDDDDDDDDD  Plug-in  Development 
Environment  (PDE)  DDDDDDDDDDDD  Eclipse  DDDDDDDDDDDDDDDDD 
Eclipse  D  □□□□□□  JavaQ  DDDDDDDD  JavaQ  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  HTML □□□□□□□□□□□□□□□□□□□□□□□ 口 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 


Pa  一6  E' 


■  •Prriilems       Javadoc       Iteclsialion   メ  Console  ■•       ,■  ■ 


eposito;y.iools\5c;ipis\builcHntJARs.xmi 


ノ 


£l  =  EH 二  一〕  D レ; 二:」;〕 S 


Kim  Moir 113 


D  D  D  plugin.xml D  requires  DDDDDDDDDDDDD  org. eclipse. ui  D  D  D  D  D  D 

plugin.xmlQ  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD 

<?xml  version="1 . 0"  encoding="UTF-8"?> 
<plugin 

id="org. eclipse. ui" 

name="%Plugin. name" 

version="2. 1.1" 

provider-name="%Plugin. providerName" 
class="org. eclipse. ui . internal. UIPlugin"> 


<runtime> 

く library  name="ui . jar 
ぐ export  name="*"/> 
ぐ packages  prefixes 

</library> 
</runtime> 
<requires> 

く import  plugin 

く import  plugin 

く import  plugin 


"org. eclipse. ui"/> 


org. apache . xerces'7> 
org. eel ipse. core. resources'7> 
org. eclipse. update. core"/> 


く import  plugin: 
く import  plugin: 
く import  plugin: 
</requires> 
</plugin> 


'org. eclipse. text"  export="true'7> 

'org. eclipse. ui .workbench . texteditor"  export="true'7> 
'org. eclipse. ui .editors"  export="true"/> 


Eclipse  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  Eclipse  DD  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDD  public  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  APIQ  DDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□  Eclipse  D  □□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDD  org. eclipse. ui  DDDDDDDDDDDD  actionSetsQ  D  D  D  D  D 

<extension - point  id="actionSets"  name="%ExtPoint . actionSets" 

schema="schema/actionSets.exsd"/> 
<ex tens ion-point  id="commands"  name="%ExtPoint . commands" 

schema^" schema/commands . exsd"/> 
<extension - point  id="contexts"  name="%ExtPoint .contexts" 

schema="schema/contexts . exsd"/> 
く extension - point  id="decorators"  name="%ExtPoint . decorators" 

schema="schema/decorators . exsd"/> 
<extension - point  id="dropActions"  name="%ExtPoint . dropActions" 

schema="schema/dropActions.exsd"/>  = 


114  Eclipse 


D  D  D  D  D  D  org. eclipse. ui.actionSetQ  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDD 

<?xml  version="1 . 0"  encoding="UTF-8"?> 
<plugin 

id="com. example. helloworld" 
name="com. example . helloworld" 
version="1 . 0 . 0"> 
<runtime> 

く library  name 二'' helloworld. jar"/> 
</runtime> 
<requires> 

<import  plugin="org. eclipse. ui'7> 
</requires> 
<extension 

point="org. eclipse. ui .act ionSets"> 
OctionSet 

label="Example  Action  Set" 
visible="true" 

id="org. eel ipse. helloworld. act ionSet"> 
<menu 

label="Example  &Menu" 
id="exampleMenu"> 
<separator 

name="exampleGroup"> 
</separator> 
</menu> 
Oction 

label="&Example  Action" 
icon=" icons/example . gif " 
tooltip 二'' Hello,  Eclipse  world" 

class="com. example . helloworld . actions . ExampleAction" 

menubarPath="exampleMenu/exampleGroup" 

toolbarPath="exampleGroup" 

id="org. eel ipse. helloworld. act ions. ExampleAction"> 
</action> 
</actionSet> 
</extension> 
</plugin> 

Eclipse  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  Eclipse  D  DDDDDDDDDDDD  APIQ  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  Eclipse  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□ 
□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Kim  Moir 115 


DDDDDDDDDDDDDDDDD  org.eclipse.ui.actionSet DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


( Resource  -  Welcome  -  Eclipse  Platform 

File   Edit   Navigate   Search  Project 

Example  Menu  Run   Window  Help 

^  Example  Action 

□  7.2:  Example  □  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

package  com. example . helloworld . actions ; 

import  org. eclipse. j face. action . I Act ion ; 

import  org. eclipse. jf ace. viewers. I Selection; 

import  org. eclipse. ui . IWorkbenchWindow; 

import  org. eclipse. ui . IWorkbenchWindowActionDelegate; 

import  org. eclipse. jface. dialogs. MessageDialog; 

public  class  ExampleAction  implements  IWorkbenchWindowActionDelegate 
private  IWorkbenchWindow  window; 

public  ExampleAction ()  { 


public  void  run(IAction  action)  { 
MessageDialog.openInformation( 
window. getShell() , 
"org. eclipse. helloworld" , 
"Hello,  Eclipse  architecture  world") ; 


public  void  select ionChanged(IAct ion  action,  ISelection  selection) 


public  void  dispose()  { 


public  void  init (IWorkbenchWindow  window) 
this. window  =  window; 


D 

D 

D 

D  D 

D  D 

D 

D 

D  D 

D  D 

D 

D 

D  D 

D  D 

D 

D 

D  D 

116  Eclipse 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  "Hello,  Eclipse  architecture  world"  □□□□□□□ 

□  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDD  Eclipse  □□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD 

Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  7.3  □□□ 

D  D  Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  7.3:  D  D  D  Eclipse  DDDDDDDD 


□  □□□□□□  Eclipse  D  DDDDDDDDDDDDDDDDDDDDD  UIQ  D  D  D  Eclipse 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  JavaD  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 

Eclipse  □□□□□□□  Standard  Widget  Toolkit  (SWT)  □  JFace  DDDDDDDD  SWT  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ OS  □ 


Kim  Moir 117 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□  OS  □□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□  OS  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□□  OS  □□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDD 

□  □□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□■□□DO 

□  □□□□□□□□□□□□□□□□□□□□□  OS  □□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  OS  □□□□□□□  OS  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□OS 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□(□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  Windows  Presentation  Framework  (WPF)  □□□□□□)□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDD OS DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□  OS  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDD  Smalltalk-80  DDDDDDDDDDD  Smalltalk-80  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  Smalltalk  D  DDDDDDDDDDDDDDDDDDD  Smalltalk  D  DDDDDDDD 
DDDDDDDDDDDDDDDD 

C  D  C++D  □□□□□□□□□□□□□  Java  □□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDD  Abstract  Window  Toolkit  (AWT)  □  □  AWT  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSunDDDDD  AWTQ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  SwingD  DDDDDDDDDDD 
DDDDDDDDDD DD DDDDDDDDD 

1999  D  D  D  OOTID  JavaQ  □  □  □  VisualAge  Micro  Edition  Q  DDDDDDDDD  VisualAge 
Micro  Edition  DDDDDDDDDD  Swing  DDDDDDDD  OTID  Swing  □□□□□□□ 

□  □□□□□□  Swing  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  OTIDD  Smalltalk-80  □  □  □ 

D  D  Smalltalk  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Smalltalk  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDD D  DSWTQ DDDDDDDDDDD 

D  D  D  VisualAge  Micro  Edition  □  SWT  □□□□□□□  Eclipse  □□□□□□□□□□□□□ 

□  □□□□□  SWT  DDDDDDDDDD  Swing  □  □  □  □  SWT  □□□□□□  Eclipse  □  □  □ 

□  □□□□□  JavaQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse 


118  Eclipse 


n  n 
U  U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n  n 

u  u 

n 

u 

n 

u 

D  D 

D 

D 

D  D 

D 

D 

D  D 

D 

D 

D  D 

D 

D 

D  D  SWT  DDDDDDDDDD  Java  □□□□□□□□□□□□□□□□□  Eclipse 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  JavaQ  D  D 
DDDDDDDDDDDDDDDDDD 

Eclipse  SDKQ  D  Linux  Q  Windows  Q  D  DDDDDDDD  2010  D  D  D  D  D  D 10D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Java  □ 
DDDDDDDDDDDDDDDDDDDDDDDD  JavaQ  DDDDDDDDDD 
DDDDDDDDDDDDD  Eclipse □□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD SWTQ DDDDDDDDD 
JFace  D  SWT  DDDDDDDDDDDDDDDDDD  Ui  □□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  SWTQ  D  D  D  JFace  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  JFace  □  □  □  □  Java  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD HTML  □□□□□□ 
DDDDDDDDDDDDDDD XMLQ DDDDDDDDDDDDDDDDDDDDDD 

D  (Table  of  Contents:  TOC)  □□□□□□□□□□□□□□□□□□□  TOC  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
org.  eclipse  -  help  -  toe  DDDDDDDDDDDDDDD  org.eclipse.platform.doc.  isv 
D  plugin.xmlQ  D  D  D  D  D  D 

<?xml  version="1 . 0"  encoding="UTF-8"?> 

<?eclipse  version="3 . 0"?> 

<plugin> 


-- Define  primary  TOC 

<extension 

point="org. eclipse. help. toe" 
<toc 

file="toc.xml" 
prima ry="true"> 

く/ toc> 

<index  path="index"/> 
</extension> 


Define  TOCs 


<extension 

point="org. eclipse. help. toe" 
<toc 


KimMoir 119 


file 

く/ toc> 
<toc 

file 

く/ toc> 
<toc 

file 

く/ toc> 
<toc 

file 

く/ toc> 
<toc 

file 

く/ toc> 
</extension> 

Apache  Lucene  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


D  D  D  Eclipse  DDDDDDDDDDDD  Tomcat  D  Web  □□□□□□□□□□ 

D 

D  D 

D 

D 

D 

□  □□□□□  Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD3 

Eclipse  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

□  □□□□□□  JavaQ  DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

DDDDDDDD 

Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

APID 

D 

D 

DDDDDDDD  API  DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  D 

D 

D  D 

D 

D 

D 

□  □□□API  □□□□□□□□□□□□□□  API  □□□□□□□□□□□□□ 

D 

D  D 

D 

D 

D 

□  □□□□□□  APID  DDDDDDDDDDDDDDDDDDDDDD  APIQ 

D 

D  D 

D 

D 

D 

□  □API  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□  Eclipse  D  D  D  D 

DDDDDDDDD  APID  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDAPIDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□ 


= topics— Guide. xml 


="topics— Reference . xml 


="topics— Porting. xml 


=" topics— Questions . xml 


="topics_Samples. xml 


Java  Development  Tools  (JDT) 

JDTDDDDDDDD  JavaQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  Java  SDK  D  Eclipse  D  DDDDDDDDD 

3D  D  D  D  D  http://help.eclipse.orgD  D 
120  Eclipse 


□  □□□SDK  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  JDTDDDD 
DDDDDDDDDDDDD  Eclipse  □  □  □  Java  □□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDD  VisualAge  Micro  Edition  DDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  JDTQ 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

IDED 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDD  Eclipse  □  Java  □□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  □  □ 

DDDDDDDDDDDDDD  -javaQ  D  DDDDDDDDDDDDDDD  (.class  □  □  □ 

□  )□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□ 

□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Java  □ 

DDDDDDDDDDDDDDDDDDDDDDJDTDDDDDDDDDJavaDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDD 


□  □□□□□□□□  (PDE) 

DDDDDDDDD  (Plug-in  Development  Environment:  PDE)  DDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  □  □  □  □  □ 
D  D  D  D  D  Eclipse  DDDDDD  Java  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  pded  D  D  D  PDE  Build  D  D 


Kim  Moir 121 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  AntD  D  D 
DDDDDDDDDDD 


7.2    Eclipse  3.0:  □□□□□□  RCPD  □□□□□□□□ 

□  □  □  □  □ 

Eclipse  3.0  □□□□□□  □  Eclipse  □□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDD  3.0  D  D  D  D  Eclipse  D  D  D  D  D  D 
D  D  D  D  D  Eclipse  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  plugin.xmlQ  D  D  requires  D  DDDDDDDDDDDDDDDD  AQ  D  D  D  D  D  B 

D  require  □□□□□□□□□  BQDDDDDD  Java  □□□□□□□□□  (□□□□□□□ 

DDDD)DDDDDADDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□  3.0  □□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  □□□□□□□□□□□□□ 

□  □□□□□□  Eclipse  SDKD  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD 

Equinox  Q  □□□□□□□  Eclipse  □  □□□□□□□□□□□□□□□□□□□□□□  Equinox 

DDDDDDDDDDD  Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □ 厘 □  Jakarta  Avalon  □  □  □  OSGi  □□□□ 厘 □□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDD  Jakarta  Avalon  D  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  □□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Equinox 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  OSGi  □  □  □  □  OSGi  DDDDDDDDDDDD  OSGi  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD 鳳 □ DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  OSGiD  DDDDDDDDDDDDDDDDD 

D  D  D  Equinox  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  Eclipse 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  Eclipse  DDDDDDDDDDD 


122  Eclipse 


Equinox  D  DDDDDDDDDDDDDDDDD  OSGiD  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  Eclipse  □□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDD  OSGi DDDDDDDDDDDDDDDD 
DDDDDDDDDD  Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  OSGi  DDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  Linux  DDDDDDDDDDD  Windows  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  OSGi DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Oscar (口 

D  Apache  Felix)  □  IBM  □  Service  Management  Framework  (SMF)  □□□□□□□  Oscar  □  □ 


D  D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD  SMFQ  □□□□□□ 

D  D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD  Equinox  □  □  □  □  □  OSGi 

D  D 

D 

D  D 

D 

D 

DDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  3.0DDDDD 

D  D 

D 

D  D 

D 

D 

DDDDDDDDDD  Eclipse  3.0  DDDDDDDDDDDDDDDDDDD 

D  D 

D 

DD 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  D  D  D  D 

D  D 

D 

D  D 

D 

D 

Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D 

D 

D 

DDDDDDDDDD 

OSGiD  DDDDDDDDDD  Eclipse  D  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  plugin.xml 
DDDDDDDD  OSGiD  DDDDDDDDDDDDDDDD  plugin.xml D  D  □□□□□□ 
DDDDDDDD  Eclipse  D  DDDDDDDDDDDDDDDDD  meta-inf/manifest.mf  □ 
DDDDDDDDD  OSGi  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  PDEQ  Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  the  org. eclipse. ui  DDDDDDDDDDDDDD 

□  □□□□□ 

Manifest-Version: 1 .0 
Bundle-ManifestVersion:  2 
Bundle-Name :  %Plugin . name 

Bundle-Symbol icName :  org. eclipse . ui ;  singleton : =true 
Bundle-Version :  3.3 .0. qualifier 
Bundle-ClassPath: . 

Bundle-Activator:  org. eclipse . ui . internal . UlPlugin 
Bundle-Vendor :  %Plugin. providerName 
Bundle-Localization:  plugin 

Export-Package :  org. eclipse. ui . internal ; x - internal : =true 
Require - Bundle:  org. eclipse. core . runtime ; bundle- version=" [3 . 2. 0 ,4. 0 . 0) " , 
org.eclipse.swt;bundle-version="[3.3.0,4.0.0)";visibility:=reexport, 

Kim  Moir 123 


org.eclipse. jf ace; bundle- version^" [3. 3. 0,4. 0.0)"; visibility :=reexport, 

org. eclipse. ui. workbench; bundle - version:" [3. 3. 0,4. 0.0) visibility :=reexport, 

org. eclipse. core. expressions; bundle - version? [3. 3.0,4.0.0)" 
Eclipse-LazyStart:  true 

Bundle-RequiredExecutionEnvironment :  CDC - 1 . 0/Foundation-1 .0,  J2SE-1 .3 

Eclipse  3.1 □□□□□□□□□□□□□□□□□□□□□□  (BREE)  □□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  JavaQ  D  D  D 
JavaQ  DDDDDDDDDD  OSGi  D  D  DDDDDDDDDDDD  OSGiD  DDDDDDDD 
DDDDPDEDDDDDDDDDDPDEDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  classpath  DDDDDDDDDDDDDDDDDDDDDDDDD  J2SE-1.4  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
OSGiD  DJavaDDDDDDDDDDDDDDDDDDDDDDD  OSGiD  DDDDDDDD 


D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDD  classpath  D  □□□□□□ 

D 

D 

D  D 

D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDD  OSGiD  DDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDAPIDDDDDDAPIDDD 

D 

D 

D  D 

D  D 

D 

D 

DD 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  Require- 

Bundle 

D  D 

D 

D 

D  D 

D 

D 

□  □  □  org. eclipse. ui  □  □  □  □  □  org. eclipse . core . runtime  □ 

D 

D 

D  D 

D  D 

D 

D 

D  D 

3.2.0  D  D  4.0.0  DDDDDDDDDDDDDDDD 

D  7.4:  OSGi  DDDDDDDDDDDD 


OSGiD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  D  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


124  Eclipse 


D  D  OSGi  DDDDDDDDDDDDDDD  OSGi  DDDDDDDDDDDDDDDDDDD 
D  D  D  installedD  DDDDDDDDDDDDDDDDDDDDDDDDDD  resolved  口  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDm  starting  口 


nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n  n  n 
U  U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnn  o^t^^n  n  n 
UUUUUUUUUUUUUUUUUUUUUUUUUU  activey  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n  n  n 
U  U  U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

n 

u 

n 

u 

n  n  n 

u  u  u 

n  n  n 

u  u  u 

D  D  D  D  D  stopQ  DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D  D  D 

D  D  D  stoppingD  DDDDDDDDDDDDDDDDDD  uninstaller 

D 

D 

D 

D 

D  D  D 

D  D  D 

D  D  D  D  D 

API  DDDDDDDDDDDDDDD  API  DDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDD  OSGi  □  □  □  □  7.5  □ 

D 

D 

D  D  D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

3.3.0.V20070625 


Major 

Minor 

Service 

Qu3lifi6「 

Breaking 
API 

New 
API 

Bug  fix 

Build  id 
or 

SCM  tag 

D  7.5:  DDDDDDDDDDD 


OSGi  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDD  id  D  version  □  □  □  □ 

D  D  D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDD  Eclipse  □□□□□□□□□□□□ 

D  D  D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDD-DDDDDDDDDDDDDDDDD 

D  D  D 

APID 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDD  (major) □□□□□□□□□ 

APID 

D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDD  (minor)  DDDDDDAPIDDDDDD 

D  D  D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

□  □□□□□  (service)  DDDDDDDDDDDDDDDDDD 

D  D  D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDD  id  D  D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD  OSGi  □  □ 

D  D  D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDD  OSGi  DDDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D 

D  D 

D 

D  Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D 

Kim  Moir 125 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD 

Java  □□□□□□□□□  □  main  DDDDDDDDDDD  Eclipse  DDDDDDDDDDD 
DDDDDDDDDDDD  Eclipse  DD  DDDDDDDDDDDDDDDDDDDDDDDD 

Eclipse  IDE  []  DDDDDDDDDDDDDDD  org. eclipse,  ui.  ide.  workbench  D  D  D  D  D 
org. eclipse,  ui.ide.  application  Q  DDDDDDDDDDDDDD 

<plugin> 

<extension 

id="org. eclipse. ui . ide. workbench" 
point="org. eel ipse. core. runtime. applications'^ 
<application> 
<run 

class="org. eclipse. ui . internal . ide.application. IDEApplication"> 

</run> 
</application> 
</extension> 
</plugin> 

Eclipse  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDAntDDDDD  JUnitQ  DDDDDDDDDDDDD 
□□□□□□□ 


□  □□□□□□□□□□□□□□□□□  (RCP) 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  □□□□□□□□□□  IDE 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  (RCP) DDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  JavaQ  DDDDDDDDDDDDDDDDD 

Eclipse  □  IDE  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  RCPD  DDDDDDDD  IDEQ  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD RCPD  DDDDDDDDDDDDDDDDD 
D  D  D  D 

RCP  DDDDDDDDDDDDDDDD  NASA  DDDD  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  RCP  DDDDDDDDDDDDDDDDDDDDDDDD DD 
DDDDDDDDDDDD  BioclipseQ  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD RCP  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


126  Eclipse 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDAPIDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  7.6:  Eclipse  3.0  □□□□□□□□ 


D  7.6  D  D  D  3.0D  DDDDDDDDDDDD  Eclipse  Runtime  D  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  OSGiD  DDDDDDDDDDDDDDDDD 

□  □□□□□  Eclipse  □□□□□□□□□  IDE  □□□□□□□□□□□  RCP  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


7.3    Eclipse  3.4 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  FirefoxQ  □□□□□□□ 
DDDDDDDDD  Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  DD  DDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  pdeq DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Kim  Moir 127 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (D  7.7 
□  □  □  ) 口 


D  7.7:  Eclipse  3.3  SDK  □□□□□□□□□□ 


D 

D 

D  D 

D 

D 

D 

D 

D 

D  D 

Eclipse  DDDDDDDDDDDDDDD 

DDDDDDDDDD 

D  D 

D 

D  D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDD 

DDDDDDDDDD 

D  D 

D 

D  D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDD 

DDDDDDDDDD 

D  D 

D 

D  D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDD 

PDED  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
feature,  xml DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDD  org.  eclipse,  launcher. gtk.  linux. x86_64  D  DDDDDDDD  OS(os) 

DDDDDDDDDD  (ws)D  DDDDDDDDDD  (arch)  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□  OSGi  DDDDDDDDDDDD 

く? xml  version="1 . 0"  encoding 二" UTF - 8"?> 
<feature 

id="org. eclipse. rep" 

label="%featureName" 

version="3 . 7.0. qualifier" 

provider-name="%providerName" 


128  Eclipse 


plugin="org. eclipse. rep" 

image 二'' eclipse— update— 1 20.jpg"〉 


<description> 

%description 
</description> 

<copyright> 

%copyright 
</copyright> 


く license  url="%licenseURL"> 

%license 
</license> 


<plugin 

id="org. eel ipse. equinox. launcher 
download - size="0" 
install - size="0" 
version="0.0.0" 
unpack="false"/> 


<plugin 

id="org. eclipse. equinox. launcher. gtk. linux. x86_64 

os="linux" 

ws="gtk" 

arch="x86_64" 

download - size="0" 

install - size="0" 

version="0.0.0" 

f ragment="true'7> 


Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□  Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  Eclipse DDDDDDDDDDDDDDDDDDDDD 

ibm. icu 

eclipse . core . commands 
eclipse . core. conttenttype 
eclipse. core. databinding 
eclipse. core. databinding. beans 
eclipse. core. expressions 
eclipse. core. jobs 
eclipse. core. runtime 
eclipse. core. runtime. compatibility. auth 
eel ipse. equinox. common 
eclipse . equinox . launcher 
eclipse . equinox . launcher. carbon . macosx 
eclipse. equinox. launcher. gtk. linux. ppc 
eel ipse. equinox. launcher. gtk. linux. s390 


Kim  Moir 129 


org. eclipse. equinox . launcher. gtk. linux . s390x 
org. eclipse. equinox . launcher. gtk. linux . x86 
org. eel ipse. equinox. launcher. gtk. linux. x86_64 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDD-DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDzipDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  EcUpseD  DDDDDDDDDDDDDDDDDDDDDDDDDDPDEDDDDDD 


D  D 

D 

D 

□□□□□□□ 

D 

D  D  D  D  Eclipse  RCPD  DDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

2008 D  3DDDP2DDDDDD  SDK □□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD  p2 □□□□□□□□□□□□□□ 

P2DDD 

Equinox P2 DDDDDDDDDDDD  (IU) DDIUDDDDDDDDDDDDDDDDD 
DDDDDDIDDDDDDDDDDDDDDDDDDDDDDDDDDD(DDDDDDD) 


D  D 

D 

D  D  (DDDDDDDD)DDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDD  org.eclipse.swt.gtk.linux.x86  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

Linux  gtk  x86  DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

□  □p2D  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 


D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD  IU  □□□□□□□□□□  Eclipse  SDKQ  D  D  D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  Eclipse  □□□□□□□□□ 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDIUDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

□  □□  OS  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

130  Eclipse 


D  7.8:  P2  □  □  □ 


DDDDDDDDDD  Eclipse  SDKQ  D  Eclipse  □□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDD  Linux  □  □  □  □  □  Eclipse  □  RPM  □□□□□□□□□□□□□ 

□  □□□□ 薦 □□□□□□□□□□□□□□□□□□□  p2  □□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□  p2  □□□□□□□□□□□□□□□□  Eclipse  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDP2DDDDDDDDDDDDDDD  EcipseSDK 

□  □□□□□□□□□□□□□□□□□□□□□□□□□  RCPD  OSGi DDDDDDDDD 

Equinox  □  □  □  □  □  Eclipse  Communication  Framework  (ECF)  □  □  □  □  □  Eclipse  □□□□□□ 

□  □□□□□□□□□  p2  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 

P2D  SDKQ  DDDDDDDDDDD  Eclipse  D  D  DDDDDDDDDDDDDDDDDD 
DDDDDDDD  Eclipse  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  ziPD  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Kim  Moir 131 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  Eclipse  D  DDDDDDDDDDDDD  JARD  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  site.xml 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
P2  □□□□□□□□  p2  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  Equinox  □□□□□□□□□□□□□□□□□□□□□□□□□□□  P2  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  Foundation  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDP2DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


7.4    Eclipse  4.0 


D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D 

DDDDDDDDDDD?DDDDDDDDDDDDDD? 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D 

□  □□□□"?  2007  D  D  D  D  Eclipse  □□□□□□□□□□□ 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDD  Eclipse  □ 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D 

DDDDDDDDDDDD  API  D  D  D  D  D  Eclipse  □  □  □ 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D 

D  D  D  D  D  2008  DDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

DD 

D  D  D  D 

□  □□□□□  Eclipse  D  DDDDDDDDDDDDDDDD 

D 

D 

DD 

D 

D 

D 

D 

D 

D  D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

2010  [ 

1 7  □  □  □  Eclipse  4.0  □□□□□□□□□□□□□□□□□ 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□  3.6  □□□ 

D 

D  D 

D 

D 

D 

D 

D 

D  D 

SDK  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDD  3.0  D  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□  APID  DDDDDDDDDDDDDDDDDDDDDDD  APIQ  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 4.0 DDDDDDD  Eclipse 
4DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


132  Eclipse 


口  7.9:  Eclipse  4.0  SDK  Early  Adopter  Release 


□  □□□□□□□□ 
4.0  D  D  D  Eclipse  Modeling  Framework  (EMFgc)  □□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  SWTQ DDDDDDDDDDDDDDDD  SWTQ D  D  D  D  D 
DDDDDDDDDDDDD4.xDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DXMIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  7.10D  □□□□□□  4.x  D  DDDDDDDDDDDDDDDDDDDD 


□□□□□□□□□□□□ 

Eclipse  DDDDDDDDDDDDD  2001  □□□□□□□□□  CSS  □□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  4.0  D  D  D 
DDDDDDDDDDDDDDDDD  Eclipse  □□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDD  org.  eclipse,  platform  D  D  D  D  D  cssQ  D 
DDDDDDDDD 


Kim  Moir 133 


Handled  Tool  I  term 


rm*««n  : な 

M  BianTiiirit  -*--T^— *  ■ 


*•、 

<~  ■  ■ i-U  r  m  i »  1 1 1 


□ 

□ 


□ 

o 

7 

□ 


□ 

□ 


□ 

s 

o 

□ 


p 

_ I _  c 

[ E 


□ 

□ 


□ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


134  Eclipse 


Service  Broker 


Service 
registration 


Service 
lookup 


Producer 


Consumsr 


D  7.11:  DDDDDDDDDDDDDDDDDD 


D 

D 

D 

D 

D 

Eclipse  3.4.x  □□□□□□□□□□□□□ 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D  D  D  Eclipse  3.x  □□□□□□□□□ 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

□□□□□□ 

getViewSite() .getActionBarsQ . getStatusLineManager() . setMessage(msg) ; 


Eclipse  3.6  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  Eclipse  4.0  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

Eclipse  4.x  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  iEclipseContext 
□  □□□□□  Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
OSGi  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  JavaQ  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
4.0  □□□□□□□□□□□□□  OSGi  DDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Kim  Moir 135 


Service 
Introspection 


Service 
injection 


Consumsr 


D  7.12:  DDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Eclipse  3.x 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  Eclipse  4.x  D  DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  Java5D  D  DDDDDDDDDDDD 

□  □  JSR  330  □□□□□□□□  □  @inject  DDDDDDDDDDDDDDDD  Eclipse  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  4.x  □□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  4.x  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 

©Inject 

IStatusLineManager  statusLine; 
statusLine . setMessage(msg) ; 


136  Eclipse 


□□□□□□□□□□□□ 

Eclipse  4.0  D  DDDDDDDDDDDDD  APIQ  DDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDD  "the  twenty  things"  □  □  □  □  □  Eclipse 


DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D  D 

□□□□□□ 

APIDDDDDDDDDD  API □□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D  D  D  D 

□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDD  Java  □ 

D 

D 

D 

D 

D 

D  D  D  D 

JavaScript  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

APID  D 

□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDD 

7.5  □□ 

Eclipse  D  DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D  D 

□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D  D 

□□□□□□ 

□  □  □  Eclipse  DDDDDDDDDDDDD  Eclipse  □  □  □ 

D 

D 

D 

D 

D 

D  D  D  D 

□□□□□□ 

□  □API  □□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

Eclipse  DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

□  APID 

□□□□□□ 

DDDDDDDDDDDDDDDD  APIQ  □□□□□□□ 

D 

D 

D 

D 

D 

D  D  D  D 

□□□□□□ 

DDDDDDDAPIDDDDDDDDDDDDDDDDDDDDDDDDDDD8DDDAPI 
D  2D  □□□□□□□□□□□□□□□  APID  DDDDDDDDDDDDDD  Eclipse  4.x  D 
DDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 腿 

DDDDDDDDDDDDDDDDDDDDDD  RCPD  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD DD DDDDDDDDDDDDDDDDDDDDDD 


D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDD 

D 

D  D  Eclipse  DDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

Eclipse  DDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDD  Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  Eclipse  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD  Eclipse  □□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  Eclipse  DDDDDDDDDDDD  http://www.eclipse.org 
□  □□□□□□ 


137 


d  8n 


Graphite 

Chris  Davis 


Graphite1  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  Graphite  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  Graphite  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□(□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□  )□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

URLQ  DDDDDDDDDDDDDDDDDDDDDDDDDD  Graphite  口  □□□□□□□ 
DDDDDDDDDDDDDDDDD  Graphite  □□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□  Graphite  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDD  Graphite  □□□□□  eDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D  Graphite  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D  Graphite  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□  Graphite  □□□□□□□□□□□□□□  Graphite  □□□□□□□□□□□□ 
(口  □□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDD 


8.1 = 

Graphite  D  D  D  D  Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  whispe  「口  DDDDDDDDDDD  carbonQ  DDDDDDDDD 


^ttp: //launchpad. net /graphite 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUI 
□  □□□□□  whisper D  Graphite DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD 動 toolD  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  whisper □  □  RRDtool 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  whisper  DDDDDDDDDDD  whisper  □  □ 
D  D  D  D  D  create  DDDDDDDDDDDDDDDDDDDDD  updateQ  D  D  D  D  D  D  D 
DDDDDDDD  fetch  D  D  D  D 


header 

archive 1 

archive  2 

T 

v 

T 

v 

T 

v 

T 

D  8.1:  whisper  D  DDDDDDDD 

D  8.1D  D  D  D  D  DD  whisper  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

(timestamp,  value)  D  D  D  D  D  D  D  update  D  D  D  D  fetch  D  D  D  D  D  D  D  whisper  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD 


8.2  = 

Graphite  DDDDDDDD  carbon-cache  DDDDDDDDDDDDDDDDDDD  carbon 
□  □□□□□□□□□□□□□□□  口  Twisted  DDDDDDDDDDD  Twisted  口口  口  Python 

DDDDDDDDDDDDDDDDDDDDDDD  I/O  DDDDDDDDDDD  Twisted  D  D 
D  D  D  D  carbon  D  D  DDDDDDDDDDDDDDDDDDDDDDDDD  DDDDDDD 
DDDDDDDDDDDDDDDDDD  8.2  D  D  carbon  □  whisper  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  Graphite  DDDDDDDDDD  carbon  DDDDDDDDDDD  whisper  D  D  D 
DDDDDDDDDDDD  Graphite  DDDDDDDDDDDDDDDDDDDDDDDDDD 
carbon  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDD  Graphite  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


140  Graphite 


□  8.2:  □□□□□□ 


□  □□□□□  (□□□□□  CPU  □□□□□□□□□□□□□)□□□□□□□□□□□□□ 
D  D  D  D  D  (timestamp,  value)  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  carbon  DDDDDDDDDDDDDDDDDDDDDD  Graphite  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  carbon  □  □  □ 
DDDDDDDDDDDDD  whisper  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  whisper  D  D  D  D  D  D  carbon  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  servers. www01 . cpuUsage  □  □  .  •  ./servers/ 窗 w01/cpuUsage.wsp  □  □  □  □ 

DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDD  Graphite  DDDDDDDDDD  carbon 
D  D  TCP  DDDDDDDDDDDDDDDDDDDDDDDD  2003  □□□□□  2D  D  D  D 
DDDDDDDDDDDDDDD  carbon  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


2[]  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDOOO 
D  D  D  D  D 


Chris  Davis 141 


DD1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  Unix  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD 

servers. wwwOI .cpuUsage  42 1286269200 

products . snake-oil . salesPerMinute 123 1286269200 

[one  minute  passes] 

servers. wwwOI . cpuUsageUser  44 1 286269260 
products . snake-oil . salesPerMinute 119 1286269260 

DDDDDDDDDD  carbon DDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  whisper  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 


8.3  = 

Graphite  □□□□□□□□□□□□□□□□□□□□□□  URL  Q  D  D  D  API  Q  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  HTTP  GET  D  D 
DDDDDDDDDDDDDDDDDDDDDD  PNGD DDDDDDDDDDDDDDDD 
□□□□□□ 

http: //graphite. example. com/render?target=servers.www01 .cpuUsage& 
width=500&height=300&from=-24h 

D  D  URLQ  DDDDDDDDD  500  x  300  D  DDDDDDDDDDDD  servers.  wwwOI  .cpuUsage 
□  □□□24D  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□  target  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Graphite  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD10DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD 

target=movingAverage (servers . w 漏 01 . cpuUsage , 1 0) 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 


142  Graphite 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 


口  8.3:  Graphite  口  Composer  Interface 


8.4  □□□□□□□ 

DDDDDDDD  Graphite  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
口  □□□□□□□□ 鼠 □  D  D  APID  DDDDDDDDDDDDDDDDDDDDDDDD 
口 □□□□□□□□□□□□□□□□□□□□□□□□□□□□  htmld DDDDDDDD 
□  □□□□□□ 


target=integral (sumSeries (products. *. salesPerMinute))\&from=midnight 

sumSeriesQ  D  D  D  D  D  D  D  products .  * .  salesPerMinute  D  DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDD  integral  DDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  in  口 

□  □□□□□□□□□□□□□□□□□□□□DO  Graphite  □  □  □  □  □  Composer  UI  □  □  口 

□  □□□□□□□  8.3  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  口 
D  JavaScript  DDDDDDDD  URL  □□□□□□□□□□□ 


graphite 


r 


Chris  Davis 143 


<img  src="http: //graphite. example. com/render ?parameters - for - my - awesome - graph 


n  n  n  n  url  □□□□□□□□□□□□□□□□□□□□□ 

i_i  i_i  i_i  i_i  i_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_ii_i 

n  n  n 

i—i  i—i  i_i 

n 

i—i 

□ 

n 

i—i 

n 

i—i 

Graphite  口 

Composer  UI  □□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDD  URLDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDD  (Wiki □□)□□□□□□□□□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDD 

8.5  □□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDD  Graphite  □ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

CPU 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD 10D  □□□□□□□□□□□□□□□□  1DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Graphite  □  □  □ 
10D □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  Graphite  DDDDDDDDDDDDDDDD 

□  D  DjangoQ  DDDDDDDDDDDDDDDDDDDDDDD  memcached  D  □□□□□□ 
DDDDDDDDDDDDDDDDD  memcached3  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

memcached  Q  □□□□□□□□□□□□□□□□□(□□□□□□□□□□□□)□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  memcached  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Graphite 


D  D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

Composer  UI  □ 

D  D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

D  D 

D 

Graphite  口  口 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

D  D 

D 

□  □□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

memcache  口 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

D  D 

D 

□  □□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

3http: //memcached. org 


144  Graphite 


8.6  □□□□□□□ 


60,000 DDDDDDDD  Graphite □□□□□□□□□□□□□□□□  1DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  whisper □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  carbon  □  60,000  □□□□□□ 

□  □□□□  1DDDDDDDDDDDDDDDDDDDDD  carbon  □ 1DDDDDDDD 
DDDlDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  600,000 DDDDDDDDDDDDD?DDDDD 
DDDD1DDDDDDD?DDDDDDDDDDDDDDDDDDDDDDDD?DDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD? 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  4D  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (whisper 
DDDDDDDDD  1DDDDDDDD 12  □□□□)□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  whisper  D  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  whisper 
D  update—many DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□ 10D  □□□□□□□□  (120  D 
D 1DDDDDDDDD  (12 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 

D  D  D  D  D  carbon  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  whisper  D  D  D  D  D  update—many  DDDDDDDDDDDDDDDDDDDD  600,000 


D 

D 

D 

D 

□  □□□  ID  □□□□□□□□□□□  □ 

□  □□□□□□  ID  D  D  D  D  D 

D 

1 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

10DDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDD 

D 

D 

D 

D  D 

I/O  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D  D 

4SSD  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


Chris  Davis 145 


DDDDDDDDDDDDDI/ODDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  Graphite  □□□□□□□□  I/O  □□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDD  carbon  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  carbon  DDDDDDDDDDDDDDDD  carbon  D  D  D  D  D 
□  □□□□  8.4  □□□□□□□ 


Incoming 
data  points 


Maoped  to  queues 
basedonnwtnc  names 


Iterate  queues  and 
determine  wsp  file 
based  on  metric 


m 


qj  i  i  i  i  i  m 
ノ 


丁 


name 


whi  sp er.  u  pd ate_m  an y {  > 

1.  read  wsp  header 

2.  seek  to  appropriate  offset 
write  data  points  in  single  operation 


D  8.4:  Carbon  □□□□□□□□ 


8.7  □□□□□□□□□□ 


D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  carbon  □  I/O  □□□□□□□ 

D 

D 

D  D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D 

D 

D 

D  D  D  D  600,000  DDDDDDDD  1DDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D 

D 

D 

ID  D  D  60,000  D  DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D 

D 

D 

D  D  D  carbon  DDDDDDDD  10DDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDD  Graphite  □□□□□□□□□□□□□□□ 

D 

D 

D  D 

D  D  D 

D 

D 

D 

D 

D 10 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  carbon  □□□□□□□□□ 

D 

D 

D  D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D 

D 

D 

D  D  Graphite  □□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D  D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD  carbon 

D 

D 

D  D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  DD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

ID 

146  Graphite 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  carbon  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 


8.8  □□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDD  Graphite  □□□□□□□□□□□□□□□□□□□□  i/OD 
DDDDDDDDDDDDDDDDI/ODDDDDDDDDDDDDDD1DDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□  RAID  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDl 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDlDDDDDDDDD 
DDDDDDDDDDDDDD  write  □□□□□□□□  1DDDDDDDDDDDDDDDD 
DDDDDDDDDDDD? 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  write 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  write  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  readQ  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D 

D 

D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDD  I/O  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□"□□"□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□DO 


D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD  DDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

□□□□□□□□□□□□□□□□□□□□"□□"□□□□□□□□□DO 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

Graphite  □□□□□□□□□□□□?□□□□□□□□□□□  carbon  □  I/O 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD  write  DDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DD?DDDDDDDDDDDDDDDDDDDDDDDDDDD!DDD 

carbon  DDDDDDDDDDDDDDDDDDDDDD  carbon  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  ■■■■■■ D  D  D  D 


Chris  Davis 147 


n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

carbon  DDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 

n 

n  n  n  n  n 

u  u  u  u  u 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 

u 

n 

u 

nnnnnnnnnn  carbon  n  n  n  n  n 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 

u 

n 

u 

n  n  n  n  n  whisDer  nnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 

u 

n 

u 

D  D  D  D  D  carbon  DDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DD 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

8.9  □□□□□□□ 

D  D  D  Graphite  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Graphite 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  (find)  DD(DDDDDDDDDD)DDDDDDDDDD  (fetch)  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  HTTP  □□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDD 

find  DDDDDDDDDDDDDDDDDD  whisper  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD*-txtDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  find  DDDDDDDDDDDD 
Node  DDDDDDDDDDDDDDDDD  Node  DDDDDDDDD  Branch  D  D  D  D  Leaf  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  whisper DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD 励 □□□□  5D  gzipD  D  whisper 
DDDDDDDDDDDDD 

Leaf  D  DDDDDDDDD  fetch  D  D  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  whisper  DDDDDDDDDDD  whisper  DDDDDDDD  fetch  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  find □  □  □  □  □ 

D  D  D  HTTP  DDDDDDDD  find  □□□□□□□□□□□□□□□□□□□  Graphite  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  HTTP  D  D  D  D  D  D  D  RemoteNode  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  Node  D  Branch  D  D  D  Leaf  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

5DDDRRDDDnDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□ 励 □□□□□□□□□□□[][][]□□□□ 


148  Graphite 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

nnnnnnnnn  >p ハ + ハ 卜 n  n  n  n  n  n  n  uttd  n 

DDDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

nnnnnnnnn  rir^nUita  nnnnnnnnnn 
UUUUUUUUU  Urapnite  UUUUUUUUUU 

DDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnn 

D  D  D 

D 

n 
u 

n  n  n  n 
u  u  u  u 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUU 

D  D  D 

D 

n 
u 

n  n  n  n 
u  u  u  u 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

D  D  D 

D 

nnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUU 

D  D  D 

D 

n 

u 

n  n  n  n 

u  u  u  u 

n  n 

u  u 

n 

u 

n 

u 

n 

u 

D  D  D 

D 

nnnnnnn  ■fnf-i^jnnnnnnnnnnnnnn 

U  U  U  U  U  U  U  find  uuuuuuuuuuuuuu 

D  DD 

D 

n 
u 

fetch  [] 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

D  D  D 

D 

nnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUU 

D  D  D 

D 

D 

D  D  D  D 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

D  D  DD 

nnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuu 

D  D  DD 

D 

D  D  D  D 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D  D  D 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

n 
U 

n  n  n  n 
U  U  U  U 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

0 

□  □  □  □ 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D  D  D  D 

□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

n 

u 

n  n  n  n 

u  u  u  u 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

n 
u 

n  n  n  n 
u  u  u  u 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDD  find  □  □ 

D 

n 
u 

n  n  n  n 
u  u  u  u 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

n 

u 

n  n  n  n 

u  u  u  u 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

n 

u 

n  n  n  n 

u  u  u  u 

D  D 

D 

D 

D 

D  D  D 

D 

D  D  D  D  D  D  carbon  DDDDDDDDDDDDD 

D  D  D 

D 

n 
U 

n  n  n  n 
U  U  U  U 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D  D  D 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D  D  D 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D  D  D 

D  D 

D 

D 

D 

D  D  find  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D  D 

DDDDDDDDD  memcachedQ  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  findD  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 
□  find 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 


□□□□□□□□□□□□□□ 

Graphite  DD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  carbon  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□  carbon  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Chris  Davis 149 


Graphite  口 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n  n  n 
UUUU 

n  n 

u  u 

n 

u 

n 

u 

n 

u 

n 
U 

n 
U 

/^つ!"! ~i ハ n  nnnnnnnnnnnnnnnnnnnn ハ つ!"!" n  n  n 
caroon  UUUUUUUUUUUUUUUUUUUU  carbon  U  U  U 

n  n  n  n 

n  n 
u  u 

n 
u 

n 
u 

n 
u 

n 
U 

n 
U 

nnnnnnnnnnnnn 

n 
u 

n 
u 

n 
u 

n 
u 

n 
U 

n 
U 

nnnnnnnnnnnnnnnn  r^mni^it-a  n  n ハ つ!" k ハ n             n  n 
UUUUUUUUUUUUUUUU  Orapnite  U  U  carbon-relay  U  U 

n  n  n  n 
UUUU 

n  n 
u  u 

n 
u 

n 
u 

n 
u 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n  n  n 
UUUU 

n  n 
u  u 

n 
u 

n 
u 

n 
u 

n 

u 

n 

u 

rn    ―  ―  „u  _  „  r~i r~i r~i r~i /r~i r~i n  n  rn  r~i ^  -,  ^,u  —  „ ハっ ハレ ハヽ rnnnnnnnn 

U  carbon  UUUU  (UUUUUU  carbon-cache)  UUUUUUUU 

n  n  n  n 

UUUU 

n  n 
u  u 

n 
u 

n 
u 

n 
u 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n  n  n 
UUUU 

n  n 
u  u 

n 
u 

n 
u 

n 
u 

D 

D 

n  n  n  n ハっ 「!^ハハ ハっハ Ui ハ nnnnnnnnnnnnnnnnnnn 
UUUU  carbon  -  cache  UUUUUUUUUUUUUUUUUUU 

n  n  n  n 
UUUU 

n  n 

u  u 

n 

u 

n 

u 

n 

u 

D 

D 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n  n  n 
UUUU 

n  n 
u  u 

n 
u 

n 
u 

n 
u 

D 

D 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n  n  n 
UUUU 

n  n 
u  u 

n 
u 

n 
u 

n 
u 

DD 

n  n  n ハっ に!^ 八 《 に ハ, つ、, nnnnnnnnnnnnnnnnnnnnn 
U  U  U  carbon  -  relay  UUUUUUUUUUUUUUUUUUUUU 

n  n  n  n 
UUUU 

n  n 
u  u 

n 
u 

n 
u 

n 
u 

D 

D 

D  D  D  D 

n 
U 

n 
U 

n 
U 

n 
U 

D 

D 

carbon-relay  DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD 

8.10  nnnnnnnn 

D  D  D  D  Graphite  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD  Graphite  □  Python  □ 

D 

D 

D 

D 

D 

D 

D  D  D  D  D  D  JavaQ  D  C++D  □□□□□□□□□□□□?□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

□  □□□□□□  ロロ  Java  D  C++D  DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD  Python  D  □□□□□□□ 

D 

D 

D 

D 

D 

D 

DDDDDD?D  DDDDDDDDDDDD  [Knu74]  DDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DD 

D 

D 

D 

D 

□  □□  6D □□□□□□□□□□□□□□□□□□ 

Graphite  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

□  □□□  "□『□□□□□□□□□□□□□□□□□□□□□  Graphite  □  □ 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

□□□□□□□□□□□□□ 


150  Graphite 


n  n 
U  U 

n 
U 

n 
U 

DDDDDDDD 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

n  n  n  n  n  n 

u  u  u  u  u  u 

n  n 

n 
U 

n 

nnnnnnnnnnnnnnnnnnnnnn 

n 

n 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 
U 

n  n  n  n  n  n 

u  u  u  u  u  u 

n  n 

u  u 

n 
U 

n 

u 

nnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuu 

n 

u 

n 

u 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 
U 

n  n  n  n  n  n 

u  u  u  u  u  u 

n  n 

n 
U 

n 

u 

nnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuu 

n 

u 

n 

u 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 

u 

n  n  n 

u  u  u 

n 

u 

n 

u 

n 

u 

u/h i  snpr  n  I"! 

VV  1  1  J.  O  f-f^  •  \ _ l  I _ I 

n  n 

n 

u 

n 

u 

nnnnnnnnnnnnnnnnn c  n  n  n  n 

n 

u 

n 

u 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 
U 

n  n  n  n  n  n 

u  u  u  u  u  u 

n  n 

n 
U 

n 

n  n  n  n  n  n  n  Pvthon  nnnnnnnnnnn 

n 

n 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 
U 

n  n  n  n  n  n 

u  u  u  u  u  u 

n  n 

u  u 

n 
U 

n 

u 

nnnnnnnnnn  Pvthon  nnnnnnnnn 

n 

n 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 
U 

□  □□□□□ 

DD 

n 
U 

D 

D  D  I/OD  DDDDDDDDDD  CPU  D  D  D  D  D 

n 

n 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 
U 

□□□□□□ 

D  D 

D 

D 

D  D  D  D  Python  D  DDDDDDDDDDDDDD 

n 

u 

n 

u 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

□  □□□□□ 

D  D 

D 

D 

DDDDDDDDDDD  Graphite □□□□□□□ 

n 

n 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 

n 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 
U 

□□□□□□ 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

n 

u 

n 

u 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 
U 

□□□□□□ 

D  D 

D 

D 

□  □□□□□□  Graphite  Q  URL  API  Q  D  D  D  D  D 

n 

n 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 
U 

□  □□□□□ 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

n 

u 

n 

u 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 
U 

□  □□□□□ 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

n  n  n 

u  u  u 

n  n 
U  U 

n 
U 

n 
U 

□  □□□□□ 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

n  n 
U  U 

n 
U 

n 
U 

□  □□□□□ 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

n  n 
U  U 

n 
U 

n 
U 

□□□□□□ 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D  D 

D 

D 

□□□□□□ 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD  ' 

□  □ 

D  D 

D 

D 

□□□□□□ 

D  D 

D 

D 

)□□□□□□□□□□□□□□□□□□□□□□ 

D 

Graphite 

D  D 

D 

D 

□  □□□□□ 

D  D 

D 

D 

D  D  D  D  APID  DDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D  D 

D 

D 

□  □□□□□ 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDD 

Graphite  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  Graphite  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDD  URL  □□□□  API  DDDDDDDDDDDDDD  7D  D  D  Graphite 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  APIQ  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  "DDD" DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□(□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


7[]  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□  □□□□□□□□□□□□□□□□□□ 


Chris  Davis 151 


8 


□ 

e 

r 

G 


□ 

□ 


□ 

□ 


o 

b 


□ 

□  _u 

□  _u 

□  _u 

□  _u 


□  _u 

□ 

□ 


□ 

□  _u 

□  _u 

□  _u 

□  _u 


□ 

□ 


□ 

□ 


□ 

e 

ヒ 

r 

G 

□ 


□ 

o 

d 

h 

s 

a 

s 

□ 


□ 

e 

h 

p 

a 

G 

□ 


□ 

□ 


□ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


152  Graphite 


□  9 口 


The  Hadoop  Distributed  File  System 

Robert  Chansler,  Hairong  Kuang,  Sanjay  Radia, 
Konstantin  Shvachko,  and  Suresh  Srinivas 


Hadoop  Distributed  File  System  (HDFS)  □□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  HDFS 

DDDDDDDDDDDDDDDD  HDFS 

D  D  D  YahoolD  □□□□□□□ 


9.1 □□□□ 


Hadoop1  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

MapReduce  [DG04]  DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  HDFS  DDDDDDDDDD  UnixQ  DDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

Hadoop DDDDDDDDDDDDDDDDDDDD  (□□□□□)□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Hadoop  DDDDDDDDDDDDDDDDDDD  I/O  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  YahoolQ  Hadoop  □□□□□□□□□ 
D  D  D  D  D  40,000  D  DDDDDDDDDDDDDD  40  DDDDDDDDDDDDDDDDD 
DDDDDDDDD  4000  D  DDDDDDDDDDDDDDDDDD 100  D  D  D  D  Hadoop  D 
DDDDDDDDDDDDDDD 

ihttp: //hadoop. apache. org 


HDFS  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
PVFS  [CIRTOO]  D  Lustre2  □  □  □  GFS  [GGL03,  MQ09]  □□□□□□□□□□□□□□□□□ 
D  D  D  HDFS  DDDDDDDDDDDDDDDDDDDDDDDDD  NameNode  □  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Da は Nodes  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDTCPDDDDDDDD 

□  □□□□□□  Lustre  □  PVFS  □□□□□□  HDFS  □  DataNodes  □  RAID  □□□□□□□□ 

□  □□□□□□□□□□□□□□□□□□□□□□  GFS  □□□□□□□□□□□□□□□□ 

DataNodeQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 


9.2  □□□□□□□ 
NameNode 

HDFS  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  NameNode  □  □  inode  □□□□□□  inode  □□□□□□□□□□□□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  (□□□□□ 128  D  D  D  D  D  D  D 

D 

D 

D 

D 

□  □□□□□□□)□□□□□□□□□□□□□□□□□  (□□□□□  3D  D  D  D  D 

D 

D 

D 

D 

□  □□□□□)□  DataNode  □□□□□□□□□□□□□□□  NameNode  □  □  □  □  □ 

D 

D 

D 

D 

DDDDDDDDDD  DataNode  DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  NameNode  DDDDDDDDDDDDDDDDDDDDDD  DataNode  D 

D 

D 

D 

D 

HDFS  DDDDDDDDDDDDDDDDD  DataNode  DDDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDD 

□□□□□□□□□□□□ 

inodeQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  NameNode  D  DDDDDDDDDDDDD  RAMQ  DDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  NameNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDD  NameNode  □  HDFS  □□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


2http: //www. lustre.org 


154    The  Hadoop  Distributed  File  System 


n  n 
U  U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

MnmoM ハ门 o  nnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

n  「ho ハレ 《 ハ ハ/" io  nnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

NameNode 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 

u  u 

n  n  n  n  n 

u  u  u  u  u 

n 

u 

n 

u 

n              ハ 川。 nnnnnnnnnnnnnnnnnnn 
U  NameNode  UUUUUUUUUUUUUUUUUUU 

n 
U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnn  m  口  c  n  n  n 

UUUUUUUUUUUUUUUUUUUU        u  u  u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

nnnnnnnnnnnnn  mpc  nnnnnnnnnn 

UUUUUUUUUUUUU  uuuuuuuuuu 

D 

D 

D 

D 

D 

D 

n 
U 

n  n 
U  U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

n  n  n  n  MomaM^^io,  nnnnnnnnnnnnnnnn 
U  U  U  U  INameiNoae  UUUUUUUUUUUUUUUU 

D 

D 

D 

D 

D 

D 

n 
U 

D  D 

D  D  D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

NameNode  □ 

D 

D  D 

D  D  D  D  D 

D 

D 

DDDDDDDDDD 

NameNode  Q 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D  D  D 

D 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

NameNode  口 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

NameNode  Q 

D 

D 

□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

□  □□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

□  □□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 

D 

D 

D  D  D 

DataNodes 


Da は Node  □□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDD 

D 

DataNode  □□□□□□  NameNode  DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□□□□□  IDD  DataNode □□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  NameNode  □□□□□□□□□□□□  DataNode  DDDDDDDDDD 

□  □□□  IDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  ID 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDIDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Robert  Chansler,  Hairong  Kuang,  Sanjay  Radia, 
Konstantin  Shvachko,  and  Suresh  Srinivas 155 


D  DataNode 

DDDDDDDD 

DDDDDDDDDDDDD  DataNode  D  NameNode  □□□□□□  DataNodes  □□□□□□ 

□  □□□□□□  ID  □□□□□□□□□□□□□□□  IDD  DataNode  □□□  ID  D  D  D  D  IP 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  ID  □  DataNode  □  □ 
DDDDDDDDDD  NameNode  □□□□□□□□□□□□□□□□□□□□□□□□□ 

DataNode  □  □  NameNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  DataNode  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  NameNode  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD  DataNodes  □  □  NameNode  □□□□□□□□□□□□□□□□□□□□ 

DataNode  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  3Q  D  D  D  D  NameNode  □  DataNode  D  D  D  D  D 

□  □□□□ 10  □□□□□□□□□□□□□□  NameNode  □  □  □  DataNode  DDDDDDDD 

DDDDDDDDDDDD  DataNode DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  DataNode □□□□□□□□□□□□□□□□□□ 
DDDDDDDDDD 

DataNode  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  NameNode  DDDDDDDDDDDDDDDDDDDDDDD 
D  D  DD 

NameNode  □  □  DataNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DataNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


D  D  D  D  D 

D 

D 

D  D  D  D 

D 

D 

D  D  D 

D 

D 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDDDDD DD 

D 

D  D  D  D  D 

D 

D 

D  D  D  D 

D 

D 

D  D 

D  D  D  D 

D 

D 

D  D  D  D 

D 

D 

D  D  D 

D 

D 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDDDD 

D  D  D 

D 

D  D  D  D  D 

D 

D 

D  D  D  D 

D 

D 

D  D  D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D  NameNode  □  □  □  □  □ 

D  D  D 

D 

D  D  D  D  D 

D 

D 

D  D  D  D 

D 

D 

D  D  D 

D 

D 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDDD 

HDFSD 

D 

□ 

D  D  D 

D  D  D  D 

D 

D 

D  D  D  D 

D 

D 

D  D  D 

D 

D 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDDDD 

HDFS 

D 

D  D  D  D  D 

D 

D 

D  D  D  D 

D 

D 

HDFS 

D 

D 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDDDD 

D  D  D 

D 

D  D  D  D  D 

D  D  D  D 

D 

D 

D  D  D  D 

D 

D 

D  D  D 

D 

D 

□  HDFS  D 

D 

D 

D 

DDDDDDDDDDD 

D  D  D 

D 

D  D  D  D  D 

D 

D 

D  D  D  D 

D 

D 

D  D  D 

D 

D 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDDDD 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


156    The  Hadoop  Distributed  File  System 


1 "~ II "~ II "~ II "~ II "~ II "~ II "~ II "~ 1 

DDDDDDDD 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

~1门 门门门 门门门 

DDDDDDDD 

D 

D 

D  D 

nnnnnnnnnnnnnnnnnnnnnn 

n  n  n  n  n  n  n 

□  □□□□□□ 

D 

D 

D  D 

nnnnnnnnnnnn  hdfs  nnnnnnnnnnnn 

Na- 

XT       1 1 ~~ II ~~ II ~~ II ~~ 1 

meNode  □  □  □  □ 

D 

D 

D  D 

nnnnnnnnnnnnnnnnnnn  DataNodes  n  n  n 

」1_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11_1リ *--'"1-"1>  WU^a  □    □  □ 

n 

u 

n 

u 

i— i i— i i— i i— i [— i i ― ii ― ii ― i 

DDDDDDDD 

D 

D 

D  D 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 

u 

n 

u 

■ ~ ii ~ ii ~ ii ~ ii ~ ii ~ ii ~ ii ~ I 

DDDDDDDD 

D 

D 

D  D 

n  n  n  n  n  n  DataNode  nnnnnnnnnnnnnnnn 

U  U  U  U  U  U レ "Ltmuu レ UUUUUUUUUUUUUUUU 

n 
u 

n 
u 

1 ~ ii ~~ ii ~ ii ~ ii ~ ii ~ ii ~~ ii ~~ I 

DDDDDDDD 

D 

D 

D  D 

nnnnnnnnnnnnnnnnnn  NameNode  n  n  n  n 

n 
U 

n 
U 

1 ~ ii ~ ii ~ ii ~ ii ~~ ii ~ ii ~ ii ~~ I 

DDDDDDDD 

D 

D 

D  D 

nnnnnnnnnnnn  DataNode nnnnnnnnnn 

UUUUUUUUUUUU レ "La 上、 UUUUUUUUUU 

D 

D 

1 ~ ii ~ ii ~ ii ~ ii ~ ii ~ ii ~ ii ~ I 

DDDDDDDD 

D 

D 

D  D 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUU 

D 

D 

DDDDDDDD 

D 

D 

D  D 

DDDDDDDDDD  DataNode DDDDDDDDDDDD 

D 

D 

DDDDDDDD 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDDDDDDD 

D 

D 

D  D 

DataNode  □□□□□□□□□□□□□□□□  NameNode  □ 

D 

D 

Da は Nodes  □  □  □ 

D 

D 

D  D 

D  D  9.1D  D  DD 

Blocks 


D  9.1:  HDFS  DDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD  HDFS  DDDDDDDDDDDDDDDD 
口  □  API  DDDDDDDDDDDDDDDD  MapReduce  □□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDD3DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 


J  J  J 

圈ほ 

は 5 

p 


n 

a 


Robert  Chansler,  Hairong  Kuang,  Sanjay  Radia, 
Konstantin  Shvachko,  and  Suresh  Srinivas 157 


CheckpointNode 


HDFS  D  D  D  D  NameNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDD  CheckpointNode  □  □  □  □  BackupNode  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

CheckpointNode  Q  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 圍 
DDDDDDDDDDDDDDD  □  CheckpointNode  □  □  □  □  □  NameNode  D  DDDDDDDD 
DDDDDDDDDD  NameNode  □□□□□□□□□□□□□□□□□□□□  CheckpointNode 


D  D 

D 

D 

D 

D 

DD  DDDDDDDDDDDDDDDD  NameNode  □□□□□□□ 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDD  DDDDDDDD  NameNode  □  □  □  □ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  DDDDDDDD  NameNode  DDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D  D  HDFS  DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD  NameNode □ 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

BackupNode 

HDFS  DDDDDDDDDDD  BackupNode  □  □  CheckpointNode  □  □  □  □  □  BackupNode 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  NameNode  □□□□□□□ 
DDDDDDDDD 

BackupNode DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Na- 
meNode DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
NameNode  □  BackupNode  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  NameNode  DDDDDDDDDD  BackupNode  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

BackupNode  DDDDDDDD  NameNode  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  BackupNode □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD 


158   The  Hadoop  Distributed  File  System 


BackupNode  □□□□□□□□□  NameNode  □□□□□□□□□□□□□□□□□□□□ 


D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

1 ~ ii ~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~ ii ~ ii ~ I 

DDDDDDDDDDDDDDDDDD 

D 

D 

1 ~ ii ~ ii ~ ii ~ ii ~ ii ~ ii ~ ii ~ I 

DDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDD 

D 

D 

NameNode  □  □  □ 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  BackupNode  □□□□□□□□□□□ 

D 

D 

□  D  NameNode  □ 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDD 

D 

D 

BackupNode  □  □ 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□□□ 

n 

n  n  n  n 
U  U  U  U 

n 

nnnnnnnnnn 

uuuuuuuuuu 

n 

n 
u 

n 
u 

n 
u 

n  n  n  n  n  n  n 
u  u  u  u  u  u  u 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

□  □□□□□□ 

D 

□  HDFS  D 

D 

DDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

□□□□□□□ 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

□□□□□□□ 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

□  □□□□□□ 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

□  □□□□□□ 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

□  ■  □  □  □ 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

□  □□□□□□ 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

NameNode  口  口 

D 

D  DD  D  D 

D 

DDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

□  □□□□□□ 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

□  □□□□□□ 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

□□□□□□□ 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDD 

D 

D 

D  D 

D 

NameNode  口 

D  DataNodes  □  □  □  □  Da は Node  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  DataNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DataNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


D  D 

D 

D 

D 

D 

D  D  D  D  D  DataNode  □□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  HDFS  DDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

□  □□□□□  NameNode  DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DataNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDD 


Robert  Chansler,  Hairong  Kuang,  Sanjay  Radia, 
Konstantin  Shvachko,  and  Suresh  Srinivas 159 


DDDDDDDDDDDDD  DNameNodeQ 

DDDDDDDDDDDDDDDDDDD  Da は Node  □□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDD  NameNode  □  DataNode  □□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD 


9.3  □□□□!/。□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
HDFS  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D  D  D  HDFS  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDD  HDFS  DDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

□□□□□□ 

HDFS 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDD  NameNode  □□□□□□□□□□□□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDdDD)DDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  HDFS  DDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

HDFS  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

NameNode  □□□□□□□□□□□□□□□□□□□□  ID  □□□□□□□□□□□□□□□ 


1 60   The  Hadoop  Distributed  File  System 


n  n 
U  U 

n 
U 

n  n 
U  U 

UatalNoae  UUUUUUUUU  JJatalNoae  UUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n  n  ,n  n  n  A/i wi\  nnnnnnnnnnnnnnnnn 

U  U  (U  U  U  o4KB)  uuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 

u  u 

n 

u 

n  n 

u  u 

nnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuu 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n  n 

u  u 

n 

u 

n  n 
U  U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

D 

D  D 

D  D  D 

n 
U 

D 

D  D 

HDFS  □□□□□□□□□□□□□□□□□□□□□□□  口 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

D  D 

D  hflush  DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDD  DataNode □  □  □  □  □ 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDD  hflush  □□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

D 

D  D 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD3DDDDDDDDDDDDDDD  9.2  D 
DDDDDDDDD3DD  DataNode(DN) D  5DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  DataNode 

□  ti 

DDDDDDDDDDDDDDDDDDDtiDDt2DDDDDDDDDDDDDDDDD 
DDtiDDDDDDDDDDDDDDDDDDDDt2  DDDDDDDDDDDDDDDD 
DDDDDDDDD  hflush  □  □  □  packet  2  □□□□□□  □  hflush  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  t2Q  D  t3  □□□□□□□□□□□□□□□ 
DDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□ 

□  □□□□□□□□)□□□□□□□□□□□□□  DataNode  □□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  HDFS  □ 
D  D  HDFS  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  HDFS  □  □  □ 

□  DataNode  D  DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  HDFS  DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDD  DataNode  □□□□□□  DataNode  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
HDFS  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  NameNode 

DDDDDDDDDDDDDDDDDDDDDDDDDD  DataNode □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  NameNode DDDDDDDDDDDDDDDDDDD 


Robert  Chansler,  Hairong  Kuang,  Sanjay  Radia, 
Konstantin  Shvachko,  and  Suresh  Srinivas 161 


D  9.2:  DDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDD 

DDDDDDDD  DataNode  □□□□□□□□□□ 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDD 

D 

HDFS  D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDD 

NameNode  □□□□□□□□□□□□□□□□□□ 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

HDFS  D  I/O  D  D  D  D  MapReduce  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD /DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


1 62   The  Hadoop  Distributed  File  System 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD 


□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD9.3DDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  3D □□□□□□□□□□□ 


D  9.3:  DDDDDDDDDD 


HDFS  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDlDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 

HDFS  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  NameNode  DDDDDDDDD  DataNode  DDDDDDDDDDD 
D  D  DataNode  □  NameNode  DDDDDDDDD  NameNode  □□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  NameNode  □  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDD  HDFS  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Robert  Chansler,  Hairong  Kuang,  Sanjay  Radia, 
Konstantin  Shvachko,  and  Suresh  Srinivas 163 


DDDDDDDDDDDDDDDDDDDDDD  HDFS DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  HDFS  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  HDFS  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  2/3 DDDDDDDDDDDDDDDD 
D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

NameNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  DataNode  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D 


□□□□□□□□□□□ 

NameNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  NameNode  □  DataNode 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  NameNode  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  DataNode 
DDDDDDDDDDDDDDDDDD  DataNode  □□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  2/3  □□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


1 64   The  Hadoop  Distributed  File  System 


n  n 
U  U 

n 
U 

n 
U 

u 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n  n  n  ut^ThQ  nnnnnnnnnnnnnnnnnnnn 

U  U  U  U  tiUti>  uuuuuuuuuuuuuuuuuuuu 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n  n 
U  U 

n 

u 

n 

u 

D  NameNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

n 

u 

n  n 

u  u 

n  n 
U  U 

n 
U 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD  NameNode  □ 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n  n 
U  U 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDD  NameNode □  □ 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDD  NameNode  □  □  □  □ 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D  D 


HDFSQ 

D  D 

D 

D  D 

D 

D  D 

D  D  D  DataNode  □ 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDD 

D 

D  D  D  D  D 

—口 

D 

DD 

D 

D  D 

DDDDDDDD 

D 

一口 

D 

D 

D 

D 

□  □□□□□  DataNode  □ 

D 

D  D  D  D  D 

D  D 

D 

D  D 

D 

D  D 

DDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D  D  D  D  D  DataNode  □  □ 

D 

D  D  D  D  D 

D  D 

D 

D  D 

D 

D  D 

DDDDDDDD 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDD 

D 

□  □□□□□□ 

□  □□□□□□  HDFS  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
0DD1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD  DataNode  □□□□□□□□□□□□□□□  3D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 4D □□□□□□□□□□□ 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

DataNode  DDDDDDDD  DataNode  □ 

D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

AD  DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□□  BQ  D  D  D  D  D 

□  □□□□  AD DDDDDDD  BQ  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDD 

3ロ □□□□□□□□□□□□□□□□□□□□ 

^□□□□DDDDDDDDDDDDDDDDD 


Robert  Chansler,  Hairong  Kuang,  Sanjay  Radia, 
Konstantin  Shvachko,  and  Suresh  Srinivas 165 


□□□□□□□□□ 

D  DataNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  DataNode  □□□□□□□□□□  DataNode  □□□□□□□□□□□□□□□□□□□ 
D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DataNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  DataNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

NameNode  □□□□□□□  NameNode  □□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□  □  □  □ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD  DataNode □□□□□□ 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDD  NameNode DDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D  D  DataNode  □□□□□□□□□□□□□□□□□□  DataNode  □  □  □  □ 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD 

□□□□□□□□□□□ 

DDDDDDDDDDDDD  HDFS  DDDDDDDDDDDDDDDDDD  HDFS  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDD  HDFS  □  □  DistCpD  DDDDDDDDDD 
DDDDDDDDD /DDDDDDDDDDDDDDDDDDDDDDDD  MapReduce  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  MapReduce  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD 

1 66   The  Hadoop  Distributed  File  System 


9.4    YahooID  □  □  □  □  □ 


Yahoo!D  D  D  D  HDFS  □□□□□□□  4000  □□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDD  D  2.5  GHz  D  □□□□□□  XeonQ  □□□□□  2Q  D  D  D  D^12D  D 

SATAQ  □□□□□□  (D  2TB) 口  RAMQ  24GBQ  ID  D  D  D  D  D  Ethernet  Q  D  D  D  D  D 

□  □□□□□□  7Q  D  HDFS  DDDDDDDDDDDDDDDDDDD  OS(Red  Hat  Linux)  D 

□  □□□□□  MapDDDDDDDDDDDDDD  (MapReduce  DDDDDDDD  HDFS  □  □ 

□  □□□)□ 

DDDDDDDD  40Q  DDDDDDDDDDDDDDDDDDD  IPDDDDDDDDDD 
DDDDDDDDDD8DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

NameNode  □  BackupNode  □□□□□□□□□□□□□□□□□□□□  64GB  □  RAM  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D 

D 

D  D  D  D 

D  D  4000  D  DDDDDDDDDDDDDDDDDDDDDDDD 體 (口 

D 

D 

D 

D 

; 1 000TB)  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D  D 

3.7PB  DDDDDDDDDDD  HDFS  DDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDD  RAM □□□□□□ 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDD  Hadoop  DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D  D  D 

D 

D  D  D  D 

DDDDDDDDDDD  (4000 □□□)□□□□□□□□□□  6500 □ 

D 

D 

D 

D 

D  D  8000  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  60,000  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  200  DDDDDDDDDDDDDDDDDDD  Yahoo!  口  Hadoop  □  □  □  □ 
D  D  D  40,000  DDDDDDDDDDDDDDDDDDDDD  40PB  □□□□□□ 


Yahoo! 口 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

□ 

□ 

D 

D  D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  YahooID 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD1DDDDDDDDDDDDDDDDDD  0.005 □□□□□□□ 
DDDDDDDDDDD  0.8 DDDDDDDDDDDDDDDDDDDDDDD(DDDDD 

Robert  Chansler,  Hairong  Kuang,  Sanjay  Radia, 
Konstantin  Shvachko,  and  Suresh  Srinivas 167 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□)  口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  60,000  D  D  D  D  D 
DDDDDDDDD2DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD2DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  HDFS  DDDDDDDDDDDDDDDDDD 

□  □□□□□□□  (□□□□□□□□□□□□□□□□□□□□□□□□□□□□)□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□□□□□□□□ 
DDD)DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  0.5  □□□ 


D  D 

D 

D 

ID  D  D  D 

D 

D 

D 

DDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D  D 

D  D 

D 

D 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D  D 

D  D 

D 

D 

D  D  D  D  D 

D 

D 

D 

DDDDDDDD 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

20  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D  D 

D  D 

D  D  D 

HDFS □  □  □  □  □ 

HDFS  DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDD  UnixQ  DDDDDDDD 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D  D  D 

□  u 

ni> 

l  (POSIX) 

D  D 

□  □□□□□□  HDFS  DDDDDDDDDDDDD  HDFS 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

DDDDDDDD  HDFS  DDDDDDDDDDDDDDD 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

□  HDFS  D 

D 

D 

D 

D 

D 

D  D 

D  D 

□  □□□□□□□□□□□□□□□□□□□□  OS  □□□□ 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

1 68    The  Hadoop  Distributed  File  System 


n  n  n  n 
U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  T^^rU^r^c  nnnnnnnnnnnnnnnnnnnnnnnnnn 
U  U  Kerberos  UUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n  n  n 
U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n  n  n  n 
U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnn 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n  n  n 
U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  ut^"pc  nnnnnnnnnnnnnnnnnnnnnnnnnnnn 

U  riDtb  uuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n  n  n 

u  u  u  u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n  n  n 
U  U  U  U 

n 
U 

D 

D 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n  n  n 
U  U  U  U 

n 
U 

D 

D 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n  n  n 
U  U  U  U 

n 
U 

D 

D 

n 
U 

n 
U 

n  n  n  n  n  n  or\c,c  nnnnnnnnnnnnnnnnn  d  a  \/\  n  n  n 

U  U  U  U  U  U  riutb  UUUUUUUUUUUUUUUUU  kam  u  u  u 

n  n  n  n 
U  U  U  U 

n 
U 

DD 

n 
U 

n 
U 

nnnnn  , nnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUU  (UUUUUUUUUUUUU)UUUUUUUUUUUUUU 

n  n  n  n 
U  U  U  U 

n 
U 

D 

D 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n  n  n 
U  U  U  U 

n 
U 

D 

D 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n  n  n 
U  U  U  U 

n 
U 

D 

D 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n  n  n 
U  U  U  U 

n 
U 

D 

D 

n 
U 

n 
U 

n  n 

u  u 

n 
U 

D 

D 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

D  D  D  D 

D 

D 

D 

D 

D 

I ~ II ~ II ~ II ~ II  II  II  II  II  II  II ~ || ~ || ~ 1 11    IT             |  -k          I  I ~ || ~ || ~ || ~ || ~ || ~ || ~ || ~ || ~ || ~ II  II  II  II  1 

DDDDDDDDDDDDD  MapReduce  DDDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D 

D 

D 

□  □□□□□  (Reduce  □□□□□□□□□□)□□□□□□□□□□□ 

D  D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDD 

D 

D  D 

D 

D 

□  □□□□□□  HadoopArchive(HAR)D  D  DDDDDDDDDDDDDD 

HAR  DDDDDDDDDDD  tarQ  JAR  D  D  D  D  Zip  □□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDHARDDDDD 
MapReduce  DDDDDDDDDDDDDDDDDDDDDDD 


□  □□□□□□□□  HDFS  Federation 


NameNode  Q 

DDDDDDDDDDDDDDDDDDDDDDD  [ShvlOJD  NameNode  □ 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD  NameNode  □□□□□□□□ 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  DD 

D 

D 

D 

D 

D  D  NameNode  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

HDFS 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDD  (□□□  NameNodes) DDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDD  SAN DDDDDDDDDDDDDDDDDDD 

Robert  Chansler,  Hairong  Kuang,  Sanjay  Radia, 
Konstantin  Shvachko,  and  Suresh  Srinivas 169 


口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

口  □□□□□□□□  [PPT+93,  Rad94,  RP93]  口 


9.5  □□ 

Hadoop  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
口  □□□□□□□□□□□□□□□□□□  POSIX  DDDDDDDDDDDDDDDDDDD 
口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
口  □□□□□□□□□□□□□□□□  NameNode  DDDDDDDDDDDDDDDDDDD 

口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  Hadoop  □□□□□□□ 

口  □□□□□□□□□□□□□□□  Yahoo!D  DDDDDDDDDDDDDDDDDDDDD 

口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  NameNode 
口 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
口  □□□□□□□□□□□□□□□□□□□□□□□□  (□□□□□□)□□□□□□□□□ 
口 □□□□□□□□□ 

DDDDDDDDDDDDDDDD  Java □□□□□□□□□□□□□□□□□□□□□  口 
口  □  □  JavaQ  NameNode  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDJavaDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


□ 

□  _u 

□  _u 

□  _u 

□  _u 

u  □ 


□ 

□ 


□ 

□ 


□ 

□ 


□ 

□ 


□  _u 

□  _u 

□  _u 

e 

d 

o 

N 


□ 

□ 


□ 

□ 

□ 

□ 


N 

□ 


□  _u 


□ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□ 


□ 

□ 


□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


1 70    The  Hadoop  Distributed  File  System 


9.6    □  □ 

Yahoo!  口  D  D  Hadoop  DDDDDDDDDDDDD  Hadoop  DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDD  HDFS  □  MapReduce  D  D  D  D  D  80%D  Yahoo!  口  D  D  D  D 

DDDDDDDD  Hadoop DDDDDDDDDDDDDDDDDDDDDDDDD 


171 


□ 10 口 


Jitsi 

Emil  Ivov 


Jitsi  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD  XMPP(Extensible  Messaging  and  Presence 
Protocol) D  SIP(Session  Initiation  Protocol)  DDDDDDDDDDDDD  Yahoo  !□  Windows 
Live  Messenger(MSN)  □□□□□□□□□□□□□□□□□□□□□  Microsoft  Windows  □ 
Apple  Mac  OS  XQ  LinuxQ  FreeBSD  DDDDDDDDDDDDD  Java  □□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDD  Jitsi  □  OSGi  DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□  'D 


10.1   Jitsi  ODD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Jitsi (口  D  D  SIP  Communicator  DDDDD)DDDDDDDDDDDDDDDDDDDDD 
D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  sendMessage  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  sendXmppMessage 
D  D  D  D  D  D  D  sendSipMsg  DDDDDDDDD 

DDDDDDDDDDDDD  JavaD  DDDDDDDDDDDDDDDDDDDDD2DD 

DDDDDDDDDDDDDDD     DDDDDDDDDDDD  Java  Runtime  Environment  (JRE) 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


http://jitsi.org/sourceQ  Eclipse  □  NetBeans  □□□□□□□□□□□□□□□□ 
□  □□□□□DDDDDDDDDDDDD  http://jitsi.org/eclipseQ  http: //jitsi .org/netbeans 


DDDDDDDDDDDDDDDDDDDDDDDD  SIP  Communicator  □  DDDDDDDDD 

Windows  □  □  DirectShow  □  □  □  □  □  Mac  OS  X  □  □  QTKit  □□□□□□  Linux  □  □  Video  for 

Linux  2DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  (DDDDDDDDD  )D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  VoiPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Jisti  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D  D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D  D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D  D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D  D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D  D  D 

D 

D  D 

VoIPQ  IM  □□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D  D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

OSGi  D  D 

D  D  D 

D 

D  D 

□□□□□□□□□□□□□□□□□□□□□[ 

10.2    Jitsi  D  OSGi  □□□□□□□ 

OSGi  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  Jitsi DDDDDDDDDDDD 
OSGi  DDDDDDDDDDDDDDDDDDDD  OSGi  DDDDDDDDDDDDDDD 

DDDDDDDDDDDDDD  OSGi  □□□□□□  Java  □□□□□□  Java  □□□□□□□□ 

DDDDDDDDDDDDDDD  JARD  DDDDDDDDDDDDDDD  Jitsi  D  D  D  D  D  D 
DDDDDDDDDDD  Windows  Live  Messenger  DDDDDDDDDDDDDDDDDDD 
XMPP  □□□□□□□□□□□□□□□□□□□□□□□  GUI  □□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Apache  Felix  □  □  □ 
DDDDDDDD  OSGi  DDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□ GUI  □□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  OSGi  DDDDDDDD 
DDDDDDDDD  OSGi  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□  OSGi  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


1 74  Jitsi 


DDDDDDDDDDDDDDDDD  JavaQ  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  "Impl"  DDDDDDDDDD  (□□ 
D  ,  ConfigurationServiceImpl)D  OSGi  DDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□  OSGi  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  start  D  stopD  D  D  D 
DDDDDDDDDDDDDDDDDDDDD  Felix  D  JitsiD  DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  Felix  □  BundleContext  DDDDDDDDDDD 
D  D  D  D  BundleContext  □□□□□□□  OSGi  DDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  OSGi  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
(D 10.1) 口 


Configuration  Bundle 

Activator  w- 


Conf igurationServicelmpl J 
Conf igurationService  ] 


OSGI 

BundleContext 


Configuration  Bundle 


Activator 
started 


〔Conf  lgurationServicelmp 丄 1^  

f    Cont igurationService 


に  OSGI 

BundleContext 


D 10.1:  OSGi  DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDD  Jitsi  □□□□□□  ConfigurationService 

DDDDDDDDDDDDDDD 


Emil  Ivov 175 


package  net . java . sip. communicator . service . configuration ; 

public  interface  Conf igurationService 

public  void  setProperty (String  propertyName,  Object  property) ; 
public  Object  getProperty (String  propertyName) ; 

} 

DDDDDDDD  Conf  igurationService  DDDDDDDDDDDDDDD 
package  net . java . sip. communicator. impl . configuration; 

import  java. util . *; 

import  net. java. sip. communicator. service. configuration.*; 

public  class  Conf igurationServicelmpl  implements  Conf igurationService 

private  final  Properties  properties  =  new  Properties() ; 

public  Object  getProperty (String  name) 
{ 

return  properties . get(name) ; 


public  void  setProperty (String  name,  Object  value) 
{ 

properties . setProperty (name ,  value.  toStringO) ; 

} 

net.  java.  sip.  communicator,  service  Q  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  net .  java .  sip .  communicator .  impl D  D  D  D  Jitsi  D  D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  OSGi  □□□□□□□ 
DDDDDDJARDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  export  □□□□□□ 
DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  BundleContext  D  D  D 
D  D  D  D  conf  igurationService  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 

package  net . java . sip. communicator. impl . configuration; 
import  org . osgi . framework . * ; 

import  net. java. sip. communicator. service. conf igurat ion; 
public  class  Conf igActivator  implements  BundleActivator 
public  void  start (BundleContext  be)  throws  Exception 


176  Jitsi 


be. registerService(Conf igurationService. class. getName() ,  II  service  name 
new  Conf  igurationServicelmplO  ,  II  service  implementation 
null); 


ConfigurationServicelmpl D  D  D  D  BundleContext  DDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D 

package  net . java . sip. communicator . plugin. randombundle ; 
import  org. osgi. framework.*; 

import  net . java .sip. communicator. service . configuration . * ; 

public  class  RandomBundleActivator  implements  BundleActivator 

{ 

public  void  start (BundleContext  be)  throws  Exception 

ServiceReference  cRef  =  bc.getServiceReference( 

Conf igurationService . class . getName() ) ; 
configService  =  (Conf igurationService)  be . getService (cRef ) ; 

II  And  that's  all!  We  have  a  reference  to  the  service  implementation 
II  and  we  are  ready  to  start  saving  properties: 
configService. setProperty("propertyName" ,  "propertyValue") ; 


DDDDDDDDDDDDD  net.  java.  sip.  communicator,  plugin  DDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Jitsi □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  conf  igurationService  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  (D 10.2)D 


10.3  □□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  OSGiD  DDDDDDDDDDDDDDDDD  JavaQDDD 
D  (D  DDDDDDDDDDDDDDD  )DDDDDDDDDD  Java  DDDDD  (□□□□□ 
□  □□□□□□□□□)□  BundleActivator  D  DDDDDDDDDDDDDDDDDDDDDD 
D  JARD  DDDDDDDDDDDDDDDDD 

D  D  D  D  D  D  D  Conf  igurationService  DDDDDDDDDDDDDDDDDDDDDDDD 


Emil  Ivov 177 


net.java.sip.communicator 


1 ^~ >  configuration  ' 


configuration 


1 ^~ >  configform 


>  ConfigurationService 
export  service.config 


ConfigurationServicelmpI 
import  service.config 


>  ConfigurationForm 
import  service.config 


□ 10.2:  □□□□□□□□□□  □ 


Bundle-Activator :  net . java . sip . communicator. impl . configuration . Conf igActivator 

Bundle-Name:  Configuration  Service  Implementation 

Bundle - Description : 八 bundle  that  offers  configuration  utilities 

Bundle-Vendor:  jitsi .org 

Bundle-Version:  0.0.1 

System-Bundle :  yes 

Import - Package:  org. osgi .framework, 

Export-Package:  net . java . sip. communicator . service. conf igu rat ion 


JARD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Jitsi  D  D  D  D  D  D 
□  □□□□□□  Apache  Ant  □□□□□□□□□  Jitsi  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  build. xmlQ  DDDDDDDDDDDDDD  JAR 
D  D  build,  xml DDDDDDDD  bundle- 環 DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

<target  name=" bundle - conf igu rat ion "> 

<jar  destf ile="${bundles . dest}/conf iguration . jar"  manifest^ 

"${src}/net/java/sip/communicator/impl/configuration/conf. manifest . mf "  > 

<zipf ileset  dir="${dest}/net/java/sip/communicator/service/conf iguration" 
pref ix="net/java/sip/communicator/service/conf iguration"/> 

く zipf ileset  dir="${dest}/net/java/sip/communicator/impl/conf iguration" 
pref ix=" net/ java/sip/communica tor/ impl/conf iguration"  /> 

</jar> 
</target> 


DDDDDDDDDAntDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  JARD  DDDDDDDDD  service  D  implD  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  Felix  D  DDDDDDDDDDDDD 


178  Jitsi 


JitsiD  D  D  OSGiD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  OSGi  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Felix  □ 

DDDDDDDD  D  D  D  D  D  D  D libD  D  D  D  D  D  D  felix. client,  run. properties  D  D  D 

□  □□□□□□  Felix  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  FileAccessService  □ 

DDDDDDDDDDDD  fileaccess.  jarQ  DDDDDDDDDDDD  ConfigurationService 
D  D  FileAccessService  DDDDDDDDDDDDDDDDD 

felix. auto. start. 30=  \ 

reference :file: sc-bundles/f ileaccess . jar 

felix. auto. start. 40=  \ 

reference: file: sc - bundles/configuration. jar  \ 
reference: file: sc - bundles/ jmdnslib. jar  \ 
reference: file: sc-bundles/provdisc. jar  \ 


felix.  client,  run.  properties  Q  DDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□ 

org.osgi . framework . system . packages . extra=  \ 
apple. awt;  \ 

com. apple . cocoa . application ;  \ 
com. apple . cocoa . foundation ;  \ 
com. apple. eawt;  \ 


D  D 

D 

D 

D 

D 

D  Felix  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD  (□□□□  import-Package 

D  D 

D 

D 

D 

D 

D 

□  □□□□□□)□□□□□□□□□□□□□□□  OS 

D  D 

D 

D 

D 

D 

D 

DDDDDDDD  J"si  DDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

10.4  □□□□□□□□□□□□□□□□ 

Jitsi D  ProtocolProviderService DDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  Jitsi  □□□□□□□□□□□□□□□□(□□□□□□□□□□□□□□□)□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D 


Emil  Ivov 179 


D  D  D  D  DDD  D  D  DDD  D  D  D  D  D  D  D  D  net .  java . sip . communicator . service . protocol 

DDDDDDDDDDDDDDDDDDDD  D  D  net .  java .  sip .  communicator .  impl . protocol - - 
protocol.name  DDDDDDDDD 

service,  protocol Q  D  DDDDDDDDDDDDDDDDDDDDD  []  ProtocolProviderSer- 

vice DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  BundleContext 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Jitsi  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDD 


D 

D 

D 

D 

D 

D 

D 

D 

D 

ProtocolProviderService  DDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

sip  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D  MSN  D  AIM  DDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD  (□□□□□□□) 口 

ProtocolProviderService  DDGUIDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□  AIM  □□□□□□□□□□□□□□□□ 

□  □□□□□ 

OperationSets  □□□□□□□  (□ 10.3)D  DDDDDDDDDDDDDDDDDDDDD  Jitsi 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDD  OperationSetBasicInstantMessaging  □□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDD  Jitsi  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  OperationSetPresence  □  □  □  □  OperationSetPresence  □□□□□□□□□□□□ 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  GUI  □□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDD  ProtocolProviderService DDDDDDDDDDDDDDDDDDDDDDDD 

public  Map<String,  OperationSet>  getSupportedOperationSetsO ; 

public  <T  extends  OperationSet>  T  getOperationSet(Class<T>  opsetClass) ; 

OperationSets  □□□□□□□□□□□□□□□  OperationSet  □□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


180  Jitsi 


D 10.3:  DDDDDDDDDDD 

口 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDD  OperationSetPresence  DDDDDDDDDDDDDDDDD 
口 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

OperationSetPersistentPresence  DDDDDDDDDDDDDDDDDDDDDDDDD 
口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
口  □  □ 


DDDDDDDDDDDDDDDDDDDDDDDDDD 

ProtocolProviderService DDDDDDDDDDDDDDDDDDDDDDDDDDD l 
DlDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  Q  BundleContext  DDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

nnnnnnnnnnnnnnnnnnnnnnnn  protocoiProviderFactory  n  n  n  nn  n 


Z  See...  Z  d£Ui  CLaJI  ajid  CLhdt 

through  XMPP, んビ Z  cm^ 


OperationSetBasiclnstantMessaging 


OperationSetPresence 
OperationSetFileTransfer 
OperationSetBasicTelephony 


jrationSetBasiclnstantMessaging 

>  

OperationSetPresence 

OperationSetFileTransfer 

XMFWF*  Fwrotocol  Fwroviaer 


50  protocol  provider 


Emil  Ivov 181 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  D  DSIPD  □□□□□□ 

net . java . sip . communicator - impl . protocol - sip . ProtocolProviderFactorySipImpl □  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□  SIP  □□□□□□□□□□□□□□□□□ 

□  □  □  net. java. sip. communicator. plugin.sipaccregwizz  □  □  □  □ 


10.5  nnnnnnnnn 

IPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDSIPD  XMPPD 
DDDDDDDDDDDDDDDDDDVolPDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  (RTP)  D  DDDDDDDD  SIPD  xmppq  DRTPDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  (□□□□□□□□)□□□□□□  RTPDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  SIPD  XMPPD  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD 

D  D  D  DJitsiD  DDDDDDDDDDDDDDDDDDDDDDDDDDDD^>D  jabber  U 
JitsiDD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DD  DDDDDDDDDDDD  □  MediaService  □  Q  D  DMediaServiceQ  □□□□□□  net.  java. 
sip. communicator. service . neomedia 口  net . java .sip. communicator . impl . neomedia 口  口 

D  D 


D  D  "neomedia"? 


neomedia  □□□□□□□ 

"neo' 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDD 

D  D  D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDD 

D  D  D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDD 

D  D  D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDD 

D  D  D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDD 

D  D  D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

MediaService  DDDDDDDDDDDDDDDDDDDDDDDDD  MediaDevice  □  Me- 
diaStream  □  □  □  □ 


182  Jitsi 


DDDDDDDDDDDDDDDD 


MediaDevice  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (D 10.4)D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  MediaDevice □  □  □ 
DDDDDDDDDDDDD  Jitsi  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  AudioMixer  DDDDDDDDDDDDDDDDD  MediaDevice  □  □  □  □  MediaType  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  Jitsi  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
MediaStream  □□□□□□  MediaStream  DDDDDDDDD  MediaDevice  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD  MediaType  DDDDDDDDDDDD 
DDDDDD /DDDDDDDDD  Jitsi  DDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

MediaDevice  DDDDDD 

□  □  □  □  □ 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

MediaFormat  口  口 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

口  48KHzPCM  口 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD  "raw  audio"  □  □ 

DDDDDDDDD  WAV  DDDDDDDDDDDDDDDDDDDDDD  WAV  DDDDDD 
DDDDDDDDDDDDDDDDDDDPCMDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


iLBC  口 

8KHz  Speex  □  G.729  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D  D  D  D  D  Speex  D  G.722  DDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDD  H.264Q  DDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D  D  D  Jitsi  D  H.264  DDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDD  CPU  DDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

CPU 

D  D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDD  VolPQ 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDD 

Emil  Ivov 183 


Camera 
MediaDevice 


D 10.4:  DDDDDDDDDDDDDDDDDDDDD 
口  □□□□□□□□□□□□□□ 

□  □□□□/ 口  □□□□□□□□□□□  Jitsi  DDDDDDDDDD  MediaService  □  □  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDD  MediaService DDDDDDDD 

public し ist ぐ MediaDevice〉  getDevices(MediaType  mediaType,  MediaUseCase  useCase) ; 

MediaType  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  口 
MediaUseCase  Q 

口  □□□□□□  (MediaUseCase.CALL) 
口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
口  (MediaUseCase.DESKTOP)  □□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  Q  MediaDevice .  getSupportedFormats  DDDDDDDDDDDDDDDD 
public し ist<MediaFormat〉  getSupportedFormats() ; 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


Video  Media  stream 


Auaio  Media  Stream 


am 


184  Jitsi 


□  □□□□□□□□□ /□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDiPDDDDDDDDDDDVolPDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

"□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□DO 
//DDDDDDDDDDDDDD 

〃□□□□□□□□□□□□□□□□□□  RTPD  DDDDDDDDDDDDDD  RTCP  □  □  □  □ 
StreamConnector  connector  =    new  DefaultStreamConnector(rtpSocket ,  rtcpSocket) ; 
MediaStream  stream  =  mediaService. createMediaStream(connector,  device,  control) ; 

II  MediaStreamTarget  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
〃□□□□□□□□□□□□□  VoIP  □□□□□□□□□□□ 
stream. setTarget( target) ; 

II  MediaDirection  □□□□□□□  stream  □□□□□□□□□□□□□□□□□□□□□□ 
stream. setDirection(direction) ; 

〃 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

〃□□□□□□□□□□□□□ 

stream. setFormat(format) ; 

//□□□□□□□□□□□□□□□  media  □□□□□□□□□□□□□□□□□□□□□ 

//□□□□□□□□□□ 

stream. start() ; 

DDDDDDDDD  wave  □□□□□□□□□□  ロロ  Hello  world!  口  □□□□□□□□□□ 


10.6  uin  D  D  D 


D 

D 

D 

D 

D 

D 

D  D  JitsiD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

Jitsi  Q 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD  Jitsi □□□□□□ 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

DDDDDDDDDDDDD  Jitsi  DDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D  UlService  DDDDDDDDDDDDD  Jitsi  □□□□□□ 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

DDDDDDMacOSXDDDDDDDDD  Windows  D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD  Jitsi  □  □ 

D  D 

ロロ  □ 

(OTR)  口  口 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

OTR  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  GUI  □□□□ 


Emil  Ivov 185 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□OTR  □□□□□□□□  OSGi  □□□□□□□  OtrActivator  □□□□□□□□□□□□ 

D  D  D  D  D 

Hashtable く String,  String>  filter  =  new  Hashtable<String,  String>() ; 

//  Register  the  right-click  menu  item. 
filter(Container. CONTAINER— ID, 

Container. CONTAINER_CONTACT_RIGHT_BUTTON_MENU.getID()); 

bundleContext . registerService(PluginComponent . class . getName() , 

new  OtrMetaContactMenu(Container.CONTAINER_CONTACT_RIGHT_BUTTON_MENLO  , 
filter); 

II  Register  the  chat  window  menu  bar  item, 
f ilter. put (Container. CONTAINER— ID , 

Container. CONTAINER_CHAT_MENU_BAR. getID() ) ; 

bundleContext. registerService(PluginComponent. class. getName() , 

new  OtrMetaContactMenu(Container.CONTAINER_CHAT— MENLLBAR) , 
filter); 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  D  OSGi  DDDDDDDDDDDDDDDD  UlService  □  □  □  □  □  PluginComponent  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  OSGi  DDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDD  MetaContactRightButtonMenu  DDDDDDDDD 
DDDDDDDD 

//  Search  for  plugin  components  registered  through  the  OSGI  bundle  context. 
ServiceReference[]  serRefs  =  null; 

String  osgiFilter  = " (" 

+  Container. CONTAINER_ID 

+  'リ' +Container.  CONTAINER— CONTACT— RIGHT— BUTT0N_MENU.getIDO  +  ")"; 

serRefs  =  Gui Act i vator . bundleContext . getServiceReferences( 
PluginComponent . class . getName() , 
osgiFilter) ; 

//  Go  through  all  the  plugins  we  found  and  add  them  to  the  menu, 
for  (int  i  =  0;  i  <  serRefs. length;  i  ++) 

PluginComponent  component  =  (PluginComponent)  GuiActivator 
. bundleContext .getService(serRefs[i]) ; 


186  Jitsi 


component . setCurrentContact(metaCon tact) ; 

if  (component . getComponent ()  ==  null) 
continue; 

this,  add  ((Component)  component.  getComponentQ) ; 


10.7    D  □  □  □ 

SIP  Communicator  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □ 『□  □  JavaQ  DDDDD?DDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□『□  "JavaQ  Jitsi  D  D  D  D  D  Skype  Q  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  JavaD  □□□□□□□□□□□□□□  C++ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□  Java  □□□□□□□□□□□□□□□□□□□□□ 

D  D  D  D  Windows  D  Linux  □□□□□□□□□□□□□□□□□□□□  Java  □  Java  Media 
Framework  □□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDD  Java  DDDDDDDDD  SIP  Communicator  □□□□□□□□  90%D  D  OS  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (□□□ 
D  D  SIPD  XMPPQ  ,□□)□□□□□□□□□□  OS  □□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□Java  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 口 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD -DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  JavaQ  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□  OS  □□□□□  Java  D  D 

□  □□  OS  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  Java  □□□ 

DDDDDDDDDDDDDDDDD 


c 


p 


□ 

口 

t 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


□ 

□  _u 

口 


□ 

□ 


Emil  Ivov 187 


JavaD  D  D  D  D  PortAudio 

JavaD  DDDDDDDDDDDDDDDDDDDDDDDDD  JavaQ  D  D  D  D  D  APIQ  D 

□  □□□□□  JavaD  DDDDDDDDDDDDDDDJavaDDDDDDDDDDDDDDD 

□  □□□□□□□□□SIP  Communicator  □□□□□□□□□□  Jitsi  □□□□□□  JavaSound 

DDDDDDDDDDDDDDDDD 

DDDDDDDDAPIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
腸 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


D  D 

D 

D 

D 

D 

D  D  D  D  D 

D  JavaSound  □  OS  □□□□□□□□□□□□□□ 

D 

DDDDD 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D  D 

SIP  Communicator  □□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

Java  Sound  □ 

DDDDDDDDDDD  Linux □ 

D 

D 

D 

D 

D 

D 

D 

D 

Linux  口 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D  D  D 

□  □□  OSS  □□□□□□□ 

D 

D 

D 

D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  PortAudio2 
DDDDDDDDDDDDD 

JavaD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  PortAudio  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  Windows  口  Li 皿 □  Mac  OS  X  □  □ 

D  D  D  FreeBSD  □□□□□□□□□□□□□□□□□□□□  OS  □□□□□□□□□□ 


□  □□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  JavaD  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDJREAPiDDDDDDDDDSunDDDDDDDDDDDDDDDDDDDJava 

Media  Framework  □□□□□□  API  DDDDDDDDDDDDD 

DDDDDDD  PortAudio  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□  Ken  Larson3  □  LTI-CIVIL  □□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDD4DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 

2http: //portaudio. com/ 
3http: //lti-civil .org/ 

4D  DDDDDDDDDDDDDDDDDDDDDDDDDD 


188  Jitsi 


Jitsi  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD  LinuxQ  Mac  OS  XQ  Windows  □□□□□□ 
Video4Linux  2D  QTKit 口  DirectShow/Direct3D  □□□□□□  口 

□  □□□□□□□□□□□□□□□□□□□ 

SIP  Communicator  □  □  □  Jitsi  □□□□□□□□□□□□□□□□□□□□□□□□□□ 
D  D  Java  Media  Framework  □  □  H.263  □□□□□□  176xl44(CIF)  DDDDDDDDDDDD 

□  □□□□□□  H.264  CIFDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDD  DFFmpegD  □□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDD  JavaQ  DDDDDDDDDDDDDDDDDDDDDDD  FFmpeg 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD 


□  □  □ 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  Mac  OS  X 

□  □  □  □  Systray  □  □  □  GrowlQ  Linux  □  □  □  □ libnotify  □□□□□□□□□□□□□□□□ 
Microsoft  Outlook  □  Apple  Address  Book  DDDDDDDDDDDDDDDDDDDDDDD 


D  D  D 

D 

D  D  D 

D 

IP  DDDDDDDDDDDD  Speex  □  G.722  DDDDDDDDD 

D 

D 

DD 

D  D  D 

D 

D  D  D 

D 

D  D 

D 

D 

DD DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D  D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D  D  D 

D 

D  D 

D 

D 

DDDDDDDDDDDD  Jitsi  DDDDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D  D  D 

D 

DD 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D  D  D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D  D  D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D  D  D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDD  Jitsi  D  DDDDDDDDDDD 

10.8 

□  □ 

D  D 

D 

D  D  D 

D 

D  D 

D 

D 

D  D  D  D  Yana  Stamcheva  □□□□□□ 

189 


□11 口 


LLVM 

Chris  Lattner 

D  D  D  D  D  LLVM  'DDDDDDDDDDDDDDDDDDDDDDDDDD  LLVMQ  D  D  D 
□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□□□□□ 
□  □□)□□□□□□□□□□□□□□□□□  UnixQ  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  "LLVM"  □□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDD  LLVMQ  DDDDDDDDDDDDDDDDDDDD  (D 


D  D  D  Clang  D  D  D  D  D  2D  D  D  D  C/C++/Objective-C  DDDDDDDD  GCC  □ 

D 

D 

D 

D 

D 

□  □□□□□□)□□□□□□□□□□□□□□□□  LLVM  □□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

LLVM  □□□□□□□  2000  D 12  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD  [LA04]  口  DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD  GCC  DDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D  GCC  D  Free  Pascal □  □  □  Free  BASIC  □□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□  Just-In-Time  (JIT)  DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 10  □  □  □  LLVM  DDDDDDDDDDDDD  LLVM  DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

ihttp: //llvm.org 
2http: //clang. llvm.org 


D  D  (GCC  □□□□□□□□□□□□□□□  Java  □  .NETQ  PythonQ  RubyQ  SchemeD  HaskellQ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD)DDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  Apple  D  OpenGLQ  D  D  D  D  D 

DDDDDDDDDDDD  Adobe  After  Effects  □□□□□□□□□□□□□□  LLVM  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  GPUD D 
□  □□□□□□  OpenCL  DDDDDDDDDDDD 


H.l □□□□□□□□□□□□ 

DDDDDDDDDDDD  (□□□□□  CDDDDD)DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  3  □□□□□□□□□□□  (□ ll.l)D  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (AST)D  D  D  D  D  D 
□  □□□□□□ ASTQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 


Frontend 


Optimizer 


Backend 


-► 


Machine 
Code 


□ 11.1:  3D  D  DDDDDDDDDDDDDDDDDD 


D 

D 

D 

DDDDDDDDDDDDDDDD(DDDDDDDDDD)DDDDDDDD 

D 

D 

D  D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  (口 

D 

D 

D  D 

D 

D 

□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDD  JIT  DDDDDDDDDDDDDDDD  Java  DDD 

D 

D 

(JVM)  Q 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  JavaQ  DDDDDDDDDDDD 


□□□□□□□ 

DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 


D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

192  LLVM 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  H-2D  D  D  D  D 


C  Frontend 


X86  Backend 


Fortran  -► 


Fortran  Frontend 


Common 
Optimizer 


PowerPC  Backend 


X86 


PowerPC 


Ada 


Ada  Frontend 


ARM  Backend 


ARM 


D 11-2:  D  D  D  D 


D 

D 

D 

D 

D 

DDDDDDDDDDDDDD  (Algol D  BASIC  D  D  )D  D  D 

D  D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  n 

D 

D 

D 

D  D 

D 

D 

D 

D 

MDDDDDDDDDDDDDDDDDD  N*MQ  D  D  D  D  D 

D  D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

3DDDDDDDDDDDDDDD(DDDDDDDDDDDDDD)DD 

D  D  DD  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D  D  D  (GCC  □□)□□□□  FreePASCAL  □□□□□□ 

D  D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  Intel  ICC  Compiler  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD 

3DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 


Chris し attner 193 


ii.2  nnDnnnnn 

3DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  (LLVM  □□□□□□□□□)□□□□□□□□□□□ 

D  D  Perl D  PythonQ  RubyQ  □  □  □  Java  口  □□□□□□□□□□□□□□□□□□□□□□□ 
D  D  D  D  Glasgow  Haskell  Compiler  (GHC)  □  FreeBASIC  DDDDDDDDDDDDDDDD 

CPUD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  CPU  □□□□□□□  JITD  DDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  JavaQ  .NETQ  DDDDDDDDDDDDDDDD  D  D  JITD  D 


DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

(DDDDDDDD 

DDDDDDDDD  3) □□□□□□□□□□  口 

D 

D 

JITD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

□  JIT  □□□□□□□□□□□□□□□□□□ 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

CD  D  D  (LLVMQ  □□□□□□)□□□□□□ 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D  D  D  D 

□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDD  CD  D  D  D  (□□□ 

口 

口 

□  □□□□□□)□ 

D 

□  □□□□□□  CDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDDDDDDD  (□□□  CD 

D 

D 

D 

D 

D 

D 

D 

DDDD)D DDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  GCC4  DDGCCDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
GCC  □□(:□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  GCC  □□□ 
DDDDDDDDDDDDDDDDDD  GCC  4.4  D  DDDDDDDDDDDDDDDDDD 

D  D  D  D  ("GIMPLE  Tuples")  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDD  Fortran  D  Ada  □□□□□□□□□□□□□□□□□  ASTQ  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


3 http: //en. wikipedia.org/wiki/List_of_JVM_languages 

4D  □  □  □  □  □  □  "GNU  Compiler  Collection"  DDDDDDDDDDDDDD 


194  LLVM 


□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  GCCDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  GCCD  JITD  D 
DDDDDDDDDDGCCDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □  GCC  □  C++D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  GCC  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  GCCDDDDDDDDDDDDDDDDDDDDDD 

GCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□  GCC  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDD  ASTQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


11.3    LLVMD  LLVM  IR 


D  D 

D 

D 

D 

D 

D  D 

D 

D  D 

D 

DDDDDDDD  LLVM  □□□□□□□ 

D 

D 

D 

D 

D 

D 

LLVM  口 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D  D 

D 

LLVM  Intermediate  Representation  (IR)  □ 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D  D 

D 

D  D  LLVM  IRQ  DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D  D  D 

D 

D 

D 

D 

D  D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  -11 DDDDDDDD 

define  i32  @add1(i32  %a,  i32  %b)  { 
entry: 

%tmp1 = add  i32  %a,  %b 

ret  i32  %tmp1 


define  i32  @add2(i32  %a,  i32  %b)  { 
entry: 

%tmp1 = icmp  eq  i32  %a,  0 

br  il %tmp1 , label  %done,  label  %recurse 

recurse: 

%tmp2  =  sub  i32  %a, 1 
%tmp3  =  add  i32  %b, 1 

%tmp4  =  call i32  @add2(i32  %tmp2,  i32  %tmp3) 


Chris  Lattner 195 


ret  i32  %tmp4 


done: 

ret  i32  %b 

} 

D  D  LLVM  IRQ  □□□  CDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD 

unsigned  addl (unsigned  a,  unsigned  b)  { 
return  a+b; 

} 


〃□□□□□□□□□□□□ 

unsigned  add2(unsigned  a,  unsigned  b)  { 

if  (a  ==  0)  return  b; 

return  add2(a-1 , b+1); 

} 


DDDDDDDDDDDD  LLVM  IRQ  □□□□□□  RISCD  DDDDDDDDDDDDDD 

D  RISC  □□□□□□□□□□  add  □  subtract  口  compareQ  branch  DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDD3DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  5LLVMIRQ  DDDDDDDD 

D  D  D  RISCD  DDDDDDDDDD  llvmq  DDDDDDDDDDDDDDDDDD  (口 


D  D 

D 

i32Q 

32D  D  D  D  D  D  i32**D  □□□□□□□□□□□□□□□)□□□□ 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  call 

D  D 

□  「et 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

D  LLVM  IR  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD %DDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDD  LLVM  IRQ  DDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  "bitcode"  DDDDDDDD  LLVM 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

livm-as  DDDDDDDD  -HD  D  D  D  D  bitcode        .bcQ  D  D  D  D 

D  D 

llvm-disD  DDDD  -bcDDDDDD  -11 DDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

□  □"□□□□□"□□□□□□□□□□□□□□□□□□□□□□DO 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

5DDDD2DDDDDD  (XS6[]  □□□□□□□□□□□□□□□□□□  )□ 10  0  0  0  000  (口  □□□□□□ 
□□□□□□□□DnnnnnnnnnDDDDDDDDDDDDDDnnDDDDDDDDDDD)DDDDDDD 


196  LLVM 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 


LLVMIR  口  口口  口 


□  □□□□□□ 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

•DDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
•DDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
XD  D  D  D  x-XD  OD  D  D  D  D  x-OD  XQ  (x*2)-x  □  XDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  llvmirq  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD 

%example1 = sub  i32  %a,  %a 

%example2  =  sub  i32  %b,  0 

%tmp  =  mul i32  %c,  2 
%example3  =  sub  i32  %tmp,  %c 


DDDDDDDDDDDDDDD  LLVM  □□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  D  D  simplifySubinst  DDDDDDDDDDDDDDD 

//  X  -  0  ->  X 
if  (match(Op1 , m_Zero())) 
return  OpO ; 

//  X  -  X  ->  0 
if  (OpO  ==  Op1) 

return  Constant: :getNullValue(OpO->getType()) ; 

II  (X*2)  -  X  ->  X 

if  (match(OpO,  m_Mul(m_Specif ic(Op1 ) , m_ConstantInt<2>()))) 
return  Op1 ; 


return  0;    〃□□□□□□□□□□□□□□□□  null  □□□□□□□□□□□□□□□□ 

Chris  Lattner 197 


DDDDDDDDOpOD  Opl □□□□□□□□□□□□□□□□□□□□□□□□□□  (D 
D  D  D  IEEE  □□□□□□□□□□□□□□□□□□□□□□□!)□  LLVM  □  C++D  D  D  D 

□  □□□□□  C++D  DDDDDDDD  (Objective  Caml  □□□□□□□□□□□□)□□□□ 

DDDDDDDDDDD  C++D  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  match  □□□  m.DDDDDDDDDDDDDDDDDD  LLVM  IR 
DDDDDDDDDDDDDD  m_sPecific  DDDDDDDDDD  Opl  □□□□□□□□□ 
□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  nullQ  DDDDDDDDDDDDD  (Simplifyinstruction) 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□ 

for  (BasicBlock: : iterator  I  =  BB->begin() ,  E  =  BB->end() ;  I  !=  E;  ++I) 
if  (Value  *V  =  Simplifyinstruction (I)) 
I - >replaceAllUsesWith<;v;) ; 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  DDDDDDDD  (D  D  D  Simplifyinstruction  D  口  null 口  口  □  □  口  )D  replaceAHUsesWith 
DDDDDDDDDDDDDDDDDDDDDDDDDDD 


11.4    LLVMD  □  30  □□□□□□□□ 

LLVMQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  LLVM  IR  D  D  D  D  D  (DDDDDDDD 
ASTQ  DDDDDDDDD  LLVM  IRQ  □□□□□□□□□)□□□ 即 □(□□□□□□)□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  11.3  □  □  DD3DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  LLVM  DDDDDDDDD  LLVM  IR  D  D  D  D  D 
DDDDDDDDDDDDDDDD 


LLVM  IRQ  □□□□□□□□□□□ 

DDDDDDDDDD  LLVM  IRQ  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  LLVM  DDDDDDDDDDDDDDD 
□  □□□□□□  LLVM  IRQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  LLVM  IR  DDDDDDDDDDDDDDDDDDDDDDDDD  LLVM  IR  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  Unix  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


198  LLVM 


Fortran 


Haskell 


X86 


PowerPC 


ARM 


D 113:  LLVMQ  D  3DDDDDDDDD 


DDDDDDDDDDDDDDDD  LLVMQ  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDGCCDDDDDDDDDDDDDDDDDDDDDD 
GCCDDDDDDDD  GIMPLE □□□□□□□□□□□□□□□□□□□□□□□□□□ 
GCCD  DDDDDDDDDD  DWARF  D  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  GIMPLE  D  DDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□(□□□□□  GCC4.5D  D  □□□)□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDGCCDDDDDDDDDDDDDDDD  GIMPLE  D  D  D 
DDDGCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  GCC  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□  RTL  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  GCCD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  GIMPLE (口  □□□□□□ 
DDDDDDDDDDDDDDDDDD)DDDDDDDDDDDDDDDDDDDDDD 

□  □□GCC  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


llvmd  DDDDDDDDD 


LLVM  IR  □□□□□□□□□□□□□□□□□□□□□□□□□  LLVM  □ 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDD  GCC DDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DD  D  D  D  JVMQ  D  D  D  -NETQ  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

D  LLVM  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDD(CDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 


Chris  Lattner 199 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  llvmirq  D  D  D  D 
DDDDDDDDDDDDDDDD  LLVM IRDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  llvm  □□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□□□ 
□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□ -00  (□□□□□□)□□□□  Clang  DDDDDDDDDDDDDD 
DDDD-03DDDDDDDDDDD  67  □□□□□□□□  (LLVM  2.8  □□□□□) 口 

LLVMQ  D  D  D  C++D  DDDDDDDDDDDDDCDDDD  )PassQ  DDDDDDDDDD 
DDDDDDDDDDD  -cppD  D  DDDDDDDDD  D  D  D  Pass  D  D  DDDDDDDDD 

□  □□□□□□□□□□□□(□□□□□□□□□□□□□□□□□□□□□□□□□□□)  口 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  6 

namespace  { 

class  Hello  :  public  FunctionPass  { 
public: 

〃□□□□□□  llvm  IR  DDDDDDDDDDDDDD 
virtual  bool  runOnFunct ion (Function  &F)  { 

cerr  «  "Hello:  "  «  F.getName()  «  "\n" ; 

return  false; 

} 

} 

FunctionPass  *createHelloPass()  {  return  new  Hello() ;  } 

DDDDDDDDDD  LLVMQ DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD-oDD 
DDDDDDDDDDDDDDDDDDD  (UnixQ  □□□□□□□』□□□□)□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  LLVM 


□  PassManager  □ 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□□□  JIT  DDDDDDDDDDD  JIT  □□□□□□□□ 

D  D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDD 

6D  DDDDDDDDD  Writing  an  LLVM  ^v.v  (http://llvm.org/docs/WritingAnLLVMPass.html) D  □□□□□□ 


200  LLVM 


LLVMQ 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 

n 

n 

n 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 

n 

n 

n 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 

n 

n 

n 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 

u 

n 

u 

n 

u 

n 

u 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

t  t  A/TV/T  nnnnnnnnnnnnnnnnnnnnnnn 

し lvm  uuuuuuuuuuuuuuuuuuuuuuu 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDD  PassManager  DDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDD  LLVMQ  DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDD  H-4D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D  D  XYZQ  □□□□□□□ 

LLVM  Passes. a 


XYZOptimize に cpp 


PassManager  PM;  , 
PM.add(createPassA()); , 
PM.add(createPassB());  y 
PM.add(createXYZPass()); 


D  H.4:  LLVM  □□□□□□□  XYZ  D  D  D  D 

DDDDDDDDDDDDDD(DDDDDDDDDDDDDDDDDDDDDDDD)D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  LLVM 
DDDDDDDDDDDDDD-oDDDDDDDDDDDDDDD  create  □□□□□□□ 
DDDDDDDDDDDDDDDDDDD-aDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  LLVM  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  PassA  □  PassB  DDDDDDDDDDDDDDDDDDDDDDDD 
PassB  D  PassD  DDDDDDDDDDDDDDDDDD  PassD  □□□□□□□□□□□□  PassC 

(口  □□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDD 

D  D  D  D  LLVM  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  LLVMQ  DDDDDDDDDDDDDDDDDDDDDDDDD 


Chris し attner  201 


□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□□□ 

DDDD)DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□  LLVM  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD  llvmd  DDDDDDDDDDDDD 
D  D  D  LLVMQ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (Clang 
CDDDDDDD)DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  llvm  □□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDD  LLVMD  HTD  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


11.5    □□□□□□□□□  LLVMD  □□□□□□□□□□□ 


LLVM  DDDDDDDDDDDDDDD  LLVM  IR 

D 

D  D  D 

D 

D 

D  D 

□□□□□□ 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

D  D  D  D 

D 

DDDDDDDDDDDDDD  LLVM  □  □  □  □  □ 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

□  □□□□  (DDDDDDDDDDDDDDDDD 

D 

DDD 

D 

D 

國 □□□□□□□□[ 

D  D 

□□□□□□□□□□□)□□□□□□□□□□ 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

DDD 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

DDD 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

DDDDDDDDDDDDD  x86 □□□□□□□ 

D 

DDD 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

DDDDDDDDD  x86DDDDDDDDDDD 

D 

DDD 

D 

D 

D 

D 

D 

PowerPC  口 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

DDD 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

DDDx86  DDDDDDDDDDDDDDDDD 

D 

x87Q 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

ARM DDDDDDDDDDDDDDDDDDD 

D 

DDD 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

DDD 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

202  LLVM 


llvmd  DDDDDDDDDD 


□ 

□ 

□ 

□ 

□ 

□ 

□ 

□ 

□ 

□ 

□  □  □  □ 

□ 

□ 

□ 

□ 

□  □ 

DDDDDDDDDDDDDDDDD 

ljljljljljljljljljljljljljljljljlj 

□ 

□ 

□ 

□  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □  □  □ 

D 

D 

D 

D 

□  D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

n  n 

u  u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n  n  n  n 

u  u  u  u 

n 

u 

n 

u 

n 

u 

n 

u 

D  D 

DDDDDDDDDDDDDDDDD 

n 

u 

n 

u 

n 

u 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

DDDDDDDD  LLVM  □□□□□□ 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D  D  D  D  (.tdQ  D  □□□□□□)□□ 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

tblgen  Q 

D 

D 

D 

D 

□  X86  □□□□□□□  (□□□□□)□□□ 

D 

D 

D 

D 11-5  D  D  D  D 


D 11-5:  D  D  D  D  D  x86  D  D  D  D  D  D  D 

■  tdQ  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDx86DDDDDDDDDDD 
DDDDDDDDDDD  "GR32"(.td  □□□□□□□□□□□□□□□□□□□□□□□□ 

□  32  □□□□□□□□□□□□□□□□□□ 

def  GR32  :  RegisterClass<[i32] ,  32, 

[EAX,  ECX,  EDX,  ESI,  EDI,  EBX,  EBP,  ESP, 
R8D,  R9D,  R10D,  R11D,  R14D,  R15D,  R12D,  R13D]>  {  .  .  .  } 

□  □□□□□□□□□□□□□□□□□□□□□□□□□  32  □□□□□□  ("i32")  D  D  D  D 
DDDDD  32  DDDDDDDDDDDDDD 16  DDDDDDDDDD  (DDDDD-tdDD 
DDDDDDDDDD)DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  口口  32  □□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Chris  Lattner  203 


let  Constraints  =  "$src  =  $dst"  in 
def  N0T32r  :  K0xF7,  MRM2r, 

(outs  GR32:$dst) ,  (ins  GR32:$src) , 

"not{l}\t$dst", 

[(set  GR32:$dst,  (not  GR32:$src))]>; 


DDDDDDDDD  NOT32rQ  DDDDDDDDDDDDD  (tblgen  口       I  D  D  D  D  D  D  )D 
DDDDDDDDDDD  (0xF7,  MRM2「)  DDDDDDDDDDDD  32DDDDDDD  $dst 
□  □□□□  32DDDDDDD  $s「c  (D  DDDDDDDDDDDDD  GR32  DDDDDDDD 
DDDDDDDDDDDDD)DDDDDDDDDDDDDDDDDDDDDD  (OU UUU 

AT&TD  Intel D  □□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDD  "let"D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDD  D  DLLVMQ  D  D  D  D  (tblgen  D  D  D 
D)DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DIRDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDx86DDDDD 

口口  口口  ("gas"  GNU  D  □□□□□□□□□□□□□□)□□□□□□□□  x86D  D  口口  口口 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
JITD  DDDDDDDDDDDDDDDD 


D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDD  -tdD  D  DDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

DDDDDDDDDD  C++D  DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDD  (x87  □  □  □ 

D 

D 

D 

D 

D  D 

D 

D 

D 

X86FloatingPoint.cppD  D)DDDDDDDDDDDD  LLVMQ  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

□  □□□□□□  -tdQ  D  DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

DDDDDDDDDDD  -tdD  D  DDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

D  D  D  LLVMD  DDDDDDDDDDDDDDDDDDDD 

11.6  □□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD 


□  □□□□□□□ 

DDDDDDDDDDDDDDD  llvm  □  □  □ 
DDDDDDDDDDDDDDDDDDDDD 


204  LLVM 


D  D  LLVM  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 


nnDDDDDDDnnDDDDDD 

□  □□□□□□  LLVM  IR  □□□□□□□  (LLVM  □□□□□□)□□□□□□□□□□□ 

□  □□□□□□  LLVM  IRQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDmDDDDDDDDDDDDDD 
DDDDDDDD 

DDDDDDDD  (Link-Time  Optimization:  LTO)  □□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDD  (e.g.,  a  .  c  file  with  all  its  headers)  □ 

□  □□□□□□□□□□□□□□□□□□□(□□□□□□□□)□□□□□□□□□□□□ 

LLVM □□□□□□  (Clang DD)DDDDDDDDDDDDDDDDDDDDD  -flto □  □ 

□  □-04  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

•  LLVM  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDD  H-6D  D  DD 


Clang  C/C++/ObjC 

LLVM 

Frontend 

Optimizer 

llvm-gcc  Fortran 
Frontend 

LLVM 
Optimizer 

や 


Compile 


Optimizer 


D 11-6:  DDDDDDDD 


OS  DDDDDDDDDDDDDDDDDD  LLVMQ  D  DDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

.c 

)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

LLVMQ  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  LTOD 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□  (GCC  D  Open64D  Intel  compiler  □□)□□□□□□□ 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD  LLVMQ  DDDDDDDDDDDDD 

D 

D 

□  □□  LTO  □□□□□□□□□□□□□□□□□□□□□□□□□□□  (DDDDDDDD 

□  □□□□□□)  口  □□□□□□ 世 □□□□□□□□□□□□□□□□□□□□□□□□□ 
D  D  D  D 


Chris  Lattner  205 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  11.7  D  D  D  D  D 
D  (DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□  □□□□□□□□□□□□□□□□□□□  x86  □□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 


n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 

u  u 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

や 


Clang  C/C++/ObjC 
Frontend 

LLVM 
Optimizer 

llvm-gcc  Fortran 
Frontend 

LLVM 
Optimizer 

LLVM  Linker 


LLVM 
Optimizer 


Compile  Time 


LLVM 

'6  Backend 


<  Install  Time— 


D 11.7:  □□□□□□□□□□  □ 


□□□□□□□□□□□□□□□ 


D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD  (D  D  D  D  )-cD  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□[ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

GCC  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

LLVM  IRQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD  LLVMQ  D  D  D 


D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  LLVM  IRQ 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D 

D 

DDDDDDDDDDDDD  add □□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D  D 

; RUN:  opt  く  %s  -constprop  - S  |  FileCheck  %s 
define  i32  @test()  { 

%A  =  add  i32  4,  5 

ret  i32  %A 


206  LLVM 


; CHECK:  @test() 
; CHECK:  ret  i32  9 


■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□opt 

D  FileCheck  D  D  opt  D  LLVM  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□(□□□□□□□□□□□□□□□□□□□□□□□□□□□  )□□□□□□ 


DDDDDDDDD 

D 

D 

FileCheck Q 

D  D  D  D 

DDDDDDDDDDDDD  check 

D 

D  D  D 

DDDDDDDDD 

D 

D 

□□□□□□ 

D  D  D  D 

D  D  D  D  D  constprop  D  D  D  4Q 

5 

D 

addD 

9DDDDDDDD 

D 

D 

□  □□□□□ 

nnnnnnnn 

n 
U 

n 
U 

n  n  n  n  n  n 
U  U  U  U  U  U 

n  n  n  n 
U  U  U  U 

DDDDDDDDDDDD-cDD 

D 

D 

D 

n 

n 

nnnnnnnnn 

n 
U 

n 
U 

n  n  n  n  n  n 
U  U  U  U  U  U 

n  n  n  n 
U  U  U  U 

DDDDDDDDDDDDDDD 

D 

D 

D 

n 

n 

nnnnnnnnn 
UUUUUUUUU 

n 
U 

n 
U 

n  n  n  n  n  n 
U  U  U  U  U  U 

n  n  n  n 
U  U  U  U 

DDDDDDDDDDDDDDD 

D 

D 

D 

n 

n 

nnnnnnnnn 
UUUUUUUUU 

n 
U 

n 
U 

n  n  n  n  n  n 
U  U  U  U  U  U 

n  n  n  n 
U  U  U  U 

D  D  D  D  D  LLVMQ  D  D  D  D  LLVM  IRQ 

n 

u 

n 

u 

nnnnnnnnn 
UUUUUUUUU 

n 
U 

n 
U 

n  n  n  n  n  n 
U  U  U  U  U  U 

n  n  n  n 
U  U  U  U 

DDDDDDDDDDDDDDD 

D 

D 

D 

n 
U 

n 
U 

nnnnnnnnn 
UUUUUUUUU 

n 
U 

n 
U 

n  n  n  n  n  n 
U  U  U  U  U  U 

n  n  n  n 
U  U  U  U 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

BugPointQ  □  □ 

□ 

□ 

□  □  □  □  □ 

□  □  □ 

□  □  □  □  □ 

DDDDDDDD 

D 

D 

LLVM  ロロ  口 

D  D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDD 

D 

D 

□□□□□□ 

D  D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDD 

D 

D 

□□□□□□ 

D  D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDD 

D 

D 

□□□□□□ 

D  D  D  D 

D  D  D  LLVMQ  DDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDD 

D 

D 

□  □□□□□ 

D  D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDD 

D 

D 

□  □□□□□ 

D  D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDD 

D 

D 

□  □□□□□ 

D  D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

LLVMQ  BugPoint7  DDDDDDDD  IRD  DDDDDDDDD  LLVMQ  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD- 11 DDDDD  -be  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  BugPoint  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDoptDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  "Delta Debugging" DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  BugPoint  □  LLVM  IRDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDIRDDDDDDDDDDDDDDDDDDD 
DDDDD  "delta" DDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  BugPoint  D  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

7http: //llvm.org/docs/Bugpoint .html 


Chris  Lattner  207 


n  n  n  n  n  n 
U  U  U  U  U  U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuu 

n 
U 

DD  D  D  D 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n  n  n  n  n 
U  U  U  U  U  U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

□□□□□□ 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D  D 

BugPoint  口 

D  D 

D 

D 

DDDDDDDDD  LLVM  □□□□□□□ 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

□□□□□□ 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D  D 

D 

D 

D 

D 

DD 

□□□□□□ 

DD 

D 

D 

DDDDDDDDDDDDD  LLVMQ  D  D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

DD 

DDDDDDDDDDDDDDDDDDD  BugPoint  D  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  2002  D  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  (JIT □□□□□□)□□□□□□□□□ 


11.7  □□□□□□□□□□□ 

DDDDDDDDDD  LLVMQ  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 8 口 

□  □□□□□  LLVM DDDDDDDDDDDDDDDDDDDDDD  (DDDDDDDD 
DDDDDDDDDDDDDDDDDDD  )DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  APIQ  DDDDDDDDDDDDDDDDDDDD  LLVM  IRQ  D 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□C++ 
D  API  □□□□□□□□□□□□  LLVM  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□(□□□□□□□□□□□□□□)□□□□□□□□□□□□□ 
API (口  DDDDDDDD)DDDDDCDDDDDDDDDDDDDDDDDDDDDDD 
D  D  LLVMQ  DDDDDDDDD  -HD  -bcQ  D  DDDDDDDDDDDD 

DDDDDDDDDD  LLVM  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
LLVM  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  JIT 


D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDD 

DDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDD 

DDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDD 

DDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDD 

D  DIRD  D  D  D  D  D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDD 

DDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D 

D 

D 

8llvm  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


208  LLVM 


LLVMQ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDD  llvm  □□□□□□□□□□□□□□□□□□□ 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

t  t  dr  nnnnnnnnnnnnnn  rian?  n  c/c++/oh\ec\\ve-c  n  n  n  n 

しし i_>  UUUUUUUUUUUUUU レ idiig  □ レ, レ tt, リ ujc し Live レ U  U  U  U 

n 
u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n  llvm  iiTnnnnnnnnnnnnnnnnnnnnn  llvm  n  n 

|_|  |_J しし v 1V!  Jii|_JLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJ しし * 丄 yi |_J  |_J 

n 

u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n  n  n  n  n  \  \  vm nnnnnnnnnnnnnnnnnnnnnnnn 

U  U  U  U  U  U   llv  iV1UUUUUUUUUUUUUUUUUUUUUUUU 

n 
u 

n 
U 

D 

D 

n 
U 

D 

D  D 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
u 

n 
U 

D 

D 

n 
U 

D 

D  D 

nnnnnnnnnnnnnnnnnnnnnnn  r++n  n  n  n  n  n  n  n 

n 

u 

n 
U 

D 

D 

n 
U 

D 

D  D 

nnnnnnnn 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

DD 

n 
U 

LLVM 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

209 


□12 口 


Mercurial 

Dirkjan  Ochtman 


Mercurial  □□□□□□□□□□□□□□□□□□□  (VCS)  □  □  □  □  □  Python  □  □  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDCDDDDDDDDDDDDDDDDDD 

Mercurial  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD 


12.1  □□□□□□□□□□□□□□□□□ 


D 

D 

D 

D 

D 

D 

D 

D 

D  Mercurial  □□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD  Mercurial  DDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□[ 

1.  DDDDDDDDDDDDDDDDDDDDDDDDD 

2.  DDDDDDDDDDDDDDDDDDDDDDDD 

3.  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


n  n  n 
U  U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnn  Aiff  n  n 
UUUUUUUUUUUUUUUUUUUUdittUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  DD 

D 

D 

DDDDDDDDDDD  (DDDDDDDDD)DDD 

D 

D 

D 

D 

D 

D 

D 

DD 

D 

D 

D 

D  D  D 

D 

D 

commit  DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D  D 

D  D  D  D 

□□□□□□□□ 

D  D 

D 

D 

DDDDDDDDDDD  Source  Code  Control  System 

D 

D 

D 

D 

D 

sees  D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  1975  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  1982  □  □ 

D  D  D  D  Revision  Control  System (口  □  □  RCS)  DDDDDDDDDDDD  SCCS  □□□□□□ 

DDDDDDDDDDDDDDD  (RCS  D  D  D  D  D  GNUD  □□□□□□□□□□□□□□)  口 

RCS  □□□□□□□□□□  CVSD  D  D  D  Concurrent  Versioning  System  □  □  □  □ 1986  □  □ 


D  D  D 

D 

D  D 

□  □□□□□  RCS  □□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D 

CVS  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D 

DDDDDDDDDDD  (□□□□)□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D 

DDDDDDDD 

CVS  口 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D 

DDDDDDDDDDD  CVS  DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D 

DDDDDDDDDDDDDDDD  CVS  DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

□  □□□□□□□(□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□ 

2000  DDD3DDDDDDDDD  VCS  DDDDDDDDDDDD  Subversion  D  D  D  D  D 

□  □CVS  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
Subversion  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Subversion 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  diffD  D  (D  DDDDDDDDDDDDDDDDDDDDDDDD 
□□□□)□□□□□□□□□□□□□□□□□□□□□ 

Subversion  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDD  Subversion  DDDDDDDDD  tagsQ  branches  D  D  D  trunk  D  D  D 


212  Mercurial 


n  n  n  n  n  n 
U  U  U  U  U  U 

nnnnnnnn 
UUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n  n 
U  U  U  U  U  U 

nnnnnnnn 
UUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n  n 
U  U  U  U  U  U 

nnnnnnnn 
UUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n  n 
U  U  U  U  U  U 

nnnnnnnn 
UUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n  n  n  n  n 
U  U  U  U  U 

nnnnnnnn 
UUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnn  r^\/c  n 

UUUUUUUUUUUUUU し u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

DDDDDD 

DDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

□  □□□□□ 

DDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDD 

(□□□□□□)□ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDD 

DDDDDD 

D  D  D  D  D 

□  □  □  □  □ 

Subversion  □  CVS  □  □  □  □  口 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDD 

DDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDD 

DDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□(□□□□□□□□□□□□□□□□□□□  )□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDVCS  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDVCSDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□ 

□  □□□□□□)□□□□□□  2011 □  DDDDDDDDDD  GitQ  Mercurial D  □  □  Bazaar  D 

D  D  D  Git  D  Mercurial  DDDDDD  2005  DDDDDDDDDD  Linux  DDDDDDDDDD 
DDDDDDDDD  BitKeeperQ  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  Linux  DDDDDDDDDDDDDDDDD  (Git  □  Linus  Torvalds  口  D  D  D  Mercurial □ 

MattMackallQ  )DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD(DDDD 

D  D  D  Linux  □□□□□□□□□□)□□□□□□□□□□□□□□□□□□  Matt  □  Linus 
D  D  Monotone  VCS  □□□□□□□□□□□□  Bazaar  DDDDDDDDDDDDDDDDD 
Git  Q  Mercurial  DDDDDDDDDDDDDDDDDD  Canonical  DDDDDDDDDDD 
D  Bazaar  D  DDDDDDDDDDDDDDDDDD 


Dirkjan  Ochtman  213 


n 
U 

n 
U 

n 

u 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 

u 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 

u 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnn  x/r^c  n  n  n  n 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUU 

D  D  D 

D 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuu 

n 

u 

n 

u 

n 

u 

n  n 

u  u 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 

UUUUUUUUUUUUUUUUUUUUUUUUUUU 

D  D  D 

D 

n 

u 

n 

u 

n  n 

u  u 

n  n 

u  u 

n 
U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnnnn  /Ai-fa^aA  。 ハ,, ハ i; ハ „u 
UUUUUUUUUUUUUUUUU  (directed  acyclic  graph 

DAG)  口 

n 
U 

n 
U 

n  n 

u  u 

n  n 

u  u 

n 
U 

n 
U 

ん n 
(U 

12.DD  DDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

n 
U 

n 
U 

n  n 
U  U 

n  n 

u  u 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

D 

D 

D  D 

D  D  D  D  rootU  □□□□  (DDDDDDDDDDDDD  rootD  D  D 

D 

n 
U 

n 
U 

n  n 
U  U 

n  n 

u  u 

)□□□□□□□□□□□□□□□□□□□□□□□□□□  headU  U 

D  D  D 

D 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

U 

D 

D  D 

D  D  D  D  D  rootQ  DDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

n 
U 

n 
U 

n  n 

u  u 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD  headQ  D  D  D 

D  D  D 

D 

D 

D 

D  D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D  D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

DD 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

、 3  r— H  4 


D 12.1:  □□□□□□□□□□□□□□  □ 


DAGD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D  D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD  DAGD  D  D  D 

D 

D 

D 

D 

D  D 

D  D 

D  D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D  D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D  D  D  D 

D 

D 

DDDDDDDDDDDDDD 

D 

D  D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D  D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D  D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D  D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDD  UUID □  □  □  □ 

D 

D 

D 

D 

D  D 

D  D 

D  D  D  D 

D 

D 

DDDDDDDDDDDDD  Git  Q  Mercurial  □□□□□□□ 

D 

D 

D 

D 

D  D 

D  D 

SHAl Q 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD  IDD 

D 

D 

D 

D 

D  D 

D  D 

D  D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

214  Mercurial 


n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 

u 

n 

u 

D 

D 

D 

□  □□□□□  vcs  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

n 
U 

n 
U 

n 
U 

D 

D 

D 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□40 

n 
U 

n 
U 

n 
U 

16  □□□□□□□□□□"?□□□□□□□□□□□□□□□□□□□□□□□□□□ 

n 
U 

n 
U 

n 
U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD  "□□『□□□□□□□□  DAG 

n 
U 

n 
U 

n 
U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  head □  □  □  □ 

n 
U 

n 
U 

n 
U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDVCSDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

D 

D 

D 

DDDDDDDD 

n 
U 

n 
U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  Mercurial □  □  □ 

D 

D 

D 

D 

D 

D 

□  □□□□□□(□□□□□□)□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

12.2  D  D  D  D  D 

DAGD  DDDDDDDDDDDDDDDDDDDDDDDD  Mercurial D  DDDDDDDD 
DDDDDDDD  DAG  □  □  □  □  Mercurial  DDDDDDDDDDDDDDDDDDDD  DAG 

□  □□□□□□□□□□□□□□□□□□□□□  (□□□□□□□□□□□□□□□□)□□ 

□  □□□□□□□□□□□□  DAG  □□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□ 


□  D 

DDDDDDDDDDDDDDDDDD  Mercurial D  DDDDDDDDDDDDDDDDD 

D  D  Mercurial  □□□□□□□□□□□  Matt  Mackall □  2005  □  4  □  20  D  D  Linux  Kernel □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  BitKeeper 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  MattQ  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

[Mac06]  D  D  D  D  Matt  □□□□□□□□□□□□□□□□□□□□□  VCS  Q  D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDD  Mercurial  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDD 


Dirkjan  Ochtman  215 


•  □  □  :  CPU 

LAND  □□□□□□□  WAN 

•DDDDDDDDD 

DDDDDDDDDD  WAN □□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 


- D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□  D  DCPUD  DDDDDDDDDDDDDDD  i/OD  D  D  D  D 

D 

D 

D 

D 

D 

□  □□□□□  7 

- D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  (DDDDDDDDD  )DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDD 

- D 

D 

D 

D 

D 

□  □□□□□□□■□□□□□□□□□□□□□□□□□□□□□DO 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

- D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□)□□□□□□□□□(□□□ 

CVS  D  D  D  D  D  blame  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDD  annotate  DDDDDDDDDDDDDDD  )D 


D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

DD  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDD  (Mozilla  □  NetBeans  D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDD  Mercurial  □□□□□□□)  口 

nnnnnnnnnDDD:  Reviog 

Matt  Q  Mercurial  DDDDDDDD  reviog  (revision  log  □□□□□□)□□  reviog  □  □  □  □ 

□  □□□□□□□□□□□□□□□□(□□□□□□□□□□□□□□□□)□□□□□□□ 

□  □□□□□□□□□□□□□(□□□□□□□□□□□□)□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
reviog  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□ 

216  Mercurial 


6D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

2D 

D 

D 

D 

D 

D 

4D 

D 

D 

D 

D 

D 

D 

4D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

4D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

4D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

4D 

D 

D 

D 

D 

D 

D 

D 

D 

1 

4D 

D 

D 

D 

D 

D 

D 

D 

D 

2 

32  D 

D 

D 

D 

D 

D 

D 

D 

D 12.1:  Mercurial  □□□□□□□□□□□ 


D  □  □  □  revlog 

revlog  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  revlog 

□  □□□□□□□  口  changelogU  manifests  ロロ  口  filelogs  口  口  changelog  □□□□□□□□  口口 


□ 

□ 


□ 

□ 


□ 

□ 


□ 

□ 


□ 

□ 


□ 

□ 

□  □  □ 

□  □  □ 

□  _u  _u 

□  _u  _u 

□  _u  _u 

□  _u  _u 

□  _u  _u 


□ 


□ 

□ 


□ 

□ 


□ 

□ 


□ 

□ 


□ 

□ 


□ 

□ 


□ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


□ 

□ 


□ 

o 

e 

口 

□ 


□ 

□ 


□ 

A 

H 

s 

□ 


□ 

2 

3 

嗎國 

2  D 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


Dirkjan  Ochtman  217 


DDDDDDDDDDDD  manifest  revlog  D  □□□□□  (□□□□  manifest  revlog  D  D  D  D  D 

DDDDDDDD  id)D  DDDDDDDDDD  manifesto  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDidD  DDDDDDDDDDDD  idDDDDDDDD 

filelog  DDDDDDDDDDDDDDDD  Mercurial  DDDDDDDD  changelog  D  manifest 

DDD  filelog  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD  revlog  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD 


linkrev 


changeset 
index 


changeset 
data 


manifest 
index 


manifest 
data 


file  index 


file 
revision 


D 12.2:  D  D  D  D  D 
changelog  DDDDDDDDDDDDDDDD 

0a773e3480fe58d62dcc67bd9f7380d6403e26fa 
Dirkjan  Ochtman  <dirkjan@ochtman . nl> 
1276097267  - 7200 
mercurial/discovery. py 
discovery:  fix  description  line 


D  D 

D 

DDD  revlog  DDDDDDDDDDDDDDDDDDD  changelog  □  □ 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDD  manifesto  D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDD  (Unix DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD  changelog  D  DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  D  manifest  □  □ 

. hgignore\x006d2dc1 6e96ab48b2fcca44f 7e9f4b8c3289cb701 
. hgsigs\x00de81 f 258b331 89c609d299f d605e6c721 82d7359 
. hgtags\x00b1 74a4a481 3ddd89c1 d2f88878e05acc58263efa 
CONTRIBUTORS\x007c8afb9501 740a450c549b4b1 f002c803c451 93a 
COPYING\x005ac863e1 7c7035f1d1 1 828d848fb2ca450d89794 


D  D  manifest  D  D  D  D  D  D  D  changeset  0a773e  DDDDDDDDDD  (Mercurial □  UI  D  D  D 
□□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□□DO 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


218  Mercurial 


DDDDDDDDDD  NULL □□□□□□□□□□  16DDDDDDDDDDD  idDDDD 

□  □□□□  idD  D  D  D  D  D  D  filelogD  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  manifest  □  □  □  □  □  revlog  DDDDDDDDDDDDDD 

DDDDDDDDDDDD  manifest  Q  revlog  □□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD  manifest  □  □  □  □  □  Mercurial □  Python  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D  revlog  Q  D  filelog  □  □  filelog  □  □  Mercurial □  □  □  □  □  store  □□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDOSDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  Windows  D  MacOSXDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  Windows  □□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□OS  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□  filelogD  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□ 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□) 口 

DDDDDDDDDDDD  Mercurial D  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□  (DDDDDDDDDDDDDDDD  filelog  □□□□□)□□□□□□□  Mercurial 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  changelog  D  D  D  D  D  changeset  D  D  D  D  D  D  D 
DDDDDDDDD  manifesto  filelog  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  revlog  D  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  contexts □  □ 
revlog  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDD  filelog  DDDDDDDDD  manifest  □□□□□□□  changelog 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  changelog  D  DDDDDDDDD 
DDDDDDDDD  revlog  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Mercurial D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  revlog  D  D  D 
DDDDDDDDDDDD 


DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  dirstate  □  □  dirstate  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Dirkjan  Ochtman  219 


D  D  D  D  dirstate  □□□□□□□□□□□□□□□□□□□□□□□ 

n 
U 

UUUUUUU 

n 
U 

n 
U 

n 
U 

status  □  diff  □  □ 

n 

n 

n  n  n 

u  u  u 

n 

nnnnnnnnnnnnnnn 

n 
U 

nnnnnnn 
UUUUUUU 

n 
U 

n 
U 

n 
U 

nnnnnnnnn 

n 

u 

n 

u 

n  n  n 

u  u  u 

n 

u 

n  n  l~l  dirstate  1~1  1~1  merge  |~|  l~l  l~l  l~l 

n 
U 

nnnnnnn 
UUUUUUU 

n 
U 

n 
U 

n 
U 

nnnnnnnnn 

uuuuuuuuu 

n 

u 

n 

u 

n  n  n 

u  u  u 

n 

u 

nnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuu 

n 
U 

n  n  n  n  n 
U  U  U  U  U 

status n  diff n 

n 

u 

n 

u 

n  n  n 

u  u  u 

n 

u 

nnnnnnn  (nnnnnnn 

n 
U 

UUUUUUU 

n 
U 

n 
U 

n 
U 

nnnnnnnnn 

uuuuuuuuu 

n 

u 

n 

u 

n  n  n 

u  u  u 

n 

u 

n  n in  dirstate  l~l  l~l  Mercurial l~l  l~l 

n 

u 

UUUUUUU 

n 

u 

n 

u 

n 

u 

nnnnnnnnn 
UUUUUUUUU 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

nnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUU 

n 
U 

UUUUUUU 

n 
U 

n 
U 

n 
U 

DDDDDDDDD 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDD 

D 

I ~~ 1 I ~~ 1 r ~~ 1 I ~~ 1 I ~~ 1 I ~~ 1 I ~~ 1 

□  □□□□□□ 

D 

D 

D 

DDDDDDDDD 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDD 

D 

□  □□□□□□ 

D 

D 

D 

DDDDDDDDD 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDD 

D 

□  □□□□□□ 

D 

D 

D 

DDDDDDDDD 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDD 

12.3  □□□□□□□□□□□ 

□  □□□□□  Mercurial D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  Mercurial D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


□  □  □  □ 


D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□(□□□□□□□□□■□□□□□□DO 

D  D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□  (□□□□□□)□□□□ 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  DAG DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

□  □□□□□□(□□□□□□□□□□□□□□□□□□□□□□□□□□)□ 

D  D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

Mercurial  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDD  Mercurial  □□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  branch  □□□□□□□□□□□□□ 

220  Mercurial 


n  n 
U  U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

nnnnnnnnnnn  nnnnnnnnnnnnnnnnnn 
UUUUUUUUUUU  update UUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

D 

DDDDDDDDDDDDDDDDDDDDDDD  (named  branches)  D 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

D 

□  □□□□□□□□□□□□□□□□□(□□□□□□□□□□□□□ 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 

u  u 

)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

n 

u 

n 

u 

n 

u 

n 

u 

n  n 

u  u 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDD  headQ  DDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDD  (there's  more  than  one  way  to  do 

it)D  GitDDDDDDDDDDDDDDDD  Mercurial  DDDDDDDDDDDDDDDDD 
D  D  GitQ  □□□□□□□□□□□□(□□□□□□□□□□)□□□□□□□□□□□□□ 
DDDGitDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD  Mercurial  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Mercurial □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Mercurial 

D  D  bookmarks  DDDDDDDDDDDDDDDDDDDDDD  Mercurial  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  Mercurial  □□□□□□□□□□□□  wire  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

DDD  DDDDDDDD  Mercurial  DDDDDDDDDDDDDDDDDDDDDD  tag  D 
DDDDDDDDDDDDDDDDDDDDD  -hgtagsD  D  DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Dirkjan  Ochtman  221 


n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

nnnnnnnn    ho-taac  nnnnnnnnnnnnnn 
UUUUUUUU  -  ngtags  UUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

D 

■  hgtagsQ  D  DDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

D 

□  □□□□□  Mercurial  DDDDDDDDDDD  (□□□□ 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

D 

□)□□□□□□□□□□□□□□□□□□□□□□□□ 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

(Git  □□□□□□  )□□□□□□□□□□□□□□□□□□ 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  Mercurial Q  .  hgtags  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  id  DDDDDDDDDDD  id  □□□□□□  (□□ 
□  □□  idQ  D  D 謂 【□□□□□□□□□□□□□□□□□□□□□□□□□□□)□□□□ 
DDDDDDDDDDDDDDDDD  Mercurial D  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD 

12.4  □□□□□□ 

Mercurial D  D  D  D  Python  D  DDDDDDDDDDDD  CDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDD  Python  □□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□□□□□  Python  D  DDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

Python  D  DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

— init— 

py 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  Python  D  DDDDDDDDDDDDD 

Mercurial  DDDDDDDDDDDDDDD  Python  □□□□□□□  mercurial □  hgext  □ 
□  □□□□□  mercurial  □□□□□□□  Mercurial  DDDDDDDDDDDDDDDDDDD 

DDDDDDDDDD  hgext □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  (DDDDDDD)D 
DDDDDDDDD  Mercurial  DDDDDDDDDDDDDDDDDDDDDDDDDD 


222  Mercurial 


DDDDDDDDDDDDDDDDDDDDD  (log  D  diffQ  D  D  D  D  commit  □□)□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

•hgDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
•hgDDDDDDDDDCDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□)□□□□□□□□□□□ 


D 12.3:  □□□□□□□  □ 


D  D 

D 

D 

D 

D 

DDDDDDDD  12.3  DDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

DD  D  dispatch  D  DDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDuiDDDDDDDDDDDDDDDDDDDD(DDD 

D  D  D 

D 

D 

D 

D 

□ 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D  D  uiDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDD  (localrepo  D  D  D  D  D  D localrepo  D  D  D  D  D 

Dirkjan  Ochtman  223 


□  □□□□)□□□□□□□□□□□□□□□□□□□  (HTTPQ  SSHQ  DDDDDDDDD 
□□□□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  init  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDD  commands DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  commands  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  (DDDDDDDDDDDDDDD  log  □□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDD)DDDDDDDDDDDDDDDDDDDDDDDDD  dispatch 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDuiDDDDDDD 
D  D  D  D  D  repository  DDDDDDDDDDDD 


12.5    □  □  □ 

Mercurial  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  Python  □  □ 
DDDDDDDDDDDDDDD  Mercurial D  API  □□□□□□□□□□□□□  (□□□□□ 
□  □□□□□□□□□□□□)□□□□□□□□□□□  Mercurial D  DDDDDDDDD  Python 


D  D  D  D  D 

D 

D  D  D 

D 

D 

□□□□□□□ 

D 

□  □  □  □ 

D 

□  D 

D  D  D  D 

D 

D  D  D 

D 

D 

D  Mercurial □  □ 

DDDDDDDDDDD 

□□□□□□□ 

D  D 

D 

D  D 

D  D  D  D  D 

D 

D  D  D 

D 

D 

□  □  □  Python  D 

DDDDDDDDDDD 

□□□□□□□ 

D  D 

D 

D  D 

D  D  D  D  D 

D 

D  D  D 

D 

D 

□□□□□□□ 

D 

•DDDDDDDDDD 

•DDDDDDDDDDDDD 

•DDDDDDDDDDDDDDD 

•  Mercurial  DDDDDDDDD 

•DDDDDDDDDDDD 


DDDDDDDDDDDDDDDDD  cmdtable  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  uisetup  D  D  D  「ePosetup  DDDDDDDDDDDDDDDDDDDDD 
□  □in  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDD  reposetup DDDDDDDDDDDDD  repository 


224  Mercurial 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  uisetup  □ 
D  D  D  D  D  ui.usernameQ  DDDDDDDDDDDDDDDDDDDD  SSHQ  D  D  D  D  D 
DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  hgsubversion  D  D  D  D  D  D  (Mercurial  DDDDDDDDDDDDD)DD  Subversion 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Subversion  D  D  D  D  D  D 

DDDDDDDDDDD  Mercurial  □□□□□□□□□□□□□□□□□□□□□□□□□ 

D  Subversion  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD 

Mercurial 

DDDDDDDDDDDDDDDDDDDDD  Mercurial D  DDDDDDDDDDDDDDD 
D  Python  DDDDDDDDDDDDDDDDDDDDDDDDD  Mercurial  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  hgext  D  D  D  highlight  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD 

Mercurial D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Mercurial D  DDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD 


□  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDVCSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD'DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  Mercurial D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  Python  DDDDDDDDDDDDDDDDD  Python  □□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDD  Mercurial D  DDDDDDDDDDDDDDDDD 
6D  □  □  D  D 


Dirkjan  Ochtman  225 


DDDDDDDDDDDDDDDDDD  repo □□□□□□□  uiDDDDDDDDDDDD 
VCSDDDDDDDDDDDDDDDDDDDDDDDDDD 

Mercurial □  □  □  □  □  pre-commandO  post-commandO  controlling  □  □  □  miscellaneous  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  hooks  □□□□□□  Pre- 

command  □  □  □  □  post-command  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  controlling  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Mercurial 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  Python  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDD  Mozilla □  □  □ 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDD  (□□□□□□□ 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

DDDDDD)D  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDD 

12.6  D  D  D  D  D 

Matt  D  Mercurial  DDDDDDDDDDDDDDDDDDDDDDDDDD  Python  □  □  □ 
DDDDDDDDDDD  Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Mercurial D  D 
□  □□  OS  □□□□□□□□□□□□□□□□□□□□□□□□□  Python  D  D  D  (D  D  D  D 
□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  id DDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□"□□□□"□□□□□□□□□□□DO 
Mercurial D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  Mercurial  □□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Mercurial 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

revlogQ  DDDDDDDDDDDDDDDDDDDDD  DchangelogQ  manifest  D  D  D  filelogs 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


226  Mercurial 


n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

D 

D 

DDDDDDDDDDDD  DAGD  D  D  D  filelogD  DDDDDDDDDDD 

D 

D 

D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDD 

Mercurial D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D  D 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 

n 

DDDDDDDDDDDDDDDVCSDDDDDDDDDDDDDD  Mercurial □ 

n 
U 

n 
U 

n 

u 

n 

u 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Mercurial □  □ 

n 
U 

n 
U 

n 

u 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n  n 

u  u 

n 
U 

n 
U 

n 

n 

nnnnnnnnnnnnnnnnnnnn  Mercurial n  n  n  n  n  n  n  ut  n  n 

n  n 

u  u 

n 
U 

n 
U 

n 

n 

vcsen  n  Subversion^  nnnnnnnnnnnnnnnnnnnnnnnnn 

n  n 

u  u 

n 
U 

n 
U 

n 

u 

n 

u 

□  □□□□□  Mercurial  □□□□□□□□□□□□□□□□□□□□□□□□□ 

n  n 
u  u 

n 
U 

n 
U 

n 

u 

n 

u 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□(□□□□□□□□□□□□□□)□□□□□□ 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

□  □□□□  (□□□□□□□□□□  )□□□□□□  VCSD  D  D  DD  D  D  D  D  D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Mercurial □ 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  Mercurial  DDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D  Mercurial  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Mercurial □  □  □  □ 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


227 


D 13 口 


NoSQLQ  □□□□□□ 

Adam  Marcus 


DDDDDDDDDDDD  NoSQLQ  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  NoSQLQ  D 
DDDDDDDDDDD  SQLQ DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  NoSQLQ  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 

NoSQLQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  DNoSQL 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  NoSQLQ  DDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 


13.1  □□□□□□□? 

NoSQLQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD  NoSQL  D  D  D  D 
DDDDDDDDDDDDD  SQL DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  NoSQLQ  DDDDDDDDDDDDDDDDDDDDDD  NoSQL  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  SQL  DDDDDDD  (Not  Only  SQL)  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
NoSQL  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

NoSQL  D  DDDDDDDDDDDDDDDDDDSQLDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  NoSQLQ  DDDDDDDDDDDDDDDDDDDDDDDDDD 


SQLD  D  D  D  D  D 


SQLQ  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  39  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D  D  D  SQLQ  DDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

i j  i j  i j  i j  i j  i j 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

i j  i j  i j  i j  i j  i j 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□ 

1 _ II _ II _ II — II —— II —— 1 

D 

D 

D 

D  D  D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  Employees D 

□  □□□□□ 

D 

D 

D 

D  D  D 

D 

D 

Departments  □□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD  IDD  D  D 

□  □□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDD  Employees  □□□□□□□□□□□ 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

SQL  □□□□□□□□□□□□□□□□□□□□□□ 

SQL  □□□□□□  □ 

D  D  D 

D 

D 

D 

D 

□  □□□□□□  (□:  employeeid  =  3D  salary  >  $20000)  □ 

□□□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

ODD 

0 

0 

D 

D 

DDDDDDDDDDDD  (□:□□□□  3D  D  D  D  D  D 

□□□□□□ 

D 

D 

D 

□  ?)□ 

D 

D 

D 

D 

DDDDDDDDDD  (□:□□□□□□□□□□□?)□ 

□□□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  SQLQ  D  D  D 

□□□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

□□□□□□□ 

•DDDDDDDDDDDDDDDD  SQL  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD 


230    NoSQL  □□□□□□□ 


詹 n 

•  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 

n 

n 

n 

n 

n  n 

n  n 

n 

n 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

1 ~ ii ~ ii ~ ii ~ ii ~ ii ~ ii ~ ii ~ ii ~ ii ~ ii ~ irnrnnrnrnrnrnrnrnrnrnrnrnrnrnrn 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

门门 门门 门门 门门 门门 门门 门门 门门 门门 门门 门门 门门 门门! ― II ― 1 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

门门 门门 门门 门门 门门 门门 门门 门门 门门 门门 门门 门门 门门 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

詹 n 

•  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnn  totm  n  n  n  n  n  n 

UUUUUUUUUUUUUUUUUUU  JUlN  u  u  u  u  u  u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUU 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D 

□□□□□□ 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDD  SQLQ  DDDDDDDD 

D 

□□□□□□ 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D 

□□□□□□ 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

□  □□□□□  NoSQLQ  DDDDDDDDDDD 

D 

□□□□□□ 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D  SQLQ 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D 

□□□□□□ 

D 

D 

D 

D 

D  D  D  D 

NoSQLD  □  □  □  □ 

NoSQLQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
NoSQLQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD 

Google  D  BigTable  [CDG+06]  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□ 
D  D  D 13.5  D  D  □□□□)□□□□□□□□□□ 

Amazon  □  Dynamo  [DHJ+07]  DDDDDDDDDDDDDDDDDDDDD  Dynamo  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  blob □□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  (DDDDD)DDDDDDDD 


Adam  Marcus  231 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  NoSQL  □□□□□□□□□ 

D  D  HBase1 □  □  BigTable  □□□□□□□□□□□□□□□□□□  NoSQL  □□□□□□□ 
Voldemort2  □  □  Dynamo  □□□□□□□□□□□□□□□□□□□  NoSQL  □□□□□□□ 
Cassandra3  □  □  □  □  □  BigTable  □□□□□□□□□  (DDDDDD)DDDD  Dynamo  □  □  □ 

□  □□□□□  (DDDDDDDDDDDDDDDDDD)DDDD 


□□□□□□□ 

NoSQL  D  DDDDDDDDDD  SQLQ  DDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  NoSQL  D  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

NoSQL  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□(□□□□□□□□□□□□□)□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDD 

NoSQL  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 

NoSQL  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  NoSQL □□□□□□□□□□□□□ 


!http://hbase. apache.org/ 
2http: //project- voldemort . com/ 
3http: / /cassandra . apache . org/ 


232    NoSQL  □□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD 
NoSQLQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDD:DDDDDDDDD?D?DDDDDDDDDD?DDDD 
DDDDDDDDDDDDDDD?DDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□7 

DDD:DDDDDDDDDDDDDDDDDDDDDDDDDDDD?DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD? 

DDDDDDDDDDDDDD? 
DDDDDDDDD:DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD?DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  ? 

DDDDDDDDDDDDDDDDDDDDDDDDDD? 
□  □□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□DO 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  Q  ACID  (Atomicity:  □  □  □  □  Consistency:  □  □  □  □  Isolation:  □  □  □  □  Durability:  □ 


D 

D 

)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

? 

D 

D  D 

D 

D 

□  □□□□□□□■□□□□□□□□□□□□□□□□□□□□□□DO 

D 

D 

D 

D 

DDDDDDDDDDDDDDD?DDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

DDD?DDDDDDDDDDDDDDDDDDDDDDD? 

D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD? 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□ 
□□□□□□□□□□□□)□□□□□□□□□□□□□□□ 


13.2    NoSQL  D  □□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  SQL  DDDDDDDDDDDD  MapReduce  □ 
DDDDDDDDDD  NoSQLQ  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Adam  Marcus  233 


□  □□□□□  NoSQLQ  D  D  D  D  D 

NoSQLQ  DDDDDDDDDDDDDD  SQLQ  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□  IDD  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

NoSQLQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  employee  :  30  D  D  D  IDD  30  D  D  D  D  D  D 
D  D  D  D  D  D  D  employee—departments :  20  []  D  D  D  D  20DDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  20問 
DDDDDDDDDDDDDDDDDDDDDDDDD  employee—departments:  20  D  D  D  D 
D  D  ID  DDDDDDDDDDDDDDDDDDDDDD  ID  D  D  D  D  employee:  id  D  D  D  D 


D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDD 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD  NoSQL □□□□□□□□□□ 

D 

D 

D 

DDDDDDDDDDDD 

D 

D 

D 

D  D  D  D  D  D  D 

NoSQLQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

DDDDDDDDDDDDDDDDDD  NoSQLQ  DDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

□  □□□□□  employee:  30  □  blob  DDDDDDDDDDDDDDDDD  JSON  D  D 

D 

D 

D 

D  D  D  Protocol  Buffers4  □  Thrift5  □  □  □  □  Avro6  □□□□□□□□□□□□□□□□ 

D 

D 

D 

DDDDDDDDDDDD  IDD  30D  □□□□□□□□□□□□□□□□□□□ 

4http : I /code . google . com/p/protobuf/ 
5http:/ /thrift . apache . org/ 
6http: //avro. apache. org/ 


234    NoSQL  □□□□□□□ 


DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 
D  setQ  get  D  D  D  delete  D  D  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  Voldemort  □ 
□□□□□□□□□□□□□□□□□□□[ 
DDDDDDDDDDDDDDDDDD 


nnnnnnnnnn 

uuuuuuuuuu 

n  n  n  n  n  n 
U  U  U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnn 
UUUUUUUUUU 

n  n  n  n  n  n 
U  U  U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnn 
UUUUUUUUUU 

n  n  n  n  n  n 
U  U  U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnn 
UUUUUUUUUU 

n  n  n  n  n  n 
U  U  U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

DDDDDDDDDD 

DDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

DDDDDD 

D 

D 

D 

D 

D 

D 

Amazon  口  Dynamo  口 

DDDDDD 

D 

D 

D 

D 

D 

D 

] D  BDB7  DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDD  □□□ 
DDDDDDDD  □□□□  Redis8  □□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D  Redis  DDDDDDDDDDDD  integerQ  stringQ  list  口  set  D  D  D  sorted  set  □  □  □  □ 


set/get/delete  □ 

D 

DDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDD 

D 

DDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDD 

D 

DDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDD 

D 

DDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDD 

D 

DDDDDDDDDD  Redis  □□□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 


DDDDDDDDD  □□□ 
DDDDDDDDD  □□□□□  CouchDB9  口  MongoDB10  D  D  D  Riak11  DDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

DDDDDD  JSONQ  D  (□□□□□□□□□□)□□□□□□□ 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

MongoDB  DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

Employees  口 

D 

D 

D 

Department  DDDDDDDDDDDDDD  CouchDB  D  Riak  □  □ 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 


7http: //www. oracle.com/technetwork/database/berkeleydb/overview/index. html 
8http: //redis. io/ 
9http://couchdb. apache. org/ 
10http: //www. mongodb.org/ 

11 http: //www. basho.com/products_riak_overview. php 


Adam  Marcus  235 


BigTable  □□□□□□□□  □□□ 


HBase  □  Cassandra  □  □  Google  □  BigTable  □□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  (CF) DDDDDDDDDCFDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  CFQ  □□□□□□□□□□□ 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□ 
IDDCFDDDDDDDDDD)DDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D 

D  D 

D 

ID  □□□□□□□□□  NULL  DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

NULLD 

D  D 

D 

D  D  (DDDDDDDD)DDDDDDDDDDD  id  D  D  D  D  D  D 

D 

D 

D 

D 

D  D  D  D 

D  D 

D 

□□□□□□ 

D 

D 

DDDDDDDDDDDDDDDDDDDD  BigTable  D  D  D  D  D  D 

D 

D 

D 

D 

D  D  D  D 

D  D 

D 

DDDDDDDDDDDD  Cassandra  DDDDDDDDDD  Cassandra  口 

口 

D 

CFQ  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D 

D  D 

D 

DDDDDDDD 

DDDDDDDD 

NoSQLQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  HyperGraphDB12  □  Neo4J13  □□□□□□□□□□□□□□□  NoSQL  DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDD 


12http: //www. hypergraphdb.org/index 
13http: //neo4j .org/ 


236    NoSQL  □□□□□□□ 


□□□□□□□□ 

NoSQL  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
MongoDB  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  BigTable  口 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

□□□□□□ 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  CouchDB  □ 

D 

□□□□□□ 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  MapReduce □  □  □ 

D 

□□□□□□ 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

口  Hadoop  Q 

D 

D  D 

D 

D 

D 

D 

MapReduce  DDDDDDDDDDDDDDDDDDDDDD 

D 

□□□□□□ 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDD 

DDDDDDDD 


kjosot  nnnnnnnnnnnnnnnnnnnnnn 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

n  n  sot  nnnnnnnnnnnnnnnnnnnnn  —— 

-D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

nnnnnnnnnnnnnnnnnnnnnnnnnn 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

nnnnnnnnnn —— n nnnnnnnnnnnnnn 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

sot  nnnnnnnnnnnnnnnnnnn  actd n 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D 

nnnnnnnnnnnnnnnnnnnnnn  ^Atomiv- 

UUUUUUUUUUUUUUUUUUUUUU  、八 Lumi し. 

ACID  口 

A)  口 

口 

口 

DD 

D 

D 

DD  D 

门门门门门门门门门门门门门门门门门门门门门门门门门门 

□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D  D 

D  D 

(Consistency:  ACID 

D  C)DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDD  (Isolation:  ACID  □  I)  □  □  □ 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  (Durability:  ACID  □  □□□□□□□□)□□□□□ 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

ACID  DDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

(口  □  □  □ 

DD 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDD  $60  DDDDDDDDDDDDDDDD 

D  D  )D  ACID 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  NoSQL  D  D  D  D  D  D  ACID  DDDDDDDDDD 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD  ACID 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

Adam  Marcus  237 


n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n 

u  u 

n 
U 

n 
U 

nnnnnnnnnnnnnn 

uuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn  o^^i:^  n 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUU  Kedis  u 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

D  D 

D 

D 

D  Redis  D  multi  DDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDD  watch □□□□□□□□□□□ 

D  D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDD  test-and-set14  DDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D 

D  D  D  D  D 

□  □□□□□□  □□□□□ 

D 

D 

D 

NoSQLQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

n 
U 

n 
U 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  DD 

D 

D 

D  D 

D 

D 

last 匿 DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

DD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  sloppy-schema 
D  NoSQL DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


13.3  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  NoSQLQ  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  NoSQL  DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□  (RAID 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


14  □  □]□□□□□□□□□□ 


238    NoSQL  □□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  NoSQL 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDD 


D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□  OS  □□□□□□□□□□□□  OS  □ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

f sync DDDDDDDDDDDDDDDDDDDDDDDDDD  OS 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDD 100  D  D  200  D  D  □□□□□□□ 

(□□□)□ 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDD  30-100 MB/sec □□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DD 

口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  fsync 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

fsync  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□□□□ 

fsync  D  D  D  D  D  D 

Memcached15  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  memcached 

DDDDDDDDDDDD 

Redis  D  D  DDDDDDDDDDD  fsync  D  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  fsync  D  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDNDDDDDDDDD  fsync 
DDDDDDDDDDDDDDDDDDNDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□  (DDDDDDDDDDDDDDD  Redis 


15http: //memcached. org/ 


Adam  Marcus  239 


f  sync  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  OS  □□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDD 

NoSQLD  □□□□□□□□□□□□□□□□□□□□□□□□□  B+D  □□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  f sync □□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Cassandra  □  HBaseQ  RedisD 
□  □□  RiakQ  DDDDDDDDDDDDDD  k  □□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  f sync □□□□□□ 
DDDDDDDDDD  f sync □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

NoSQL  DDDDDDDDD  MongoDB  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  Cassandra  D  HBase  D  DDDDDDDDDDD 

BigTable  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  log-structured  merge 
free  □□□□□□□  □  Riak  □□□□□□□□  log-structured  hash  table  □□□□□□  CouchDB 


D  D  D 

D 

D 

B+DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D  D 

D 

D  D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D  D 

D 

D  D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDD 

Cassandra  DDDDDDDDDDDDDDDDDDD  f  sync  DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  f  sync  DDDDDDDDDDDDDDDDDDDD 

HBase  □  □  □  □  Hadoop  Distributed  File  System  (HDFS)16  □□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDD  f sync □□□□□□□□□□□□□□□□□□□□□□□□ 
□□□□□□ 


DDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  NoSQL □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

16http: //hadoop. apache.org/hdfs/ 
240    NoSQL  □□□□□□□ 


t>^^i^  nnnnnnnnnn/nnnnnnnnnnnn 
Kedis  UUUUUUUUUU/UUUUUUUUUUUU 

U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  CouchDB  □□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 
MongoDB  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D  D  MongoDB  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDD  NoSQL □□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDD  HDFS  □□□□□□□  HBase  □  □  □  □ 

D  D 

D 

D 

D 

D 

D  D 

D  HDFS DDDDDDDDDDDDDDDDDDDDDDDD  HDFS □  □ 

D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

Riak  D  Cassandra  □  □  □  Voldemort  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD nq wq DDDDDDDDDDDD ND 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDWD  w<NQ  D  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Cassandra  □  HBase  D  D 
D  Voldemort  □  □  rack-aware  □□□□□□□□□□□□□□□□□□□□□  (□□□□□□ 

DDDDDDD)DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDD  WAN □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDD 


13.4  □□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  !□□□!□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDD RAMQ DDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Adam  Marcus  241 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n  n 
U  U  U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n  n 
U  U  U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n  n 
U  U  U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n  n 
U  U  U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n  n 
U  U  U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D 

n  n 
U  U 

n 
U 

D 

D 

DDDDDDDDDDDDDD  Cassandra  □  HBaseQ  Voldemort 口 

RiakD 

D 

D 

D  D 

n  n 
U  U 

n 
U 

MongoDB  Q  Redis  □□□□□□□□□  CouchDB  □□□□□□□□□ 

D  D  D 

D 

D 

D  D 

n  n 
U  U 

n 
U 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
U  U 

n 
U 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D 

n  n 
U  U 

n 
U 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D 

n  n 
U  U 

n 
U 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D 

n  n 
U  U 

n 
U 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D 

n  n 
U  U 

n 
U 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D 

n  n 
U  U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D 

n  n 
U  U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D 

n  n 
U  U 

NoSQL  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D 

n  n 
U  U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

□  □  □  □  □ 

□  □  □  □ 

D 

D 

□  □  □  □ 

D 

□  D 

D  D  D  D  D 

D  D  D  D  D 

D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

DD 

D  D  D 

□□□□□□□ 

D  D  D  D  D 

□□□□□□ 

D  D  D  D  D 

D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

D  D 

D  D  D 

□□□□□□□ 

D  D  D  D  D 

□  □□□□□ 

D  D  D 

□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


242    NoSQL  □□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (Redis 


D  CouchDB  D  D  D  MongoDB  □□□□□□□□)□ 

D 

D  D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D  D  DD 

D 

D 

D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D  DD  D  D 


D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D  D  Memcached  DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

□  □□□□□□  Memcached  □□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D  D  D  D  D  Memcached  □□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D  Memcached  □□□□□□□□□□□□□□□□□ 

Memcached  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDD  Facebook  □  □  Memcached  □ 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDD! 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DD 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDD 

□□□□□□□□□□□□□□□□□□ 

CouchDB  D  D  DDDDDDDDDDDDDDDDDDDDDDD  D  D  Lounge  D  BigCouchQ 
DDDDDDDDDDDDDDDDDDDDDD  CouchDB  D  DDDDDDDDDDDDDDD 
D  CouchDB DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  CouchDB 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□  CoucdDB  DDDDDDDDDDDDDDDDDDD 

Twitter  DDDDDDDDDDDDDDDDDDDDDDDDDD  Gizzard17  □□□□□□ 
DDDDDDDDDD  Gizzard  D  DDDDDDDDDDDDDDDDDDD  (SQLD  D  D  D  D 
D  D  D  NoSQLD  □□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□ 

17http: //github. com/twitter/gizzard 


Adam  Marcus  243 


1000— 


— 0 


D 13.1:  □□□□□□□□□□□□  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Gizzard  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDD  (DHT:  Distributed  Hash  Tables)  UUU 
□  □□□□□  Amazon  □  Dynamo  □□□□□□□□□□□  NoSQL  □□□□□□□□□□□ 
DDDDDDDDDDDD  Cassandra  □  Voldemort  D  D  D  Riak  DDDDDDDDDDD 


DDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDHDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  LQ  D  D  D  D  D  [l,L]Q  D  DDDDDDDDD  H(key)modLD  DDDDDDDDDDDD 
DDDDDDDDDDDD  [l,L]Q  D  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD(DDIPDDDDDD)DHD  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD5DDDDDD  (八- e) □□□□□□ 
DDDDDDDDD  13.1 D  D  D  D 

D  D  D  D  D  L  = 1000  Q  D  D  D  H(A)  mod  L  =  7Q  H(B)  mod  L  =  234Q  H(C)  mod  L  =  447Q 
H(D)  mod  L  =  660Q  □□□  H(E)  mod  L  =  875  □□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


244    NoSQL  □□□□□□  口 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDDD 
DDDDDDDDDDD  U,  233]  DDDDDDDDDDDDEDDDDDDDDDDDDDD 
D  [875, 6]  D  D  D  (□□□□□□  1000  D  DDDDDDDDDD)DDDDDDDDDDDDD 

D  D  H('employee30')  modL  =  899  DDDDDDDDDDDDDDDDEDDDDDDDD 
H(' employee3 V)  modL  =  234  DDDDDDDDDDDDDDDDDBDDDDDDD 


DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D  D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

[7,233]  DDDDDDDDDDDDDD 

A 口  B 口 

D 

D  D 

CD 

D 

D  D  D  D  D 

D 

AD 

D  D 

D 

D 

D 

D 

D  D  D  D  D  BQ  CD  D 

D  D  D 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

ED  D  D  D 

D 

D  D 

D  D 

A 

D 

D 

D 

DDDDDDDDDD 

D  D  D 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D  D  AQ 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D  D 

D  D 

D  D 

D 

D  D  D 

D 

D  D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D  D 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D  D 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D  D 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

ADDDDDDDDD 

227  D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

132Q  D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D  D 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D 

DD 

D 

D  D  D  D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D  D 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D  D  D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDD 

D  D  D 

D 

D  D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 


DDDDDDDDD 

D 

DDDDDDDDDDDDDDDDDDDDD 馳 □ 

D 

D 

D 

D 

D 

DHT  □□□□□□□  口 

口 

□  □□□□  'DD'DDDDDDDDDDDDDD4D 

D 

D 

D 

D 

D 

D 

DDDDDDDD AD 

D 

D  D  D  D  A_1Q  a_2Q  a_3D  D  D  D  a_4  D  D  D  D  D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D 

D  Voldemort  □□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

Cassandra  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Cassandra  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 


Adam  Marcus  245 


□□□□□□□□□□□□ 


D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□〖□□□□,□□□□]□ 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDD 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 口 

D 

DDDD 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

BigTable  口口  口 

Google  D  D  D  BigTable  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

100  D  D  200MB  D 

D  口 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

D  D 

13.2  D  D  D  D 

DDDDDDDDDDDDDDDDDDDD  AQ  D  D 

DDDDDDDDDDDDDDDDDDDODDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  1DDDDDDDDDDDD 6DDDDDDDDDDDD 


246    NoSQL  □□□□□□□ 


900? 


Server  A  I 


METADATA  0 


0-499  500 - 1500 


METADATA 


Server や 


850-950 


Server C 


DATA 


899 

900 

901 

Data  for  key  900 

D 13.2:  BigTable  □□□□□□□□□□□□□□□□ 


DDDDDDDDDDDDDD  500-1500  D  DDDDDDDDDDDDDDDDDDDDDD 
BDDDDDDDDDDDDDDDDDDDDDDDD  850-950  D  DDDDDDDDDDDD 
CDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□  CDDDDDDDDDDDDDDDDDDDDDD  ()□□□□  1DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  BigTable  □□□□□□□□□□□ 

□  □□□□□□  261 □□□□□□□□□□  128MB  DDDDDDDDDDDDDDDDDD 


D  D  D  D  D 

BigTable  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDD  BigTable  □  □  □  □  □  Chubby  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  ZooKeeper18 
D  Chubby  D  DDDDDDDDDDD  Hadoop  D  D  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


18 http: //hadoop. apache.org/zookeeper/ 


Adam  Marcus  247 


DDDDDDDDDDDDDDDD  NoSQL □□□□□□ 

HBase  □  □  BigTable  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDD  Hadoop  □□□□□□□□□□□  (HDFS)  □□□□□□  HDFS  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

MongoDB  Q  D  BigTable  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  BigTable  □□□□□□□□□□□□□□□□□  Chubby  D 


DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

Cassandra  □□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD  Cassandra  □ 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  DDDDDDDDDDDDDDDDDDDDDDD  20  D  21 
DDD  13.1 D  D  DDDDDDDDDDDDDDDDDDDDDDDADDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD 

Twitter  Q  Gizzard  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Gizzard 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  NoSQL □□□□□□ 
D  D  D  D  Gizzard  D  DDDDDDDDDDDDDDDDDDD  (DDDDDDDDDDDDD 
□  ■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□DO 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD?DDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


248    NoSQL  □□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD? 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n  n  n 
U  U  U  U 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D  D  D 

□□□□□□□□ 


13.5    □  □  □ 


D 

D 

D 

D 

DDDDDDDDDDDD 

D  D  D 

D  D 

D  D 

DDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDD 

D  D  D 

D  D 

D  D 

DDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDD 

D  D  D 

D  D 

D  D 

DDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDD 

D  D  D 

D  D 

D  D 

DDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDD 

D  D  D 

D  D 

D  D 

DDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDD 

D  D  D 

D  D 

D  D 

DDDDDDDDDD  D  DNoSQLQ 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDD 

D  D  D 

D  D 

D  D 

DDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

□  (strong  consistency)  □  □ 

D  D  D 

D  D 

D  D 

DDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

(eventual  consistency)  □  □ 

D  D  D 

D  D 

D  D 

DDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDD 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDDDD 

D  D  D 

D  D 

D  D 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDDDD 

D  D  D 

D  D 

D  D 

D  D  DD 

capd D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D?DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Eric  Brewer  □□□□□□□□  CAP  □□□□□□  Gilbert  □  Lynch  [GL02]  □□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□  CAP  D  D  D  D 


Adam  Marcus  249 


D  D  D  (Consistency):  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□?(□□□□□□□□□□  ACID  Q  CD  D  D  D  D  ) 

D  D  D  (Availability):  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□  7 

D  D  D  D  (Partition  tolerance):  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDD? 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  NoSQL 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  NoSQL  D  DDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  24 □□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

CAP  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  NoSQL 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Yahoo! 口 

PNUTS  [CRS+08]  DDDDDDDDDDDDDDDDDD  (relaxed  consistency  and  relaxed 

availability) DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  NoSQL 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D 


D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  employee30: salary 


250    NoSQL  □□□□□□□ 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

Mnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

IN  □ 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

ni  nnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnn  u'nnnn 

uuuuuuuuuuuuuuuuuuuu wu  u  u  u 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  RD  D  D  D  D  D  D 

D 

D 

D 

D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD  R+w>n DDDDDDDDDD 

D 

D 

D 

D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

□  N=3D  □□□□□□□□(□□□□ 

AQ  BQ  C  Q  D  D  )D  D  D  employee30 :  salary  D  D  D  D  D  $20,000  D  D  D  D  D  D  D  D  employee30 

D  $30,000  DDDDDDDDDDDDDDDDDDDW=2DDDADBDCDDDDDDDD 
D 2DDDDDDDDDDDDDDDDDDDDDDDDDDD AQ BDDDDDDDDD 
D  (employee30:  salary,  $30,000)  DDDDDDDDDDDDDDDDDDDDDDDDD 
employee30 :  salary  Q  DDDDDDDDDDDDD  CQ  D  D  employee30 :  salary  Q  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDD  CD  D  D  $20,000  □□□□□□□□□ 
DDDDDDDDDDDD  employee30  :  salary  D  DDDDDDDDDDDDDDDDDDD 
DDDDDDDD 3D DDDDDDDDDDDDD 

R=1 DDDDDDDDDD  CQ  DDDDDDDDDD  $20,000  □□□□□□□ 
DDDDDDDDDDDDDDD 

R=2DDDDDDDDDDDDDDDDDD  CQ  DDDDDDDD  AQ 
□  □□  BDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  CQ  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  $30,000  DDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD  R>=2  D  D  D  R+w>3  DDDDDDDDDD 


D  D 

DDDDDDDD WDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDD RDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

D?DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

RD 

WDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDD WDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

R 

w 

N 

1 D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D 

Adam  Marcus  251 


DDDDDDDDDDDDDD  w=N  D  D  D  R=1 □□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDD 


HBase  U  tiutb  UUUUUUUUUUUUUUU 

u 

u 

n  n  n  n 

u  u  u  u 

u 

DDDDDDDDDD 

HDFS  DDDDDDDDDDD  HDFS  □  □  □  □  N  □  (□ 

D 

D 

2D  D  D 

D 

3)  D  D  D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDD w=ND 

D 

D 

D  D  D  D 

D 

D  D  D  D  D 

D 

D 

D 

D  D 

DDDDDDDDDDR-1DDDDDDDDDDD 

D 

D 

D  D  D  D 

D 

D  D  D  D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D  D 

D 

D  D  D  D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D  D 

D 

D  D  D  D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D  D 

D 

D  D 

□  □  □  □  □ 

Dynamo  DDDDDDDDDDD  Voldemort  □  Cassandra  □  □  □  Riak  □□□□□□□□□ 

□  □□□□□□  NQ  RDWDDDDDDDDDDDDDDR  +  w<=NDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
w<NDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

Dynamo  口 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

D  D  D  D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDD  Dynamo  D  DDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

AD 

B 

D  D 

D CDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

(N_A, 

N_ 

B, 

n_c)  DDDDDDDDDD  (0,0,0)  D  D  D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

DD 

DDDDDDDD  (39, 1, 5)DDDDDDBDDDDDDDDDDD 

DD 

D 

D 

D 

D  D 

D 

D  D 

(39,  2,  5)  □□□□□□□□□□□□□□□□□□  CQ  BQ  D  D  D 

D  D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDBDDDDDDDDDDDDDDDDDDDDDD 

DD 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDD BDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDD  bd  DDDDDDDDDD  BDD  (:□□□□□□ 

D  D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDD  (39,  2,  5)  □  (39, 1, 6)  □  □  □ 

D  D 

D  D  D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

252    NoSQL  □□□□□□□ 


D  D  D  D  D 


DDDDDDDDDDDDDDDDDDDDDDDDD  Dynamo  □□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Voldemort  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDD 

Cassandra  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□  API  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  Riak  D  D  Voldemort  □  Cassandra  DDDDDDDDDDDDD  CouchDB  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


□  □□□□□ 

RDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  Dynamo  DDDDDDDDDDDD  Cassandra  □  Riak  □  □  □  Voldemort  □  □  □ 


DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD 

DDDDDDDDDDDDDDD 

Hinted  Handoff 

Cassandra  □  Riak  ODD 

Voldemort  □  □  □  □  □  Hinted  Handoff  [ 

1  D 

D 

□ 

口 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  口 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DD 

D 

DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  Dynamo  □  □  □  □  □  'sloppy  quorum'  DDDDDDDDDDDDD  Hinted  Handoff  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDWDDDDDDDDDDDDDDDD 

Adam  Marcus  253 


Cassandra  □  Voldemort  □  Hinted  Handoff  □  □□□  WDDDDDDDDDDDDDDDDD 

DDDDDDDDDWDDDDDDDDDDDDDDDDDDDDDDDD  Hinted  Handoff 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□□ 


Anti-Entropy 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Hinted  Handoff  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  Cassandra  □  Riak  □□□□□□□  Dynamo  □□□□□□□  Anti-Entropy  □  □ 
D  D  D  D  D  Anti-Entropy  □□□□□□□□□□□□□□□□  (Merkle  Trees)  □□□□□□□□ 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

Gossip 


□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

S 編 

_ I _  a 

□  D 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□ 


□ 

G 

□ 


國 

□ 


□ 

□ 

□ 


□ 

□ 


□ 

□ 


□ 

6 

3 

1 


□ 

L 

Q 

s 

o 

N 


□ 

□ 


□ 

し 

Q 

s 

o 

N 

□ 


L 

Q 

s 

o 

N 

□ 


□ 

□ 


Q 

s 

o 

N 


□ 

□  _u 

□ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


254    NoSQL  □□□□□□□ 


13.7    □  □ 

Jackie  Carter  D  MihirKedia  口  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  NoSQLD  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD! 


255 


□ 14 口 


Python  Packaging 

Tarek  Ziade 


14.1  □□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  Windows  □  MacOSXDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDD"DDDDDDDDDDDDDDDDDDDDDOSDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

Linux  □□□□□□□ 

D 

D 

D  D  D  D  D 

D 

D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D  D 

D 

DDDDDDDDDD 

D 

D 

D  D  D  D  D 

D 

D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D  D 

D 

DDDDDDDDDD 

D 

D 

D  D  D  D  D 

D 

D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D  D 

D 

DDDDDDDDDD 

D 

D 

D  D  D  D  D 

D 

D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D  D 

D 

DDDDDDDDDD 

D 

D 

D  D  D  D  D 

D 

D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D  D 

D 

□  Linux  D  D  D  D  D  D 

D 

D 

D  D  D  D  D 

D 

D  D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

(dpkg  D 

RPM 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


n  n 

u  u 

u 

u 

u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

u 

u 

u 

n  n 

u  u 

u 

u 

D  D 

D 

D 

D 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuu 

D 

D 

D 

D 

nnnnnnnnnnnnnnnn  r^c  nnnnnnnnnnn 

uuuuuuuuuuuuuuuu  u^uuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

D  D 

D 

D 

D 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 

u 

n 

u 

n 

u 

n  n 

u  u 

n 

u 

n 

u 

D  D 

D 

D 

D 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 

u 

n 

u 

n 

u 

n  n 

u  u 

n 

u 

n 

u 

D  D 

D 

D 

D 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

Python  [ 

nnnnnnnnnnnnnnnnnn  /n  nnnnnnnnn 
UUUUUUUUUUUUUUUUUU  (UUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

D  D 

D 

D 

D 

\nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

^UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 

u 

n  n 

u  u 

n 

u 

n 

u 

D  D 

D 

D 

D 

I ~~ I  r ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ i I ~~ 1 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  (DDDDDDDDDDDD 

D 

D 

D 

)m 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDmDD 

D 

D 

D 

D  D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDD  Python  D  DDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDmDDDDDDDDDDDDDDDDD1 

D 

D 

D 

D  D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

Python DDDDDDDDDDDDDDD  Python □□□□□□□□□□□□□□ 

□  □□□□□  Python  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
"口  □□□『□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D 

Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  Python  D  D  DDDDDDDDDDDDDDDDDDDD  Python  D  D 
DDDDDDDDDDDDDDDmDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□tar 

D  zip  □□□□□□□□□□□□□□□□□□□□□□□  (DDD)DDDDDD 
D  D  D  D 


14.2    Python  □□□□□□ 

Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  PythonrQ  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  :  "the  Fellowship  of  the  Packaging"]  □□□□□□□□□□□  "The  Fellowship  of  the  Ring"  □  □ 


258    Python  Packaging 


DDDDDDDDDDDDDD  Python  OS  □□□□□□□□□□□ 

D  D  Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDDD-DDDDDDD 
DDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
•DDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  Plone(Python  □□□□□□ 
CMS)D  DD  D  D  Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

Plone  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D  D  D  D 

DDDDDDDDDDDDD  Plone  □  □  zc.buildout  D  D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D  D  D  D 

CDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DDDDD 

DDDDDDDDDDDDDDDDDDDDDD  Python  D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D  D  D  D 

DDDDDDDDDDDDDDD  zc.buildout  D  DDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDD 

DDDDDDDDDD  Li 皿 □□□□□□□□□□□□□□□□□□□□ 

Windows  □  □  □  □ 

DDDDDDDDDDDDDDDDD  Centos  □  Debian  D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDD 

DDDDD 

D 

D 

DDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDD 

DDDDDDDDDDDDD  Python  □□□□□□□□□□□ 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDD 

DDDDDDDDDDDDDDDDDDDD?DDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDD 

DDDDDDDDDDDDDDD  RPMD  dpkgQ  D  D  D  D  D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

[□DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  Python  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  "MathUtils"  DDDDDDDDDDDDDDDDDD  "Fumanchu"  □□□□□□□ 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Tarek  Ziade  259 


D  "Fumanchu"D  DDDDDDDDDDDDDDDDDDDD  "Phil"  DDDDDDDDDD 

"Fumanchu"  □  "Phil"  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


n  n 

u  u 

u 

u 

n 

u 

n 

u 

n  n 

u  u 

u 

u 

n  n 

u  u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnn ハ へ〜, ,,-^  +  —  11 n  ni'i^nnnnnnnnnnn 
UUUUUUUUUUUU  easy_install U  pip  UUUUUUUUUUU 

n  n 

u  u 

n 

u 

n  n 

u  u 

n 

u 

n 

u 

n  n 

u  u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 

u  u 

n 

u 

n  n 

u  u 

n 

u 

n 

u 

n  n 

u  u 

n  n  n  "11;""™。" ハレ,," n  "d レ ;1" nnnnnnnnnnnnnnnnnnnn 
U  U  U  rumancnu  U    Fml UUUUUUUUUUUUUUUUUUUU 

n  n 

u  u 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 

u  u 

n 
U 

n  n 

u  u 

n 
U 

n 

u 

n  n 

u  u 

n  n  n  n  cr\j  ;  tonnnnnnnnnnnnnnnnnn り nnnnnn 

U  U  U  U  SQLite  uuuuuuuuuuuuuuuuuu  ■  u  u  u  u  u  u 

n  n 

u  u 

n 

u 

n  n 

u  u 

n 

u 

n 

u 

n  n 

u  u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n  n 
U  U 

nnnnnnnnnriT         nnnnnnnnnnnnnnnriT  n 

n  n 

u  u 

n 

u 

n  n 

u  u 

n 

u 

n 

u 

n  n 

u  u 

nnnnnnnnnnnnnnnnnnnnnn  /、, つ 「  nnnnnnnn 

UUUUUUUUUUUUUUUUUUUUUU  /var  U  U  U  U  U  U  U  U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D 

D 

D 

DD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D 

D 

D 

D  D 

D  D  :□  Python 

D  D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

14.3  □□□□□□□□□□□□□□□□□□ 

DistutilsQ  D  D  D  D  D  Python  □  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Setuptools □□□□□□□ 
DDDDDDDDDD  Distutils  DDDDDDDDDDDDDDDDD  Setuptools  D  D  D  D 
D  D  D  D  Distribute  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
PipDDDDDDDDD  Setuptools  DDDDDDDD 


D 

D 

D 

D 

DDDDDDDDDDD  Distutils  DDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D  Distutils  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Pythonp 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D  Distutils  DDDDDDDDDDDDDDDDDD  Distutils2  D  D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDD  Distutils DDDDDDDDDDDDD 

260    Python  Packaging 


Distutils  □□□□□□□□□□ 


Distutils 

DDDDDDDDDDDDDD  Distutils  D  D  Distribution  DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DistutilsQ  DDDDDDDDDDDDDDDDDDD  Python  D  DDDDDDDDDDDD 
DDDDDDDDDDDD  setup.  PyD  DDDDDDDDDDDDDDDDDDDD  Distutils 
DDDDDDDDDDDD  setup DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  Distribution  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD 


Tarek  Ziade  261 


from  distutils. core  import  setup 

setup(name='MyProject ' ,  version? 1 .0' ,  py_modules=[ ' mycode . py ' ] ) 

DDDDDDDDDDD  Distutils  DDDDDDDDDDDDDDDD  sdist  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDD  dist □□□□□□□□□□ 

$  python  setup. py  sdist 

DDDDDDDDDDDD  install  DDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 

$  python  setup. py  install 

Distutils  DDDDDDDDDDDDDDDDDDDD 

- upload.. .D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
- register. ..D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
- bdist...Q  DDDDDDDDDDDDDDDDDDDD 
•  bdist.msi...  Windows        .msi  DDDDDDDDDD 


D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D  D  D 

D  D  D  D  D  D  D  Distutils  DDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D  D  D 

□□□□□□ 

$  pyth 

on  setup. py  -- name 

MyProject 

D  D  D 

setup.  pyQ  DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D  D  D 

□□□□□□□□□□□□□□□□□□□□□□□□□□ 口 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D  D  D 

DDDDDDDDD 

D  D 

D  D  D  D  D  Python  D  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDD  Distutils  DDDDDDDDDDDDD  lxml □  □ 
DDDDDDDDDDDDDDDDDD  setup.  pyQ  DDDDDDDDDDDDDDDDDD 
DDDDDDDD 

$  python  setup. py  --name 
Building  lxml  version  2.2. 

NOTE:  Trying  to  build  without  Cython,  pre - generated  ' src/lxml/lxml . etree . c' 
needs  to  be  available. 

Using  build  configuration  of  libxslt  1.1.26 

Building  against  libxml2/libxslt  in  the  following  directory:  /usr/lib/lxml 
262    Python  Packaging 


D 14.1:  Setup 


D  D  D 

D 

D 

D 

D  D  D  D 

D 

D  D 

D 

D 

D  D  D  D  D 

D  D  D  DD  setup. pyD  D  D  D  D  D  D 

D 

D  D  D  D 

D  D  D 

D 

D 

D 

D  D  D  D 

D 

D  D 

D 

D 

D  D  D  D  D 

D  D  D  D  D  D  D  DistutilsQ  D  D  D 

D 

D  D  D  D 

D  D  D 

D 

D 

D 

D  D  D  D 

D 

D  D 

D 

D 

D  D  D  D  D 

setup.  pyQ  DDDDDDDDDDD 

D 

D  D  D  D 

D  D  D 

D 

D 

D 

D 

Metadata  口  PyPI 

Distutils DDDDDDDDDDDDDDDDDDD  Metadata DDDDDDDDDDDD 
PEP3142DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 


•  Name:  □□□□□□□□ 

•  Version:  DDDDDDDDDDD 

•  Summary:  DDDDDDDDDD 

•  Description:  D  D  D  D  D  D 


Python  Enhancement  Proposals^  PEP  □□□□)□□□□□□□□□□□□□□□□ 


Tarek  Ziade  263 


•  Home-Page:  D  D  D  D  D  D  D  URLQ 

•  Author:  D  D  D  D 

•  classifiers:  DDDDDDDDDDDDDDDDDDD  Python  DDDDDDDDDD 

DDDDDDDDDDDDDDDD  (betaQ  alphaQ  final)  □□□□□□□□□ 

•  Requi「es[]  ProvidesD  Obsoletes:  DDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□ 

Python  Package  Index  (PyPI)3  □  □  CPAN  □□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Distutils  □ 

register  D  D  D  D  D  upload  DDDDDDDDDDD  register  D  D  Metadata  D  D  D  D  D  D 

D  D  D  PyPI  □□□□□□□□□□□□□□□□□(□□□□□□□□)□□□□□□□□□ 
(口  □□□□□□□□□□□□□□□□)□□□□□□□□□□□□ 

»  Package  Index   MoPy Tools  0.1 

MoPy Tools  0.1 


Sef  of  tools  to  buiid  MoziHa  Services  apps 


Login 
Register 
Lost  Login? 
Use  OpenlD'!!^ 


MoPyTools-0.1.tar.9z  (md5)  Source 

2011-02-04  3KB 

Author:  Tarek  Ziade  <tarek  at  mozilla  com> 
Home  Page:  hnp7/bitbucket.OfQAarek/mopytools 
Package  Index  Owner:  tarek 
DOAP  record:  MoPyTools-0.1.xml 

Log  in  to  rate  this  package. 


□ 14.2:  PyPI  □  □  □  □  □ 

classifiers  D  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD  URLQ  D 
DDDDDDDDDDDDD  Requires  D  D  D  D  Python  DDDDDDDDDDDDDDDD 
D  D  requires  DDDDDDDDDDDDDDDDD  Requires  DDDDDDDDDDDDDD 

from  distutils. core  import  setup 

setup (name 二, f oo,  ,  version? 1 .0,  ,  requires=['ldap']) 

idapQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  Python  D  DDDDDDDDDD 

3D  □  □  CheeseShop  □□□□□□□□□□ 


264    Python  Packaging 


□  □□□□□□□□□□□□□□□□□□□□□□□□□□□  Perl □  require  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDD  PyPiD  DDDDDDDDDDDDDDDDD 
DDDDDDDDD  CPANQ  DDDDDDDDDDDDDDDDDDDDDD  Python  D  D  D 
DDDDDDDDDDDDD  idapD  D  DDDDDDDDDDDDDD  Python  D  □□□□□□ 
DDDDDDDDDDDDDDDD  Distutils  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Metadata DDDDDDDDDDDDDDDDDDDDDDDDD  Python □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  Windows  DDDDDDDDDDDDDDDDDDD  setup.  Py  DDDDDDDDDD 
DDDDDDDDDD 

from  distutils . core  import  setup 

setup(name='foo,  ,  version? 1 .0,  ,  requires=['win32com' ]) 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD  Windows  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  Windows  D  D  D  D  D  requires  DDDDDDDDDDDDDDDDDDD 

from  distutils. core  import  setup 
import  sys 

if  sys. platform  'Win32': 

setup(name=' foo' ,  version^' 1 .0,  ,  requires=[ ,win32com' ]) 
else: 

setup(name=' foo' ,  version? 1 . 0 , ) 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
PyPl  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
PyPl  D  D  D  D  D  Metadata  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD 


PyPiD  □□□□□□□ 

□  □□□□□□  PyPiD  Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  PyPiD  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Tarek  Ziade  265 


http://pypi.python.org 


Packager 


install 


discovsr 


□ 14.3:  PyPI  □□□□□□□ 


D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D  D  D  PyPI  DDDDDDDD  Distutils  D  register  D  D  D  D  D  D 

D 

D  D 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD  POSTQ  □□□□□□ 

D 

D  D 

D 

D  D 

D  D 

D 

D 

D  Authorization  □□□□□□□□□□□□□□□  PyPI  □□□□□□ 

D 

D  D 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDD  Distutils DDDDDDDDDDDDDDDD 

register  □ 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  HTMLQ  D 
DDDDDDDDDDDDDDDDDDDDDD  PyPlD  D  D  D  D  D  D  D  D  D  D  upload  D  D  D  D 


$  python  setup. py  sdist  upload 
running  sdist 

running  upload 

Submitting  dist/mopytools-0 . 1 .tar.gz  to  http://pypi.python.org/pypi 
Server  response  (200) :  OK 


□  □□□□□□  PyPlD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  Download- URL  DDDDDDDDDDD 


$  python  setup. py  register 
running  register 
Registering  MPTools  to  http 
Server  response  (200) :  OK 


//pypi - python . org/pypi 


266    Python  Packaging 


PyPi  □□□□□□□ 


PyPi DDDDDDDDDDDDDDD  html □□□□□□□□□□□□□□□□□□□ 

□  □□□□□□  Simple  Index  □□□□□□  XML-RPC  API  □  □ 

Simple  Index  Q  D  D  D  D  D  http :  //pypi  .  python .  org/simple/  D  D  DDDDDDDD  HTML 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

<htmlxhead><title>Simple  Index</titlex/headxbody> 

<a  href = ' MontyLingua/ ' >MontyLingua</a><br/> 

<a  href = ' moot i ro— web/ ' >mootiro_web</a><br/> 

<a  href =  ,  Mopidy/ ' >Mopidy</a><br/> 

<a  href?  mopowg/ ' >mopowg</a><br/> 

く a  href = ' MOPPY/ ' >M0PPY</a><br/> 

く a  href = ' MPTools/ ' >MPTools</a><br/> 

<a  href=' morbid/ '>morbid</a><br/> 

<a  href = ' Morel ia/ ' >Morelia</a><br/> 

<a  href = ' morse/ ' >morse</a><br/> 

</bodyx/html> 

D  D  D  D  MPTools  DDDDDDDD  MPTools/Q  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 

•  PyPi  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
•DDDDDDDDDDDDDDDDDDD  Metadata  DDDDDDDDDDDDD  URL 
•DDDDDDDDDDDDDDDDDDDDDD  Metadata  DDDDDDDDDDDD 
D  D  D  D  URL 

MPTools  DDDDDDDDDDDDDDDDD 

<htmlxhead><title>Links  for  MPTools</title></head> 
<body><h1>Links  for  MPTools</h1> 

く a  href=" . . I .  . /packages/source/M/MPTools/MPTools-0 . 1 . tar.gz">MPTools-0. 1 . tar . gz</a><br/> 
<a  href="http: //bi tbucket.org/tarek/mopy tools"  rel="homepage">0. 1 home_page</a><br/> 
</body></html> 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDD  http :  //pypi  .  python .  org/simple/PROJECT_NAME/ 

DDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  PyPlD  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  PyPi  DDDDDDDDDDDDDDDDDDD  PyPi  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  Plone  DDDDDDDDDDDDDDDDDD  PyPi  DDDDDDDDDDDDD 


Tarek  Ziade  267 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  PyPiD  DDDDDDDDD 
DDDDDDDDD 

DDDDDDDDDDDDDDDDDDD  PyPi  口  D  D  D  D  D  Simple  Index  D  D  D  D  Download- 
URLQ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Simple  Index  □□□□□□□□□□□□□□□□□ 

Simple  Index  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□  XML-RPC  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

»>  import  xmlrpclib 
»>  import  pprint 

»>  client  =  xmlrpclib. ServerProxy( ' http: //pypi . python . org/pypi ' ) 

»>  client .  package— releases ( , MPTools ' ) 

[,0.1,] 

»>  pprint . pprint (client . release_urls( 'MPTools' ,  '0.1')) 
[■['comment— text' : ' ' , 
'downloads':  28, 

'filename' :   'MPTools - 0.1 . tar.gz' , 
'has_sig' :  False, 

'md5_digest' :  ' 6b06752d62c4bf fel f b65cd5c9b71 11a' , 

'packagetype' :   ,sdist, , 

, python_version , :  ,  source , , 

'size' :  3684, 

'upload.time' :  <DateTime  ' 20110204109:37:12'  at  f4da28>, 

, url ' : ' http : //pypi . python . org/packages/source/M/MPTools/MPTools-0 .1 . tar.gz' }] 

»>  pprint . pprint (client . release_data( 'MPTools' ,  '0.1')) 

{'author' :  ' Tarek  Ziade' , 

'author_email' : ' tarek@mozilla.com' , 

'classifiers' : [] , 

'description' :   ' UNKNOWN ' , 

'download— url' : 'UNKNOWN' , 

' home— page ' :  ' http : //bitbucket . org/tarek/mopy tools ' , 

'keywords' :  None, 

'license' :  ' UNKNOWN ,, 

'maintainer' :  None, 

'maintainer— email ' : None, 

'name' :  'MPTools' , 

'package— url, : ' http: //pypi .python.org/pypi/MPTools' , 
, platform':  'UNKNOWN', 

, release— url , : ' http : //pypi . python . org/pypi/MPTools/0 . 1 , , 
, requires— python , :  None, 
, stable— version ' :  None , 

'summary' :  ' Set  of  tools  to  build  Mozilla  Services  apps' , 
'version' :  '0.1'} 

DDDDDDDDD  XML-RPC  API  □□□□□□□□□□□□□□□□□□□□□□□□□ 
D  D  D  Simple  Index  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


268    Python  Packaging 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  PyPiD  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Python  Installation  ロロ ロロ ロロ ロロ 

Python  DDDDDDDD  python  setup.  Py  install  DDDDDDDDDDDDDDDD 
D  D  D  Distutils  DDDDDDDDDDDDDDDDDD 

•  PythonU  □□□□□□□□□□□  Python  D  □□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDD  Ubuntu  D  D  /usr/local/lib/python2.6/distpackages/D 
口  口  Fedora  口  口  /usr/local/lib/python2. 6/sites-packages/ 口  口 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
•DDDDDDDDDDDDDDDDDbinDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDD  /usr/local/bin  DDDDDDDDDDD  Python  D  D  D  D 

□  □□□□□□  bin  DDDDDDDDDDDDD 

Python  2.5DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDD  projectversion.  egg-info  D  D  D  D  D  D  D  D  virtualenvQ  D 

DDDDDDDD  virtualenv- 1 .4.9.egginfo  □  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□  Distutils  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDD 

install 

□□□□□□ 

recordO 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

□□□□□□ 

D 

D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

Distutils D 

D 

D  D  D  D 

D 

D 

D 

DDDDDDDDDD 

Setuptools  D  PipD  D 

DDDDDDDDDDD  Distutils  D  D  D  D  D  D 

D 

D 

D 

D 

□□□□□□ 

D 

D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

□□□□□□ 

D 

D 

□  □□□□□□ 

PyPi DDDDDDDDDDDDDDDD  Python 

D 

D 

D 

D 

□□□□□□ 

D 

D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

□□□□□□□ 

Require  口 

D 

D 

Tarek  Ziade  269 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn m 

n 
U 

n 
U 

n 

u 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnn  co+ 1  ir* +' ハハ i n  n  n  n  n  nno+ii+Tio  n  n  n  n  n  n  n  n  n  n 
U  U  U  U  U  U  U  betuptoois  U  U  U  U  U  Distutiis  UUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnn  o つ c、,  ,'r>c+ つ 11 nnnnnnnnnnnnn  d^^dt  n 
UUUUUUUUUU  easy_instaii  UUUUUUUUUUUUU ビ y ド 1 U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnn  Co 十 ■■。 +ハハ 1 cnnnnnnnnnnn 
UUUUUUUUUUUUUUUU  setuptoois  UUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

D  D 

D 

D 

D 

Setuptools  DDDDDDDDDDDDDDDD  Distutils  □  PyPl  D  D  D 

n 
U 

n 
U 

n 
U 

D  D 

D 

D 

D 

D  D  D  setuptools  DDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

easy  一  install  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

setup.  Py  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

PyPl  DDDDDDDDDDDDDDDDDDDDDDD  easy—install 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD  PyPlD 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

DD 

D  D  D  setuptools  DDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD 
•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDD 


DDDDDDDDDDD 

setuptools  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Pip  DD  Setuptools  D  D  D 


DDDDDDDDDDDDDDDDD 

□□□□□□□ 

D 

D 

D 

D 

D 

D  D 

DDDDDDDD 

D 

D 

DDDDDDDDDDDDDDDDD 

Metadata  □  □  □ 

D 

D 

D 

D 

D 

D  D 

D  D  D  D  Python  D 

D 

D 

DDDDDDDDDDDDDDDDD 

□□□□□□□ 

D 

D 

D 

D 

D 

D  D 

DDDDDDDD 

D 

D 

DDDDDDDDDDDDDD 

•  Distutils D  egg-infoQ  D  D  D 

□  □□□□□□ 

D 

D 

D 

D 

D 

D 

270    Python  Packaging 


•  Setuptools  D  egg-infoD  DDDDDDDDDDDDDDDDDDDD  Setuptools  □ 
DDDDDDDDDDDDDDDD 

•  Pip  D  egg-infoQ  D  D  D  setuptools  DDDDDDDDDDDDDDDDD 
•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


nnnnnnnnD? 

Distutils  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  setup.  pyQ  DDDDDDDDDDDDDD 

setup( . . . , 

packages= [ ' mypkg ' ] , 

package_dir={ 'mypkg' :   ' src/mypkg' }, 

package— data={ ' mypkg ' :  ['data/*. dat ' ]}, 

) 

D  D  D  D  D  mypkg  D  DDDDDDDDDD  -datQ  D  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  Python □□□□□□□□□□□□□□□□□□□□□ 

Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD 

setup( . . . , 

data_files=[('bitmaps' ,  ['bm/bl .gif ,   ' bm/b2 . gif ' ]) , 
( ' conf ig' ,  ['cfg/data.cfg']) , 
('/etc/init.d' ,  [' init-script' ])] 

) 

DDD OS DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  setup.  PyD  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 
•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

•DDDDDDDDDDDDDDDDDDDDDD  man  DDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  setup.  Py 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  setup.  Py 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  Setuptools  D  Pip  DDDDDDDDDDDDDDDDD 


Tarek  Ziade  271 


14.4  □□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D  D 

D 

D 

DDDDDDDD 

DDDDDDDD  Python □□□□□□□□□□□□□□ 

D 

D 

D  D  D  D 

D 

D 

DDDDDDDD 

nnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

n 
U 

n 
U 

nnnnnnnn 

DDDDDDDDDDDDDDDDDDDDDD 

□  □  □  □  □ 

门门 门门 门门 门门 门门 门门门 "—丄 j    j.  i ― || ― || ― || ― I  n  n  n 

□  □□□□□□□□□□□□  Metadata  □□□□□□□ 

r— i 
D 

D 

rn  n  n  n 

D  D  D  D 

D 

r— i 
D 

I ~~ I    III1 I  -j  'f  A  C  \ ― 1  1 ― 1  1 ― I 

□  PEP  345  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDD 

1 ~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~ ii ~ I 

•DDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

DDDDDDDDDDDDDDDDDD  Python  D  D  D 

D 

D 

D  D  D  D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D  D 

D 

D 

DDDDDDDD 

"l.l" D  D  D  D  "1-0"  DDDDDDDDDDDDDDDD 

D 

D 

D  D  D  D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D  D 

D 

D 

DDDDDDDD 

D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□  PEP  386  □□□□□□□□□□ 

DDDDDDDDDDDD 

N.N[.N] + [{a|b|c| 「c}N[ . N]+] [ . postN] [ . devN] 

D  D  D  D 

•A^DDDDDDDDDDDDDDDDDDNDDDDDDDDDDDDDDDDDD 

□  □□□□□  (MAJOR.MINOR)  □□□□□□ 

' aUbUcUUU     □□□□□□  alphaU  beta[]  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  cD     □□□□□□□□□  Python □  □  □  ?r 
DDDDDDDDDDDDDDDDDDDDDDDDcDDDDDDDDDDDDD 
D  D  D 

* わ □□□□□□□□□□□□□□□□□ 

•  post  DDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□  dev  D  D  D  D  post  DDDDDDDDDDDDDDDDDD  dev  D  D  D  D  D  D  D 


272    Python  Packaging 


□  □□□□□□□□  PEP  386  □□□□□□□□□□□□□□□ 

•  alpha  <  beta  <  rc  <  final 

•  dev  <  non-dev  <  post 口  ODD  non-dev  口  口  alpha 口  beta 口  rc  D  D  D  D  final □  □  口 

□□□□□□ 

1 .0a1  <  1 .0a2.dev456  < 1 .0a2  < 1 .0a2.1 .dev456 
< 1 .0a2.1  <  1 .Obi .dev456  < 1 .0b2  < 1 . 0b2 . post345 
< 1 .0c1 .dev456  く 1.0c1 く 1 .O.dev456  く 1.0 
< 1 .O.post456.dev34  < 1 .O.post456 


D  D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDD  Python  D  DDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  PyPl      PEP  345  □□□□□□  □ 

D  D  D  D  D 

D 

D 

D 

□  □□PEP  386  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D  D  D 

D 

D 

D 

D  D 

D  D  D  D 

PEP  345 

D 

D 

D 

DDDDDDDDDDDDDDDDD  PEP  314  Q  RequiresQ  Provides  □ 

D  D  Obsoletes  DDDDDDDDDDDDDDD  Requires- Dist[]  Provides- Dist  D  D  D 

obsoletes-Dist  DDDDDDDDDDDDDDDDD 

Requires- Dist  DDDDDDDDDDDDDDDDDDDDDDDD  Distutils  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDD  Distutils  DDDDDDDD  (D  D  D  Name 
DDDDDDDDDD)DDDDDDDDDDDDDDDDDDDDDDDDDD  D  DDistutils 
DDDDDDDDD  PyPl  DDDDDDDDDDDDDDDDDDDDDDDD  PEP  386  □ 
DDDDDDDDDDDDDDDD 

Requires - Dist:  pkginfo 

Requires - Dist:  PasteDeploy 

Requires - Dist:  zope. interface  (>3. 5. 0) 

Provides- Dist  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  ZODB DDDDDDDD  transaction 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Provides - Dist :  transaction 

obsoletes-Dist  DDDDDDDDDDDDDDDDDDDDD 

Obsoletes-Dist:  OldName 


Tarek  Ziade  273 


□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD 

Requires - Dist:  pywin32  (>1 . 0) ;  sys. platform  'Win32' 

Obsoletes-Dist:  pywin31 ; sys . platform  ==  'Win32' 

Requires - Dist :  foo  (1 , ! =1 . 3) ;  platform. machine       ' i386 ' 

Requires - Dist:  bar;  python— version  ==  ,2.4,  or  python_version  ==  ,2.5, 

Requires - External : libxslt; ' linux'  in  sys. platform 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Python  D  DDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□==□□□□  inD  D  D  (□□□□□□□ 

□  □□□□□)□□□□□□□□□□□□□□□□□□  PEP  345  □□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDD 

•  Requires - Python 

•  Requi res-External 

•  Requires - Dist 

•  Provides - Dist 

•  Obsoletes-Dist 

•  Classifier 

DDnnnnnnDDDDD? 

DDDDDDDDDDDDDDDDD  Python  D  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  BDDDDDDDDDD  FooQ  D 
DDDDDDDDDDDDDDDDDDDDADDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDMacOSXDDDDD  Setuptools DDDDDDDDDDDDDDDDDD 
D  easy—install  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

DRPM DDDDDDDDDDDDDDDDDDDDDDDDDD 

Pythor 

D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDD  Python  D  DDDDDDDDD 

D  D  D 

D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD  Python  D  D  D  D 

D  D  D 

D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  RPMD 

274    Python  Packaging 


口  □□□□□□□□□□□□□□□□□□□□□□□□  python  Q  D  □□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  foo-python □  □ 
DDDDDDDDDDDDDDDD  Fedora  D  RPM  DDDDDDDDDDD  python- foo  □  □ 
DDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDD  Python  □□□□□□□□□ 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  口 
virtualenv  DDDDDDDDDDDDDDDDDDD 

□  □□□□□□  Python  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□  口 

DDDDDDDDDDDDDDDDDD  Python  D  □□□□□□□□□□□□□□□□□□□  口 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Python 

thon  口 

D  D  D 
D  D  D 

D  D  D 

Python DDDDDDDDDDDDDDDDDDDDDD  Python □□□□□□□□□□□□ 
DDDDDDDDDDDD  python26-webob  D  PyPl  D  D  D  D  D  WebOb  DDDDDDDDDD 
DDDDDDDD 

DDDDDDDDDDDDD  PEP  376  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  Setuptools  D  PipD  DDDDDDDDDDDDDDDDDDDDDDD 
dist-info  DDDDDDDDDDDDDDDDDDDDD 

•  METADATA:  PEP  345D  PEP  314  Q  D  D  PEP  241 □□□□□□□□□□  □ 

•  Record:  DDDDDDDDDDDDDDDDD  csv  DDDDDDDDDDD 


•  installer:  DDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

•  requested:  DDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

DDDDDDDDDDDDD  (□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

DDDDDDDDDDDDDDD  )D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D  D 

D  D  D  D  D  Python  DDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D  PEP  376  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

口  resources  DDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

PEP  376  D  D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  PEPD 
DDDDDDDDDDD 


y  ] 

] y 

D  p 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


□ 

p 

A 

n 

o 

h 

y 


□ 

M 

p 

R 

□  _u 

□  _u 

□  _u 

□ 


Tarek  Ziade  275 


□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD 

DDDDDDDDDD 

MPTools  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  Python  DDDDDDDDDDD  -file__D  DDDDDDDDDDDD 

import  os 

here  =  os.path.dirname( —― file —― ) 

cfg  =  open(os. path. join (here,  ,config,,  ' mopy.cfg')) 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
configD  DDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  pkgutil.open 
DDDDDDDDDDDDDDDDD 

import  os 
import  pkgutil 

#  Open  the  file  located  in  config/mopy.cfg  in  the  MPTools  project 
cfg  =  pkgutil. open('MPTools' ,  'config/mopy.cfg') 

pkgutil.open  D  DDDDDDDDDDDDDDDDD  resources  D  DDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□ 

conf ig/mopy. cfg  {confdir}/{distribution . name} 

D  D  D  D  confdirQ  DDDDDDDDDDDDDDDDDDDDD  distribution,  name  D  D 


D  D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□  Python  DDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

resources DDDDDDDDDDDDDDDDDD  APIQ  mopy.cfg □ 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD  conf  ig/mopy.  cfg  D  DDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D  Pkgutil D  D  DDDDDDDDDDDDD 

276    Python  Packaging 


pkgutil 


site-packages 


stuff,  py 

MoPyTools.dist-info 

pkgutil.open('MoPyTools',  'config/mopy.cfg') 

RESOURCES 

config/mopy.cfg  /etc/mopy.cfg 
images/imagel  .jpg  /var/mopytools/image1  .jpg 


□ 14.4:  □□□□□□□□  □ 


DDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  setup,  cfg 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  (glob-style  pattern,  target) 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  MPTools  D  setup,  cfg  D  DDDDDDDD 

[files] 
resources  = 

conf ig/mopy . cfg  {confdir}/{applicat ion. name}/ 
images/*. jpg       {datadir}/{application . name}/ 

sysconfig  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Linux  □  □  □  confdir  □  □ 


D  D  D 

D 

D 

/etc  DDDDDDDDDDDDDDDDDDDD  sysconfig  □  □ 

D 

D 

D 

D  D 

D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD  resources  D  D  D  D 

D 

D 

D 

D  D 

D 

D  D  D 

D 

D 

□  □□□□□  Pkgutil  DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

PyPiD  □  □ 


D 

D 

D 

D 

D  DD  PyPl  □□□□□□□□□□□□□□  PEP  380  □□□□□□□□□□□□□ 

D  D 

D 

D 

D 

DDDDDDDDDDDDD  PyPiD  DDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDD 

D 

D 

D 

D 

□  □□□□□□  x.pypi.  python,  org  D  DDDDDDDDDDDDDDDDD  XQ  D 

a,b 

c 

,aa,ab,...  DDDDDDDDDDDDD  a.  pypi.  python,  org  D  DDDDDDDD 

Tarek  Ziade  277 


setup.cfg 
[files] 

resources  = 
config/mopy.cfg  {confdir}/{application.name} 
images/*.jpg  {data}/{application.name} 

installer 

^  

sysconfig 

sysconfig. cfg 


[paths] 
config  =  /etc/ 
data  =  /var 


D 14.5:  D  D  D  D  D  D  D 

D  D  D  D  D  D  bQ  D  D  D  D  D  CNAME  D  D  D  D last.pypi.python.org  D  DDDDDDDD 
DDDDDDDD  PyPi  DDDDDDDDDDDDD  CNAME  □□□□□□□□□□□□□ 
D  D  D 

DDDDDDDDDDDDDDDDDDDD  h.pypi.  python,  org  D  DDDDDDDDDD 
DDDDDDDD  PyPi  DDDDDDDD  (bD  D  h)  DDDDDDDDDD 

»>  import  socket 

»>  socket . gethostbyname_ex(' last • pypi . python . org' ) [0] 
'h.pypi. python. org' 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

DIPD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

rsync  □ 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD  PyPi  D  xml-rpc  D  D  D  changelog  DDDDDDDDDDD 


278    Python  Packaging 


D 14.6:  D  D  D  D  D  D 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDP 
DDDDDDDDDD  /simple/p/Q  D  D  /serversig/p  DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  ETag  DDDDDDDDDDDDD  if -None- Match  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  /last-modified  DDDDDDDD 
D  D  D 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D  PyPi  DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

□  □□□□□  PyPlD  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD 

Tarek  Ziade  279 


n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

□□□□□□ 

/^c\/  n  n  n  n  n 

し; iV  u  U  U  U  U 

n 
U 

n 
U 

n  n  n  n  d,  ,d  丁  nnnnnnnn   „  +  -  +  „ 
U  U  U  U     ド l UUUUUUUU  stats 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

u 

n 

u 

n 

u 

n  n 

u  u 

n 

u 

nnnnnnnn 
UUUUUUUU 

n 
U 

n 
U 

丄 oca 丄ー stats  UUUUUUUUUUU 

n  n 

u  u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D 

D 

D 

D  D 

D 

nnnnnnnn 
UUUUUUUU 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuu 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDD 

D 

D 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDD 

D 

D 

DDDDDDDDDDDD  stats  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDD 

D 

D 

DDDDDDDDDDD  /local-stats 

D  D 

D 

D 

D 

D 

D 

D 

n 

u 

n 

u 

n 

u 

n  n 

u  u 

n 

u 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDD 

D 

D 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDD 

D 

D 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D  D 

•DDDDDDDDDDDDDDD 
•DDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 


D  D 

D 

D  D  D  D 

D  D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

PGPD  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D  D  D 

D  D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D  D  D 

D  D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D  D  D 

D  D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDD  URL  /se「ve「key  □  DSA  DDDDDDDDDDDD  PEM  D  D  D  D  D 
D  D  D  openssl dsa  -pubout  4DDDDDDDDDDD  URL  DDDDDDDDDDDDD 
DDDDDDDDDD  PyPi  DDDDDDDDDDD  serverkey  □  □  PyPl  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD  /serversig/package DDDDDDDD 

□  □□□□□  URL /simple/package  Q  DSA  □  □  □  □  □  □  DERQ  DDDDDDDDD  SHA-1 
D  DSA5  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

1.  /simple  DDDDDDDDDDD  SHA-l  DDDDDDDDDD 

2.  DDDDDDD  DSA  DDDDDDDDDDD 

3.  D  D  D  D  /serversig  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


4 RFC  3280  SubjectPublicKeylnfo,  with  the  algorithm  1.3.14.3.2.12. 
5 RFC  3279  Dsa-Sig-Value,  created  by  algorithm  1.2.840.10040.4.3. 


280    Python  Packaging 


4.  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  MD5  □□□□□□□□ 

D  (/simple  D  D  DDDDD)DDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  /serversig 


D  D  D  D 

□  □□□□□ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

□□□□□□ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  https://pypi.  python. 

org/serverkey  D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD  SSL 

D  D  D  D 

□  □□□□□ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

14.5 

□  □  □  □ 

D 

D  D  D 

□  □□□□□ 

D 

D 

D 

D 

D 

DDDDDDDDD  Distutils2  D  D  D  D  D  setup.  Py  □  □ 

D  D  D  D 

□□□□□□ 

D 

D 

D 

D 

D 

DDDDDDDDD  setup.  cfgD  DDDDDDDDD  -ini 

D  D  D  D 

□  □□□□□ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

□□□□□□ 

D 

Python  D  DDDDDDDDDDDDDDDD  setup.  cfgD  D  D  D  D 

D  DD 

[metadata] 
name  =  MPTools 
version  =0.1 
author  =  Tarek  Ziade 
author-email = tarek@mozilla.com 

summary  =  Set  of  tools  to  build  Mozilla  Services  apps 
description-file  =  README 

home-page  =  http://bitbucket.org/tarek/pypi2rpm 

project - url : Repository,  http : //hg . mozilla . org/services/server-devtools 
classifier  =  Development  Status  : :  3  -  Alpha 

License  : :  OSI  Approved  : :  Mozilla  Public  License 1.1 (MPL  1.1) 

[files] 
packages  = 

mopytools 

mopytools. tests 

extra— files  = 

setup. py 
README 
build. py 
—build. py 

resources  = 

etc/mopy tools . cfg  {confdir}/mopy tools 

Distutils2  DDDDDDDDDDDDDDDDDDDDDD 

Tarek  Ziade  281 


•DDDDDDDDD  META-1.2Q  D  DDDDDDDD  D  DPyPiD  DDDDDDDDDD 

DDDDDDDD 
•DDDDDDDDDDDDDD  (sdist  □□)□□□□ 
•  Distutils2  DDDDDDDDDDDDDDDDDD 

Distutils2  D  D  version  DDDDDDDDDDD  version  DDDDDDDDDDDDDD 

INSTALL- DB  D  D  D  D  Python  3.3  □□□□□□□□□□□□□□□□□  pkgutil D  D  D  D  D 

DDDDDDDDDDDDDDD  Distutils2  DDDDDDDDDDDDDDDDDDDD 
DDDDDAPIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD 
D  D  D  D  API  D  D  D  D  D  Distutils2  DDDDDDDDDDDDDDDDDD 

•DDDDDDD /DDDDDDDDD 
•DDDDDDDDDDDDDDDDDDDDDDDDDDD 


14.6    □  □ 

PEPQ □  □  □ □  □ 

Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

PEPD  DDDDDDDDDDDDDDDDDDDDDDD 

□  □  □  PEP  □ 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD  Metadata D 

□□□□□□ 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D  D  Python  DDDDDDDDDDDDDDDDDDD 

□  □  □  PEP  □ 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

Distutils  口 

D 

D 

D 

setuptools  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD OS DDDDDDDD 
D  D  D  D  D  Python  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
D  D  setuptools  DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD  Setuptools  DDDDDDDDD  (DDDDDDDD)DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  PEPD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  PEP  DDDDDDDD 


282    Python  Packaging 


□□□□□□□□□□□□□□□□ 


DDDDDDDDDDDDDD  Guido  van  Rossum  DDDDDDDDDDDDDDDDDD 
D  D  Python  DD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D 

Distutils  DDDDDDDDDDDDDDDDDD  Distutils2  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  Python  D  DDDDDDDD  2Q  D  D  D  D  D  APIQ  D 
DDDDDDDDDDDDDDDDDDDDDDDDD  API  DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD 

Distutils  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  Distutils2  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  DistutilsB  D  D  D  D  D 
DDDDDDDDDDDDDD 


□  □  □  □  □ 

Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Python  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□(□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□)  口  Python  3D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  Distutils2  DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD 

D  D  D  D  install- db  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Distutils  D  PipD  Distribute  D  D  D  Setuptools  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  Distutils2  D  D  D  D  D  Distutils  DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Tarek  Ziade  283 


14.7  □□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDD  PEPD  DDDDDDDDDDDDDDD 

DDDDDDDD  http://python.orgQ  D  D  D 

•  PEP241:  Metadata  for  Python  Software  Packages 1 .0:  http://python.org/peps/pep  -  0214. 
html 

•  PEP  3 14:  Metadata  for  Python  Software  Packages  1.1:  http://python.org/peps/pep-0314. 
html 

•  PEP  345:  Metadata  for  Python  Software  Packages 1 .2:  http:y7python.org/peps/pep-0345. 
html 

•  PEP  ^76:  Database  of  Installed  Python  Distributions:  http://python.org/peps/pep  -  0376. 
html 

•  PEP  381:  Mirroring  infrastructure  for  PyPI:  http://python.org/peps/pep-0381 . html 

•  PEP  386:  Changing  the  version  comparison  module  in  Distutils:  http://python.org/peps/ 
pep - 0386. html 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  PEPD D 
DDDDDDDDDDDDDDmDDDDDDDDDDDDDDDDDDDDDDDDDD 

Alexis  Metaireau  口  Toshio  KuratomiQ  Holger  KrekelQ  Stefane  Fermigier  □□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 

•  Distutils:  http://docs.python.org/distutils 

•  Distutils2:  http://packages.python.org/Distutils2 

•  Distribute:  http://packages.python.org/distribute 

•  Setuptools:  http://pypi.python.org/pypi/setuptools 

•  Pip:  http://pypi.python.org/pypi/pip 

•  Virtualenv:  http://pypi.python.org/pypi/virtualenv 


284    Python  Packaging 


D 15 口 


RiakD  Erlang/OTP 

Francesco  Cesarini,  Andy  Gross,  and  Justin  Sheehy 

RiakQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Erlang/OTP  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Erlang □□□□□□□ 
DDDDDDDDDD  RiakD  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Erlang/OTP  Q  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□/□□□□ 

DDDDDDDDDDDDD  RiakD  DDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  Erlang  □□□□□□□□□□□□  (OTP  □□□□□□□□□□)□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□ 

□  □□□□□□□□□□□□  )□□□□□□□□  supervision  trees  □□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDD  Erlang  □□□□□□□□□□□□ 
1DDDDDDDDDD 

RiakD  □□□□□□□  Erlang  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Erlang/OTP  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD  which  is  started  D  DDDDDDDDDD 
DDDDDDDDDD  Erlang  D  DDDDDDDDDDDDD  DDDDD  Kernel  U  □□□□□□ 
D  D  StdLib  (Standard  Library)  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

SASL  (Systems  Architecture  Support  Library)  □□□□□□□□□□□□□  口  SASL  DDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  RiakD  D  D 
D  D  D  RiakQ  DDDDDDDDDDDDDDDDDDDDDDDDD  KemelU  StdLibU  SASL 
DDDDDDDDDDDDDDDDDDDDDDD  Riak DDDDDDDDDD  Erlang/OTP 


DDDDDDDDDDDDDDDDDDDDDDDDDDDD  riak  start □□□□□□□ 
DDDDDDDD  RiakD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  RiakD  DDDDDDDDDDDDD  OTPQ  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


15.1    Erlang  □□□□□□ 

Erlang  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 卿 DDDDDDDDDDDDDDDDDDDDDDDD  Erlang 


DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDD  Erlang  DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

-module (factorial) . 

-export([fac/1 ]) . 

o 

fac(N)  when  N>0  - > 

Prev  =  fac(N-l), 

N*Prev. 

DDDDDDDDDDD0DDDDDDDD2DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DD 

□  □□□  (DDDD)DDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDD  Erlang  □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D  D  non-defensive  programming           1 D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDD  factorial:fac(3)  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  (arity  DDDDD)DDDDDDDDDDDDDDDDDD  factorial □ 
D  D  D  D  D  export  DDDDDDDDDDDDDDDDDDDDDDD l D  facQ  D  D  fac/1 
DDDDDDDD 

Erlang  DDDD(DDDDDDDD)DDDDDDDDDDDDDDDDDD  {ok,37}D  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  -  「eco「d(state,  {id,  msg_list=[]}) .  □  □ 
DDDDDDDDDDDDDDDDDD  Va「  =  #state{id=i }D  DDDDDDDDDDDDD 
D  D  D  D  D  Var#state.idD  D  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
[23,34]  DDDDDDDDDDDDD  [X|Xs]  DDDDDDDDDD  XQ  D  D  D  D  XsQ  D  D 
□  □□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□)□□□□ 
DDDDDDDD  {ok,37}D  ok  DDDDDDDDDDDDDDDDDDDDDDDDDDD 


286    RiakD  Erlang/OTP 


DDDDDDDDDDDDDDDDDDDDDD  okQ  D  D  {error,  "Error  String"}D  D  D 

DDDDDDDD 

ErlangQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

□□□□□□□ 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

□□□□□□□ 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D  D  (VM)D  DDDDDDDDDDDlDD 

VMQ D  D  D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D  D 

D  D  D  RiakD  DDDDDDDDDDDDDDDD 

□□□□□□□ 

D 

D 

D 

D 

D  D 

D  D 

1 

D 

ID 

(口  □□□□□□□□□□□)□□□□□□□□□ 

□□□□□□□ 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDOSDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  (P 剛 D  D  D  DPIDD  DDDDDDDDDDDD 
DDDDDDDDDPIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDPIDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD  spawn  (Module,  Function,  Arguments)  □ 
D  D  D  D  D  (BIF)  D  D  D  D  BIF  D  D  VM  □□□□□□□□□□□□□□□□□  Erlang  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  spawn/3  BIF  D  □□□□□□ 
D  D  ModuleQ  FunctionQ  D  D  D  D  Arguments  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDPIDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□  IDD  Pid  □□□□□□□□□□□  Msg  D  D  D  D  D  Pid  !  Msg  DDDDDDDD 
D  pid  D  D  D  D  D  D  BIF  D  self  DDDDDDDDDDD  PIDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  {ok,  N}Q 
{error,  Reason} 口  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  receive  D  D  D  DD 

receive 

{ok,  N} -> 

N+1 ; 
{error,  _} - > 

0 

end 


D  D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  receive □  □  □  □ 

D 

D 

D 

D  D 

DDD 

D 

D 

D 

D 

D 

D 

□  □  D  D  D  D  D  {ok,  N} 口  Q  D  {error,  Reason} 口  D  D  D  D  D 

D 

D 

D 

D  D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

DDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

DDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  receive □□□□□□ 

Francesco  Cesarini,  Andy  Gross,  and  Justin  Sheehy  287 


DDDDDDDDDDDDD2DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  non-normal □□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  link(Pid)  BIF  D  D  D  D  D  sPawn_link(Module, 
Function,  Arguments)  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  exitd  DDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDD  exitq  DDDDDDDDDDDDD  process_flag(traP_exit, 
true)  BIFD  DDDDDDDDDDDDDD  exitq  DDDDDDDDDDDDDDDDDD 
D  D  D  EXITD  DDDDDDDDDDDDD  Erlang  D  DDDDDDDDDDDDD 

RiakD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  exitq  DDDDDDDDDDDDDDDD 
DDDDDD?DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  exit 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


15.2  □□□□□□□ 


D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

spawn  DDDDDDDDDDD 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDD/DDDDDD  receive- 

-evalutate  function  □  □  □  | 

コ 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D  :□  D  D  (stop)D  D  D  D  D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

DD 

- spawn  BIF  □□□□□□□□□□□□□□□□□□□ 


- D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

- D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

- D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDD 

- D 

D 

/D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

- D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

288    RiakQ  Erlang/OTP 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDD 

n  n  n 

u  u  u 

n  n 

n 

n 

n 

n 

D  Erlang  □□□□□□□□□□□□□□□□□[ 

D  D  D  D 

□  □□□□□ 

D  D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D  D  D 

□  □□□□□ 

D  D  D 

D  D 

D 

D 

D 

D 

D  OTP □□□□□□□□□□□□□ 

15.3 

OTPD  □ 

□  □ 

□ 

n  n  n  n  n  n 
U  U  U  U  U  U 

n  n  n 
U  U  U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

D  D  D  D 

□  □□□□□ 

D  D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D  D  D 

□  □□□□□ 

D  D  D 

D  /口 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D  D  D 

□  □□□□□ 

D  D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D  D  D 

□  □□□□□ 

D  D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D ID 

□□□□□□ 

D  D  D 

D 

OTPQ 

Erlang  □  □  □ 

D  D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDD OTPDDDDDDDDDDDDDDD  "behaviors" 
DDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  OTPQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D  D  D 

OTPD 

DDDDDDDDD  industrial-grade  □□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D  D  D 

DDDDDDDDDDDDDD 

□  □  □  □ 

OTPQ  D 

D  D  D 

D  D  Eriang/OTP  DDDDDDDDDD  stdlib  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D  D  D 

DDDDDDDDD 

OTPQ  D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDD 

(D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□ 

□  □□□□)□□□□□□□□□□□□□□□□□(□□□□□□□□□□□□)□□□□□□ 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  OTP  □□□□□ 
D  D  D  D  Erlang  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDD  RiakD  DDDDDDDDDDDDDDDDDD 


Francesco  Cesarini,  Andy  Gross,  and  Justin  Sheehy  289 


i  nak  core_  handoff_  manager 


□ 15.1:  OTP  Riak  Supervision  Tree 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  Eriang  DDDDDDDDDDDDDDDD  RiakD  DDDDDDDDDDDDDDDDDD 

OTP  DDDDDDDDDDDDDDD  Corba  ORB  □  SNMP  (Simple  Network  Management 


Protocol)  □□□□□□□□□□  OTP  □□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD  OTPQ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDD  Erlang/OTPQ  □□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

•DDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DD 

D 

D 

D 

D  D 

DDDDDDDDDDDDD 
•DDDDDDDDDDDDDDDDDDDDDD 


290    RiakD  Erlang/OTP 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  (□□□□□□□□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


- D 

D  D  D 

D 

DDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD 

- D 

D  D  D 

D 

DDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

- D 

D  D  D 

D 

DDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

□  □□□□□ /□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDD  gen.server DDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  「iak_co「e  DDDDDDDDD  riak_co「e_node_watche に erl DDDDDDDDDD 

DDDDDDDD  RiakD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

- module (riak— core— node— watcher) . 
-behavior (gen_server) . 
%%  API 

-export ([start_l ink/0 ,  service— up/2  ,  service— down/ 1 , node— up/0  ,  node_down/0 ,  services/0 , 

services/1 , nodes/1 ,avsn/0]) . 
%%  gen_server  callbacks 

-export([init/1 , handle_call/3 , handle— cast/2 , handle— info/2 , terminate/2 ,  code_change/3]) . 

-record(state,  {status=up,  services 二 口,  peers 二 口,  avsn=0,  bcast_tref , 
bcast_mod={gen_server ,  abcast}}) . 

DDDDDDDDDDDDDD  -behavior(gen_server)  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  state  □□□□□□□□□□□□□□□□□□□□□□ 


DDDDDD 

gen_serverO  DDDDDD  D spawn BIFQ  spawn_linkBIFO  DDDDDD  Dgen_server: start 
D  D  D  gen_server:start_linkD  D  D  D  D  D  spawn  D  start  D  DDDDDDDDDDDDD 

□  □□□□□□  spawn  D  D  D  D  start  DDDDDDDDDDDDDDDDDDD  PID  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  start  □□□□□□□□□□□□ 
D  D  : 


Francesco  Cesarini,  Andy  Gross,  and  Justin  Sheehy  291 


gen_server : start_link(ServerName ,  CallbackModule ,  Arguments,  Options) 
gen_server: start_link(CallbackModule,  Arguments,  Options) 


ServerNameQ  {local,  Name}D  D  D  {global,  Name}D  DDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDD  NameQ  DDDDDDDDDDDDD 

D  D  D  D  D  Erlang  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D  PIDDDDDDDDDDDDDDDDDDDDDDDD  sta  「し link/3  D  D  D  start/3 

D  D  D  D  CallbackModule  DDDDDDDDDDDDDDDDDDDDDDDDD  Arguments 
D  init/1  DDDDDDDDDDDDDDDD  Erlang  □□□□□□  Options  □□□□□□□ 
D  D  D  D  fullsweep.after  D  D  D  D  heapsize  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD 

D  D  D  D  D  D  ? module  D  D  D  D  D  start_link/4  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

start— linkO  - > 

gen_server : start_link({local , ? MODULE},  ? MODULE, [], []) . 

start—link  D  D  D  start  DDDDDDDDDDD  start—link  D  D  (DDDDDDDDDD 

□  )□□□□□□□□□□□  start  DDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  OTPQ  DDDDDDDDDDDDDDDDDDDDDDDD  start  D  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  start  D  D  D  start—link  DDDDDDDDD 

□  □  D  D  {ok,  Pid}Q  D  D  D 

start  ODD  sta 「し link  D  D  D  D  CallbackModule  ODD  init(Arguments)  D  D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDD  Arguments  □□□□□□  init  D  D  D  D  D 

D  D  LoopData  D  D  D  D  D  D  {ok,  LoopData}D  DDDDDDDDDDDDDDDD  LoopData 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  init  DDDDDDDDDDDDDDDDDDDDDDDD  LoopData 
DDDDDDDDDDDD  Riak  DDDDDDDDDD  LoopData  D  D  state  D  D  D  D  D  D  D 
DDDDDDDDD  schedule_broadcast/i  DDDDDDDDDDDDDDDDDDDDD 

□  □  □  □ : 

init([]) -> 

%%□□□□□□□/□□□□□□□□□□□□□ 
net— kernel :monitor_nodes( true) , 

%%  DDDDDDDDDDDDDDDDD  ets  DDDDDDDDD 
ets:new (? MODULE,  [protected,  named— table]) , 


292    RiakQ  Erlang/OTP 


{ok,  schedule— broadcast び stat } . 


sta  「し link/4  DDDDDDDDDDDDDDDDDDDDDDD  init/1  DDDDDDDD 


D  D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDD  Erlang □□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD  init □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
initD  D  DDDDDDDDDDDDDDDDDD 


DDDDDDDDDD 


D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  gen_se「ve「:  call/2  D  D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D  D  gen.server:  cast/2  Q  DDDDDDDD  RiakQ  DDDD  APIQ  2Q  D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  validating 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

service_up(Id,  Pid) - > 

gen_server : call(?MODULE ,  {service— up,  Id,  Pid}) . 


service_down(Id) - > 

gen— server : call(?MODULE,  {service— down ,  Id}) . 

gen.server  DDDDDDDDDDDDDDDD  handle_call/3  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  ?DDDDDD: 

handle_call({service_up,  Id,  Pid},  —From,  State) - > 

Services  =  ordsets: add_element(Id,  State#state . services) , 
S2  =  State#state  {  services  =  Services  }, 

mref  DDDDDDDD 
delete_service— mret  "d) , 

%%□□□□□□□□□  PidDDDDDDDDD 
Mref  =  erlang :monitor(process,  Pid) , 
erlang: put (Mref ,  Id) , 
erlang: put(Id,  Mref) , 

%%□□□□□  ETS  □□□□□□□□□□□□□□ 

Francesco  Cesarini,  Andy  Gross,  and  Justin  Sheehy  293 


S3  = local_update(S2), 
{reply,  ok,  update_avsn(S3)}; 

handle_call({service_down,  Id},  —From,  State) - > 
%%□□□□□□□□□□□□□□□□□□□□□□□ 
Services  =  ordsets: del_element(Id,  State#state . services) , 

52  =  State#state  {  services  =  Services  } , 

%%□□□□□□□□□□  mref  □□□□□□□□ 
delete— service— mref (Id) , 

%%□□□□□  ETS  □□□□□□□□□□□□□□ 

53  = local_update(S2) , 
{reply,  ok,  update_avsn(S3)}; 

Note  the  return  value  of  the  callback  function.  The  tuple  contains  the  control  atom  reply,  telling  the 
gen— server  generic  code  that  the  second  element  of  the  tuple  (which  in  both  of  these  cases  is  the 
atom  ok)  is  the  reply  sent  back  to  the  client.  The  third  element  of  the  tuple  is  the  new  State,  which, 
in  a  new  iteration  of  the  server,  is  passed  as  the  third  argument  to  the  handle_call/3  function;  in 
both  cases  here  it  is  updated  to  reflect  the  new  set  of  available  services.  The  argument  _From  is  a 
tuple  containing  a  unique  message  reference  and  the  client  process  identifier.  The  tuple  as  a  whole 
is  used  in  library  functions  that  we  will  not  be  discussing  in  this  chapter.  In  the  majority  of  cases, 
you  will  not  need  it. 

The  gen_serve「  library  module  has  a  number  of  mechanisms  and  safeguards  built  in  that  operate 
behind  the  scenes.  If  your  client  sends  a  synchronous  message  to  your  server  and  you  do  not  get 
a  response  within  five  seconds,  the  process  executing  the  call/2  function  is  terminated.  You  can 
override  this  by  using  gen_server: call(Name,  Message,  Timeout)  where  Timeout  is  a  value 
in  milliseconds  or  the  atom  infinity. 

The  timeout  mechanism  was  originally  put  in  place  for  deadlock  prevention  purposes,  ensuring 
that  servers  that  accidentally  call  each  other  are  terminated  after  the  default  timeout.  The  crash 
report  would  be  logged,  and  hopefully  would  result  in  the  error  being  debugged  and  fixed.  Most 
applications  will  function  appropriately  with  a  timeout  of  five  seconds,  but  under  very  heavy  loads, 
you  might  have  to  fine-tune  the  value  and  possibly  even  use  infinity;  this  choice  is  application- 
dependent.  All  of  the  critical  code  in  Erlang/OTP  uses  infinity.  Various  places  in  Riak  use 
different  values  for  the  timeout:  infinity  is  common  between  coupled  pieces  of  the  internals, 
while  Timeout  is  set  based  on  a  user-passed  parameter  in  cases  where  the  client  code  talking  to 
Riak  has  specified  that  an  operation  should  be  allowed  to  time  out. 

Other  safeguards  when  using  the  gen_server: call/2  function  include  the  case  of  sending  a 
message  to  a  nonexistent  server  and  the  case  of  a  server  crashing  before  sending  its  reply.  In  both 
cases,  the  calling  process  will  terminate.  In  raw  Erlang,  sending  a  message  that  is  never  pattern- 
matched  in  a  receive  clause  is  a  bug  that  can  cause  a  memory  leak.  Two  different  strategies  are 
used  in  Riak  to  mitigate  this,  both  of  which  involve  "catchall"  matching  clauses.  In  places  where 


294    RiakQ  Erlang/OTP 


the  message  might  be  user-initiated,  an  unmatched  message  might  be  silently  discarded.  In  places 
where  such  a  message  could  only  come  from  Riak's  internals,  it  represents  a  bug  and  so  will  be  used 
to  trigger  an  error- alerting  internal  crash  report,  restarting  the  worker  process  that  received  it. 

Sending  asynchronous  messages  works  in  a  similar  way.  Messages  are  sent  asynchronously  to 
the  generic  server  and  handled  in  the  handle_cast/2  callback  function.  The  function  has  to  return 
a  tuple  of  the  format  {  reply  ,  NewState}.  Asynchronous  calls  are  used  when  we  are  not  interested 
in  the  request  of  the  server  and  are  not  worried  about  producing  more  messages  than  the  server  can 
consume.  In  cases  where  we  are  not  interested  in  a  response  but  want  to  wait  until  the  message  has 
been  handled  before  sending  the  next  request,  we  would  use  a  gen_server :  call/2,  returning  the 
atom  ok  in  the  reply.  Picture  a  process  generating  database  entries  at  a  faster  rate  than  Riak  can 
consume.  By  using  asynchronous  calls,  we  risk  filling  up  the  process  mailbox  and  make  the  node 
run  out  of  memory.  Riak  uses  the  mess  age -serializing  properties  of  synchronous  gen— server  calls 
to  regulate  load,  processing  the  next  request  only  when  the  previous  one  has  been  handled.  This 
approach  eliminates  the  need  for  more  complex  throttling  code:  in  addition  to  enabling  concurrency, 
gen— server  processes  can  also  be  used  to  introduce  serialization  points. 

Stopping  the  Server 

How  do  you  stop  the  server?  In  your  handle_call/3  and  handle_cast/2  callback  functions,  in- 
stead of  returning  {reply,  Reply,  NewState}  or  {noreply ,  NewState},  you  can  return  {stop, 
Reason,  Reply,  NewState}  or  {stop,  Reason,  NewState},  respectively.  Something  has  to 
trigger  this  return  value,  often  a  stop  message  sent  to  the  server.  Upon  receiving  the  stop  tuple 
containing  the  Reason  and  State,  the  generic  code  executes  the  terminate(Reason ,  State)  call- 
back. 

The  terminate  function  is  the  natural  place  to  insert  the  code  needed  to  clean  up  the  State  of 
the  server  and  any  other  persistent  data  used  by  the  system.  In  our  example,  we  send  out  one  last 
message  to  our  peers  so  that  they  know  that  this  node  watcher  is  no  longer  up  and  watching.  In  this 
example,  the  variable  State  contains  a  record  with  the  fields  status  and  peers: 

terminate し Reason  ,  State) - > 

%%  Let  our  peers  know  that  we  are  shutting  down 
broadcast(State#state. peers,  State#state  {  status  =  down  }) . 

Use  of  the  behavior  callbacks  as  library  functions  and  invoking  them  from  other  parts  of  your  pro- 
gram is  an  extremely  bad  practice.  For  example,  you  should  never  call  riak_core_node_watcher : 
init(A「gs)  from  another  module  to  retrieve  the  initial  loop  data.  Such  retrievals  should  be  done 
through  a  synchronous  call  to  the  server.  Calls  to  behavior  callback  functions  should  originate  only 
from  the  behavior  library  modules  as  a  result  of  an  event  occurring  in  the  system,  and  never  directly 
by  the  user. 


Francesco  Cesarini,  Andy  Gross,  and  Justin  Sheehy  295 


15.4    Other  Worker  Behaviors 

A large  number  of  other  worker  behaviors  can  and  have  been  implemented  using  these  same  ideas. 

Finite  State  Machines 

Finite  state  machines  (FSMs),  implemented  in  the  gen_f  sm  behavior  module,  are  a  crucial  com- 
ponent when  implementing  protocol  stacks  in  telecom  systems  (the  problem  domain  Erlang  was 
originally  invented  for).  States  are  defined  as  callback  functions  named  after  the  state  that  return 
a  tuple  containing  the  next  State  and  the  updated  loop  data.  You  can  send  events  to  these  states 


standard  callback  functions  such  as  init,  terminate,  and  handle_info. 


Of  course,  finite  state  machines  are  not  telecom  specific.  In  Riak,  they  are  used  in  the  request 
handlers.  When  a  client  issues  a  request  such  as  get,  put,  or  delete,  the  process  listening  to  that 
request  will  spawn  a  process  implementing  the  corresponding  gen_f  sm  behavior.  For  instance,  the 
riak_kv_get_fsm  is  responsible  for  handling  a  get  request,  retrieving  data  and  sending  it  out  to  the 
client  process.  The  FSM  process  will  pass  through  various  states  as  it  determines  which  nodes  to 
ask  for  the  data,  as  it  sends  out  messages  to  those  nodes,  and  as  it  receives  data,  errors,  or  timeouts 
in  response. 

Event  Handlers 

Event  handlers  and  managers  are  another  behavior  implemented  in  the  gen— even  t library  module. 
The  idea  is  to  create  a  centralized  point  that  receives  events  of  a  specific  kind.  Events  can  be  sent 
synchronously  and  asynchronously  with  a  predefined  set  of  actions  being  applied  when  they  are 
received.  Possible  responses  to  events  include  logging  them  to  file,  sending  off  an  alarm  in  the  form 
of  an  SMS,  or  collecting  statistics.  Each  of  these  actions  is  defined  in  a  separate  callback  module 
with  its  own  loop  data,  preserved  between  calls.  Handlers  can  be  added,  removed,  or  updated  for 
every  specific  event  manager.  So,  in  practice,  for  every  event  manager  there  could  be  many  callback 
modules,  and  different  instances  of  these  callback  modules  could  exist  in  different  managers.  Event 
handlers  include  processes  receiving  alarms,  live  trace  data,  equipment  related  events  or  simple 
logs. 

One  of  the  uses  for  the  gen_event  behavior  in  Riak  is  for  managing  subscriptions  to  "ring  events", 
i.e.,  changes  to  the  membership  or  partition  assignment  of  a  Riak  cluster.  Processes  on  a  Riak 
node  can  register  a  function  in  an  instance  of  riak_core_ring_events,  which  implements  the 
gen 一 event  behavior.  Whenever  the  central  process  managing  the  ring  for  that  node  changes  the 
membership  record  for  the  overall  cluster,  it  fires  off  an  event  that  causes  each  of  those  callback 
modules  to  call  the  registered  function.  In  this  fashion,  it  is  easy  for  various  parts  of  Riak  to  respond 


296    RiakQ  Erlang/OTP 


to  changes  in  one  of  Riak's  most  central  data  structures  without  having  to  add  complexity  to  the 
central  management  of  that  structure. 

Most  common  concurrency  and  communication  patterns  are  handled  with  the  three  primary  be- 
haviors we've  just  discussed:  gen_server,  gen_fsm,  and  gen_event.  However,  in  large  systems, 
some  application- specific  patterns  emerge  over  time  that  warrant  the  creation  of  new  behaviors. 
Riak  includes  one  such  behavior,  riak_core_vnode,  which  formalizes  how  virtual  nodes  are  im- 
plemented. Virtual  nodes  are  the  primary  storage  abstraction  in  Riak,  exposing  a  uniform  interface 
for  key-value  storage  to  the  request-driving  FSMs.  The  interface  for  callback  modules  is  specified 
using  the  behavior_info/1  function,  as  follows: 

behavior_info(callbacks) -〉 
[{init,1}, 
■[handle— command ,  3}, 
{handoff .starting, 2}, 
■[handoft— cancelled , 1 } , 
{handoff_f inished, 2}, 
{handle_handof f_command, 3}, 
{handle_handoff_data,2}, 
{encode_handof f_item, 2}, 
{is_empty , 1 }, 
{terminate, 2}, 
{delete, 1}]; 

The  above  example  shows  the  behavior_info/1  function  from  riak_core_vnode.  The  list  of 
{CallbackFunction  ,  Arity}  tuples  defines  the  contract  that  callback  modules  must  follow.  Con- 
crete virtual  node  implementations  must  export  these  functions,  or  the  compiler  will  emit  a  warn- 
ing. Implementing  your  own  OTP  behaviors  is  relatively  straightforward.  Alongside  defining  your 
callback  functions,  using  the  p「oc_lib  and  sys  modules,  you  need  to  start  them  with  particular 
functions,  handle  system  messages  and  monitor  the  parent  in  case  it  terminates. 

15.5  Supervisors 

The  supervisor  behavior's  task  is  to  monitor  its  children  and,  based  on  some  preconfigured  rules, 
take  action  when  they  terminate.  Children  consist  of  both  supervisors  and  worker  processes.  This 
allows  the  Riak  codebase  to  focus  on  the  correct  case,  which  enables  the  supervisor  to  handle  soft- 
ware bugs,  corrupt  data  or  system  errors  in  a  consistent  way  across  the  whole  system.  In  the  Er- 
lang  world,  this  non-defensive  programming  approach  is  often  referred  to  the  "let  it  crash"  strategy. 
The  children  that  make  up  the  supervision  tree  can  include  both  supervisors  and  worker  processes. 
Worker  processes  are  OTP  behaviors  including  the  gen_f  sm,  gen_server,  and  gen_event.  The 
Riak  team,  not  having  to  handle  borderline  error  cases,  get  to  work  with  a  smaller  code  base.  This 
code  base,  because  of  its  use  of  behaviors,  is  smaller  to  start  off  with,  as  it  only  deals  with  specific 
code.  Riak  has  a  top-level  supervisor  like  most  Erlang  applications,  and  also  has  sub -supervisors 


Francesco  Cesarini,  Andy  Gross,  and  Justin  Sheehy  297 


for  groups  of  processes  with  related  responsibilities.  Examples  include  Riak's  virtual  nodes,  TCP 
socket  listeners,  and  query-response  managers. 

Supervisor  Callback  Functions 

To  demonstrate  how  the  supervisor  behavior  is  implemented,  we  will  use  the  「iak— core_sup .  e「l 
module.  The  Riak  core  supervisor  is  the  top  level  supervisor  of  the  Riak  core  application.  It  starts 
a  set  of  static  workers  and  supervisors,  together  with  a  dynamic  number  of  workers  handling  the 
HTTP  and  HTTPS  bindings  of  the  node's  RESTful  API  defined  in  application  specific  configu- 
ration files.  In  a  similar  way  to  gen_se「ve「s,  all  supervisor  callback  modules  must  include  the 
- behavior(superviso「)  .  directive.  They  are  started  using  the  start  or  start_link  functions 
which  take  the  optional  ServerName,  the  CallBackModule,  and  an  Argument  which  is  passed  to 
the  init/1  callback  function. 

Looking  at  the  first  few  lines  of  code  in  the  riak— core_sup.  erl module,  alongside  the  behavior 
directive  and  a  macro  we  will  describe  later,  we  notice  the  start_link/3  function: 

-module (riak_core_sup) . 
-behavior (supervisor) . 
%%  API 

-export ([start_l ink/0]) . 
%%  Supervisor  callbacks 
-export([init/1 ]) . 

-define(CHILD(I,  Type) ,  {I,  {I,  start— link,  []},  permanent,  5000,  Type,  [I]}), 
start— linkO - > 

supervisor :start_link({local, ? MODULE},  ? MODULE, []) . 

Starting  a  supervisor  will  result  in  a  new  process  being  spawned,  and  the  init/1  callback  function 
being  called  in  the  callback  module  riak_core_sup.  erl.  The  ServerName  is  a  tuple  of  the  format 
{local , Name}  or  {global , Name},  where  Name  is  the  supervisor's  registered  name.  In  our  ex- 
ample, both  the  registered  name  and  the  callback  module  are  the  atom  「iak_co「e_sup,  originating 
form  the  ? MODULE  macro.  We  pass  the  empty  list  as  an  argument  to  init/1,  treating  it  as  a  null 
value.  The  init  function  is  the  only  supervisor  callback  function.  It  has  to  return  a  tuple  with 
format: 

{ok,    {SupervisorSpecif ication,  ChildSpecif icationList}} 

where  SupervisorSpecif ication  is  a  3 -tuple  {RestartStrategy ,  AllowedRestarts, 
MaxSeconds}  containing  information  on  how  to  handle  process  crashes  and  restarts.  Restart- 
Strategy  is  one  of  three  configuration  parameters  determining  how  the  behavior's  siblings  are 
affected  upon  abnormal  termination: 

•  one_f  or_one:  other  processes  in  the  supervision  tree  are  not  affected. 


298    RiakQ  Erlang/OTP 


•  rest_for_one:  processes  started  after  the  terminating  process  are  terminated  and  restarted. 

•  one— for— all:  all  processes  are  terminated  and  restarted. 

AllowedRestarts  states  how  many  times  any  of  the  supervisor  children  may  terminate  in  MaxSeconds 
before  the  supervisor  terminates  itself  (and  its  children).  When  ones  terminates,  it  sends  an  EXIT 
signal  to  its  supervisor  which,  based  on  its  restart  strategy,  handles  the  termination  accordingly.  The 
supervisor  terminating  after  reaching  the  maximum  allowed  restarts  ensures  that  cyclic  restarts  and 
other  issues  that  cannot  be  resolved  at  this  level  are  escalated.  Chances  are  that  the  issue  is  in  a 
process  located  in  a  different  sub -tree,  allowing  the  supervisor  receiving  the  escalation  to  terminate 
the  affected  sub-tree  and  restart  it. 

Examining  the  last  line  of  the  init/1  callback  function  in  the  「iak_core_sup.erl  module, 
we  notice  that  this  particular  supervisor  has  a  one-for-one  strategy,  meaning  that  the  processes  are 
independent  of  each  other.  The  supervisor  will  allow  a  maximum  of  ten  restarts  before  restarting 
itself. 

ChildSpecif  icationList  specifies  which  children  the  supervisor  has  to  start  and  monitor,  to- 
gether with  information  on  how  to  terminate  and  restart  them.  It  consists  of  a list  of  tuples  of  the 
following  format: 

{Id,  {Module,  Function,  Arguments},  Restart,  Shutdown,  Type,  ModuleList} 

Id  is  a  unique  identifier  for  that  particular  supervisor.  Module,  Function,  and  Arguments  is  an 
exported  function  which  results  in  the  behavior  start_link  function  being  called,  returning  the 
tuple  of  the  format  {ok,  Pid}.  The  Restart  strategy  dictates  what  happens  depending  on  the 
termination  type  of  the  process,  which  can  be: 

•  transient  processes,  which  are  never  restarted; 

•  temporary  processes,  are  restarted  only  if  they  terminate  abnormally;  and 

•  permanent  processes,  which  are  always  restarted,  regardless  of  the  termination  being  normal 
or  abnormal. 

Shutdown  is  a  value  in  milliseconds  referring  to  the  time  the  behavior  is  allowed  to  execute  in  the 
"terminate  function  when  terminating  as  the  result  of  a  restart  or  shutdown.  The  atom  infinity 
can  also  be  used,  but  for  behaviors  other  than  supervisors,  it  is  highly  discouraged.  Type  is  either 
the  atom  worker,  referring  to  the  generic  servers,  event  handlers  and  finite  state  machines,  or  the 
atom  supervisor.  Together  with  ModuleList,  a list  of  modules  implementing  the  behavior,  they 
are  used  to  control  and  suspend  processes  during  the  runtime  software  upgrade  procedures.  Only 


in  a  supervision  tree. 

With  this  knowledge  at  hand,  we  should  now  be  able  to  formulate  a  restart  strategy  defining  inter- 
process dependencies,  fault  tolerance  thresholds  and  escalation  procedures  based  on  a  common 


Francesco  Cesarini,  Andy  Gross,  and  Justin  Sheehy  299 


architecture.  We  should  also  be  able  to  understand  what  is  going  on  in  the  init/1  example  of  the 
riak_core_sup .  erl module.  First  of  all,  study  the  CHILD  macro.  It  creates  the  child  specification 
for  one  child,  using  the  callback  module  name  as  Id,  making  it  permanent  and  giving  it  a  shut  down 
time  of  5  seconds.  Different  child  types  can  be  workers  or  supervisors.  Have  a look  at  the  example, 
and  see  what  you  can  make  out  of  it: 

-define(CHILD(I,  Type) ,  {I,  {I,  start— link,  []},  permanent,  5000,  Type,  [I]}). 


init([]) - > 
RiakWebs 


case  lists: flatten (riak_core_web: bindings (http) , 

riak_core_web: bindings(https))  of 

[] -〉 

%%  check  for  old  settings,  in  case  app.conf ig 
%%  was  not  updated 
riak_core_web:old_binding() ; 
Binding - > 
Binding 

end, 


Children  = 

[? CHILD(riak_core_vnode_sup,  supervisor) , 

? CHILD(riak_core_handoff_manager,  worker) , 

? CHILD(riak— core— handoff— listener ,  worker) , 

? CHILD (riak— core— ring— events,  worker) , 

? CHILD(riak_core_ring_manager,  worker) , 

? CHILD(riak_core_node_watcher_events,  worker) , 

? CHILD(riak_core_node_watcher,  worker) , 

? CHILD(riak_core_gossip,  worker)  | 

RiakWebs 
], 

{ok,  "one— for— one , 10, 10},  Children}}. 

Most  of  the  Children  started  by  this  supervisor  are  statically  defined  workers  (or  in  the  case  of 
the  vnode_sup,  a  supervisor).  The  exception  is  the  RiakWebs  portion,  which  is  dynamically  defined 
depending  on  the  HTTP  portion  of  Riak's  configuration  file. 

With  the  exception  of  library  applications,  every  OTP  application,  including  those  in  Riak,  will 
have  their  own  supervision  tree.  In  Riak,  various  top-level  applications  are  running  in  the  Erlang 
node,  such  as  「iak_co「e  for  distributed  systems  algorithms,  riak_kv  for  key/value  storage  seman- 
tics, webmachine  for  HTTP,  and  more.  We  have  shown  the  expanded  tree  under  riak_core  to 
demonstrate  the  multi-level  supervision  going  on.  One  of  the  many  benefits  of  this  structure  is  that 
a  given  subsystem  can  be  crashed  (due  to  bug,  environmental  problem,  or  intentional  action)  and 
only  that  subtree  will  in  a  first  instance  be  terminated. 

practice  we  have  seen  this  work  well  for  Riak.  A  user  might  figure  out  how  to  crash  a  virtual 
node,  but  it  will  just  be  restarted  by  「iak_core_vnode_sup.  If  they  manage  to  crash  that,  the 
riak_co「e  supervisor  will  restart  it,  propagating  the  termination  to  the  top-level  supervisor.  This 


300    RiakQ  Erlang/OTP 


failure  isolation  and  recovery  mechanism  allows  Riak  (and  Erlang)  developers  to  straightforwardly 
build  resilient  systems. 


The  value  of  the  supervisory  model  was  shown  when  one  large  industrial  user  created  a  very 


This  environment  created  random  huge  bursts  of  both  traffic  and  failure  conditions.  They  were 
confused  when  Riak  simply  wouldn't  stop  running,  even  under  the  worst  such  arrangement.  Under 
the  covers,  of  course,  they  were  able  to  make  individual  processes  or  subsystems  crash  in  multiple 
ways ― but  the  supervisors  would  clean  up  and  restart  things  to  put  the  whole  system  back  into 
working  order  every  time. 


Applications 

The  application  behavior  we  previously  introduced  is  used  to  package  Erlang  modules  and 
resources  into  reusable  components.  In  OTP,  there  are  two  kinds  of  applications.  The  most  common 
form,  called  normal  applications,  will  start  a  supervision  tree  and  all  of  the  relevant  static  workers. 
Library  applications  such  as  the  Standard  Library,  which  come  as  part  of  the  Erlang  distribution, 
contain  library  modules  but  do  not  start  a  supervision  tree.  This  is  not  to  say  that  the  code  may  not 
contain  processes  or  supervision  trees.  It  just  means  they  are  started  as  part  of  a  supervision  tree 
belonging  to  another  application. 

An  Erlang  system  will  consist  of  a  set  of  loosely  coupled  applications.  Some  are  written  by  the 
developers,  some  are  available  as  open  source,  and  others  are  be  part  of  the  Erlang/OTP  distribution. 
The  Erlang  runtime  system  and  its  tools  treat  all  applications  equally,  regardless  of  whether  they  are 
part  of  the  Erlang  distribution  or  not. 

15.6    Replication  and  Communication  in  Riak 

Riak  was  designed  for  extreme  reliability  and  availability  at  a  massive  scale,  and  was  inspired  by 
Amazon's  Dynamo  storage  system  [DHJ+07].  Dynamo  and  Riak's  architectures  combine  aspects  of 
both  Distributed  Hash  Tables  (DHTs)  and  traditional  databases.  Two  key  techniques  that  both  Riak 
and  Dynamo  use  are  consistent  hashing  for  replica  placement  and  a  gossip  protocol  for  sharing 
common  state. 

Consistent  hashing  requires  that  all  nodes  in  the  system  know  about  each  other,  and  know  what 
partitions  each  node  owns.  This  assignment  data  could  be  maintained  in  a  centrally  managed  con- 
figuration file,  but  in  large  configurations,  this  becomes  extremely  difficult.  Another  alternative  is 
to  use  a  central  configuration  server,  but  this  introduces  a  single  point  of  failure  in  the  system.  In- 
stead, Riak  uses  a  gossip  protocol  to  propagate  cluster  membership  and  partition  ownership  data 
throughout  the  system. 


Francesco  Cesarini,  Andy  Gross,  and  Justin  Sheehy  301 


Gossip  protocols,  also  called  epidemic  protocols,  work  exactly  as  they  sound.  When  a  node  in  the 
system  wishes  to  change  a  piece  of  shared  data,  it  makes  the  change  to  its  local  copy  of  the  data  and 
gossips  the  updated  data  to  a  random  peer.  Upon  receiving  an  update,  a  node  merges  the  received 
changes  with  its  local  state  and  gossips  again  to  another  random  peer. 

When  a  Riak  cluster  is  started,  all  nodes  must  be  configured  with  the  same  partition  count.  The 
consistent  hashing  ring  is  then  divided  by  the  partition  count  and  each  interval  is  stored  locally  as 
a  {HashRange ,  Owner}  pair.  The  first  node  in  a  cluster  simply  claims  all  the  partitions.  When  a 
new  node  joins  the  cluster,  it  contacts  an  existing  node  for  its  list  of  {HashRange,  Owner}  pairs. 
It  then  claims  (partition  count)/(number  of  nodes)  pairs,  updating  its  local  state  to  reflect  its  new 
ownership.  The  updated  ownership  information  is  then  gossiped  to  a  peer.  This  updated  state  then 
spread  throughout  the  entire  cluster  using  the  above  algorithm. 

By  using  a  gossip  protocol,  Riak  avoids  introducing  a  single  point  of  failure  in  the  form  of  a 
centralized  configuration  server,  relieving  system  operators  from  having  to  maintain  critical  cluster 
configuration  data.  Any  node  can  then  use  the  gossiped  partition  assignment  data  in  the  system 
to  route  requests.  When  used  together,  the  gossip  protocol  and  consistent  hashing  enable  Riak 
to  function  as  a  truly  decentralized  system,  which  has  important  consequences  for  deploying  and 
operating  large-scale  systems. 

15.7    Conclusions  and  Lessons  Learned 

Most  programmers  believe  that  smaller  and  simpler  codebases  are  not  only  easier  to  maintain, 
they  often  have  fewer  bugs.  By  using  Erlang's  basic  distribution  primitives  for  communication  in  a 
cluster,  Riak  can  start  out  with  a  fundamentally  sound  asynchronous  messaging  layer  and  build  its 
own  protocols  without  having  to  worry  about  that  underlying  implementation.  As  Riak  grew  into 
a  mature  system,  some  aspects  of  its  networked  communication  moved  away  from  use  of  Erlang's 
built-in  distribution  (and  toward  direct  manipulation  of  TCP  sockets)  while  others  remained  a  good 
fit  for  the  included  primitives.  By  starting  out  with  Erlang's  native  message  passing  for  everything, 
the  Riak  team  was  able  to  build  out  the  whole  system  very  quickly.  These  primitives  are  clean  and 
clear  enough  that  it  was  still  easy  later  to  replace  the  few  places  where  they  turned  out  to  not  be  the 
best  fit  in  production. 

Also,  due  to  the  nature  of  Erlang  messaging  and  the  lightweight  core  of  the  Erlang  VM,  a  user  can 
just  as  easily  run 12  nodes  on 1 machine  or 12  nodes  on 12  machines.  This  makes  development  and 
testing  much  easier  when  compared  to  more  heavyweight  messaging  and  clustering  mechanisms. 
This  has  been  especially  valuable  due  to  Riak's  fundamentally  distributed  nature.  Historically,  most 
distributed  systems  are  very  difficult  to  operate  in  a  "development  mode"  on  a  single  developer's 
laptop.  As  a  result,  developers  often  end  up  testing  their  code  in  an  environment  that  is  a  subset  of 
their  full  system,  with  very  different  behavior.  Since  a  many-node  Riak  cluster  can  be  trivially  run 


302    RiakQ  Erlang/OTP 


on  a  single  laptop  without  excessive  resource  consumption  or  tricky  configuration,  the  development 
process  can  more  easily  produce  code  that  is  ready  for  production  deployment. 

The  use  of  Erlang/OTP  supervisors  makes  Riak  much  more  resilient  in  the  face  of  subcomponent 
crashes.  Riak  takes  this  further;  inspired  by  such  behaviors,  a  Riak  cluster  is  also  able  to  easily 
keep  functioning  even  when  whole  nodes  crash  and  disappear  from  the  system.  This  can  lead  to 
a  sometimes-surprising  level  of  resilience.  One  example  of  this  was  when  a large  enterprise  was 
stress-testing  various  databases  and  intentionally  crashing  them  to  observe  their  edge  conditions. 
When  they  got  to  Riak,  they  became  confused.  Each  time  they  would  find  a  way  (through  OS- 
level  manipulation,  bad  IPC,  etc)  to  crash  a  subsystem  of  Riak,  they  would  see  a  very  brief  dip  in 
performance  and  then  the  system  returned  to  normal  behavior.  This  is  a  direct  result  of  a  thoughtful 
"let  it  crash"  approach.  Riak  was  cleanly  restarting  each  of  these  subsystems  on  demand,  and  the 
overall  system  simply  continued  to  function.  That  experience  shows  exactly  the  sort  of  resilience 
enabled  by  Erlang/OTP' s  approach  to  building  programs. 

Acknowledgments 

This  chapter  is  based  on  Francesco  Cesarini  and  Simon  Thompson's  2009  lecture  notes  from  the 
central  European  Functional  Programming  School  held  in  Budapest  and  Komarno.  Major  contri- 
butions were  made  by  Simon  Thompson  of  the  University  of  Kent  in  Canterbury,  UK.  A  special 
thank  you  goes  to  all  of  the  reviewers,  who  at  different  stages  in  the  writing  of  this  chapter  provided 
valuable  feedback. 


303 


D 16 口 


Selenium  WebDriver 

Simon  Stewart 


Selenium  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

DDDDDDDD 

Selenium  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Selenium  D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD  Selenium  IDE  Q  Firefox  口 

D 

D 

D 

D 

D 

D  D 

□  □□□□□□□□□□□□□□□□□□□□□ /□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

Selenium  WebDriver  D  DDDDDDDDDDD  API  □  DDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  Selenium  Grid  DDDDDDDDD  Selenium  API  DDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD  Selenium  D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDD  "IDE"  口  "WebDriver"  □  □  □  "Grid"  DDDDDDDD 

D 

D 

D 

D 

D 

D  D 

Selenium  WebDriver  □□□□□□□□□□□□ 

□  □□□□□  Selenium  2.0  D  DDDDDDDDDDDD  2010  D  D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

□  □□□□□  2010  D  DDDDDDDDDDDDDDDDDD      D  D  D  D 

!□ 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDD!D  DDDDDDDDDDDDDDDDDDDDDD? 


16.1 □  □ 

DDDDDDDDDDD  Selenium  □□□□□□□□□□□□□□  2004  □□□□□□□□ 
D  D  D  ThoughtWorks  □□□□□□□□□  (T&E:  Time  and  Expenses)  □□□□□□□□□□ 
□  □□□□□  Javascript  DDDDDDDDDDDDDD  Internet  Explorer  DDDDDDDDD 
DDDDDDDDD  ThoughtWorks  □□□□□□□□□□□□□□□□□□  (□□  Mozilla  □ 
□□□□□)『&£□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


nnnnnnnnnnnnnnnnnnnnnnnnnnnn  (nnnn  tf ?、 n 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUIUUUU 化 J  U 

n 

u 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnn  ^HttnT  Tnit  nn^nnnnnnnnnnnnn 
UUUUUUUUUUUUUUU  IHttpumt  UU 川 UUUUUUUUUUUU 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUU 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD  Javascript □□□□□□□□ 

D 

D 

D  D 

D 

D 

DDDDDDDDDDD  Javascript  D  DDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D  FIT1  DDDDDDDDD  Javascript  □□□□□□□□□□□□□□□□□□ 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDD  HTMLQ  DDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDD  "Selenium"  DDDDDDDDDDD  "Selenium  Core" 

D 

DDDDDDDDD  Apache  2D  D  D  D  D  D  2004  DDDDDDDD 

Selenium  □□□□□□□  FIT  □  ActionFixture  □□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  IDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  "Selenium  WebDriver" 

DDDDDDDD  name  Q  "q"  □□□□□□□□□□□□□ 
type  name=q  Selenium  WebDriver 

Selenium  □  Javascript  DDDDDDDDDDDDDDDDDDD  Core  DDDDDDDD 

DDDDDDDDDDDD  (AUT) □□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□  Javascript  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  IDEQ  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD HTMLD  DDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD2 

'http://fit.c2.com 

2DDDFiTDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDnnDDDDDDDD 
http://jamesshore.com/Blog/The-Problems-With-Acceptance-Testing.html  □□□□□□□ 口 


306    Selenium  WebDriver 


□  □□□□□□□□□□□□□□□□□□□  HTTP  □□□□□□□□□□□□□□□□□ 
D  D  D  HTTP  □□□□□□  Selenium  □□□□□□□□□□□□□□□□□□□□□□□□  口 
"口  □□□□□□□□  Javascript 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Selenium  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

URLQ  HTTPQ  DDDDDDDDDDDDDDDDDDDDDDDD  Selenium  Core  D  D  D 
口  □□□□□□□□□□□□□□□□□□□□□□□□□□□  "Selenese"  □□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  D  "Selenium  Remote  Control" □  □  □  □  "Selenium  RC"  □□□□□□□□□□□□ 
Selenium  □□□□□□□□□□□□□□□□□□□□□□□□□□□  ThoughtWorks  □  □ 

DDDDDDDDD  WebDriver  □□□□□□□□□  2007  □□□□□□□□□□  WebDriver 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  Adapter  D  DDDDDDDD  WebDriver  D  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  HtmlUnitD  □□□□□□□□□□□□□□  口 

Internet  Explorer  □  Firefox  □□□□□□□□□□□□□□□ 

WebDriver  D  DDDDDDDD  WebDriver  D  Selenium  RC  □□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDD  APIQ  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Selenium  RC  □□□□□□ 

□  API  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  WebDriver  □  □  □  □ 


D  D  D 

D 

D 

D 

D 

D 

API  □□□□□□□□□□□□□□□□□  WebDriver  □□□□□□□ 

D 

Java  口 

D 

D 

D 

D 

D 

D 

D 

D  D  Selenium  RC  DDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

Selenium  Core  (RCDDDDDDDDDD)DDDDD  Javascript  □ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD  WebDriver  □ 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

2009  D 

D  D  Selenium  WebDriver  DDDDDDDDD  WebDriver  □□□□□□□□□□□□  Java  D 
C#D  Python 口  D  D  D  Ruby  D  D  D  D  D  D  D  Chrome  □  FirefoxQ  Internet  ExplorerQ  OperaQ  D  D 
D  Android  Q  iPhone  DDDDDDDDDDDDD  Selenium  WebDriver  DDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


□  _u 

□ 

□ 


y 

e 

B 

k 

c 

a 

B 


□ 

In 

e 

p 

□ 


b 

ま 

□ 


□ 

s 

s 

e 

d 

a 

e 

h 

□ 


□ 

□ 


□ 

□ 


□ 

V 

r 

D 

b 

ま 

□ 


□ 

□ 


Simon  Stewart  307 


16.2  □□□□□□□□□□□□ 


□  □□□□□  Selenium  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD 

•  Selenium  Core  □  □  □  □  Selenium  □□□□□□□□□□□□□□□□□□□□□□□□ 
D  D  D  D  Javascript  DDDDDDDD  "Selenium"  DDDDDDDDDDDD  "Core"  Q 

DDDDDDDDDD 

•  Selenium  RC  Q  Q  Selenium  Core  □□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D  D  D  "Selenium"  DDDDDDDDDDD  "RC"  DDDDDDDDDDDDDD 

Selenium  WebDriverQ  □□□□□□□□□  RCQ  API  D  "Selenium 1.x  API"  □  □  □  □  □  □ 

•  Selenium  WebDriver  □□□□□  RCDDDDDDDDDDDDDDDDDDDDDDD 

1.x  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  "WebDriver"  □ 
DDDDDDDDDD  Selenium  2D  DDDDDDDDDDDDDDDDDDDDDD 
"Selenium"  DDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDD  "Selenium"  □□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDD  SeleniumQ  DDDDDDDDDDD 
DDDDDDDDDDDDD 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□"□□□□"□□DO 
D  D  D  D  WebDriver  API  DDDDDDDDDDDDDDDDDDDDDD  Firefox  □  □  □  □  □ 

Internet  Explorer  □□□□□□□□□□□□□□□ 


16.3  □□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDD 

•DDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDD-.. 

•■■■D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDDD 

•  Javascript  DDDDDDDDD 

•DDDDDDDDDDDD  RPC  D  D  D  D 

•DDDDDDDDDDDDDDDDDDDDD 


308    Selenium  WebDriver 


□□□□□□□ 


OOD DDDDDDDDD ■■□ DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  Javascript  D  DDDDDDDDDDDDDDDDDDDDDDDDDDD 


□□□□□□□□□□□□□ 

WebDriverD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Javascript  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□"□□□□□□"□□□□□□□□DO 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □『□□□□□□□□□□□□□□ 

WebDriver  DDDDDDDDD  Javascript  □□□□  OS  □□□□□□□□□□□□□□□□ 


D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □"□□□□□□□□『□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□  OS  □□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD  WebDriver  DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  (Selenium  □□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□□□□□□□□□□□□)□□□□□□□□□□□□□ 

D 

DD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  Linux  □  Windows  D  D  D  D  Mac 

OSXDDDDDDD 

WebDriver  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDRCDDDDDDDRCD 
DDDDAPIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DnDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  D  Selenium 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□"□□□□□□□□□□□□,'□□□□□□□□□□□ 


Simon  Stewart  309 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

n  "n  nnnnnn"nnnnnnnnnnnnnnnnnnnn 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

nnnnnnnnnnnnnnnnnnnnnnnn         n  n  n 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

U ハ u  u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn  「 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUL 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n 

u  u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n  n  n  n 

u  u  u  u 

n  n  n  n 

u  u  u  u 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D  D  D  D  HTML5  DDDDDDDDDDDDDDD  HTML5  □  □ 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
500  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 


□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


□□□□□□□□ 


DDDDDDDDDDDDD             (bus  factor)"  D  DDDDDDDDD  (口 

D 

D 

D 

D 

D 

□  □□□  )□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

DDD(DDDDDDDDDD)DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDD 

Javascript  □□□□□□□□ 

WebDriver  □□□□□□□□□□□□□□□□□□□□□  Javascript  □  □  □  □  □ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  APIQ  Javascript  DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD  HTML5  □□□□□□  LocalStorage  D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  API □□□□□□  API □□□□□□□□□□□□ 
D  D  D  SQLite  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  (JDBC □□□)□□□□□□□□□□□□□□□□□□□□□□ 


310    Selenium  WebDriver 


□  □□  API  □□□□□□  Javascript  □□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDD  API □□□□□□□  Javascript □□□□□□□□□□□□□□□□□ 


□  □□□□□□□□□□□  RPCD  D  D 

WebDriverD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  D  D  APID  DDDDDDDDDDD  RPCD  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  (□□□□□  OS  D  D localhost  □  □  □  □ 

□  □□□□□□□□□□□  )□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□  APID  D  D  D  D  APID  DDDDDDDDDDDDD 

D  D  D  D  D  DAPIQ  DDDDDDDDDDDDDDDDDDDDDDD  APIQ  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDAPIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □CSS  □□□□□□□□□□□□  (□□□□□□□□□□□□□)□□□□□□□□□□□ 


D  D  D 

DDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDD 

D  D  D  APID  D  D  D  D  D  D  D  DD 

D  D  D 

DDDDDDDDDDD 

D 

D 

D 

D 

□  D  WebDriver  □ 

DDDDDDD DDDDDDDD 

D  D  D 

isDisplayedQ  D  D  □  口 

D 

□  D  : 

□  □□□□□□□□ 

D  D 

DDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  Selenium  □ 

DDDDDDDDDDDDDDD 

D  D  D 

DDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDD 

D  D  D 

DDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDD 

D  D  D 

DDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDD 

D  D  D 

DDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDD 

D  D 

D  D 

DDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDD 

D  D  D 

DDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDD 

DDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDD  Java  D  C#DDDDDDDDDDDDDDDDDD  Rubyist  □  Pythonista  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Python  D  Ruby  DDDDDDDDDDDDDDD  (DDDDDDDDDDDDD)DDDDD 
DDDDDDDDDDDDDDDDDDDDDD  2010  10D  D  D  n  DDDDDDDD 
DDDDDDDDDDD  Ruby  □  Python  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  RubyD  Python  D  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD 

Simon  Stewart   31 1 


16.4  □□□□□□□ 


□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  api  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAPI 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAPI 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□  API  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

WebDriverD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
APID  DDDDDDDDDDDDDDDDD  APIQ  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  Selenium  API  D  DDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  input  D  DDDDDDDDDDDDDDDDD 

•  type 

•  typeKeys 

•  typeKeysNative 

•  keydown 

•  keypress 

•  keyup 

•  keydownNative 

•  keypressNative 

•  keyupNative 

•  attachFile 


DDDDDDDDDDDD  WebDriverD  API  D  D  D  D  D  D 

•  sendKeys 

DDDDDDDDDD  RCD  WebDriverD  DDDDDDDDDDDDDDDDDDD  Web- 
DriverD □  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  RCDDDDD  API 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □  D  D  D  D  D  typeKeys  D  typeKeysNative  DDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  AWT D  Robot DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
AWT D  Robot DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  WebDriver  □□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD 


312    Selenium  WebDriver 


WebDriver  ODD 


DDDDDDDD  WebDriver  D  API  D  "DDDDDDDDD"DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  HTMLD  DDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  WebElement  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDlDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCDDDDJava 

□□□)□□□□□□□□□□□ 

WebDriver  driver  =  new  FirefoxDriver() ; 
driver. <Q  DDDDDDDDDDD> 

DDDDDDDDDDDDDDDDDD13DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD 

driver.  findElement(<D  □□□□□□□□□□□>) 

DDDDDIDEDDDDDDDDDDDDDDDDDDDDDDDDDDD  "By"  D  D  D  D 
"By"  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  By  口口 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD 

driver. findElement (By . id("some_id")) ; 

UnsupportedOperationExceptions  DDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  API  DDDDDDDDDDDDDDDDDDDDDDDDD 

WebDriver  D  DDDDDDDDDDDDDDDDDDDDDDDDDD  JavascriptExecutor 


□  □□□□□□ 

□  □□□□□  Javascript  DDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□□ 

D  WebDriver  □□□□□□□□□□□□□□□□□ 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□□ 

DDDDDDDDDDDDDDDDDD 

□□□□□□ 

□□□□□□ 

□  □□□□□ 

DDDDDDDDDDDDD  WebDriver  D  D  D  D  D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D  DXQ  D  D 

□□□□□ YDDDDDDDDDDDDDDDDD 

口 

XxYQ 

D 

D 

D 

D 

D 

D 

□  □□□□□□ 

D  D 

WebDriver  口 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

Simon  Stewart  313 


DDDDDDDDDDDDDDD 
D  D  D  shopD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  stockist  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Accountant  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

public  interface  Shop  { 

void  addStock(StockItem  item,  int  quantity) ; 
Money  getSalesTotal(Date  startDate,  Date  endDate) ; 


Shop  Q  Accountant  □  □  □  Stockist  DDDDDDDDDDDDDDDDDDDDD 


D  D  D 

D 

D 

DDDDDDDDDDDDDD 

D 

D 

DDDDDDDDDDDDDDD 

16.1 D 

D 

D 

D  D  D  D  D 

D  D  D 

D 

D 

□  □  Accountant  □  Stockist  □ 

D 

D 

DDDDDDDDDDDDD  shop 

D  D  D 

D 

D 

DDDDDDDDDDDDDD 

D 

D 

DDDDDDDDD  Accountant  □ 

D  D  D 

D 

D 

DDDDDDDDDDDDDD 

D 

D 

D  D  D  D  Stockist  D  D  D  D  D  Shop 

D  D  D 

D 

D 

DDDDDDDDDDDDDD 

D 

D 

DDDDDDDDDDDDDDD 

D  D  D 

D 

D 

□  □□□□□□  16.2  D  D  D  D 

D  D  D  D  D  ShopD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDD  Shop  □  Accountant  □  Stockist  DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


public  interface  HasBalance  { 

Money  getSalesTotal(Date  startDate,  Date  endDate) ; 


public  interface  Stockable  { 

void  addStock(StockItem  item,  int  quantity) ; 


public  interface  Shop  extends  HasBalance ,  Stockable  { 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□ 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□  )□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  WebDriverQ  Firefox 


314    Selenium  WebDriver 


Accountant 


Stockist 


Shop 


□ 16.1:  Accountant  D  Stockist  □  Shop  □  □  □  □  □ 


Accountant 


HasBalance 


Shop 


Stockist 


' Stockable 


□ 16.2:  Shop  D  HasBalance  □  Stockable  □  □  □  □  □ 


2D  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  Firefox2D  D  D 


D  D 

D 

D 

1 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDD 

□  □□□□□ 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDD 

□  □□□□□ 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDD 

□  □□□□□ 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDD 

□  □□□□□ 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDD 

□  □□□□□ 

D 

D 

D 

IED  D  D  D  D  D  D  IED 

□□□□□□ 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDD 

Firefox  ロロ  口 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

Java  D  D 

DDDDDDDDDDD  Firefox  □□□□□□□□□□□□□□□□□□□  1300 
DDJavaDDDDDDDDD  FirefoxDriver  D  DDDDDDDDDDDDDDDD 


Simon  Stewart  315 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD 


WebDriverD  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  WebDriverD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

API  □□□□□□□□□□□□□□□  WebDriver  □□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□  API  □□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDD 

□  □  D  D  D  APIQ  DDDDDDDDDDDDDDDDDDDDDDDDD  RenderedWebElement 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  (isDisplayed  □  getsize  D  D  D 

getLocation)D  DDDDDDDDDDDDDDDDDD  (hover  □□□□□&□[][][][]□)□ 
CSS  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDD  HtmlUnit  DDDDDDDDDDDDDDDDDDDDDDDDD  Firefox 
DIEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  API  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  API  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  "DDD"  DDDDDDDDDDDDDDDDDD  Selenium  2.0  □□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

RenderedWebElement  DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Chrome 
DDDDD4DDDDDDDDDDDDDDIEDDDDD3DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


16.5    □  □  □  □  □  Javascript 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

•  DOM DDDDDDDDDD 

•  Javascript  □□□□□□□□□ 

•DDDDDDDDDDDDDDDDDDDDDDD 


316    Selenium  WebDriver 


n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnn  r\/~\i\/r  n  n  n  n  n  n 

UUUUUUUUUUUUUUU  uOM u  u  u  u  u  u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n  n  n  To^?ocr>»-it-*t  nnnnnnnnnn  p\oiv/f  n  n  n 
U  U  U  U  Javascript  UUUUUUUUUU  uum  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnn  lo^^ocr-i-it-**  n  n  n  n  n 
UUUUUUUUUUUUUUU  Javascript  U  U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n  n 

u  u 

D 

D 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuu 

n 
U 

D 

D 

n 
U 

n  n 
U  U 

nnnnnnnnnn  Caiam'nm  nnnnnnnnnn 
UUUUUUUUUU  Selenium  U  UUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n  n 
U  U 

D 

D 

n 
U 

n  n 
U  U 

,Ti ハ n  da  。,,や o  t  ";レ*^»«  ,! ■  nnnnnnnnnnnnn 
uoogle  u  Closure  Library  UUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n  n 
U  U 

DD 

n 
U 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 

u 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Browser  Automation  Atoms  □ 

D  D  D  atoms  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  WebDriver 
□  □□□□□□  APID  □□□□□□ 


WebDriver 


Selenium  Core 


Atoms 


Closure  Library 


D 16.3:  Selenium  Javascript  D  □□□□□□□ 
Closure  Library  DDDDDDDDDDDDDDDDDDDDDDDDD  Closure  Compiler  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Closure  Compiler 

DDDDDDDDD  Javascript  Q  □□□□□□□□□□□□□『□□□□『□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Closure  Library 
DDDDDDDDDDDDDDDDDDDDDD  Javascript  D  DDDDDDDDDDDDDD 
□  □□□□□  Closure  Library  DDDDDDDDDDDDDDDDD 

D  D  DOM  DDDDDDDDDDDDD 

DDDDDDDDD  RCDDD  Javascript  D  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  JavaQ  DDDDDDDDDDD 
D  D  WebDriver  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Simon  Stewart  317 


D  Javascript  □  JAR  □□□□□□□□□□□□□(:□□□□□□□□□□□□□□□□□□ 
iPhone  正 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  Javascript  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

Javascript  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD 

atoms  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  Javascript  D  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD  Closure  Library  DDDDDDDDDDDD 

D  D  D  Selenium  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Closure  Library 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD 


D 

D 

D 

D 

D  Core  D  WebDriverQ  DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD  atoms  DDDDDDDDDDDD  DDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

"DDDDD"  DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  atomQ  DDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D  atom  DDDDDDDDDDDDDDDD  Firefox  DDDDD  getAttribute 

D 

D 

D 

D 

D 

D 

□  □□□  50 DDDDDDDDDDDDD  6DDDDDDDDD 

FirefoxDriver. prototype . getElementAttribute  = 
function(respond,  parameters)  { 
var  element  =  Utils . getElementAt (parameters . id , 

respond . session . getDocument()) ; 
var  attributeName  =  parameters. name; 


respond. value  =  webdriver - element . getAttribute (element ,  attributeName) ; 
respond. send() ; 

}; 

D  D  D  D  2Q  D  D  respond,  value  DDDDDDDDDDDD  WebDriver  □  □  atom  □  □  □  □ 

D  D  D 

atoms  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  APIQ  D  D  D  Javascript  D  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  atoms  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Javascript  D  D  D  D  D 


318    Selenium  WebDriver 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD 

atoms  DDDDDDDDDDDDDDDDDDDD  RCDDDDDDDDDDDD  (□□ 

D  D  D  D  D  WebDriverD  □□)□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
WebDriver  □  API  □□□□□□□□□□□□□  Selenium  Core  □  atom  □□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Javascript  D  DDDDDDDCDDDDDDDDDDDDDDDDDDDDDDDCDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

atoms  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD  htmlq  D  D  D  DD 

<input  name="example"  checked> 

checked  D  D  D  value  DDDDDDDDDDDDDDDDD  atoms  D  D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

HTML5  DDDDDDDDDDDDDD  Boolean  □  □  □  □  □  "true"  □ 

"false" 

D 

D 

D 

D 

D 

D 

D 

atomQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDmDDD 

D  D  D 

D 

D 

D 

DD 

D 

D 

DDDDDDDDDDDD 

16.6    □□□□□□□□□□□□□□  FirefoxD  □□□□□□□ 

D  D  D  D  WebDriver  □□□□□□  RPCDDDDDDDDDDDDDDDDDDDDDD 
WebDriverD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

□  □□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

□  □□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

□  □□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

WebDriver  □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

Simon  Stewart  319 


DDDDRPCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  WebDriverQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  Firefox  □□□□□□□□□□□□□ 

Mozilla  D  (D  D  D  Firefox  D)DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  Mozilla  D  Microsoft  D  COMD  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  XPCOM (口  □ 
DDDDDDDDD  COM) □□□□□□□□□□□□□  XPCOM □□□□□□□□□□  IDL 
DDDDDDDDDCD  Javascript  D  DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  XPCOM  Q  Firefox  DDDDDDDDDDDDDDDDDDD  Javascript  □□□□□□□ 

DDDDDDDDD  XPCOM  □□□□□□□  Firefox  DDDDDDDDDDDD 

Win32  COM  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

XPCOM DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  XPCOM 
ServerSocket DDDDDDDDDDDDDDDDDDDDDDDDDD  D-XPCOM □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDD  Firefox  □□□□□□□□□□□□□□□□□□□□  Firefox  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  UTF-2 DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Javascript  □  SeaMonkey (口  D 


D 

Firefox  □□□□□□□  Javascript  □□□□)□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D  Javascript  DDDDDDDDDDDDD 16  □□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD 

DDDDDDDRPCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  HTTP D D 

D  D  D  HTTP  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  (SOAPQ  )D  D  DDDDDDDD  (RESTQ  )D  D  D  D  D  D 

□  □□□□□□  Selenium  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□"□□□『□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  WebDriverQ  □□□□□□ 


320    Selenium  WebDriver 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  "REST  □『□□□□□□□□□□□□□□□□  URL  D  D  D  D  D  HTTP  □ 
DDDDDDDDDDDDDDDDDDDDD  RESTMQ  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

HTTP  □□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□□□□□□ 
□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDD  WebDriverQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  HTML  □  XML  □  □  □  □  JSON  □  □  □  □  XML  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  XMLQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  "DD"DD 
□  □□□□□□□□□□□□□□□□□□□□□□□□□  3D  □□□□□□□□□  XMLQ  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  XMLQ DDDDDDDDDDDDD 
DDDDDDDDDDDDD  HTML  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□ 

DDDDDDDDDD  Javascript  Object  Notation  (JSON)  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  eval  □□□□□□□□□□□□□□□□□□□  Javascript  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  JSON  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  JSON  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD 

D  D  D  D  WebDriver  □□□□□□□  2DDDDDDDDDD  HTTP  DDDDDDDDDD 
D  D  D  D  D  UTF-8  DDDDDDDD  JSON  □□□□□□□□□□□□□□□□□□  UTF-8  □ 
DDDDDDDDDDDDDDDDDDDDDDDD  Unicode  DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  UTF-8  □  ASCII  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDD  URLQ DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  WebDriver. get("http: //www.  example,  com")  DDDDDDDDDDDD  ID  D  D 

DDDDDDDDD  "/url" D  D  D  D 鼠 □  D  POSTQ  DDDDDDDDDDDDDDDDD 
DDDDDDDDD  ['http://www.example.com']  D  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD3DDDDDDDDDDDDDDDDDDDDDDDDDD 


'□□□□□□□□□□□□DD  base64 nDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□DD  Firefox  □□□□□□□□□□□□□ 


Simon  Stewart  321 


n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnn  uttd  nnnnnnnn 
UUUUUUUUUUU  HiiFUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 

u  u 

n 

u 

n 

u 

t  toi  nnnnnnnnnn  "n  nnnnnn"n 

URL  uuuuuuuuuu  uuuuuuu  u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

D 

D 

D 

D  WebDriver  □□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

□  □□  (DDDDDDDDDDDD 凰 □□□□□□□□□□□ 

DELETE  口 

D 

D 

□  HTTP4xxD  DDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD  500  ("Internal  Server  Error")  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDD  JSON  □□□□□□□□ 


D  D 


D  D 


sessionld 


status 


value 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDD 

□  □□□□□  JSON D  D  DD 


D  D  D 


DDDDDDDDDDDDDDDDDDD 


sessionld:  'BD204170-1A52-49C2-A6F8-872D127E7AE8' 
status:  7, 

value:   'Unable  to  locate  element  with  id:  foo' 


D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  IE  DDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Remote  WebDriver  Server  D  D  D  D  JavaQ  DDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDD  WebDriver  D  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  Firefox  D  DDDDDDDDD  WebDriver  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 


322    Selenium  WebDriver 


D  D  D  D  Java  DDDDDDDDDDDDDD  "element"  D  WebElement  □□□□□□□□ 

DDDDDDDDDDDDDDDDD 

element .getAttribute( "row") ; 

D  D  D  D  D  element  □  □  □  □  □  "id"  □□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□□□□□□  id  □□□  "some_opaque_id"  □□□□□□□□□□ 

□  □□□□□□  Java  □  Command  □□□□□□□  Map  □□□□□□□□□□□□  (□□□□□) 

□  □□□□  idD  D  D  D  IDD  D  D  D  name  □□□□□□□□□□□□□□□□□□□□ 
□□□ 狐 □□□□□□□□□□□□□□□□□□□□□□ 

/session/ :sessionId/element/: id/attribute/: name 

URLD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  idD  name  DDDDDDDDDD  sessionid  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  (Firefox  D  □□□□□□□□□□□□)□□□  URLQ  D  D 
DDDDDDDDDDDDDDDDDD 

http://localhost : 7055/hub/session/XXX/element/some_opaque_id/attribute/row 

D  D  D  D  D  WebDriverQ  DDDDDDDDDDDDDDDDDDDDDDD  URL  Templates 

D  RFCDDDDDDDDDDDDDDDDDDDDDDDDDDD  URLQ  D  D  D  D  D  URL 

Templates  □□□□□□  URL  □□□□□□□□  (□□□□□)□□□□□□□□□□□□□□ 
URL  Templates  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDD  URL  Templates  DDDDDDDDDDDDD 
DDDDDDDDDDDDDD4DDDDDDDDDDDDDD  httpd  DDDD  GETD 

DDDDDDDDDDDDD  HTTP  DDDD  Java  Q  D  D  D  D  (Apache  HTTP  Client)  DDDD 

DDDDDDDDDDDDDDDDDDDD 

Firefox  D  D  D  D  D  D  Firefox  D  DDDDDDDDDDDDDDDDDDDDDDDDD  16.4 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  HTTP □□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDD  HTTP  □  □  □  □  □  XPCOM  DDDD 
DDDDDDDDDDDDDDDDDDDD  MozillaQ  DDDDDDDDDDDD  HTTPD  □ 
DDDDDDDDDDDDDDDDD  httpd  DDDDDDDDDDDDDDD  dispatcher 
DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  URLQ □□□□□□ 
DDDDDDDDDDDDDD 鼠 □ DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  JSON DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD   

4[]  □□□□□□□□□□□□□□□□□□ 


Simon  Stewart  323 


«  ^  ^ 


躯 


Mozilla  Firefox  4.0  Beta  8 


I 雷 i  Bfl 
1-1" 


Co  to  a  Web  Site 


▼  g]  i^l-  seleniumhq  Q  )  jjfrj  |E  ■]  | Feedback  ■ 


Language 
Bindings 


Dispatcher 

Command 

Processor 

Atoms 


D 16.4:  Firefox  □□□□□□□□□□□□□□ 


{ 

'name':   'getElementAttribute' , 
'sessionld' :  {  'value' :   ' XXX'  }, 
' parameters ' :  { 

'id':   ' some— opaque— key ' , 

' name ' :   ' rows ' 

} 

} 

□  □□□□□  JSON DDDDDDDDDDDD  XPCOM □□□□□□□□□□□□□□□□ 

□  □□□□□□  CommandProcessor  DDDDDDDDDDDDDDDDDD 

var  jsonResponseString  =  JSON . stringify( json) ; 
var  callback  =  function (jsonResponseString)  { 

var  jsonResponse  =  JSON - parse (jsonResponseString) ; 

if  (jsonResponse - status  !=  ErrorCode . SUCCESS)  { 
response . setStatus (Response . INTERNAL_ERROR) ; 


response . setContentType い appli cat ion/ json ' ) ; 
response . setBody (jsonResponseString) ; 


324    Selenium  WebDriver 


response. commit() ; 

}; 

〃□□□□□□□□□□□□□ 

Components . classes [ ,  @googlecode . com/webdriver /command-processor ; 1 ' ] . 
getService (Components. interfaces. nsICommandProcessor) . 
execute (jsonSt ring,  callback) ; 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  JSON  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  HTTP  DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDD  "匪 e"D  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  「esPOndD  DDDDDD  (□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□  )□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDD  DOMQ DDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDD  parameters  DDDDDDDD  (□□□□□  idD  name)  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  getAttribute 
DDDDDDDDDDDDD  16.5  DDDDDDDDDD 

FirefoxDriver. prototype. getElementAttribute  =  f unction(respond ,  parameters)  { 
var  element  =  Utils . getElementAt (parameters . id , 

respond . session . getDocument() ) ; 
var  attributeName  =  parameters . name ; 

respond. value  =  webdriver. element. getAttribute(element,  attributeName) ; 
respond. sendO  ; 

}; 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  IDD  □□□□□□□□□□□□□□□□□□  FirefoxQ  DDDDDDDDDDDDD  IDD 
UUIDQ  DDD"D  DDDDDD  DDDDDDDDDD  getElementAt  D  DDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDD  DOMQ DDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDD  DDDDDDDDDD  IDD  (□□□□□□)□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  atom  DDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

□  □□□□□□  send  DDDDDDDDDDDDDDDDDDD  DD  DDD 

D  D  execute  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  JSON  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  (getAttribute  D  D  D  D  D  "7"D  DDDDDDDDDDDDDDDDDDDDDDD)D 


Simon  Stewart  325 


' value' :  ' 7 ' , 
'status'  :  0, 
'sessionld' :  'XXX' 

} 

□  □□□Java  □□□□□□□  status  □□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
"value"  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  status  □□□□□□ 
D  D  "value"  DDDDDDDDDDDDDDDD 


D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD  execute DDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□  7 

D 

D 

D 

D 

D 

D 

DDDDDDDD  Firefox  □  □  □  □  □  Javascript  □  □  □  □  □ 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D  Javascript  DDDDDDDDDDDDDDDD 

D 

DD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

(DDDDDDDDDDDDDDDDDDDDDDD)D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  Firefox  □  WebDriver  □□□□□□□□□□□□□□ 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D  document  □  □  □  webdriver  DDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D  D  WebDriver  □  Javascript  API  □□□□□□□□□□□□□□□□□□□□□□□□  JSON 

DDDDDDDDDDDDDDDDDDDD  document  □  □  □  command  DDDDDDDDD 

D  webdriverCommand  DDDDDDDDDDDDDDDDDD  webdriverResponse  D  D  D  D 


D 

D 

D 

D 

D 

D 

DDDDDDDDDDD  response DDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  WebDriver  D  DDDDDDDDDDDD  Firefox  D  DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D 

D  DOM  DDDDDDDDDDDDD  webdriverCommand  DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

JSON  DDDDDDDDDDDDDDDDDDDDDDDDD  execute  D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  document  D  D  D  response  DDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDD  webdriverResponse  DDDDDDDDDDD 

16.7  IED  D  D  D 

Internet  Explorer  DDDDDDDDDDDDDDDDDD  COM  DDDDDDDDDDD 
DDDDDDDDDDDD  Javascript  DDDDDDDDDDDDDDDDDDD  Javascript 

DDDDDDDDDDDDDD  COM □□□□□□□□□□□□□□□□□□□□□□□ 

Javascript  D  window  D  □  □  □  IHTMLWindow  D  □□□□□□□  document  口  COM  □  □  □  □  □  □ 

D  D  iHTMLDocument  DDDDDDDDDDD  Microsoft  DDDDDDDDDDDDDDDDD 


326    Selenium  WebDriver 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDIE6DDDDD  COM 
DDDDDDDDDDDDDDDDDDDDDIE9DDDDDDDDDDDDD 

Internet  Explorer  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

WebDriverD  "5  □□□□□□□□  ,,□□□□□□□□□□□□□□□□□□□□□□□□□ 


□  □□□□□□ 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□ 

D 

D  WebDriver  □□□□□□□□□□□□□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

□  □□□□□□ 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDD 

D 

□  □□  IEDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

□  □□□□□□ 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDD 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

Java  Q 

D 

D 

D 

D 

D 

CLASSPATH  Q 

D 

D  D  D  D  D  JARD  DDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDD 

D 

DDDDDDDDDDDDDD 

□  □□□□□ 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

Windows  D  DDDDDDDDDDDDDDDDDDDDDDDD  .NetQ  □□□□□  (D  D  D 
D  C#)DDDDDDDIEDDDDD  IED  COMQ  DDDDDDDDDDDDDDDDDDD 
DDDIEDDDDDDDDDDDDIED  COMQ  DDDDDD  DDDDDDDDDDDDDD 
DDDDDDD  Windows  DDDDDDDDDDDDDDDDDDDDDDDDD  MSHTML 
D  D  D  ShDocVw  DLL  DDDDDDDD  IE  DDDDDDD  C#4DDDDDDDDDDDD 


CLR/COM  Q 

DDDDDD  Primary  Interop  Assembly  (PIA)  □□□□□□□□□□□□□□  口 

PIAQ  D 

D 

D 

D  D  CLRD  DDDDDDD  COMD  DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDC#4DDDDDDDD  -Net  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDD  C#4Q DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDD  PIA  DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  Microsoft  DDDDDDDDDDDDDDDDDDDD  Selenium  □ 

D 

D 

D 

D 

D 

D 

D 

MSHTML D  ShDocVw □  PIADDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD  Windows  □  IE  □  □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD  PIAD  DDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  PIA  DDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDC#D  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDIEDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD  C++D  DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

C++D  □□□  PIA  DDDDDDDDDDDDDDDDDDDDDDDDD  Visual 

Simon  Stewart  327 


Studio  C++D  D  D  D  D  DLLQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDLLDDDDDDDDDDDDDDDDDDDDDDDDDDDIEDD 
DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  C++D  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  C++D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDC#D  DDDDDDDDDDDDDDDDDDDDDDD 

IEDDDDDDDDDDDD  16.5  D  D  D  D 


D 16.5:  □□□  IE  D  D  D  D 

□  □□□□□□□□□□□□□□□□□□□□□  IED  COMQ  DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  C++D  DDDDDDDDDDDDDDDDDDD  WebDriver  API  □  □ 
DDDDDDDD  Java  DDDDD  C++D  DDDDDDDDDD 雇 
D  COM  DDDDDDDDD  C++D  DDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDD  JavaQ  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□ 羅 □□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDD?DDDDDDDDDDDDDDDDDDDDDDDDC 
DDDDDDDDDDDDDDDDDDD  C#DDDD  Plnvoke  DDDDDDDDDD  Ruby  □ 
D  FFI D  D  D  D  D  Python  □  □  ctypes  □  □  □  □  Java  DDDDDDDDDDDDDDDDDDD 

JNA  (Java  Native  Architecture)  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  APID  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□  2Q  D  D  3D  DDDDD  DDDDDDDDDDDDDD  "D  DDDDDDDDDD  "D 

DDDDDDDD  "wd"  □  "WebDriver"  □  □  □  □  "wde"  □  WebDriver  Element  □□□□□□□ 
WebDriver.  get  Q  wdGet  D  D  D  D  WebElement .  getText  D  wdeGetText  D  DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD  "out" □□□□□□□□□□□□□□□□ 


328    Selenium  WebDriver 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


int  wdeGetAttribute(WebDriver*,  WebElement*,  const  wchar_t*,  StringWrapper**) 
DDDDDDDDDDDD  WebD「ive「  D  WebElement  D  D  D  StringWrapper  D  D  D  D  D  D  D 

DDAPIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  "void  *"□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

JavaQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  WebDriverQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDJavaQD  getAttribute DDDDDDDDDDDDDDDD 

public  String  getAttribute (St ring  name)  { 

PointerByReference  wrapper  =  new  PointerByReference() ; 
int  result  = lib. wdeGetAttribute( 

parent . getDriverPointerO  ,  element,  new  WString(name) ,  wrapper) ; 

errors. verifyEr rorCode( result ,  "get  attribute  of") ; 

return  wrapper . getValue()  ==  null ?  null : new  StringWrapper(lib,  wrapper) . toString() ; 

} 

□  □□□□  16.6  D  DDDDDDDDDD 


Java 


JNA 


C++ 


COM 


Python 


ctypes 


D 16.6:  □□□□□□□  IED  D  D  D 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ ffiD 
DDDDDDDDD  WebDriverQ  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  IED  COMQ  DDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□  口  "Single  Thread  Apartment"  DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Simon  Stewart  329 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


n  n 
U  U 

n 
U 

t0,70  nnnnnnnnnnnnnnnnnnnnnnnnnnn 
Java  UUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n  n  n  n  n  n 
U  U  U  U  U  U 

n  n 
U  U 

n 
U 

nnnnnnnnonnnnnnnnnnnnnnnnn  ttu  n  n 

UUUUUUUU-'UUUUUUUUUUUUUUUUU 1 ヒ uu 

n 
U 

n 
U 

n 
U 

n  n  n  n  n  n 
U  U  U  U  U  U 

n  n 
U  U 

n 
U 

nnnnnnnnnnnn 

uuuuuuuuuuuu 

n 
U 

n 
U 

nnnnnnnnnnnnnnnTPnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n  n  n  n  n  n 
U  U  U  U  U  U 

n  n 
U  U 

n 
U 

n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  Cntn»-a  n  n  n  n  n  n  n  n  n 
UUUUUUUUUUUUUUUU  Future  UUUUUUUUU 

n 

u 

n 
U 

n 
U 

n  n  n  n  n  n 
U  U  U  U  U  U 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

□  □□□□□ 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  IE 

D 

D 

D 

□  □□□□□ 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

□  □□□□□ 

D  D 

D 

□  □□□□□□□□□□ 1ED  □□□□□□□□□□□□□□□□ 

D 

D 

D 

Win32  API  Q 

PostThreadMessage  DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

□  □□□□□  IE 

DDDDDDDDD  16.7  □□□□□□□□□□ 


Thread  Boundary 


Java 


JNA 


C  一 


C++ 


C++  ― 


COM 


D 16.7:  Selenium  2.0  alpha  7Q  D  D  D  IE  D  D  D  D 


D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDD 

□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DIEDDDDDDDDDDDD 

□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

□  □□□□□□  DOM  D  D  D  D 

□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDD 

□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDD 

□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

2D 

D 

D 

D 

DDDDDDDDDDDDDD 

□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDD 

□□□□□□ 

DIED 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDD 

□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

330    Selenium  WebDriver 


n 
U 

n  n 
U  U 

n 
U 

n 
U 

(DDDDD2DDDDDDDDDDDDDDDDDDDDD)DDDDDD 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 

n 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

□  □IE  □□□□□□□□□  Automation  Atoms  □□□□□□  Firefox  □  □ 

n 

u 

n 

u 

n 
U 

Selenium  Core  □□□□□□□□□□□□□□□  atom  □□□□□□□□  C++D  □  □  □ 

n 
U 

n 
U 

n 
U 

D  D 

D 

DD 

D 

DDDDDDDDDDDDDDDDDDDDD  Javascript  □□□□□□□ 

n 
U 

n 
U 

n 
U 

D  D 

D 

D 

D 

D 

□  □□□□□□□□  IE  □□□□□□□□□□□□□(:□□□□□□□□ 

n 
U 

n 
U 

n 
U 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDAPIDDDDD 

n 
U 

n 
U 

n 
U 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDD  atomQ  DDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□ 正 □□□□□□□□□□□□  HTTP 

D 

D 

D 

D  D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□  IED  □□□□□□□□  WebDriverQ 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

16.8    Selenium  RC 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  WebDriverQ  D  D 

DDDDDDDDD  Selenium  DDDDDDDDDDDDDDDDDD  Selenium  Core  □  □  □ 
DDDDDDDDDDDDD  Javascript  □□□□□□□□□□□  Javascript  □□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDD  WebDriverQ  API  □□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  Javascript  □□□□□□□□□□□□□□□□□  Selenium  RCDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  16.8  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDD  Selenium  Core  □  Javascript  □□□□□□□□□□□□□□□ 

D  HTTP  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

WebDriver  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  HTTP  □  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDD  Selenium  RCQDDDDDD  Selenium  Core 

DDDDDDDDD  API  DDDDDDDDDDDDDDDD  URL  DDDDDDDDDDDD 
□  □□□□  API  DDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD  Selenium  Server  DDDDDDDDD  "D 
□□□□□『□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


Simon  Stewart  331 


Selenium  Core 


AUT 


HTTP 

Proxy 


Launcher 


Ssls 门 ium  Ssrvsr 


し anguage  Binding 
(client  code) 


D 16.8:  Selenium  RCDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Firefox  □□□□□□□□ 

□  □□□□□□□□□□□□□□□□□□□□□□□  ("quit"  □□□□□□□□□□□□□ 

□  □  □  "document.readyState"  □□□□□□□□□□  "document.readyState"  □  □  Selenium  □  □ 
D  D  D  D  D  Firefox  Q  □□□□□□□□□□□□□□□□□□□□)□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDD  Selenium  Server  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  ("/selenium- 
server"  □  □□□□□)□  Selenium  Server  DDDDDDDDDDDDDDDD  Selenium  RC  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  ("singlewindow"  □□□)□□□□□□□□□□□□  AUT  □□□□□□□□□□□□□ 
D  D  D  ("multiwindow"  □□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
("proxyinjection"  □□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  URLQ  D  Selenium  Server 

DDDDDDDD  — RemoteRunner.html D  DDDDDDDDDDDDDDDDDDDDDD 


332    Selenium  WebDriver 


D  D  Selenium  Core  □  □  □  □  Javascript  □□□□□□□□□□□□□□□□□□□□□□□□ 
D  D  D  D  "mnSeleni 腿 Test"  DDDDDDDDDDDDDD  Selenium  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D 

□  □□□□□□□  Javascript  D  XMLHttpRequest  D  DDDDDDDDD  URL(/selenium- se「ver/d「ive「) 


D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDD  "OK" □□□□□□□ 

D 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDDDD  Javascript  D  DDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

"Response/Request"  □□□□□□□□□□□□□  "Comet  with  AJAX  long  polling" 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D 

D  D  D 

D  D 

RC  □□□□□□□□□□□□□□□?  Server  D  DDDDDDDDDD 

D 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D 

D  D  D  Javascript  □ 

D 

D 

D 

D 

D 

D 

D  D  D 

□                                      Javascript  DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

XmlHttpRequestQ  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

D  HTML5  □□□□□□  WebSockets  □□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

□  □□□□□□  XMLHttpRequest  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  Javascript  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  CPUD  D  DDDDDDDDDDD  Javascript  D  DDDDDDDDDDDD 
□  □□□□□□  (DDDDDDDDDDDDDDDDDDDD  Javascript  DDDDDDDDD 
□□□□□□□□□□□□□) 口 

Selenium  Core  DDDDDDDDDDDDDDDDDDDDDDD  selenium  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDAPIDDDDDDDDDDDDD 
DDDDDDDDD  browserbot  □□□□□□  Selenium  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  selenium  DDDDDDDDDDDDDDDDDDDDDD  browserbot 
DDDDDDDDDDDDDDDD 
Selenium  Core  D  DDDD  Automation  Atoms  D  DDDDDDDDDDDDDDDD  □  selenium 


Simon  Stewart  333 


D  browserbot  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAPI 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  atoms □□□□□□□□□□□□□□□□ 


16.9  nnnnnnnn 


D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 

D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 

D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 

D 
D  D 
D  D 
D  D 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
?ロ  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  Chrome  □□□□□□□□□□□□□□□□□□=□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDmDDDDDDDDD 
□  □□□□□□□□□□  !□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  Automation  Atom  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□(□□□□□□□□□□□□□□□□□□□□□□□□ 

□  Core  DRCDDD 
-D  D  D  D  Javascript  □  Java— 口  □□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDD  Selenium  □  "□□□□□□□,,□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDD  atom  □□□□□□□□□  WebDriver  D  D  D  D 
DDDDDDDDDDDDDD  atom  □□□□□□□□□□□□  Closure  □  □  □  □ 

D  D  D  D  Closure  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D 
D  D  D 
D  D  D 
□  □ 一 
D  D  D 
D  D  D 
D  D  D 
D  D  D 
D  D  D 
D  D  D 
D  D  D 
D  D  D 
D  D  D 
D  D  D 
D  D  D 
D  D  D 
D  D  D 
D  D  D 
D  D  D 
D  D  D 


DDDDDDDDDDDDDmDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  WebDriver 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAPI 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDD  IEDDDDDDDDDDDDDDDDDDD 


334    Selenium  WebDriver 


DDDDDDDDDDDDDDDD  Chrome □□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


16.10  □□□□□□ 

WebDriver  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  Selenium 
Core  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  atoms  □ 
D  D  D  D  D  Closure  Library  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□  WebDriver  Q  D  D  D  D  D  atoms  □□□□□□□□□□□□□□□□□□□□□□ 
WebDriver  □□□□□□□□□□□□□□  API  □□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDD  Selenium  D  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□ 口  Watir  (Web  Application  Testing  In  Ruby)  口口  口口  Selenium  口  Watir  口口  口口 

□  □□□□□  Watir  API  D  WebDriver  D  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  WebDriver 
DDDDDDDD 

DDDDDDDDDDDDDDDDDDD  Opera  Software  DDDDDDDDDDDD  Web- 
Driver API  D  D  D  D  D  WebDriver  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  OperaDriver  □□□□□□□□□□  Selenium  □□□□□□□□□  Chromium  □  □  □  □ 
DDDDDDDDDDD  WebDriver  D  DDDDDDDDDDDDD  Chromium  D  □□□□□□ 

D  D  D  D  D  Chrome  D  DDDDDDDD  MozillaQ  DDDDDDDDDDDDDDDD  Firefox- 
DriverQ  DDDDDDDDDDDDDDDDDD  JavaQ  DDDDDDDDDDDD  HtmlUnit 


D  D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  (□□□□□ 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

□)□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD  WebDriver  D  DDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD! 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

□  □DDDDDDDDDDDDD  http://selenium.googlecode.com/ []  DDDDDDDD? 


335 


D 17 口 


Sendmail 

Eric  Allman 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  Mail  User  Agent  (MUA)  D  D  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  —Mail  Transfer  Agent  (MTA)  D  D  DDDDDDDDDDDDDD 
D  D  D  D  MTA  DDDDDDDDDDDDDDDDDDDD  sendmail □  □ 

Sendmail D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  1981  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  2011 D 1DDDDDDDDDDDDDDDDDDDDDDDD  'D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD  Sendmail D  DDDDDDDDDD 
SMTP  DDDDDDDDDDDDDDDDDDDDDDDD 


17.1 

D  D  sendmail  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

1980  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D 

D 

D 

□  □□□□□□  Arpanet  D  DDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D 

D 

D 

DDDDDDDDDD  OSI  (Open  Systems  Interconnect)  □ 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  DD 

D 

D 

D 

D  OSID  DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  56  Kbps  D  D  D 

D 

D  D 

D 

D 

D 

(口  □□□□□□□□□□□□□□□□□□)□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  UUCPD  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

lhttp:/ /ftp . isc . org/www/ survey/reports/201 1 /01 I 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□  9600  bps  □□□□□□□ 
DDDDDDDDDDDDDDDDDD  (3  Mbps)  □  Xerox  □  Ethernet  □□□□□□□□□ 
D  D  D  D  D  XNS  (Xerox  Network  Systems) 

DDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
1DDDD8DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  PDP-10(1 

□  □□□  36DDDD1DDDD  9  D  D  D  )D  PDP-ll(l  □□□□  16DDDD1DDDD  8D  D 
D  )D  CDC  6000  □□□□  (ID  D  D  D  60DDDD1DDD  6  D  D  D  )D  IBM  360(1 □  □  □  □  32 
DDDDlDDDD  8  D  D  D  )D  D  D  D  XDS  940  D  ICL470D  Sigma  7  D  □□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDD  Unix □□□□□□□□□□□□□□□ 

□  □□□□□  Unix  □□□□□□□□□□□ 16  □□□□□□□□□□□□□□□□□□□□ 
Unix  □□□□□□□  PDP-11 Q  D  Data  General  8/32  □  VAX- 11/780  □□□□□□□□□□□ 

DDDDDDDDDDDDDDDD— DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  (Unix □□□□□□□□□□□□  IBM □  OS/360 □  □  □ 
D"DDD"  DDDDDDDDDDDDDDDDDD  )DDDDDDDDDDDD  UnixD  D  D 
DDDDDDDDDDDDDDD(D  DDDDDDDDDDDDDDDDDDDDDDD  )D 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□  9600 
D  D  D  TTYQ  DDDDDDDDDDDDDDDD  Ethernet  D  DDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□  )□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD 

DDDDDDDDDDDDDDDDD  Unix 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  /bin/mail 

□  □□□  (□□□□  binmail □  v7mail  DDDDDDDDDD)DDDDDDDDDDDDDD 


D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  Mail  DDDDDDDDD 

D  D 

D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDD  cat  DDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  /usr/spool/mail  DDDDDDDDDDDDD  (D  D  D  D 

D  D 

D  D  D 

D 

D 

!)  □ 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  (UUTP  □□□)□□□□□□□  (BerkNET  □□□)□□ 

D  D 

D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDD  Arpanet  DDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  DD 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

338  Sendmail 


n  n 
U  U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

subject  :Q  D  D  D  D  Subj:D  DDDDDDDDDDD  Date: 口  D  D  D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDD  FromrQ  DDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD  RFC  733(ArPanet  D  DDDDDDDDDDD) 
DDDDDDDDDDDDDDDDDDDDDD  (DDDDDDDDDDDDDDDDD  )D 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□ 
DDDDDDDRFCDDDDDDDDDDDDDDDDDDDDDDDDDDD)DDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 

1979  □  D  INGRES  Relational  Database  Management  Project(D  □□□□□□□□□)□  DARPA 
DDDDDDDDD  9600bps  □  Arpanet  □□□□□□  PDP-11  □□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDD  Arpanet  DDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDD  Arpanet  D  DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDD 

DDDDDDDD  sendmail(D  D  D  delivermailQ  DDDDDDD)D  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  MUA(Mail  User  AgentQ  DDDDDDDDDDDD 

□  )□□□□  delivermailQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  (□□□□□□□□□□□□□□)□□□□□□□□□□□  Delive 腿 il/sendmail 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□ 
SMTPQ  DDDDDDDDDDDDDDDDDDDD)D  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Eric  Allman  339 


SendmailQ  DDDDDDDDDD  Arpanet  D  DDDDDDDDDDDDDDDDDDDDD 


n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n  n 
U  U 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  Sendmail  □□□□□□□ 

D  D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD  Sendmail  □□□□□□□□□□□□□□□ 

D  D 

D 

DD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  "口  □□□□『□□□□□□ 

D  D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDD  sendmail  DDDDDDDDDDDDD 

D  D 

D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  X.400D  D 

□  □  □  ISO/OSI  (International  Standards  Organization/Open  Systems  Interconnect)  □ 

□  □□□□□  X.400D  DDDDDDDDDDDDDDDDD  ASN.l  (Abstract  Syntax 

Notation 1) DDDDDDDDDDDDDDDDD  LDAPQ  DDDDDDDDDDD 
DDDDDDDDDDDDDD  LDAPQ  X.500D  DDDDDDDDDDD  X.500D 
X.400  DDDDDDDDDDDDDDDDDD  Sendmail □  X.400  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  X.400  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  SMTP □  □  □  □ 


17.2  D  D  D  D  D 

Sendmail D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 


□  □  □  □ 

D 

D 

□  □  □  □ 

D 

□  □  □  □ 

D 

□  □  □  □ 

D 

D 

D 

D 

sendmail □  □  H 

口 

□  □  □  □  口 

口 

□  □  □  □  口 

D 

DDDDDDDDDD  Arpanet  D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDDDDDD 

340  Sendmail 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDD 
Mail  User  Agent  (MUA)  D  DDDDDDDDDDDDD  "DDDDDD"DDDDDDDD 

□  Mail  Transfer 

Agent  (MTA)D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D  Sendmail  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Sendmail 


D  D 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□  MUA □□□□□□ 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD  sendmail  DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDD  MUA  □  MTA  DDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□□□□□□□□□□□□□ 


D 

D 

D 

D 

D 

D 

D 

DDD(DDDDDDDDDDDDDDDDDDDDDDD)DDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  /usr/mail D  /var/mail D  D  D  D  /var/spool/mail D  D  D  D  D 

D 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (-mail 

D 

D  D 

D 

D 

D 

D 

D 

D 

□                                                                                  "From"  Q 

D 

D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□ 

D 

D  D 

D 

D 

D 

D 

D 

D 

□                                                      Arpanet  D  DDDDDDDDD 

D 

D  D  control-AD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  (DDDDDDDDDDDDDDDDDDDDDDD  )DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  /bin/mail 
□  □□□□□□□□□□□□□□□□□□(□□□□□□□)□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  sendmail □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDD  sendmail DDDDDDDDDDDDDD 
DDDDDDDDDDDDDD-dDDDDDDDDDDDDDD  /bin/mail D  sendmail D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  mail,  local  DDDDDDDDDDDDD 
D  DD  D  D  /bin/mail  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 


Eric  All  man  341 


Sendmail Q  □□□□□□□□□□□□□□□□  SendmailD  □□□□□□□ 
D  D 

UUCPD  BerkNETQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


n  n  n  n  n  n   /n  nnnnnnnn ヽ nnnnnnn 
□  □□□□□  (□□□□□□□□□)□□□□□□□ 

nnnnnnnnnn 
□  □□□□□□□□□ 

n 
□ 

n 
□ 

n 
□ 

n 
□ 

n 
□ 

n 
□ 

n  n 
□  □ 

n  n  n  n  n  sendmaii  nnnnnnnnnnnnnn 

n  (I n  n  n  sendmail n 

□ 

□ 

□ 

□ 

□ 

□ 

rnnnnnnnnnnnnnnnnnnn、nnn 

IUUUUUUUUUUUUUUUUUUU ヅ uuu 

nnnnnnnnnn 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n 
u 

n  n 
u  u 

DDDDDDDDDDDDD  sendmail  □□□□□□ 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  sendmail  DDDDDDDDDDDDDDDD 

DDDDDDDD 

□□□□□□□□□□□ 

DDDDDDDDDD  sendmail  DDDDDDDD 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

□□□□□"□□□□□□□□□□"□□□□□□□□□□□□□□□□□□□□□□DO 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Unix □  □ 


D  D  D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

□  □  □  □ 

□ 

□  □  □  □ 

sendmail □ 

DDDDDDDDD  (DDDDDDDDDDDDDDD)DDD 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD  4.2BSD  □□□□□□□□□□□  Unix  D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDD  (D  DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

)□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

DDDDDDDDDDDDDDDDDDD  (DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  DDD  D 

D 

DDDDDDDDDDDDDDDDD)D  DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

sendmail □ 

D 

D 

D 

DDDDDDDDDDDD 

D 

DDDDDDDDDDD  (口 

D  D  D  D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDDDDD 

D 

DDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

) 口 

DDD 

DDD 

D 

D 

D 

D  D  D  D  D 

D 

D 

D 

DDDDDDDDDDDD 

D 

DDDDDDDDDDDDD 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


342  Sendmail 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□ 
□  □□□□□□□□□□□□□)  口  sendmailQ  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


17.3  □□□□□□ 


D  D  D 
D  D  D  D 


□  □□□□□□ 
□□□□□□□ 


D  D 
D  D 


DDDDDDDDDD  sendmail □ 

DDDDDDDDDDDDDDD 


DDDDDDDDDDDDD 
D  D  D  D 


□  □  □  :  delivermail 

sendmail  DDDDDDDDDDDDD  delivermail  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  SMTP  □□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  delivermail □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

ロロ  ロロ  ロロ ロロ ロロ  (!%::  A  Directory  of  Electronic  Mail  Addressing  &  Networks  [AF94]  口  口 

DDDDDDDDDDDDDDD  )D 

delivermail D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  "@" 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Arpanet  DDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□ 
D  )  D  BerkNETQ  DDDDDDDDDDDDDDDDD  ("! ")  DDDDDDD  DDDDDDD 
D D  UUCP  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  {Uucp, 
foo,  bar@baz}D  DDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 16  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Eric  Allman  343 


n  n 
U  U 

n  n  n  nnnnnnnnnnnnnnn 

uuu  uuuuuuuuuuuuuuu 

foo@bar 

{ Arpanet,  bar,  foo} 

foo:bar 

{Berknet,  foo,  bar} 

foo!bar!baz 

} Uucp,  foo,  bar!baz} 

foo!bar@baz 

{ Arpanet,  baz,  foo!bar} 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□  (DDDDDDDDD  Unix  6th  Edition  □□□□□□□□□□□)□ 

Delivermail □  4.0  BSD  Q  D  D  "BSD  □□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD 


□  □  □  :  sendmail 3Q  4D  D  D  D  5 

□  □□□□  ID  D  D  D  D  D  2Q  D  delivermail  DDDDDDDDDDDD  1981 D  3D  D  D  D 

□  □□  3DDDDDDDDDDDDDDDDDDD  sendmail  □□□□□□□□□□□□□ 
DDDDDDDDDDDDD 16  D  D  D  D  PDP-11 □  □  □□□□□□□□□□□  32  □□□□ 


VAX- 11 D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D  D 

□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

sendmail □ 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D  D 

□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D  D 

□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D  D 

D  D  D  (D  D 

口  D 

D 

D 

D 

D 

D 

D 

□□□□□□□□)□□□□□□□□□□□ 

D  D  D  D 

D 

D  D 

□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  (DDDDDDDDD)D 

□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D  D 

□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D  D  (D  D  D  D  Date  DDDDDDDDDDD 

D  D  D  D 

D 

D  D 

□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D  D  FromD  DDDDDDDDDDD  )DDD 

D  D  D  D 

D 

D  D 

□□□□□□ 

D 

SMTP  Q  D 

D  D 

D 

D 

D 

D 

D 

D 

1981 D  UDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D  D 

D  D  The  Computer  Science  Research  Group  (CSRG)  □  DARPA  □□□□□□□  Unix  □  □  □  □ 

DDDDDDDDDDD  DARPA □□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDD  TCP/IP  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Telnet  □  ftp  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD SMTP  □□□□□□□□□□ 
DDDDDDDDDDDDDDDDD  SMTP  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Mail  Transfer 


344  Sendmail 


Protocol  (MTP)  DDDDDDDDDDDDDDD  MTP  □□□□□□□□□□□□□□□□□□ 

□  □□□□□  SMTP  (Simple  Mail  Transfer  Protocol)  DDDDDDDDDDDDDDDDDD 

□  □□□□□□  (DDDDDDDDDD  1982  D  8D  □□□□)□□□□□□□□□□□□□□ 
D  D  D  INGRES  Relational  Database  Management  System  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD SMTP  □□□□□□□□ 
DDDDDDDD 

DDDDDDDDDDD SMTP  □□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDD  sendmailQ  DDDDDDDDDDDDD 
DDDDDDDDD SMTP  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
expnd  D  D  D  D  vrfyd  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  RCPT 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  MTA □□□□□□□ 
D  D  D  spamQ  DDDDDDDDDDDDDDDDDDDDDDDDDD  SMTPQ  sendmail D 
DDDDDDDDDDDD 

Sendmail 3  □  4.1a  BSD  □  □  □  4.1c  BSD  (口  □□□)□□□□□□  sendmail 4  □  4.2  BSD  □ 
DDDDDDDD  sendmail 5D  4.3  BSD  □□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  sendmail D  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  sendmail D  D  D  D  D 

□  □□□  (□□□□□□)□□□□□□□□□□□□□□□□  UnixQ  DDDDDDDD  (SunQ 
DECD  □□□ 丽 □□)□□□□  sendmail  □□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDD  sendmail  DDDDDDDDDDDDDDDDDDDD  IDA  sendmail □ 
KJSD  D 

IDA  sendmail  □□□□□□□□□□□□□□□□□□  IDA  □□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  dbm(3)  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDD  (□□□□  johnd@example.com  □  □  □  □  □  john_doe@example.com  □ 

□  □□□□□□□□□)□□□□□□□□□□□□□□□□□□□□ 

King  James  Sendmail (口  □  □  KJSD  □□□□□□□□□□□□□□□)□□□□□□□□□ 

DDDDDDDDDDDDDD  sendmail D  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  D  DSunQ  DDDDDDDDDDDDDDD  YP(D 

D  NIS)  D  D  DDDDDDDDD  NFS  (Network  File  System)  D  DDDDDDDDDDD  YP  □ 


Eric  Allman  345 


sendmail  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDYPDDDDD 
DDDDDDDD 


D  D  D  :  sendmail 8 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□『□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  "persons 
host.berkeley.edu"  D  DDDDDDDDD  host  D  DDDDDDDDDDDDDDDDDD 
DDDDDDDD  (DDDDDDDDDDDDDDDDDDDDDDDDD)DDDDDDD 
DDDDDDDD  @berkeley.edu  D  DDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  (DDDDDDDDDDDD  cs.berkeley.edu  D  D  DDDDDDD)DDDDDD 


D  D 

D 

D 

D 

DDDDDDDD  (D  DDDDDDDDD  @cs.  berkeley.edu  DDDDDDDD; 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

sendmail □ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  sendmail DDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD  sendmail 8 □ 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

sendmail  DDDDDDDD  dbm(3)  □  NIS  D  D  D  D  D 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDD  sendmail  8DDDDDDDD 

D  D  D  D  D 

D  D  "□□『□□□□□□□□□□□□□□□□□□□□□□□  (DDDDDDDDDDD 

□  □□□□□□□□□)□□□□□□□□□□□□□□□□□『□『□□□□□□  (□□□ 

□  □□□□□□□□□□□)□□□□  IDA  □  sendmail  □□□□□□□ 

Sendmail 8DDDDDDDDDDDDDDDDDDDDDD  m4(l) □□□□□□□□□□ 

□  □□□□□□  sendmail 5  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  sendmail  5DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  m4Q  DDDDDDDDDDDD  "include"  口  □  □ 
DDDDDDDDD  sendmail  8DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  m4  D  D  D  D  D  D 

17.7  D  D  D  sendmail  8DDDDDDDDDDDDDDD 


346  Sendmail 


DDDDDDDDDDDDDDDD  sendmailQ  DDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□ 

D  D  D  "Sendmail  Consortium"  □  □  □  □  sendmail.org  □□□□□□□)□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 1990  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  Sendmail,  Inc.2  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  MTAQ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□  TLS  (connection  encryption)  □  SMTP  Authentication  □□□□□□  Denial 

of  Service  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  (□□□□  Milter  D  □□□□□□□)□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  sendmail □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDD 


sendmail 6  D  7[] 

Sendmail 6DDDDDDD  sendmail 8DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  Sendmail 7  D  DDDDDDDDDDDDDDDDD6DDDD 

□  □□  8DDDDDDDDDDDDDDDD  1993  D  6D  D  4.4  BSD  □  □□□□□□□□□□ 

□  □□□□BSD  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

17.4  nDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDD16DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDdDDDDDDDDDD)DDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


2http: //www. sendmail .com 

Eric  Allman  347 


DDDDDDDDDDDDDCDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  (make  D  □)□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
(口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


n  n 

u  u 

u 

u 

u 

u 

u 

u 

n 

u 

n 

u 

u 

u 

\  n  n  n  n  n  n 

) u  u  u  u  u  u 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD  □□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□                                                 sendmail  □□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  (DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□□  )□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD CDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D  D  sendmail  □□□□□□□□□□□□□□□□  SMTP  □□□□□□□□□□□□□□ 

□  □□□□□□  SMTPQ  DDDDDDDDDDDDDD-DDD  24Q 
DDDDDDDDDDDDDDDDDDDDD SMTP  □□□□□□□□□□□□□□□□□ 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□ 
□)□□□□□□□□□□□□□□□□□□□ 


□□□□□□□□ 


sendmail □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

DDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

DDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

DDDDDDDDD  (□□□□  BerkNET  D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

SMTP  □□□□□□□□□□□)□□□□ 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

DDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D  D  D  D 

From 

To 

a:foo 

a.foo@berkeley.edu 

a!b!c 

b!c@a.uucp 

<@a.net,@b.org:user@c.com> 

<  @b.org:user@c.com> 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
348  Sendmail 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD        "*"  口  "+"  口 
"["□  D  D  "]" 口  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  (□□□□  UPAS  DDDDDDDDD 

□  □□□□□□  Unix  Eighth  Edition  D  DDDDDDDDDDDDDDDDDDDDDDDDD 


□ 3: 

)D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□□□□『□□□□□□『□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDD  "□□',□□  (DDDDDDDDDDDDD)D 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□□"□□□□『□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□□□□□(□□□□□□□□□□□□□□)□□□□□□□□□ 

D  UnixD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□□□□□  "$"  DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDD  (□□□□□□□□□□□□□□) 口 

$+  +  $ 大 @  $+  .  $={mydomain} 
$++$*@$+.$={mydomain} 


DDDDDDDDDDD 


sendmail □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

(口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D  D 

□  □□□□□□□□□□□□)□□□□□□□□□□□□□□□  YACCD  D  D  D  LALR(l)D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

3http: //doc. cat-v.org/bell_labs/upas_mail_system/upas.pdf 


Eric  Allman  349 


□  □  □  □  allman@foo.bar.baz.com  <eric@example . 

DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  "<" 
DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 
□□□□)□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD 


. com>D  DDDDDDDDD 
DDDDDDDDDDDD 
DDDDDDDDDDDD 
DDDDDDDDDDDD 
□  □□□□□  (□□□□□ 

DDDDDDDDDDDD 
DDDDDDDDDDDD 
DDDDDDDDDDDD 
DDDDDDDDDDDD 
DDDDDDDDDDDD 
DDDDDDDDDDDD 
DDDDDDDDDD 


□□□□□□ 

"allman@..." 
口  口  LALR(l) 

□□□□□□ 
]□□□□□ 


D  D 

D  D 

D  D 
D  D 
D  D 


SMTPQ  □  □  □  □  sendmailD  □  □  □  □  □ 

SMTP  □□□□  (□□□□□□□)□□□□□□  UUTP  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  sendmailD  □□□□□□□?□□□□  SMTPQ  DDDDDDDDDDDDDDDDD 
D  ? sendmailD  □□□□□□□□□□□□□□□□□□□□□□□□□  (口口 口口  "piggybacking" 
DDDDDDDDDDDDDDDDDDD  RCPTD  DDDDDD)D  DDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□Unix 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□ 篇 □□□□□□□□□□□□□ 
DDDDDDDDDDDDDDD  sendmailD  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□  (□□□□□)□  SMTP  DDDDDDDDDDDDDDDDDDDDDD  vrfy 
D  expn  D  D  D  D  SMTP  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  SMTPD D 


D  D 

D 

D 

D 

D 

D  D  sendmail  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD— DDDD 

D 

D 

D  SMTP  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

□  □□□□□  sendmail  DDDDDDDDDD  SMTP  DDDD 

D 

D 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD  25 DDDDDDDDD 

D 

D 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

root  DDDDDDDDD  TLSD  DKIM  DDDDDDDDDD 

D 

D 

D  D  D  D  D 

D  D 

D 

D 

D 

D 

□  □□□□□□  (D  DDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D  D  D 

D  D 

D 

D 

D 

)D  DDDDDDDDDD  rootQ  DDDDDDDDDDDDDDD 

D 

D 

D  D  D  D  D 

350  Sendmail 


□  □□□□□ 

D  D 

D 

D 

□□□□□□ 

SMTPQ 

D 

root  口 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□□□□ 

D  D 

D 

D 

□□□□□□ 

D  D  D  D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□□□□ 

D  D 

D 

D 

□  □□□□□ 

D  D  D  D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □  □  □  □ 

□ 

sendmail □ 

D  D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D  D 

D 

D 

D 

IprD  □□□□□□□□□□  口 

口 

口 

口 

D 

D 

DD 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 

D  D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 

D  D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

sendmail □ 

D  D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D  D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 
D  D 
D  D 
D  D 
D  D 
D  D 

D 
D  D 
D  D 
D  D 
D  D 
D  D 

D 
D  D 
D  D 
D  D 
D  D 

D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 
D  D 


D  D 
D  D 
D  D 
D 

D  D 
D  D 
D  D 
D  D 
D  D  D  D  D 

sendmail □ 

D  D  D  D  D 


D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  10,000  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  sendmail  DDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  dbm(3) □ 
DDDDDDDDDDDD  (□□□□□□□  512 □□□□□□□ 
)□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  Unix  DDDDDDDD  (□□□ 醫 line)  DDDDDDDDDDDD 

D  (D  D  D  newline  □□□□□□□  carriage-return/line-feed  DDDDDDDD 


D 
D 

D 
D 
D 
D 
D 
DD 
D  D 
D  D 
D  D 
D  D 
D  D 


D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

L 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  (口 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  )DD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  carriage-return  □□□□□□□□□  line-feed/carriage-return  □□□□□□)□□□□□□□ 


Eric  Allman  351 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 


DDDDDDDDDDD 

sendmail  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  RFC  793  DDDDDD"DDDDDDDD"  (DDDDDDDDDDD 

□  )4  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  UUCP  D  D 
D  D  D  D  Arpanet  DDDDDDDDDD  UUCP  D  D  D  D  D  Arpanet  DDDDDDDDDDD 
D  D  D  "reply"  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  From:D  DDDDDDDDDDDDDDDDDDDDD 

□  □□?□□□□□□□□  Internet  □□□□□□□□□□□□□□□□  From:D  □□□□□□ 

□  □□□□□□□□□□□□□□□?□□□□  From:D  DDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDD  sendmail D  DDDDDDDDDDDDDDD 
F  「置 □ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD-DDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDM4DDD 

D  D  D  D  D  sendmail D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


352  Sendmail 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDm4DDDD 
D  D  D  D  D  UnixQ  DDDDDDDDDDDDDDDDDDDDDDDDDD  (□□  RATFOR) 

□  □□□□□□□□□□□□□□□□□□□□□□□□  m4Q  "include"  □□□□□□□□□ 

□  □□□□□□  CD  D  D  D  D  D  "include"  DDDDDDDDDDDDDDDDDDDDDD 

IDA  sendmail Dm4  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

sendmail  6DDDm4  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDm4DDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  GNUm4D DDDDDDDDDDDDDDDDDDDDDDDDDDDD 


n  n 
U  U 

DDDDDDDDDm4DDDD  80/20 DDDDDDDDDDDDDDDD 

D 

D 

D  D 

n  n  n 
U  U  U 

m 

4DDDDDDDDDD  20%D  DDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

one/  n 

n 
U 

D 

D  80%D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

□  □  □ 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  DD 

D 

D 

DDDDDDDDDDDDDDDDDDD  sendmail DDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDTLSDDDD  SMTP  DDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  -cf  D  □□□□□□□ 

D 

D 

D  D 

D  D  D 

D 

D 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□[ 

D  D  D 

D 

in 

4DDDDDDDDDDDD"DDDDDD"D.mc  DDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D 

□  □□□□□□□□□(□□□□□□)□□□□□□□□□□□□□□□ 

D 

D 

D  D 

D  D  D 

D 

D 

DDDDDDDDDDDDD  (□□□  goto  □□□□□)  口  □□□□□□□ 

D 

D 

D  D 

D  D  D 

D 

D 

□  □□□□□□  sedQ  awk  □□□□□□□□□□□□□□□□□  m4Q 

D 

D 

D  D 

D  D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D  D 

D 

D 

DDDDDDDDD 

m4  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
(口  □□□□□□□□□□□  )□□□□□□□□□□□□□□□□□□□□□□□□□  DSL(Q 
□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□  □DS し □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDD DSL  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 


17.5  □□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Eric  Allman  353 


DDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  spamQ  DDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□ 


□  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□)□□□□□□□□□□□□□□□□□□□□□□□□□□ 

n  n 

u  u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD  MTA 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD  MTA □□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD MTAQ  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDD-D DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD 

Milter 

sendmail  DDDDDDDDDDDDDDDDDDDDD  milter  (mail  filter)  □□□□□□□ 
D  D  D  milter  D  □□□□□□□□□□□□□□(□□□□□□□□□□□□□□□)□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  milter  D  □□□□□□□ 
D  D  D  D  D  SMTP  DDDDDDDDDDDDDDDDDD  SMTP  □□□□□□□□□□□ 
DDDDDDDDDD  sendmail D  milter  DDDDDDDDDDDDDDDDDDDDD  milter 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD SMTPQ 


D  D 

D  D  D  D 

D  D  D  D 

□□□□□□□ 

D 

D 

D 

D  D  milter  □□□□□□□□□□□ 

D 

D 

D 

D  D 

DD 

SMTPQ 

D  D  D  D 

□□□□□□□ 

D 

D 

D 

DDDDDDDDDDDD  milter  □ 

D 

D 

D 

D  D 

D  D 

D  D  D  D 

D  D  D  D 

□□□□□□□ 

D 

D 

D 

DDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D  D  D  D 

D 

D  D  D  D 

milter  口 

sendmail □  □  □ 

D 

D 

D 

DDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D  D  D  D 

D  D  D  D 

□□□□□□□ 

D 

D 

D 

DDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

354  Sendmail 


□  □□□□□□  sendmail □  □  □  root  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  milter  □ 

D  D  D  sendmail  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□  sendmail □  milter  DDDDDDDDDDDDDDDDDDDDD  milter  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  milter  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  sendmail DDDDDDDDDDDDDDDDDDD 

milter  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  milter.org5 
DDDDDDDDDDD  milter  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  postfix6  DDDDDDDDDDD 
D  D  milter  D  DDDDDDDDDDDDD  milter  D  D  sendmail D  DDDDDDDDDDDDD 


DDDDDDDDDD 


DDDDDDDDDD  "D  DDDDDDDDDDDDD  "DD"D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  "DDDDDDDD  sendmail D  DDDDDDDDDDDDDDDD 

D 

D 

D  DD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

DD  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

DD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

sendmail □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

"alpha"  Q  D  "beta"  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDD  sendmail D  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  sendmail D  D  D  D  D  D 


5http://milter.org 
6http: //postfix. org 


Eric  Allman  355 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□ 
□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□(□□□□□□□□□□□□□□□□□□□□□□□□  )□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


17.6  □□□□□□ 

sendmail  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□"□□□□□□"□□□□□□□□□□□□□□□□□□□□□□□□□□□□□DO 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
(口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□  )□□□□□□□□□□ 


D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  TCP/IP  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  "口 

D 

D 

D 

D 

D 

D 

D 

□□□□□"□□□□□□□□□□□□□□□□□□□□□□□□□DO 

D 

D 

D 

D 

D 

DNS  □  □  □  □  □  milter  □□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D  sendmail D  DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

sendmail DDDDDDDDDDDDDDDDDDDDD  root □□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

□  root  □□□□□□□□□□  SMTP  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  SMTP  □  □  □ 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD  root  □□□□□□□□□□□□□□□□  sendmail □ 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  rootD  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

root  口 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

356  Sendmail 


DDDDDDDDDDDDDDDDDDDD  sendmail □  chroot  □□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDD 

D  D  D  D  D  sendmail  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDD  sendmail D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  /etc  DDDDDDDDDDDDDDDDDDDDDDDDDD  /etc/passwd  □  □ 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

DDDDDDDDD  sendmail D  DDDDDDDDDDDDDDDDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDD  sendmail D  DDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 

u 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 

u 

n 

u 

U  U  U  U  U  U  U  l/iji  ■      丄 cimc  jci  lumci 丄丄 UULILJLJLJLJLJLJLJLJLJLJLJLJLJLJLJ 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 

u 

n 

u 

n  n  n  n  n 

u  u  u  u  u 

n 
U 

n 
U 

n 
U 

n 
U 

n 

u 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 

u 

n 

u 

nnnnnnnnnnnn  snam  nnnnnnnnnnnnnnnnnnnn 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 

u 

n 

u 

nnnnnnnnnn  sm  丁  p  n  vrfy  n  n  n  n  n  expn  nnnnnnnnnn 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD  vrfy □□□□□□□□□□ 

n  n 
U  U 

n 
U 

n 
U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

D 

D 

D 

DDDDDDDD 

n 
U 

n 
U 

n 
U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

D 

D 

D 

DDDDDDDDDDDD  MTAQ  DDDDDDDDD DD DDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
U  U 

n 
U 

n 
U 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  HIPPAD  D  D 

n  n 
U  U 

n 
U 

n 
U 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

sendmail D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

(DDDDDDDDDDDD)DDDDDDDDDDDDDDDDDD(DD 

D  D 

D 

D 

D 

D 

D 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□)□ 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  SMTP □  □ 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  SMTPQ  DDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD  SMTP  DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

ID 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

17.7    Sendmail □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  OS  □□□□□□□ 


Eric  Allman  357 


OS  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

1 "~ II "~ II ~~ II ~~ II ~~ II ~~ II ~~ II "~ II "~ II "~ 1 

DDDDDDDDDD 

1 ~ ii ~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~~ ii ~ ii ~ 1 
DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D 

nnnnnnnnnn 

nnnnnnnnnnnnn  c^nHmQii n  n  n  n  n  n 
UUUUUUUUUUUUU  senaman  U  U  U  U  U  U 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDD 

D  D 

□□□□□□□□ 

n  n  l~l  sendmail 门 1~1 

nnnnnnnnnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

nnnnnnnnnn 

UUUUUUUUUU 

nnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

nnnnnnnnnn 

UUUUUUUUUU 

n  (i6nnnnnnnnnnnnnnn)nnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

nnnnnnnnnn 

UUUUUUUUUU 

nnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

nnnnnnnnnn 

UUUUUUUUUU 

nnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

nnnnnnnnn 

nnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n 
U  U  U 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDD 

DDDDDDDDDDD 

sendmail □  □  □  □  □ 

DDDDDDDDDDDDDDD  16DDDDDDD 

D 

D 

D 

D 

D 

DDD 

DDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDD 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


sendmail □ 

D 

□  □□□□□□□□□□□□□□□□□□□□  OS  □□□□□□□□□□□□ 

DDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  /etc/passwd D  /etc/hosts 

DDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDD 

D 

D 

D 

D  D 

D 

D 

D 

D 

□□□□□□□□□□□□□□□□□□ 薦 □□□□□□□□□□□□□□ 

DDD 

D 

D 

D 

D 

DDD  (gethostbyname) DDIPDDDDDDDDDDDDDDDDDDDD 

DDD 

D 

D 

D 

D 

D  MX  □□□□□□□□□□□□□□□□□□□□□  IDA  sendmail □  □  □  □ 

DDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  dbm(3) DDD 

DDD 

D 

D 

D 

sendmail  8DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDD 

D 

D 

D 

D 

□  □□□□□□□□□□□□(□□□□□□□□□□□□□)□□□□□□□ 

DDD 

D 

D 

D 

D 

DD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDD 

D 

D 

D 

D 

DDDDDDDDDDDDDD  sendmail  □□□□□□□□□□□□□□□□ 

358  Sendmail 


□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□『□□□『 

DDDDDDDDDDDDDD 


DDDDDDDD 


sendmail  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

n  n 
U  U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

n  n 
U  U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

n  n 

u  u 

n 

u 

n 

u 

D  D  D  sendmail  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D  D 

n  n 
U  U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

n  n 
U  U 

n 
U 

n 
U 

DDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 

u  u 

n 

u 

n 

u 

D  D  D  D  D MTAQ  DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

n 

u 

n  n 

u  u 

n  n 
U  U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDD  MTA □□□□□□□□□□□□□ 

D 

n 

u 

n  n 

u  u 

n  n 
U  U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDD  sendmail  □□□□□□□□□□□□□ 

D 

n 
U 

n 
U 

n 

u 

n 

u 

n 

u 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  SMTPQ  D  D 

D 

n 

u 

n  n 

u  u 

n  n 

u  u 

n 

u 

n 

u 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

n 

u 

n  n 

u  u 

n  n 
U  U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

n  n 

u  u 

n 

u 

n 

u 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

n  n 
U  U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDD  sendmail D  □□□□□□□ 

D 

D 

D  D 

n  n 
U  U 

n 
U 

n 
U 

D  D  (□□□□  "□□□□□□□,'□□□□□  )□□□□□□□□□□□□□ 

D 

D 

D  D 

n  n 
U  U 

n 
U 

n 
U 

DDDDDDDDDD 

D 

D 

D 

sendmail □  □  TCP/IP  DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD  "DDDD"DDD 

D 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D  D  D  D  sendmail D  DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDD  sendmail □  □  □  □  □  XNS  □  DECnet  □  □  □ 

D 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  TCP/IP  DDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□  DoSD 

D 

D 

D  D 

D  spam DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Eric  Allman  359 


□□□□□□ 


DDDDDDDDDDDDDDDDDDDDD  sendmailQ  DDDDDDDDDDDDDDD 
D  D  D  D  TLS(D 

SMTP  DDDDDDDDDDDDDDDDDDDDD  TCP/IP  DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  (587) DDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
milter  DDDDDDDDDDDDDDD  spam  DDDDDDDDDDDDDD  milter  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D 

D 

D  D  D 

D 

D  D 

D 

D  D  D 

D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

D 

D  D 

D 

D  D  D 

D  D  D 

17.8 

□  □ 

D 

□ 

□ 

□  □ 

□  □ 

D  D  D  D  ? 

D  D 

D 

D  D  D 

D 

D  D 

D 

D  D  D 

D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

D 

D  D 

D 

D  D  D 

D  D  D 

DDDDDDDD  (spam □  □  □  □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

D 

D  D 

D 

D  D  D 

D  D  D 

□□□□□□□□□□□□□)□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

D 

D  D 

D 

D  D  D 

D  D  D 

D  D  D  D  D  sendmail  □□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

D 

D  D 

D 

D  D  D 

D  D  D 

TCP/IP  DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

D 

D  D 

D 

D  D  D 

D  D  D 

□□□□□□ 

D  D 

D 

D  D  D 

D 

D  D 

D 

D  D  D 

D  D  D 

DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D  D 

D 

D  D 

D 

D 

□□□□□□□□□□□□□ 

D  D  D  D  sendmail D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  sendmail D  DDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

sendmail  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

360  Sendmail 


D  D  D  D  D  7Q  Mailbox □  □  □ 

DDDDDDDDDDD7DDDDDDDDDDDDDDDDDDDDDDDDDDD 
"Fromu"  ("u"  D  ASCII  DDDDDDDDD  0x20)  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  "Fromu" □□□□□□□□□□□□□□□□□□□□□□□□□ 
□  □□□□□□  ">Fromu"D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  ">From"  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DD(DDDDDDDDDDDDDDDDDDDDDDDDDDDD)DDDDDDDDDDD 


BSDQ  D  D  D 

口 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

i— i 

D 

D 

i— i 

D 

i— i i— i 

D  D 

D 

r—i 

D 

r—i 

D 

rn  rn  rn  rn  rn 

D  D  D  D  D 

D 

D 

D 

DD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D  (HT,  0x09)  DDDDDDDDDDDDDDDDD  make  □  □  □  □ 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDD  make  □□□□□□  Stuart  Feldman  DDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□  (□□□□□)□□□ 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDD  (SMTP □□□□□□□□□□□□□□ 

D 

D 

D 

D 

D  D 

D 

D 

D 

□  □□□)□□□□□□□□□□□□□□□□□□□□□『□『□□□ 

D 

D 

D 

D 

D  D 

D 

D 

D 

□  □□□□□□  Apache  DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDD  LuaQ  DDDDDDDDDDDDDDDDDDD 

sendmail □ 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  MTA DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

"口  □□□□□,' □□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D  D 

D 

D 

D 

□                                                          mc  □□□□□□□ 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  sendmail □ 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D  D  D 

Eric  Allman  361 


□□□□□□ 


D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
u  u 

n 
u 

n 
u 

n 
u 

n 
u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
u  u 

n 
u 

n 
u 

n 
u 

n 
u 

n  n  n  n  n  n  ^mokn't  nnnnnnnnnnnnnn  vappn  ^  n  n  n  n  n  n  n 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

□  □□□□□□  autoconfQ  DDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD  sendmail  □□□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
u  u 

D 

D 

D 

D 

□ 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n  n 
u  u 

Message- 

-id:  口  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

FromrD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  null □  □  □ 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  nullD  DDDDDDDDDDDDDDDDDDDDDDDDDDCDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D  D 

D  D  D  null D  false  DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D  D 

D 

D 

D 

D  D 

□  □□□□□  Unix  D  D  D  D  D  id  □□□□□□□□□□□□□ 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D 

DD 

sendmail  DDDDDDDDDD  Unix  □□□□□□□□□□□□ 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDD  UnixQ  DDDDDDDD 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

□□□□□□□□□□□ 

362  Sendmail 


Syslog 


sendmail  DDDDDDDDDDDDDDDDDDDDDDDDD  syslog  □  □  □  □  sendmail 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  syslog  DDDDDDDDDDDDDDDD  (□□  UDPDDDDDDDDDDDmpxDD 


D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

□□)□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

DDDDDD)D  DDDDDDDDDDDDDDDDDDDDDDDDD  ASCII 

n  n 
u  u 

D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  7DD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  XMLQ DDDDDDDDDDDDD  XML 

D  D 

D 

D 

D 

D 

D 

DDDD XML DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

DD 

D 

D 

D 

XMLD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

CD  D  D 

DDDDDDDDDDDDDDDD  JavaD  D  C++D  DDDDDDDDDDDDDDDDD 
DDDDDDDCDDDDDDDDDDDDDDDDDDDDDDDDDDCDDDDDDD 


DDDDDDDDDDDDCDDDDDJavaD 

C++ 口 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

□  □□□□□□  sendmail  □□□□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  (□□□□□□□□□□□□□)□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

7D  □  □  □  □  □  □  Unicode  aDDDDDDDDDDDDDDDDDDDDDDD 


Eric  Allman  363 


17.9  ODD 


sendmail MTA 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  31D  D  D  D  "□□□□□□□『□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  spamQ  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  sendmail  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  sendmail 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


364  Sendmail 


D 18 口 


SnowFlock 

Roy  Bryant  and  Andres  Lagar-Cavilla 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDlODDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  (VM) □□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDD  (VMM) □□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDVMDDDDDD 


D  D  D 

D 

DDDDDDDDDDDDDD 

D 

(口  □□□□)□□□□ 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDD 

D 

18.1 

SnowFlock  D  □  □  □ 

D  D 

D 

DDDDDDDDDDDDDD 

D 

DDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDD 

D 

□  □□□□□□□□  口 

口 

D  (口 

D 

D 

D 

D 

D 

D 

D 

D 

□  □)□□□□□□□□□□□□□□□□ 

口 

DDDDDDDD  OS 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDD 

D 

DDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDD 

D 

DDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDD 

D 

DDDDDDDDDD 

D  D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□ 口 

D 

D  D  DD 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDD 

D 

DDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDD 

D 

DDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDD 

D 

DDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDD 

D 

DDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDD 

D 

DDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

n  n  n  n  n  n  n 
U  U  U  U  U  U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n  n  n 
U  U  U  U  U  U  U 

nnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUU 

SnowFlock  口 

DDDDDDDDDDDDDDD  VM  Cloning  □□□□□□□□ 

D 

D 

n 
U 

n 
U 

n 
U 

n  n  n  n  n  n  n 
U  U  U  U  U  U  U 

DDDDDDDD  APIQ  DDDDDDDDDDDDDDDDDD 

D 

D 

n 
U 

n 
U 

n 
U 

n  n  n  n  n  n  n 
U  U  U  U  U  U  U 

OS  □□□□□□□□□□□□□□□□  SnowFlock  □□□□□□ 

D 

D 

n 
U 

n 
U 

n 
U 

□□□□□□□ 

DDDDDDDDDDDDDDDDDD  SnowFlock  □  VM  Cloning  D 

n 
U 

n 
U 

n 
U 

□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
u 

n 
u 

n 
U 

n 
U 

n 
U 

□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDD 

VM  Cloning  □□□□□□□□□□□□□□□□□□□□  VMQDDDDDD 

n 

u 

n 

u 

n 
U 

n 
U 

n 
U 

□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

□□□□□□□ 

DD  OS  DDDDDDDDDDDDDDDDDDDDD DDDDD 

D 

D 

n 
U 

n 
U 

n 
U 

□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

n 
U 

n 
U 

n 
U 

□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDD  VMQ D  D  D 

D 

D 

n 
U 

n 
U 

n 
U 

□  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

DDDDDDDDDDDD VM DDDDDDDDDDDDDDD 

D 

D 

n 
U 

D 

D 

□□□□□□□ 

DDDDDDDDDDDDD  SnowFlock  □  □  □  □  VM  Cloning  □ 

D 

D 

D 

D 

D 

□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

VM 

D  5D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDD 

VM  Cloning  DDDDDDDDDDDDDD  API  □□□□□□□□(:□  C++D  Python  □  □ 
D  JavaQ  DDDDDDDDDDDDDDDDDDDDDDD  SnowFlock  D  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  SnowFlock  D  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDVM DDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDD  Message  Passing  Interface  (MPI)  DDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  MPIQ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  SnowFlock  D  DDDDDDDDDDDDDD  (elastic 

servers)  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□  VM  □□□□□□□□□□□  SnowFlock  □  □  □ 

DDDDDDDDDDD20DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD 


366  SnowFlock 


18.2  VMD  D  D  D  D  D  D 


DDDDDDDDDVMDDDDDDDVMDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□  MAC  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 

VMQ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 爾 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD VMQ DDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD VMM 
D  VMQ  D DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  CPU(VCPU) DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD VMQ DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD VMQ DDDDDDDDDDDDDDDDDDD 
D  D  D  D  D VMQ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD VMDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDVMDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 


SnowFlock  口 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  VMQ 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD  SnowFlock  □  □  □ 

D  D 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

DD  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  SnowFlock  DDDDDDDDD 

D  D 

D  D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Roy  Bryant  and  Andres  Lagar-Cavilla  367 


□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n  n 
U  U 

D  D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  VMQ 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D 

D 

D 

D  D  D  D 

D  D 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□[ 

DDVMDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDD  VMDDDDDDDD  Virtual  Machine  Monitor  (VMM)  Q  VM 

DDDDDDDDDDDDDDDDDDD VMQ DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DVMDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

18.3    SnowFlockD  D  D 

SnowFlock  DDVM  □□□□□□□□□  VM  □□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDD  Unix  □  fork  DDDDDDDDDDDDDDDDDDDDDDD  Unix  □ 
forkQ  DDDDDDDDDDDDDD  VMQ  □□□□□□□  VMQ  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D  Unix  D  fork  DDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

VM 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDVMDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

SnowFlock  DDDDDDDDDDDDDDDD 

•  D D  DD VMQ DDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDD 

DD 

D 

D 

D 

D 

D 

D 

DDDD 

DDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDD VMQDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDD 

D  D  D 

•DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDD 

DDDDDDDDDD 

•DDDDDDDD  (CoW)D  DDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDD 

□□□□□□□ VM □□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

DDDD 

□□□□□□ 


368  SnowFlock 


SnowFlockQ  DDDDXenDDDDDDDDDDXenDDDDDDDDDDDDDDDD 
DDDXenDDDDD  VMM DDDDDDDDDDDDDDDDD  VM □□□□□□□□□ 

DDDDDDDD  (□□□)□□□□□□□□□  "domain  0"  (domO)  □□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  (D  D  D  D  "置 r" 輝 DDDDDDDDDDDDDDDDDDDD  "domain  U"  (domU)  □ 
D  D  D 

Xen  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDD  domO  DDDDDDDDDDDDDDDDDDD 
D  D  D  VMQ DDDDDDDDDDDDDD  VMQ  D D  D  D  D  D  OS  □□□□□□□□□□ 
DDDDDDDDDD  SnowFlockQ  DDDDDDDDDDDDDDDDDDDDDD 

•  VMDescriptoiO  DDDDDDDDDDDDDDDDDDDDDDDDDVMDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□ 

•  Multicast  Distribution  System  (mcdist)D  □□□□□□□□□□□□  VM  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

•  Memory  Server  Process  口  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD  mcdist DDDDDDDD 

•  Memtap  ProcessQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD 

•  Clone  EnlightenmentO  DDDDDDDDDDDDDDDDDDDDDDDDDD  VMQ 
DDDDDDDDDDDD VMM □□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDD 

•  Control  StackQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  SnowFlockQ  □□□□□□  VM  □□□□□□ 

DDDDDDDDD  18.1 D  VMQ  DDDDDDDDDDDDDDDDDDDDDDDDD 
DDD(DD  VM  DDDDDDDDDDDDDDDDDDDDD  (2)  DDDDDDDDDDD 
DDDDDDDDDDDDDDDD  (3)  DDDDDDDDDDDDDDDDDDD  (4)  DDD 
DDDDDDDDDDDDDDDDDD  mcdist  DDDDDDDDDDDDDDDDD  Clone 
Enlightenment  DDDDDDDDDDDDDDDD 

SnowFlockQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  SnowFlockQ  D  D  D  D  D 
DD'DDDDDDDDDDDD DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  GridCentric  Inc. 2  □□□□□□  □ 
DDD  SnowFlock  DDDDDDDDDDDDDDDDD  domO  DDDDDDDDDDDDD 


http: //sysweb. cs . toronto . edu/projects/1 

2 http: //www. gridcentriclabs.com/architecture-of -open- source- applications 


Roy  Bryant  and  Andres  Lagar-Cavilla  369 


Originating  VM 


O  Fetched  page 

□  Fetch  avoided  (heuristics) 


D 18.1:  SnowFlockVM  DDDDDDDDDDDDDDDD 

口  D  SnowFlockD  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  口 
口  □□□□□□□□□□□□□□□□□□□□□□□□  Amazon  EC2Q  DDDDDDDDD 
口 □□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
口  □□□□□□□□□□□□□□□□□□□  18.2  DDDDDDDDDDDDDDDDDD 


18.4    VMOO  □□□□□□□ 

SnowFlock  □□□□□□□□□□□□□□□  VM  □□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDD VMDDDDDDDDDDDDDDDDDDDDD 
口  □□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDVMDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□  VM □□□□□□□□□□□□□□□□□□□□□□□ VM □□□□□□ 

DDDDDDDDDDDDDDDDDD VMDDDDDDDDDDDDDDDDDDDDD 
口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

口  Q  SnowFlock  DDDDDDDDD  Intel x86  □□□□□□  Xen  □□□□□□□□□□□□□ 


rp 


a 


370  SnowFlock 


Parent 
VM 


domO 


mcdist 


Memo 
Server 


Memory 
CoW 


mcdist 


Disk 
Server 


Rules 


Disk 
Drivsr 


Network 
Drivsr 


Xen 

Hypervisor 


domO 


mcdist 


Rules 


Network 
Driver 


Disk 
Driver 


mcdist 


Memtap 


Xen 

Hypervisor 


J 


C  Clone  、 
VM 


Enlightenment 


Page  Presence 
Bitmap 


D 18.2:  SnowFlock  □□□□□□□□□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  [LCWB+llJD  D  D  D  D  D  D 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  200問 


D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

DDDDDDDDDDDDDDDDD  VMQ  D 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

DDDDDDDDDD 1GB  D  VM  □  □  □ 聽 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 

□□□□ VM □□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

800  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D VMQ DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

DDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

DDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

18.5 

□  □ 

□ 

□ 

□ 

□ 

□ 

□  □ 

□ 

D  D 

VMQ  D 

D 

D  D 

D 

D  D 

D 

D  D  D 

VM  口 

D  D  D 

D  D  D  D 

D 

D  D 

D 

D  D 

D 

D  D  D 

D  D  D 

D  D  D 

D  D  D  D 

D 

D  D 

D 

D  D 

D 

D  D  D 

D  D  D 

□  □□□□□□ 


D 

D 

D 

D 

D 

D 

(□□□)□□□ 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D  D 

Roy  Bryant  and  Andres  Lagar-Cavilla  371 


Memserver 口  ロロ  口 


□□□□□□□□□□□□□□□ VM □□□□□□□□□□□□□□ VM □□□□□□□□ 

DDDDDDDDDD  VMD □□□□□□□□□□□□□□□□□□□ □  OSDDDDDDD 
DDDDDDDDDDDDDDDDDDVMDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  memserver  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□  x86  □□□□□□□  (4k  D  □□)□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
1DDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDD VMQ DDDDDDDDDDDDDDDDDDDD 


D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDOSDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

(CoW)  DDDDDXenDDDDDDDDDDDDDDDDVMDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDXenDDDD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD VMD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDD CoW  DDDDDDDDDDDDDDDDDDD 
□  □□□□□□  Linux  DDDDDDDDDDDDDDDDDDDDDDDDDDD 


McdistD  □□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDXDDDNA 

DDDDDDDDDDDDDDYDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDX 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DYDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□ 


372  SnowFlock 


n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D  D 

U  mcclist  UUUUUUUU  onowrlocK  U  U  U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

n  n 

n 

n  n  mr./-iict  n  n  td  nnnnnnnnnnnnn 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

u 

n  n 

u  u 

n 

u 

nnnnnnnnnnnnnnnnnnnnn 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

u 

n  n 

n 

u 

nnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUU 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

u 

n  n 

n 

u 

nnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUU 

n 
U 

n  n 

u  u 

n 

u 

n 

u 

n 
U 

n  n 

u  u 

n 
U 

n 
U 

n 
U 

n 

u 

n 

u 

n 

u 

n 
U 

n 
U 

n 

u 

n  n 

n 

u 

nnnnnnnnnnnnnnnnnnnnn 

UUUUUUUUUUUUUUUUUUUUU 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

n  n 

n 

m -, -j  o+  nnnnnnnnnnnnnnnnnn 
mcclist  UUUUUUUUUUUUUUUUUU 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

u 

n  n 

u  u 

n 

u 

nnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUU 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

u 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

nnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUU 

n 
U 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

1 ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ II ~ 1 

DDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDD 

SnowFlock  口 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D  D  mcdistQ  DDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD  mcdist  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD 


□□□□□□ 

SnowFlock  D  □□□□□□(□□□□□□□□□□□□□□□□□□□□□□□□□□)□□ 

DDDDDDDDDDDDDDD  SnowFlock  VMQ  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  HDFS  (口 
9D  )D  PVFS  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  SnowFlock 


D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  DD 

D 

VM  □□□□□□□□□□□□  CoW  □□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

Roy  Bryant  and  Andres  Lagar-Cavilla  373 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  mcdist  DDDDDDDDD 
DDDDDDDDDDDDDDDDDD4KBDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD VMQ DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


18.6  □□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDmDDDDDDDDDDDDDDDDD 


Memtap  口口  ロロ 


D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDD  memtap  D  D  D  D  D  D  D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

□  □xen  □□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  D  D  D  D  D  memtap  DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D  memtap  DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  memtap  D  D  D  D  D  mcdist  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  SnowFlockVM 
DDDDDDDDD VMQ DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  memtap  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  mcdist  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 

memtap  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDVM DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDVMDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  Intel  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (XenD  D  D  D  D 


374  SnowFlock 


D  D  D  memtapD  DDDDDDDDDDDDDDDDDDDDDDDDD)DDDDDDDD 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n 
U  U  U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnn  Von  n  n  n 
UUUUUUUUUUUUUUUUUUUUUU  Xen  U  U  U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n   m ハ m+ つ n  nnnnnnnnnnnnnnnnnnn 
U  U  U  U  memtap  UUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  Memtap  □□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  VMQ  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD VMQ D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD 

□□□□□□□□□□□□□□□□□□ 


D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D  D 

"enlightenment"  □□□□□□□□□□□□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D  D 

DDDDDDDDDD  (vmallocQ  kzallocQ  get_free_ 

—page  口 

D 

D 

D 

D 

D 

D 

D 

D 

brkD 

□)□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDslabDDDDDD 

DDDDDDDDDDDDDDD  glibc  malloc  D  D  DDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDD 


18.7    VMD  D 


D  D 

D 

D  D 

D 

VMQ 

D  D  D 

D 

D  D 

D 

D  D  D 

D  D  D 

D 

D  D 

D 

D  D  D 

□□□□□□□ 

DDDDDDDDDD 
DDDDDDDDDD 
DDDDDDDDDD 


D 

□ 

□ 

□  □ 

□  □ 

D 

D  D 

D 

D  D  D 

D  D  D 

D 

D  D 

D 

D  D  D 

D  D  D 

D 

D 

□□□□□□□ 

DDDDDDDDDDD 
DDDDDDDDDDD 


API  D  D  D 

VM DDDDDDDDDDDDDDDDDDDDDDDDDDD  SnowFlock API □  □  □  □ 
D 18.1  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Roy  Bryant  and  Andres  Lagar-Cavilla  375 


sf_request_ticket(n) 

•^□□□□□□□□□□□□□□□□□D  m<n 

nnnnnnnnnnnnnnn   +,•  一        n  n 

□  □□□□□□□□□□□□□□  ticket  □  □ 

n  n 

sf_clone (ticket) 

■(■■;ハレハ+nnnnnnnnnnnnnnnnn 

ticket  UUUUUUUUUUUUUUUUU 

1  ― I  I ― I  I ― I  I ― I  I ― 1  1  ― 1  1  ― 1    t  n/A  ^  t  r\ ノ―ヽ 1  ~~ II ~~ II ~~ II ~~ 1 

U  U  U  U  U  U  U  iD(0<iD^m)  u  U  U  U 

sf_checkpoint_parent () 

n  \/"\/rn  nnnnn  n  nn  n  nnnnn  nn  n  r- 

□ vmg □□□□□□□□□□□□□□□□□ c 

nnnnnnnnnnnnnnnnnnnnn 
□  □□□□□□□□□□□□□□□□□□□□ 

门门门门门门门门门门门 
□  □□□□□□□□□□ 

sf_create_clones(C ,  ticket) 

_f  _  n  ―, _  _  rnrnrnrn  r~ir~ir~ir~ir~ir~ir~ir~ir~i r~i 广 门门 

st  一 clone  UUUUUUUUUUUUUU し UU 

nnnnnnrnrn   ~  jr ハ レハハ し n+  。^^ハぃ+パヽ r~i 

UUUUUUUU  st_cneckpoint_parent(;  U 

nnnnnnnnnnnnnnnnnnnnn 
□  □□□□□□□□□□□□□□□□□□□□ 

n  n 

sf— exit  0 

n           f  a  ^-"  t  1~\ノ —ヽ 门 门 门 门 门 门 

U  VM(1<ID<m)  U  U  U  U  U  U 

sf_join(ticket) 

tickei  □□□□□□□□  sf_exit  □□□□□□ 

n  ^Tn  -  nnnnnnnnnnnnnnn 
U  Uu -  り1_1  UUUUUUUUUUUUUU 

DDDDDDDD  ticket  □  □  □  □  □  □  □ 

sf_kill(ticket) 

D  D  D  D  D  ticket  DDDDDDDDDDDD 

DDDDDDDDD 

D 18.1:  SnowFlock  VM  Q  D  D  D  D  D  API 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  VMQ DDDDDDDDDDDDDDDDDDDD VMQ  D DDDDDDDDDDDDD 
DDDDDDDD VMDDDDDDDDDDDDDDDDDDDDDVM DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD100DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD VMD DDDDDDDDDDDDDDDDDDDDDDD 
D  D  DD 

D  D  APID  DDDDDDDDDDDDDDDD  XenStoreQ  DDDDDDDDDD  D  XenStore 


D  D 

D 

D 

D 

D 

D  D 

□□□□□□ 

DDDDDDDDDDDXenDDDD 

D  D  D 

D  D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D 

□□□□□□ 

SnowFlock  Local  Daemon  (SFLD)  □  □ 

D  D  D 

D  D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D 

□□□□□□ 

DDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D  D 

DDDDDDDD 

□  □□□□□□  VMD  DDDDDDDDDDDDDDDD  APID  DDDDDDDDDDD 
D  D  D  CD  C++D  Python  口  □  □  □  JavaQ  D  API  DDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  MPIDDD 
DDDDDDDDDDDDDDDDDD  APIQ  DDDDDDDDDDDDDDDDD  MPIQ 

□  □□□□□□  SnowFlock  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 


376  SnowFlock 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  APIQ  D  D 
DDDDDDDDDDDDDDDDDDDDD 

SFLDQ  D  VMQ  DDDDDDDDDDDDDDDDDDDDD  SFLDQ  DDDDDDDD 
DDDDDDDDDDDDDDDDVMDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  memtap  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□ VM □□□□□□□□□□□□ 

SFLD  DDDDDDDDDDDDD  SnowFlock  Master  Daemon  (SFMD)  □  □  □  □  □  SFMD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  Sun  Grid  Engine  Q  Platform  EGO  D  □□□□□□□□□□□□□□□□□□ 

□  □□□□□ 


□  □□□□□□ 


D 

D  D 

D 

D 

D 

DDDDDDDD VMDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

DD 

D 

D 

D 

□  □□OS 

(D 

D  D 

D  D 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D 

D  D  D 

D 

D  D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  口 

DD 

VM 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD  DHCPD  D  D  D 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D 

□  □□□□□  id  DDDDDDDDDDDDDDDDDDDDD  IPD 

D 

D  D 

D  D 

D  D 

D 

D 

D 

D  D  id  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D  D 

D  D 

D  D 

D 

IPD 

DDDDDDDDDDDDDDD 

IPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD DHCP  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□OS  □□□□□□□ 

DDDDDDDDDD 


Roy  Bryant  and  Andres  Lagar-Cavilla  377 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  DDoS 

DDDDDDDDDDD  (□□□□  2)  □□□□□□□□□  Ethernet  MAC  OUI 3  □  □  □  □  □  □ 

DDDDDDDDDDDDDDDDDDD  OUID  D  VMDDDDDDDVMQ  ID  D  D  D  D 

□  □□□  IP  □□□□□□□□□□□□□□  OUI  □□□□□  MAC  D  D  D  D  D  id  D  D  D  D  D 
DDDDDDDDDDDDDDDDD DD VMD □□□□□  id □□□□□□□□□□□□□ 
D  D  D  D  MAC DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


n  n 
U  U 

n 
U 

n 
U 

D 

D 

n 
U 

n 
U 

n 
U 

D  OUI  D  D  D  D  D  D  D  ebtables  DDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD  HTTP □□□□□□□□□□□□ 

D  D  D 

D  D 

D 

D 

DD 

D 

D 

口 

口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD VMQ DDDDDDDDDDDDDD 

VMQ 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  NAT  □□□□□□□□□□□□□□□□□□□□  VMQ  wel-known 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD VMD DDDDDDDDDDDDDD DDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD VM DDDDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

SFLD  □  ID  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D  MAC  □□□□□□□  IP  D  D  D  D  D  DHCP  DDDDDDDDDDDDD  VM  D  D  D  D 
DDDDDDDDDDDDDDD 


18.8    □  □ 

XenQ  DDDDDDDDDDDD  VMQ  DDDDDDDDDDDDDDDDDDD  SnowFlock 
D  D  D  D  D  VMQ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

SnowFlock  Q  DDOVM  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
SnowFlock  D  DDDDDDDDDDDDDDDDDDDD  VMQ  □□□□□□□  20  D  D  D  D 
DDDDDDDDDD  (□ 

□  □□□□□□□□□□□□□□□□□□)□□□□□□□□□□□□□□□□  SnowFlock  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


3  Organizational  Unique  ID  □□□□□□□□□□□□□□□  MAC  □□□□□□□□□□□ 


378  SnowFlock 


D  D  D 


Cr»™,,t7iA ハレ nnnnnnnnnnnnnnnnnnnnnnn 

bnowrlock  UUUUUUUUUUUUUUUUUUUUUUU 

u 

u 

u 

n 

u 

u 

u 

u 

u 

u 

n 

u 

u 

u 

n      ic  c  nnnnnnnnnnnnnnnnnnnnnnnnn 

U  Kiss  uuuuuuuuuuuuuuuuuuuuuuuuu 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 

u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 

u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnn  ^^^y\  t  n 

UUUUUUUUUUUUUUUUUUUUUUUUU  CPU  u 

n 
U 

n 
U 

n 
U 

n 

u 

n 

u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD  mcdist  □  □  □  □  □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  TCP/IP  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
mcdist  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  mcdist  DDDDDDDDDDDDDDDDDDD  SnowFlockQ  DDDDDDDD 
DDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDD4DDDDDDDDDDDDDD 
GPLv2  DDDDDDDDDDDDDDDDDDDDDDDDDD  GridCentric5  □□□□□□ 
DDDDDDDDDDDDDDDD 


4http : //sysweb . cs . toronto . edu/projects/1 
5http: //www. gridcentriclabs.com/ 


379 


□ 19 口 


SocialCalc 

Audrey  Tang 


DDDDDDDDDDDDDDDDD  30 □□□□□□□□  Dan Bricklin □ 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDD  VisiCalc  □□□□□□□□□  1978  □□□□□□ 

D 

D 

D 

D 

D 

D 

D  D 

D 1979  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  VisiCalc 
DDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDD  Lotus  1-2-3 D  Excel DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDD 
•DDDDDDDDDDDDDDDDDD  Excel  □□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDD 
•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  Wiki  □  □  □  □  Ward  Cunningham  D 1994 
□  □□□□□  Wiki  D  D  2000  □□□□□□  Wikipedia  DDDDDDDDD 

Wiki  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□ 

WikiQ  DDDDDDDD  DanBricklinQ  WikiCalc  □  □□□□□□□  2005  □  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDD  Wiki □□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


19.1  WikiCalc 

WikiCalc  (口 19.1)  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDDD  HTMLQ  □□□  Wiki  □□□□□□□□□□□□□□□□□□□□ 
- Wiki DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D 

D 

D 

D 

D 

D 

D 

- D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  WikiCalc  DDDDDDDD 

D 

D 

D 

D 

- D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD 

- D 

D 

D 

D 

D 

D 

D 

D 

D 

CSS  □□□□□□□□□□□□□□□□ 

- D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

- Wiki DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Page 


Edit  I 


Format      Publish  Tools 


QuitJ 


PAGE  SELECTION 

This  is  where  you  choose  which  page  you  want  to  edit.  You  can  also  change  which  site  you  are  editing. 
Open  a  page  for  editing  by  pressing  the  appropriate  Edit  button.  It  will  be  copied  from  the  server  and  yc 
will  be  editing  that  copy.  Modified  pages  may  be  published  (which  updates  the  copy  on  the  server)  and 
editing  closed  by  pressing  the  appropriate  Publish  button. 


Pages  You  Can  Edit  On  Stte:  Site  setup  by  Demonstration  Setup  (demosite) 
Your  author  name  Is:  demoauthor 

@  Edit  Buttons   OView  On  Web  Buttons   rJ  Delete  and  Abandon  Edit  Buttons 


し Edi り 

(Edit  )  (Publish  ) 


I  [Not  PtMlshed] 


Currentty  behtg 


[Not  Published] 


[Not  Published] 


WikiCalc  Open  for  editing 

Demonstration      Not  modified 
Page 

bar  Open  for  editing 

Last  modified: 


D 19.1:  WikiCalc 1.0  DDDDDDDDD 


382  SocialCalc 


wikicalc.pl 


Sites 


. /wkcdata/sites/X  | 
./wkcdata/sites/Y  I 
./wkcdata/sites/Z 


Pages  of  Z 


Foo 


Bar 


Baz 


Cells  of  Baz 
Al: 100         Bl: =Foo!Al 


A2:  =A1*2 


B2:  =Bar!A2  £ 

Cross-page  references 


D 19.2:  WikiCalc  DDDDDDDD 


Client 


ni iooi- 

200 

: User  changes  Al  to  300... 


Al: 
A2: 


100 
=A1*2 


POST  I 


300| 


A 

300 

圔 

600| 

200  OK 


0"?> 


...A2  updates  automatically 


< ? xml version 
<root>< ! [CDATA[ 
Al:v:300:300: right: 1 
A2:f :600:Al*2:right: 
] ]></root> 


Server 


ajaxsetcell=host : page : Al : 300 


□ 19.3:  WikiCalc  D  □  □  □ 


WikiCalc 1.0  D  □□□□□□□□□(□  19.2)  D  D  D  D  D  D  (D 19.3)  D  D  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□ VPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Audrey  Tang  383 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDD  WikiCalc □□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  <table>D  DDDDDDDDDDDDDDDDDDDDD  ajaxsetcell D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  "Loading..."  D  D  DDDDDDDDDDDDDDDDDDD  19.4  D  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD 


A 

BCD 

1 

lLoading... 

國 

3 

Sample 
financial 
calculation  in 
a  table  with 
borders 

Year 

2006 

2007 

Sales 

Loading... 

170.5 

5 

Cost 

124.0 

136.4 

6 

Profit 

31.0 

34.1 

□ 19.4:  □□□□□□□□□□  □ 


D  D  D  D  <table>D  DDDDDDDDDDDDDDDDDDDDDDDDD 100  x 100  □  □ 


□  □□□□□□  10,000  D  <td>DOMQ  DDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDD  WikiCalc  □□□□□□□ 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

2006  □  □  □  Dan  Bricklin  □  Socialtext  □  □  □  □  □ 

SocialCalc  □  □  □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  Q  WikiCalc  Q  JavaScript  DDDDDDDDDDD 

D  D  D  D  D  Perl D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDD  undo  □  redo  DDDDDDDDDD 

•  JavaScript  □  CSS  DDDDDDDDDDDDDDDDDDDDDDDDD 


384  SocialCalc 


- JavaScript  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDD  SocialtextQ  D  2009  □  □  SocialCalc 1.0 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  SocialCalc 
DDDDDDDDDDDDDDDDDDD 


19.2  SocialCalc 


D 19.5:  SocialCalc  □□□□□□□□□ 
D 19.5  D  D 19.6  □□□□□□  SocialCalc  □□□□□□□□□□□□□□□□□□□□□ 

WMCak  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  HTTP 
GETQ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  JavaScript DDDDDDDDDDDD 

JavaScript  □□□□□□□□□□□□□  MVC  (ModeWiew/Controller)  □□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDD 

Sheet  U  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  CellU  U 
□  □□□(□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□□DO 
DDDDDDDDDDDDDD 
CeWDDDDDDDDDDDDDDDDDDDDDDDDDDD  19.1 D  D  D  D 
RenderContext  DDDDDDDDDDDDDD  DOM  DDDDDDDDDDDDDDDDD 
□□□□□□□ 

TableControlU  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  RenderContext 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDD 

SpreadSheetControl  □□□□□□□□  UI  □□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDD 


Audrey  Tang  385 


SocialCalc 

Class  Diagram 


SpreadsheetControl 

(editable  view) 


EditorScheduleSheetCommands 


has-a 


TableControl 
(vert.+horiz.) 


CellHandles 


has-a 


TableEditor 


SpreadsheetViewer 
(read-only  view) 


z  一  has-a 


!  has-a 

ふ 

Client-side  JavaScript 
Server-side  code 


口 19.6:  SocialCalc  □  □  □  □  □ 


SpreadSheetViewer  □□□□□□□□□□□□□  UI  □□□□□□□□□□□□□□□□□ 

DDDDDDDDD 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□/ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  SocialCalc.  *D  DDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDD  ScheduleSheetCommands DDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□(□□□□□□□□□□□□□□□  19.2  □  □  □  ) 口 
SocialCalc  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□  SocialCalc.  SheetCommandlnfo.CmdExtensionCallbacks  □  □  □  □  □ 
D  D  D  D  D  D  D  startcmdextension  DDDDDDDDDDDDDDDD 


386  SocialCalc 


datatype 

datavalue 

1 Q84 

color 

レ, ーハ し 
black 

bgcolor 

white 

font 

italic  bold  12pt  Ubuntu 

comment 

Ichi - Kyu - Hachi - Yon 

D 19.1: 

D  D  D  D  D 

D  D  D 

set 

sheet  defaultcolor 

blue 

erase 

A2 

set 

A  width 100 

cut 

A3 

set 

A1 value  n  42 

paste 

A4 

set 

A2  text  t  Hello 

copy 

A5 

set 

A3  formula  A1*2 

sort 

A1 :B9  A  up  B  down 

set 

A4  empty 

name 

define  Foo  A1 : A5 

set 

A5  bgcolor  green 

name 

desc     Foo  Used  in  formulas 

merge 

A1 :B2 

name 

delete  Foo 

unmerge 

A1 

startcmdextension  UserDef ined  args 

D 19.2:  SocialCalc  □  □  □  □  □ 


i9.3  nnnnnnnnn 


D 

D 

D 

D 

D  D 

D 

D 

□  □□□□□  SocialCalc  □□□□□□□□□  DOM  □  □ 

D  D  D  D 

D  D  D 

D  D 

D 

D 

D 

DD 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D  D  D 

D  D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

□  □□□□□  TableEditor  D  D  D  D  D  D  D  busy  D  D  D  D 

trueQ  D 

D  DD 

D  D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDD  deferredCommands  D  D  D  D 

D  D  D  D 

D  D  D 

D  D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

19.7  D  D 

D  D  D 

D  D 

D 

D 

D 

D  D 

D 

D 

D  D  Sheet  D  D  D  D  D  D  D  statusCallback  DDDDDDDDDD 

D  D  D 

D  D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

ExecuteCommand:  □  □  □  □  cmdstart  DDDDDDDDDDDDDDDDDDD  cmdend  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDD  RecalcU  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Render  □  □  □  □ 

DDDDDDDDDDDDDDDDDD  (copy  □□□□□□)□  PositionCalculations  D 

DDDDDDDD 


Audrey  Tang  387 


SocialCalc 

Command  Run-loop 

Sheet 


TableEditor 


D 19.7:  SocialCalc  □□□□□□□□□□ 


Recalc  fDDDDDDJ:DDDD  calcstart  DDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 100ms  D  D  D  calcorder  DDDDDDDDDDDDD  calccheckdone  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  calcfinished  D  D  D  D 
DDDDDDDDDDDD  Render  DDDDDDDD 

Render  fDDDDDD^DDDD  schedrender  D  D  D  D  <table>D  DDDDDDDDDDD 
DDDDDDDD  renderdone  DDDDDDDDDDDDDDDD  PositionCalculations 

DDDDDDDD 


388  SocialCalc 


PositionCalculations:  UUUU  schedposcalc  DDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  TableEditorQ  DDDDDDDDDDDDDDDDDDDDDD  doneposcalc 
D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  sheet.  CreateAuditstringQ  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDlDDDDDDDDDD 

Executesheetcommand  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

口  □□□□□□□  Al □□□□□□  "Foo"  DDDDDDDDD  set  A1 text  Ba「  □  □  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDsetAi  text  Foo  D  D  D  D  D 
undo  D  D  DDDDDDDDDDDDD  UndoQ  DDDDDDD  DDDDDDDDDDDD  Al 
口 □□□□□□□□□□□□□□ 


19.4  D  D  D  D  D 

D  D  D  D  D  TableEditor  DDDDDDDDDDDDDDDD  RenderContext  DDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  TableControl □  □ 
口 □□□□□□□□□□□□□ 


D 19.8:  TableControl  □□□□□□□□□□□□□□□□□□□□ 

RenderContext  DDDDDDDDDDDDDDD  WikiCalc  DDDDDDDDDDDDDD 
□  □□□□□  <td>D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  <table>  DDDDDDDDDDD  <td>D  DDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  <td>D  innerHTML  DDDDDDDDDDDDDDDDDDDDD 
<tr>D  <td>  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
口 □□□□□□□□□ 

RenderContext  DDDDDDDDDDDDDDDDDDD  Sheet  DDDDDDDDDDD 
口 □□□□□□□□□□□□□□□□□□□□□□□ 

Audrey  Tang  389 


TableEditor 
RenderContext 


TableControl 


Taiulecontrol 

•  H I as 


TableEditor  D  D  CellHandles  DDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□  (ECell) DDDDDDDDD  fill/move/slide DDDDDDDDDDDDDDD 
DDDDDDDDDDDD  19.9  D  D  D  D 


D 19.9:  DDDDDDDDD  (ECell) 


D 

D 

D 

D 

D 

D 

DDDDDDDDD  InputBox  D  InputEcho  D  D 

D 

DDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D  ECell D  D  D  D  D 

D  D 

D 

D 

D 

D 

D 

(D 19.10  D  D  D  )D 

Above :   InputBox.  Below:  InputEcho 


B 

c 

Above:  InputBox.  Below:  InputEcho 一 

D 19.10:  DDDDDDDDDDDDDDDDDD 

D  D  D  D  SocialCalc  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □  D  D  D  D  Sheet.  ParseSheetSaveQ  DDDDDDDDDDDDDDDDDDDDD  Sheet 
DDDDDDDDDDDD  Sheet.  CreateSheetSave  D  D  D  D  D  D  Sheet  D  DDDDDDDD 

DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  URL  DDDDDDDDDDDDDDD 

recalcQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Sheet.  ParseSheetSave 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD 

19.5  □□□□□□□□ 

DDDDDDDDDDDDD  MIME  multipart/mixed  D  D  D  DD  D  D  text/plain;  cha「set=UTF  -  8 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

390  SocialCalc 


- meta  □□□□□□□□□□□□□□□□□□□□ 

•  sheet  □□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□□□□ 
□  )□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDD 

edit  D  D  D  D  D  D  TableEditor  DDDDDDDDDDD  ECell D  D  D  D 
DDDDDDDDDDDDDDDDDDDDD 

audit  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 19.11  DDDDDDDDDDDDDDDDDDDDDDDDDA1DDD  1874  DDDD 
ECell D  DDDA2QDDD  2"2*43D  D  DDDDDDDD  A3  D  D  D  D  sum(Foo)  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDD  Foo  D  D  D  D  D  A1:A2Q  D 


A 

1 

"Foo" 

172j 

2 

=2^2*43 

3 

2046 

=SUM(Foo) ) 

D 19.11:  DDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

socialcalc : version : 1 .0 
MIME - Version: 1.0 

Content-Type :  multipart/mixed;  boundary=SocialCalcSpreadsheetControlSave 
-- SocialCalcSpreadsheetControlSave 
Content-type :  text/plain ;  charset=UTF-8 

#  SocialCalc  Spreadsheet  Control  Save 
version : 1 . 0 
part: sheet 
part :edit 
part : audit 

-- SocialCalcSpreadsheetControlSave 
Content-type :  text/plain ;  charset=UTF-8 

version : 1 . 5 

cell:A1 :v:1874 

cell:A2:vtf :n:172:2A2*43 

cell : A3 : vtf : n : 2046 ; SUM(Foo) : f : 1 

sheet : c : 1 : r: 3 

font:1 : normal  bold  *  * 

name: FOO: :A1\cA2 

-- SocialCalcSpreadsheetControlSave 
Content-type:  text/plain;  charset=UTF - 8 


Audrey  Tang  391 


version: 1 . 0 
rowpane: 0 : 1 : 1 4 
colpane: 0: 1:16 
ecell:A1 

-- SocialCalcSpreadsheetControlSave 
Content-type :  text/plain ;  charset=UTF - 8 

set  A1 value  n 1 874 

set  A2  formula  2A2*43 

name  define  Foo  A1 : A2 

set 八 3  formula  SUM(Foo) 

-- SocialCalcSpreadsheetControlSave -- 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  Dmpal □  Sheetnode  DDDDDDDDDDDDDDDD 
Excel D  D  (-xls)D  OpenDocument  □  □  (.ods)D  DDDDDDDDDDDDDDDDDDD 
D  D  D  D 

□  □□□□□  SocialCalc  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

SocialCalc  DDDDDDDDDDDDDDDD 


19.6  □□□□□□□□□□ 

DDDDDDDDDD  SocialCalc  DDDDDDDDDDDDDDDD  Wiki  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDD  (D 19.12)D 


'{image:  http://www.socialtext.com/images/logo.png} 


A  1 

4 

•  unordered  list 

1. ordered  list 

Hyperlink  with  label 

O  Socialtext 

D 19.12:  DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D  SocialCalc  □□□□□□□□□□□□ 1.0  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  Socialtext  D  DDDDDDDDDDD  WikiQ  DDDDDDDDDD 
DDDDDDDDDDD  SocialCalc  DDDDDDDDDDDDDDDD 


392  SocialCalc 


DDDDDDDDDDDDD  text-wiki  D  textvalueformat  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
textvalueformat  DDDDDDDDDDDDDDDDDDDDDDDDDD 


□  □  □  □ 

SocialCalc  D  D  D  D  D  D  D  datatype  D  valuetype  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  text/numeric  DDDDDDDD  datatype="f  DDDDDDDDDD 
DDDDDDDDDDDDDDD 

D  D  D  D  Render  D  DDDDDDDDDDDDD  sheet  DDDDDDDDDDDDDD  HTML 

□  □DDDDDDDDDDDDDDD  valuetype  DDDDDDDDDDDD  tQ  D  D  D  D  D 
DDDDDDDD  textvalueformat  DDDDDDDDDDDDDDDnDDDDDDDDD 

□  □  D  D  D  D  nontextvalueformat  DDDDDDDD 

□  □  D  D  D  D  D  textvalueformat  D  D  D  D  nontextvalueformat  DDDDDDDDDDD 

DDDDDDDDDDDDDDD  valuetype  D  DDDDDDDDDDD  19.13  D  D  D  D  D  D  D 


valuetype 


numeric  - 

text   

error 
blank  cell 


datatype 

V 

numeric 

text 

formula 

constant 

valuetype 


n 
n% 
n$ 
nd 
nt 
ndt 
nl 


nontextvalueformat 

General 

Plain  numbers 

#,##0.0% 

[$]#,##0.00 

$20.46 

d-mmm-yyyy 

Date 

[h] : mm: ss 

Time 

で 

DateTime 

logical 

True/ False 

User-defined 

valuetype 

textvalueformat 

text-plain 

Plain  text 

th 

text-html 

HTML 

tw 

text-wiki 

Wiki  text 

tr 

text-wiki 

Rich  text 

tl 

text-link 

Link  to  URL 

text-image 

URL  of  Image 

User-defined 

□ 19.13:  D  D 

text-wiki  DDDDDDDDDDDDDD  SocialCalc.  format— text_for_display  D  D  D  D 


Audrey  Tang  393 


if  (SocialCalc . Callbacks . expand_wiki  &&  /Atext-wiki/ . testOalueformat)) 
II  do  general  wiki  markup 

displayvalue  =  SocialCalc. Callbacks. expand— wiki( 
displayvalue,  sheetobj , linkstyle,  valueformat 

); 


fo「mat_text_fo  「― display  DDDDDDDDD  Wiki  D  D  HTML  DDDDDDDDDDD 
D  D  D  D  D  D  D  SocialCalc. Callbacks  DDDDDDDDDD  SocialCalc  DDDDDDDD 

DDDDDDDDDDDDDDDDDD  WikiQ  DDDDDDDDDDDDDDDDDDDD 
□  □□□□□  SocialCalc  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□ 


WikitextD  □□□□□□ 

□  □  □  Wikiwyg1  DDDDDDDDD  JavaScript  DDDDDDDD  wikitext  □  HTML  □  □  □ 

DDDDDDDDD 

D  D  D  D  expand.wiki  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Wikiwyg  D  wikitext  □  □  □  □  □  HTML  DDDDDDDDD 

var  parser  =  new  Document . Parser. Wiki text () ; 
var  emitter  =  new  Document . Emitter. HTML() ; 
SocialCalc . Callbacks . expand— wiki  =  function(val) { 

II  val D    Wikitext  □  □    HTML  □  □  □  □  □ 

return  parser. parse(val,  emitter) ; 

} 


'https://github.com/audreyt/wikiwyg-j 


394  SocialCalc 


DDDDDDDDDDDDDDDDDDDDDDDD  set  sheet  defaulttextvalueformat 
text-wiki  DDDDDDDDDDDDDDDDDDD 


//  D  D    く  div  id="tableeditor'7>  □    DOM  □□□□□□□[]  口口 
var  spreadsheet  =  new  SocialCalc . SpreadsheetControl() ; 
spreadsheet. InitializeSpreadsheetControl("tableeditor" ,  0,  0,  0) ; 
spreadsheet . ExecuteCommand( ' set  sheet  defaulttextvalueformat  text-wiki ' ) ; 

DDDDDDDDDD  Render  DDDDDDDDDD  19.14  □□□□□□□ 


RenderSheet 

I 

RenderRow 
RendenCell 


Sheet 

defaultvalueformat I text-wiki 


Cell  Ai 


datatype 


valuetype 

valueformat 

displaystring 


d(*o*)b 


FormatValueForDi splay 

 1  


format— text_f or— display 
f 


<P>d(<B>o</B>)b</P> 


Document. Pa  rser.Wikitext 
.parse("d(*o*)b") 


Document.  Emitter-HTML 


D 19.14:  DDDDDDDD 

DDDDDDDDDD  SocialCalc  □  □  □  □  Wiki  □□□□□□□□□□□□□□□ 

*bold*  _italic_  'monospace '  {{unformatted}} 
>  indented  text 
大 unordered  list 
#  ordered  list 

"Hyperlink  with  label "<http : //sof twaregarden . com/> 
{image :  http: / /www. social text . com/ images/logo . png} 

D  D  D  D  Al Q  *bold*  .italic,  'monospace' 口  DDDDDDDDD  19.15  D  D  D  D  D  D  D 
DDDDDDDDDDDDDDDDD 


19.7  □□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  SocialCalc  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Audrey  Tang  395 


,*bold* —italic—  '  monospace 


國  a  I 

1 bold  italic  monospace  | 


□ 19.15:  Wikywyg  □  □ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  ScheduleSheetCommands 
D  D  D  D  D  isRemote  DDDDDDDDDDD 

SocialCalc . ScheduleSheetCommands  =  function (sheet  ,  cmdstr ,  saveundo,  isRemote)  { 
if  (SocialCalc . Callbacks .broadcast  &&  ! isRemote)  { 
SocialCalc . Callbacks . broadcast( ' execute' ,  { 
cmdstr :  cmdstr ,  saveundo:  saveundo 

»; 

> 

//  ScheduleSheetCommands  □□□□□□□  ... 


DDDDDDDDDDDDDDDDDDDDD  SocialCalc  -  Callbacks .  broadcast  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD 

□  □  □  □  □  OLPC(One  Laptop  Per  Child2)  Q  DDDDDDDDDDD  SEETA  口  Sugar  Labs3 
D  D  D  D  D  2009  DDDDDDDDDDDDD  broadcast  D  D  D  D  D  D  D  D-Bus/Telepathy  D 
D  XPCOM  DDDDDDDD  D-Bus/Telepathy  □  OLPC/Sugar  DDDDDDDDDDDDDD 

□  □□□□□  (D 19.16  D  D  D  ) 口 
DDDDDDDDDDDDDDDDDD  Sugar  D  DDDDDDDDD  XO  □□□□□□□ 

D  D  D  SocialCalc  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  Mozilla/XPCOM  DDDDDDDDDDDDDDDDDD  D-Bus/Telepathy  □□□□□□□ 

DDDDDDDDDDDDDDDD 


□□□□□□□□□□□□□□□ 

DDDDDDDDD  OS  □□□□□□□□□□□□□□□  Web:  :  Hippie4  D  D  □□□□□□ 
DDDDDDDD  JSON-over-WebSocket  D  DDDDDDDDDDDDDDDDD  jQueryD  D 
DDDDDDDDDDDDDDDDDDDD  WebSocket  DDDDDDDDDDDDDDDD 

□  □□□□□  口  MXHR  (Multipart  XML  HTTP  Request5)  Q  □  □  □  □  □ 


2http : I /one . laptop . org/ 

3http: //seeta . in/wiki/index . php?title=Collaboration_in_SocialCalc 
4http: //search. cpan.org/dist /Web- Hippie/ 
5http: //about .digg. com/blog/duist ream- and-mxhr 


396  SocialCalc 


XoCom . py 

Gecko/XPCOM 

XoCom. js 

T  SocialCalc 

SocialCalcActivity.py 

□ 19.16:  OLPCD  □  □ 

Adobe  Flash  □□□□□□□□□□□□□□□  WebSocket  □□□□□□□□□□□□□□ 
DDDDDDDDDDDDD  web—socket,  js6  DDDDDDDDDD  Flash  D  D  D  WebSocket 

口 □□□□□□□□□□□□□□□□□□□□□□□□□□□  MXHR DDDDDDDDD 

nnnnnnnnnnnn  19.17  n  n  n  n  n  n  n 


Gecko/XPCOM 


( SocialCalc  j 

1          XoCom . j s 

XoCom . py 


OLPC  XO 
Mesh  Network N 


-.  I  ; 

D-Bus  Tubes  +  Telepathy  | 


D-Bus  Tubes  - 


Telepathy 


SocialCalcActivity^py 


6https: //gi thub.com/gimite/web-socket-js 


Audrey  Tang  397 


UserA 


UserB 


WebSocket 


ScheduleScheetCommand 
set  Al value  n  2046 


Socialcalc .Callbacks 
. broadcast ( ' execute ' ) 


Hippie. Pipe. send 
( "message • t  command) 


Native  WebSocket 
or  web— socket, ]'s 

(Flash  emulation) 
or  DUI.Stream 

(Multipart  XHR) 


rPOST 


multiserver.pl 


Web: :Hippie 


Plack 


Feensum 
〔 EV/libev  ) 


WebSocket 

 1 

or  MXHR 


$(Hippie.Pipe) 
. bind( 'message ' ) 


Native  WebSocket 
or  web— socket, ]'s 

(Flush  emulation) 
or  DUI.Stream 

(Multipart  XHR) 

i 

onRemotGEvent 
( 'execute 1 ) 

, I  、 

ScheduleScheetCommand 
set  Al  value  n  2046 
(isRemote  =  true) 


RenderSheet 


A 

匿 

2046 

D 19.17:  □□□□□□□□□□  □ 


DDDDDDDD  SocialCalc  -  Callbacks .  broadcast  D  DDDDDDDDDDDDDD 
var  hpipe  =  new  Hippie - Pipe() ; 

SocialCalc - Callbacks . broadcast  =  function(type,  data)  { 
hpipe - send({  type:  type,  data :  data  }) ; 

}; 

$(hpipe) . bind ("message . execute" ,  function  (e ,  d)  { 

var  sheet  =  SocialCalc . CurrentSpreadsheetControlObject . context - sheetobj ; 
sheet. ScheduleSheetCommands( 

d.data.cmdstr,  d.data.saveundo,  true  II  isRemote  =  true 

); 

break; 

}); 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDADDDDDDDBDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


398  SocialCalc 


DDDDDDDDDDDDDDDDD  19.18  DDDDDDDDDDDDDDDDDDDDD 
D  D  D  DD 


UserA 


ScheduleScheetCommand 
set  Al value  n  2046 


Send 

2046" 


RenderSheet 


Broadcast 

1874 


ScheduleScheetCommand 
set  Al  value  n 1874 

(isRewote  =  true) 


メ 


multiserver.pl 


RenderSheet 


A 

圜 

1874 

Web: :Hippie 


Plack 


Feersum 

〔 EV/libev  ) 


Conflict! 


UserB 


Send 

" 1874 


ScheduleScheetCommand 
set  Al  value  n 1874 


2046 


ScheduleScheetCommand 
set  Al  value  n  2046 
(isRemote  =  true) 


D 19.18:  □□□□□□□□□□□□  □ 

DDDDDDDDDDDDDDDDD  SocialCalc  □□□□□□□□□  undo/redo  D  D  D  D 
□  □□ 19.19  D  D  DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D  undo  D  D  D  D  D  Redo  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

RedoQ  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDD 

Audrey  Tang  399 


User  A 


ScheduleScheetCommand 
set  Al value  n  2046 


.さ?-ひさ— ―、 
2046  ^ 


Add  to  Pending  queue 


A 

m 

2046 


V1 


Delete  from  Pending  queue 


ScheduleScheetCommand  \« 


multiserver.pl 


UserB 


Send 

/ 1874 


ScheduleScheetCommand 
set  Al  value  n 1874 


Web: :Hippie 


Plack 


Feersum 
( EV/libev  ) 


Add  to  Pending  queue 


set  Al  value  n 1874 


1874 


A 通 

、 

1874J 

2046 


Broadcast 

874 …― ― 


A 

Check  Pending  queue 
Undo  1874  and  mark  for  redo 


ScheduleScheetCommand 
set  Al  value  n  2046 
(isRemote  =  true) 


v 


A  1 

國 

20461 

Resolved! 


Redo  from  Pending  queue 


D 19.19:  DDDDDDDDDDDDDDDD 

□□□□□□□□ 


D 

D 

D  D 

D 

D 

D  D 

D 

D  D 

D 

DDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

□□□□□□ 

D  D  D 

D  D 

D 

D  D 

D 

D 

D  D 

D 

D  D 

D 

DDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

□□□□□□ 

D  D  D 

D  D 

D 

D  D 

D 

D 

D  D 

D 

D  D 

D 

DDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

□□□□□□ 

D  D  D 

D  D 

D 

D  D 

D 

D 

D  D 

D 

D  D 

D 

DDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

□□□□□□ 

D  D  D 

D 

D 

D  D 

D 

D 

D  D 

ロロ  ロロ  ロロ  口  MoveECellCallback  口 

D 

D  D  D 

D 

D 

broadcast  □ 

D  D  D 

D  D 

D 

D  D 

D 

editor. MoveECellCallback .broadcast  =  function(e)  { 
hpipe .  send" 

type :   ,  ecell , , 
data :  e - ecell . coord 

»; 


$ (hpipe) . bind ("message . ecell" , function  (e,  d)  { 
var  cr  =  SocialCalc . coordToCr(d . data) ; 

var  cell = SocialCalc - GetEditorCellElement (editor,  cr.row,  cr. col) ; 

〃...□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□... 


400  SocialCalc 


nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

nnnnnnnnnnnnnnnnnnnnn  k^r-^Qi-  n  n  n  n  n  n  n 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

□  □□□□□  border  □□□□□□□□□□□□□□□□□□□□□□□ 

0 

0 

0 

0 

0 

□  D 

□  D 

DDDDDDDD 

D  D  D  D  CSS3  DDDDDDDDDDDDDD  box-shadow  D  D  D  D  D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDD 

/*□□□□□□□□□□□□□□□□□□□  */ 

box-shadow:  inset  0  0  0  4px  red,  inset  0  0  0  2px  green; 

D 19.20  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 19.20:  DDDDDDDDDDDDDD 


19.8    □  □ 


SocialCalc 1.0  □□□□□□□  2009  □ 

10 D 19  D 

D 

VisiCalc  Q  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  30  □□□□□□□□□  Socialtext  □  □ 

D  D  D  D  D 

D 

Dan  Bricklin  □ 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 


□□□□□□□□□□□□□□□□□□□ 


[BrolO]  D  D  D  D  D  Fred  Brooks  D  D 

D  D 

DDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDD 

D  D 

DDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDD 

D  D 

D  D  D  D  Brooks  D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  (画 animo)  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 


Audrey  Tang  401 


SocialCalc  □  □  □  □  □  Tracy  Ruggles  □□□□  UX  □□□□□□□□□□□□□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

SocialCalc  □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D  Tracy  DDDDDDDDDDDDDDD 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

nnnnnnnnnnnnnnnnnnnnn 

□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□□□□□□□□  Wiki 

D  D  SocialCalc  □□□□□□□□□□□□□□ 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 蘭 □ DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  Wiki □  □  □  □  SocialCalc □  □  □  □  □ 
DDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDD  IRC □□□□□□□□□□□□□□□□□□□□  WikiD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  IRC  DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDD 

□□□□□□□□□□□□□□□ 

Ruby  on  Rails  □□□□□□  David  Heinemeier  Hansson  口  口  37signals  □  □  □  □  口 

D 

D 

D 

D 

D 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D7DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD9DDDDDDDDDDDDDDDD  SocialCalc 
DDDDDDDDDDDDDDDDDDDDD 

DD-DD-QADDDDDDDDDDDDD24DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD8DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  (DDDDDDDDDDD)DDD  (□□□□□□□ 
□□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDD 

□□□□□□□ 

2006  D  CONISLI  Q  □□□□□□  [Tan06]  DDDDDDDDDD  Perl 6  D  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Always  have  a  Roadmap(U 


402  SocialCalc 


□  Forgiveness  >  Permission^  □□□□□□□□□□□□□□□□□□□ 
D  )U  Remove  deadlocks(U  DDDDDDDDDJD  Seek  ideas,  not  consensusfU  DDDDDDDD 

□  Sketch  ideas  with  code(U 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 
SocialCalcQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

SocialCalc  口 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□ 

□□□□□□□□□□□□ 

Socialtext  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDPerl6DDD7DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDD  SocialCalc  □  QA  □  □  □  □  □  □  Ken  Pier  □  Matt  Heusser  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
[GR09]  D  D 16D  D  D  MattQ  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□  DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD 

DDDDDDDDDDD  wikitestQ  DDDDDDDDDDDDDDDDDDDDDDD  DWard 

Cunningham  Q  FITQ  □□□□□□  8DDDDDDDDD  DwikitestQ  DTest:  :WWW:  Mechanize9 

D  Test::  www- Selenium10  DDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

7http: //perlcabal.org/syn/S02.html 
8http://fit. c2.com/ 

9http: //search. cpan.org/dist/Test- WWW- Mechanize/ 
10http: //search. cpan.org/dist/Test- WWW- Selenium/ 

Audrey  Tang  403 


DDDDDDDD  cpal 


DDDDDDDDDDDDDD  SocialCalc  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD 

Socialtext  D  □  SocialCalc  □  □□□□□□□□□  Common  Public  Attribution  License11 □  □  □ 
D  D  Mozilla  Public  License  Q  □□□□□□□  CPALQ  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 

Open  Source  Initiative12  D  Free  Software  Foundation 13  D  □□□□□□□□□□□  D  Facebook14 

D  Reddit15  DDDDDDDDDDDDDDDDDDDDDDDDDDDD  CPALQ  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDD 

CPALQ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  SocialCalc 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

SocialCalc  □□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  SocialCalc □□□□□□□□□□□□□□□□□ 
DDDDDDDDDD 


nhttps : //www. socialtext . net/open/?cpal 

12http: //opensource.org/ 

13http: //www. fsf . org 

14https : //github. com/facebook/platform 

15https: //github. com/reddit/reddit 


404  SocialCalc 


□  20 口 


Telepathy 

Danielle  Madeley 

Telepathy1  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDD  Telepathy  D  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  (communications  as  a  service)  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Telepathy  D  D-Bus  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDD  Telepathy  as  Tubes  (Telepathy  □□□□□□□□)□□□ 

D  D  D  D  D 

Telepathy  □  Robert  McQueen  □  2005  □□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDD  Collabora  □  □  McQueen  □□□□□□□ 

DDDDDDDDDDDDDD 


20.1    Telepathy  Framework  D  □□□□□□□ 

Telepathy  D  DDDDDDDDDDDDDDDDDDDDD  D-Bus  D  D  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Telepathy □  □  □  2 

DDDDDDDDD  Telepathy  □□□□□□□□□□□□□□□□□□  20.1 □  □  □  □ 


1 http : //telepathy . freedesktop . org/Q  □  □  □  □  http : //telepathy . f reedesktop . org/doc/book/  □  □  □  □  □ 

□□□□□□□□□□□ 

2http: //telepathy . freedesktop . org/spec/ 


D-Bus  D  D  D  D  D  D  D 
D-Bus  D  D  DDDDDDDDDDDDDDDDDDDD  GNOME  D  KDEQ  D  D  D 
DDDDDDDDDDDDDDDD  GNU/Li 皿 □  □□□□□□□□□□□□□□ 
D  D  D  D-Bus  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□  IP  □□□□□□□□□□□□□ 
□□□□□□□□□□□□□□□□□□□□□□□□□□ 腦 □□□□□□□□ 
ロロ  ロロ  ロロ  o「g. freedesktop. Telepathy. AccountManage  「口  ロロ ロロ ロロ ロロ 

□  □□□□□□  D-Bus  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□ 
D  D  BluetoothD  DDDDDDDDDD)DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D  D 

DDDDDDDDDDDDD  (DDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D 

□  □□□□□□□□□□□□□  )□□□□□□□□□□□□□ 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  DD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDD  dbus- daemon  DDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D 

D  D  D  D 

D-Bus D 

DDDDDDDDD  D-Bus  DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D 

□  □□□□□  libdbus  D  GDBusD  QtDBusD  □  □  □  python-dbus  □ 

D 

D 

DD 

D  D  D  D 

DDDDDDDDD  D-Bus  DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D 

D  D-Bus DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDD  APID  DDDDDDDDDDD 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  APIQ  D  D  D  D-Bus  □□□□□□ 
DDDDDDDDDD  dbus- daemon  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDD 

D-Bus  □  □□□□□□□  http://www.freedesktop.org/wiki/Software/dbus  D 

DDDDDDDD 


•  Connection  Manager  □  □  Telepathy  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  XMPP  □  □  Connection  Manager  □  □  □  □  SIP  D  D  IRC  □  □  □  □ 
Connection  Manager  DDDDDDDDDD  Telepathy  DDDDDDDDDDDDDDD 


406  Telepathy 


Account 
Manager 


Channel 
Dispatcher 


Connection 
Manager 1 


D — Bus 


Connection 
Manager  2 


Client 


Client 


Client 


ゾ 


D  20.1:  Telepathy  D  DDDDDDDD 


DDDDDDDDDDDDDDDDD  Connection  Manager  □□□□□□□ 
Account  Manager  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDD  Connection  Manager  □□□□□□ 
Channel  Dispatcher  D  D  D  D  D  D  Connection  Manager  D  DDDDDDDDDDDDDD 
□  □□□□□  (□□□□□□□□□□□□□□□□□□□□□□□□)□□□□□□□ 

□□□□□□ 
□□□□□□ 

□  □□□□□ 

□  □□□□□ 
□□□□□□ 

imd  VoiPD 

□□□□□□ 

DDDDDD 
DDDDDDDDDDDDDDD 


D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  Telepathy  DDDDDD  Account  Manager  □  Channel  Dispatcher  DDDDDDDDD 
DDDDDDDDDDDDDDDDDD  Mission  Control □  □  □  □ 

DDDDDDDDDDD  Doug  Mdlroy  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Danielle  Made  ley  407 


门 

□ 

门 
□ 

门 
□ 

门 
□ 

门 
□ 

□  : 口 

门 
□ 

门 
□ 

门 
□ 

nnnnnnnnnnnnnnnnnnn 

□□□□□□□□□□□□□□□□□□□ 

门 门 

□  □ 

门 
□ 

门 
□ 

门 
□ 

门 

□ 

门 

□ 

D  D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

门 

门 

门 
□ 

n 
□ 

n 
□ 

门 门 

: 口 

门 
□ 

门 
□ 

门门 门门 门门 门门 门门 门门 门门 门门 门门门 
□  □□□□□□□□□□□□□□□□□□ 

门 门 

门 
□ 

门 
□ 

门 
□ 

门 
□ 

门 
□ 

n 
U 

n  n  n 
U  U  U 

门 

□ 

门 

□ 

门 

□ 

□  □ 

门 

□ 

门 

□ 

门 

□ 

门门 门门 门门 门门 门门 门门 门门 门门 门门门 

□□□□□□□□□□□□□□□□□□□ 

□  □ 

[― 1 

□ 

门 

门 

门 

门 

n 
U 

n  n  n 
U  U  U 

n 

n 

n 

n  n 

n 

n 

n 

n  n  n  n 
□  □  □  □ 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

•  n  n 
•U  U 

n 
U 

n 
U 

n 
U 

n  n  n  n  r\  "Dnc  nnnnnnnnnnnn 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 

u 

n  n  n 

u  u  u 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnn 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
u 

n  n  n 
u  u  u 

n 

u 

n 

u 

n 

u 

n  n 

u  u 

n 

u 

n 

u 

n 

u 

Connection  Manager  UUUUUUUUUU 

n  n 

u  u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 
U 

n  n  n 

u  u  u 

门 

□ 

门 

□ 

门 

□ 

门 门 

n 
□ 

门 

□ 

门 

□ 

□  Telepathy  □□□□□□□□□□□□□□ 

门 门 

门 

□ 

门 

□ 

门 

□ 

门 

□ 

门 

□ 

n 
U 

n  n  n 
U  U  U 

门 

□ 

门 

□ 

门 

□ 

门 门 

□  □ 

门 

□ 

门 

□ 

门 

□ 

门门 门门 门门 门门 门门 门门 门门 门门 门门门 

□□□□□□□□□□□□□□□□□□□ 

门 门 

□  □ 

[― 1 

□ 

门 

□ 

门 

□ 

门 

□ 

门 

□ 

n 
U 

n  n  n 
U  U  U 

D 

D 

D 

D  D 

D 

D 

D 

门 
□ 

n 
□ 

门 

□ 

n 

n 

门 门 

门 

□ 

: 口 

门 

□ 

门门 门门 门门 门门 门门 门门 门门 门门 门门门 

□□□□□□□□□□□□□□□□□□□ 

门 门 

门 

门 

门 

门 

门 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

□  D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

□  : 口  □  Telepathy  □□□□□□□□□□□ 

□  D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

(GNOME  Q 

KDE 口 

MeegoD  Sugar  D  D)DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□ 

DDDDDDDDD  Connection  Manager  DDDDDDDDDDDDDDDDDDDD 
D-Bus  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  SELi 皿 □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Connection  Manager  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDIMDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  20.3 □□□□□□□ 


20.2    Telepathy  ODD  D-Bus  □  □  □  □ 

Telepathy  D  □□□□□□□  D-Bus  D  D  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  D-Bus  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDD  /org/f  reedesktop/Telepathy/AccountManager  3  Q  D  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□  org.  f  reedesktop.  DBus .  Properties  □  ofdT.  Connection  □  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


408  Telepathy 


Fetch 


org. f reedesktop. f oo. Jack 


method 


f reedesktop. dbus. introspectable 


/org/f reedesktop/foo/jack 


□  20.2:  D-Bus  DDDDDDDDDDDDDDDDDDDD 


D-Bus  DDDDDDDDD 
D-Bus  DDDDDDDDDDDDDDDD  D-Bus  DDDDDDDDDDDDDD 
D  D  D  D  D-Bus  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD  org.  freedesktop.DBus.  Introspectable  DDDDDDDDD 

D  D  D  D  D 

DDDDDDDDDDDDDD  (/ofdT/AccountManager DD)DDDDDDDD 
DDDDDDDDDD  D-Bus  DDDDDDDD  D-Bus  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  DD 


Telepathy  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□XML 

D  D  D  D  D-Bus  IDLD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D 

Telepathy  □□□□□□□□□□□□□□□□□□□□□□□□□□□  Mission  Control □  □ 
D  D  D  D  D  Account  Manager  D  Channel  Dispatcher  □  DDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Client □  □  □  □  □ 


/org/f  reedesktop/Telepathy/Q  org. freedesktop. Telepathy  D  of  dT  口  ロロ  ロロ  口 


Danielle  Made  ley  409 


DDDDDDDDD  Channel  Dispatcher  □□□□□□□□□□□□□□□□□□□□□□□ 
D  D  D  Connection  Managers  DDDDDDDDDDDDDDDDDD  Account  Manager  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D-Bus  D  DDDDDDDDDDDDDD(DDDDDDDDDDDDDD)DD  Telepathy  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  of  dT.  Connection 
D  of  dT.  channel  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDD  Channel  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDD  D-Bus □□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDD  Channel  DDDDDDDDD  ChannelType  DDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□ 
DDDDDDDDDDDDD  D-Bus  DDDDDDDDDD  )DDDDDDDDDDDDDD 

Connection  Manager  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDD  interfaces  DDDDDDDDDDDDD 

of  dT.  Connection  □  □  Connection  DDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  ofdT. Connection.  Interface.  Avatars  (DDDDDDDDDDDDDDDDDD) 
D  odfT.Connection.  Interface. ContactList(D  DDDDDDDDDDDDDDDDD— D 
DDDDDDDDD)DDD  odfT . Connection . Interface . Location  (DDDDDDDDD 
□  □□□□□□)□□□□  ofdT.  Channel □  □  Channel  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDD  ofdT. Channel. Type. Text D  odf T.Channel. Type. Call □ 
D  D  odfT .  Channel . Type .  FileTransf  er  D  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  odfT. Channel.  Interface. Messages  (D  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDD)D  odfT .  Channel . Interface .  Group  (D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD) 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  ofdT. channel □ 

ofdT.  Channel.  Type.  Text  ODD  Channel . Interface .  Messages  DDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  odfT. 

Channel. Interface. GroupQ  DDDDDDDDDD 

D-Bus  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  (□□□□□  D-Bus  D  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  )DDDDD  Telepathy  □□□□□□□ 
DDDDDDDD  Telepathy  DDDDDDDDDDDDDDDD  DDDDDDDD 


410  Telepathy 


D-Bus  DDDDDDDDDDDDDDDDD  Interfaces  DDDDDDDD 


D  D  D  D 

D 

D 

D 

D  D  D  D  D  D  Interfaces  D  D  D  D  D  D  D 

D  D  D  D  D 

D  D  D  D  D 

D-Bus D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDD  D-Bus 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

□  □  D  D  D  D  telepathy-glib  □  □ 

□  D-Bus  D 

D 

D 

D 

D 

D 

□  □  □  □ 

□ 

□ 

□ 

D 

D  D 

D-Bus  DDDDDDDDDDDDD 

n  n  n  n  n 

i_i  i_i  i_i  i_i  i_i 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDD  D-Bus 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

D  D  D  D  D  D  Interfaces  Q  D  D  D  D 

D  D  D  D  D 

D 

D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

D  D 

□□□□□□ 

D  D  D  D 

□  □□□□□  Telepathy  □□□□□□□  (□□□□□□□□□□)□□□□□□□□□  Con- 
nection Manager  DDDDDDDDDDDDDDDDDD  (connection,  handle  type,  handle)  □ 

DDDDDDDDDDDDDDDDD 


Danielle  Madeley   41 1 


DDDDDDDDDDD  Specification  IDL  □□□□□□  □ 
D  D  D  D-Bus  specification  IDL  D  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  D-Bus  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D 

D 

D 

D 

D  D 

DDDDDDDDDD  XML  □□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD  D-Bus APIQ 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDD 

D-Bus 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D  D  D-Bus  DDDDDDDD  (ii)  (口  □□□□□□□  int32  □ 

D 

D 

D 

D 

D  D 

□□)□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D  D 

D  a{sa(usuu)}D  DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

uint32Q 

stringQ  uint32  □  □  □  uint32  □  □  □  □  □  (□  20.3)D  □□□□□□ 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDD 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D  D  D  D-Bus  DDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDD 

D  D 

D 

□  □□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D  D 

D 

)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDD  escherOtuxedo - cat/bed D  escher@tuxedo.cat/litterbox 

D  D  XMPP  D  DDDDDDDDDDDDDDD  (escher@tuxedo.cat)  D  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD 


412  Telepathy 


Type  (ii) 


Type  a{sa(uusu)} 


Structure: 

[int32 

|int32 

Map: 


string  I 


Array: 


Structure: 
(uint32  ) 
(uint32  ] 
( string  ) 
fuint32  j 


Structure: 


I  strmq  j  ―  A 


rray: 


D  20.3:  D-Bus  Q  (ii)  口  口  □  □  a{sa(usuu)}D 


Telepathy  Q  □□□□□□ 

Account  Manager  Q  Channel  Dispatcher  D  DDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  Telepathy  DDDDDDDDDDDDDDDDDD  Connection  Managers  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Telepathy  □□□□□□□  Connection  Managers  □□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDD  D-Bus  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□  □□□□□  D-Bus  DDDDDDDDDDD  D-Bus  DDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDD  Connection  Managers  □□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  Telepathy  □□□□□□□□□ 
DDDDDDDDDDDDDD(DDDDDDDDDDDDDDDDDDDDDDDDD)D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Account 
Manager  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD 

Channel  Dispatcher  □□□□□□□□□  Telepathy  DDDDDDDDDDDDDDDDDD 
D  D  ofdT. Client  Q  DDDDDDDDD  of  dT.  Client.  Logger  D  D  D  D  D  D  D 


Danielle  Madeley  413 


DDDDDDDDDDDDD 

Connection  Managers  DDDDDDDDDDDDDDD  D-Bus  DDDDDDDDDD 
□  □□□□□  Connection  Manager  D  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  Connection  Manager  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D-Bus  Q  DDDDDDDDD  ofdT.  Connection  D  DDDDDDDDDDD 
DDDDDDDDD 


D-Bus  D  □□□□□□□□ 


D 

D 

D 

Telepathy  □□□□□□□□  D-Bus  □□□□□□□□□□□□□□□□□□□ 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDD  Telepathy  DDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD  D-Bus □□□□□□□□□□□□□□□□□□□□□□ 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDD  Getlnterfaces  D  GetChannelType  DDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  D-Bus  □  □  □ 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  GetAll  DDDDDDDD 

D 

D  D 

D 

D 

D 

D 

□□□□□□ 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

□  (□□□□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□[ 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

D  D  D  D  (20.4  D  □□□)□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Telepathy  D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  RequestAvatar  D  D  D  D  D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D 

D 

D 

D 

Connection  Manager  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  (口 
□  □□□□)  口  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


414  Telepathy 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n   a  、  i つ ■* "つ k~d ハ + 『 ハ * , ハ/" i  nnnnnnnnnnnnnnnnnnn 
U  AvatarKetneved  UUUUUUUUUUUUUUUUUUU 

n  n 
U  U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n  n 
U  U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n 
U  U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n  n 
U  U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

a、/。+ つ!" Do+ owo*"j  nnnnnnnnnnnnnnn 
AvatarKetrievea  UUUUUUUUUUUUUUU 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD  (DDDDDDDDDDDDDD)D 

D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD  Telepathy DDDDDDDDDDDDDDD 

D  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

(GetAliases  D  D  D  D  D  APIDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D)DDDDDD10DDDDDDDDDDDDDDDDDD 


D 

D 

D 

D 

D  D  D 

D  D  D  contacts  DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD  Telepathy  D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

□  □DDDDDDDDDDDD  GetContactAttributes  D  D  D  D  D  D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D  D 

D  D  D  D  GetContactAttributes  DDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

connection[CONNECTION— INTERFACE— CONTACTS].  GetContactAUributes( 

[ 

1 , 

3  ],  # 

contact  handles 

[ "ofdT. Connection . Interface. Aliasing" , 
"ofdT. Connection . Interface. Avatars" , 
"of dT. Connection . Interface. ContactGroups" , 
"ofdT. Connection . Interface. Location" 

], 

False  #  don't  hold  a  reference  to  these  contacts 


DDDDDDDDDDDDDDDD 

{ 1 : {  'ofdT. Connection . Interface. Aliasing/alias' :   ' Harvey  Cat' , 
'ofdT. Connect ion. Interface. Avatars/ token' :  hex  string, 
'ofdT. Connection. Interface. Location/location , : location, 
' ofdT. Connect ion. Interface. ContactGroups/groups' :  [  'Squid  House' ] 
'ofdT. Connection/contact-id ' :  'harvey@nom.cat' 

2:  {  'ofdT. Connection . Interface. Aliasing/alias' :   ' Escher  Cat', 
'ofdT. Connection. Interface. Avatars/ token' :  hex  string, 
'ofdT. Connection . Interface. Location/location , : location, 
'ofdT. Connection . Interface. ContactGroups/groups' :  口, 
' ofdT . Connection/contact-id ' :  ' escher@tuxedo . cat ' 

3:  {  'ofdT. Connection. Interface. Aliasing/alias' :  'Cami  Cat', 


Danielle  Made  ley  415 


20.3  □□□□□□□□□□□□□□□□□□□□□ 


□□□□□□ 


D 

D 

D 

D 

□  □□□□□□  Connection  Manager  DDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D  D  D  D  XMPPQ  D  D  D  D  escher@tuxedo.cat  Q  D  D  cami@egg.  cat  Q  D  D  D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  D-Bus □□□□□□□□□□□ 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD  Account  Manager  DDDDDDDDD 

D  D 

D 

D 

D 

D  D  D  D  D 

n 

u 

n 

u 

n 

u 

n 

u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  D-Bus □ 

D  D 

D 

D 

D 

D  D  (DDDDDDDDD)DDDDDDDDDDDDDDD  interfaces  D  D  D 

D  D 

D 

D 

D 

D  D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDD  Account  Manager  DDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

□  □□□□□  Account  Manager  DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDIMDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DD(DDDDDDDDDDDDDDDD)DDDDDDDDDDDDDDDDDDD  D-Bus 
DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  id DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  (■□□□□□□)□□□□□□□  ID  DDDDDDDDDDDDDD 
D  D  D  Group  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD 

DDDDDDDDDDDDDDD  Connection  Manager  DDDDDDDDD  (D  D  D  Channel 

Dispatcher  D  DD)DDDDDDDDDDDDDDDDDDDDDD(DDDDDDDDD)D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Channel  Dispatcher  □  □ 
DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  channelType DDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□(□□□□□□□□□□□□□□□)□□□□□□□□□□□□□□ 

DDDDDDDDD  Channel.  Type  D-Bus  D  DDDDDDDDDDDDD  Channel. Type. Text 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□)□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  interfaces  □□□□□□ 


41 6  Telepathy 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDD  20.1  DDDDDDDDDDDD 


odfT 

Channel 

DDDDDDDDDDDDDDDDDD 

odf T.Channel .Type. Text 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D 

odfT 

Channel 

Interface. Messages 

DDDDDDDDDDDDDD 

odfT 

Channel 

Interface. Group 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

odfT 

Channel 

Interface. Room 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

□  20.1:  DDDDDDDDDD 


D 

D 

D 

D 

D  D 

D 

D  D  Telepathy  □□□□□□□□□□□□□□□□□□□ 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDD  (DDDDDDDDDD 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

□□□□□□□□□□□□)□□□□□□□□□□□□□ 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDD  Group □□□□□□ 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDD DDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDD/DD /DDDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D 

D 

DD 

D 

DDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

(DDDD)DDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

D 

DD 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDD 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

Contacts 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDD 

D 

D 

D 

D 

DD 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDD 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

DDDD 

D 

D 

DD 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

DDDD 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

Danielle  Made  ley  417 


□  □□□□□□□□□□□□□□□□□□□□□□□□□□□[ID 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
(口  □□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD  Telepathy  D  DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  ChannelType  □□□□□(□  20.2)  □□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD  Telepathy  □□□□□□  requestable  DDDDDDDD 


D  D  D  D  D 

D 

of dT. Channel . ChannelType 

of dT . Channel . Type . Text 

of dT. Channel . TargetHandleType 

Handle_Type_Contact  (1) 

of dT. Channel . TargetID 

escher@tuxedo.cat 

D  20.2:  DDDDDDDDDDD 


DDDDDDDDDD  20.3 DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□(□□□□□□□□□□□□□□□□□□□□□□□□)  口 


□  □  □  □  □ 

D 

of dT. Channel . ChannelType 

of dT. Channel .Type. FileTransfer 

of dT. Channel . TargetHandleType 

Handle_Type_Contact  (1) 

of dT. Channel . TargetID 

escher@tuxedo.cat 

ofdT. Channel. Type. FileTransfer. Filename 

meow. jpg 

of dT. Channel . Type . FileTransfer. ContentType 

image/jpeg 

□  20.3:  DDDDDDDDDDDDDDDD 


DDDDDDDD  (create)  DDDDDDDDDD  (ensure)  DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


418  Telepathy 


DDDDDDDDDDDDDDDDDDDDDDDD)DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD 

(□  □□□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Telepathy D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 


D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D 

D 

D  D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D 

D 

D  D 

□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D 

D 

D  D 

D 

D(D:DDDDDDDDD)D  DDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□  (□:□□□□□□□□□□□□□□□□□□□□ 
SMS  D  D  D  D  D  D  D  D  )D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□ 
□□□□□□□□□□□□□□□□□□□□□□□□□□□)□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Danielle  Madeley  419 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  20.4 □□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDD  (□□□□□  20.3 

□  □  D  D  D  D  TargetHandle  D  InitiatorHandle  DDDDDDDDDDDDDDDDDDD 

DDDDDDDD 


D  D  D  D  D 

D 

ofdT. Channel .ChannelType 

Channel. Type. Text 

of dT. Channel . Interfaces 

[ Channel . Interface . Messages , 

Channel . Interface. Destroyable, 

Channel - Interface . ChatState  ] 

ofdT. Channel .TargetHandleType 

Handle_Type_Contact  (1) 

of dT. Channel. TargetID 

escher@tuxedo.cat 

ofdT. Channel . InitiatorlD 

danielle . madeley@collabora .co.uk 

ofdT . Channel . Requested 

丁  rus 

ofdT . Channel . Interface . Messages . 

[ text/html,  text/plain  ] 

SupportedContentTypes 

□  20.4:  DDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Channel  Dispatcher 


D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□ 

D 

D 

D 

D 

D  D 

D 

DDDDDDDDDDDDDDDD)DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D  Channel  Dispatcher  □  □  Account  Manager  D  DDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D  Channel  Dispatcher  D  DDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□  (□□□□□□□□□□□□□□□□□□□□□□□□)□□ 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  (□□□□□□□□□□□□□□□□□□□□□□□□)  口 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDD  Channel  Dispatcher  D  D  D  D  Channel 

Dispatcher  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  NewChannels 
DDDDDDDDDDDD  Channel  Dispatcher  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  Channel  Dispatcher  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD 


420  Telepathy 


Channel  Dispatcher  selects  a  client 
to  handle  the  channel,  which  may  be 
the  requesting  program. 


D  20.4:  DDDDDDDDDDDDDDDD 

□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Channel 

Dispatcher  Q  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□)□ 

□  □□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□■DO 

DDDDDDDDDDD  (VolPQ  □□□□□□□□□)□□□□□□□□□□□□□□□□ 

□  □□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□DO 

□  □□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□DO 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  D-Bus  □□□□□□□□□□ 

Client. Observer!]  Client .  Approver  □  □  □  Client .  Handler  □  DDDDDDDDDDDDD 
DDDDDDDDDDD  Channel  Dispatcher  □□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDD 

Channel  Dispatcher  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□[ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDD  Channel  Dispatcher  □  □ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

Danielle  Made  ley  421 


D  D  D  D  D 

D 

of dT . Channel . ChannelType 

Channel . Type . Text 

of dT . Channel . TargetHandleType 

Handle_Type_Contact  (1) 

□  20.5:  DDDDDDDDDD 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□(□□□□□□□□□□□□)□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  20.5 □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  D-Bus  D  DDDDDDDDDDDDDDDDDDDDDD  ofdT. client  □ 
D  D  D  D  (D  D  D  D  of  dT.  client.  Empathy,  chat)  D  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  Channel  Dispatcher  DDDDDDDD 

DDDDDDDDDDDDDDDDDD  Channel  Dispatcher  □□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Telepathy D 
DDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDD 


20.4  □□□□□□□□□□□□ 

Telepathy  □  D-Bus  API  □  □  □  □  D-Bus  DDDDDDDDDDDDDDDDDDDDDD 


D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

Telepathy  DDDDDDDDDDDDDDDDDD  Telepathy  □ 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D  D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

422  Telepathy 


□  □□□□□  Telepathy  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  GLib  D  Qt4D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Python  D  D 

□  □□□□□  CD  Hbtelepathy  □  □  □  □  □  GLib  □  Qt4  □□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDD 


□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDD  D-Bus  □□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D-Bus  DDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D-Bus  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  D-Bus  D  D  GTK+D  QtD  D  D  GLibQ  D  D  D  D 
DDDDDDDDDDDDD 

D-Bus  DDDDDDDDDDDDDD  dbus-glib  DDDDDDDDD  API  □□□□□□□□ 
DDDDDAPIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
telepathy-glib  API  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  API  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  telepathy-glib  D  □□□□□□□ 

D  D  D  Telepathy  □□□□□□□□(:□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D  D  typedefQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD 

typedef  void  (*tp_conn_get_self_handle_reply) ( 
DBusGProxy 大 proxy, 
guint  handle , 
GError  *error, 
gpointer  userdata 

); 

DDDDDDDDDDDDDCDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  JavaScript  D  Python  D  DDDDDDDDDDDDDDDDD  ValaQ  D  D  CD  D  D  D 

DDDDDDDDDDDDDDDDDD  GLib/GObject  □  □  □  □  API  □  GObject-Introspection 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  GLib 
DDDDDDDDDDDDDDDDDDDDDDD 


□□□□□□□□□□□□ 

D  D  D  D  D  Telepathy  D  DDDDDDDDDDDDDDD  D-Bus  APID  DDDDDDDDD 
□  □□□□□□  D-Bus  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Danielle  Made  ley  423 


D  D  D  D  D-Bus  DDDDDDDDDDD 

dbus-glib  □  □  □  D-Bus  □□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D  request-and-blockQ  DDDDDDDDDDDDDDDDDD  D-Bus  D  D  D  D 
□  □□□□□  I/OD  DDDDDDDDDDDDDDDDDD  D-Bus  □□□□□□ 
DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD 


•  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 

u 

n 

u 

n 

u 

n  n  n  n ん n  nnnnnnnnnnnnnnnnnnnnn\nnn 

uuuu  (uuuuuuuuuuuuuuuuuuuuuu 川 uu 

n 
u 

n 
u 

n 
u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
u 

n 
u 

n 
u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 
u 

n 
u 

n 
u 

nnnnnnnnnnnnnnnnnnnnn 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDD 

•  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

□  □□□□□□□□□□□□□□(□□□□□□□□□□□□□□)□ 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  (D  D  D  D  D  D  D  UnknownMethod  DDDDD)DDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  D-Bus 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

- D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDD  D-Bus  □□□□□□□  D-Bus  D  D  D  D 

(Telepathy  □□□□□□□□)□□□□□□□□□□□  Channel  Dispatcher  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  Channel  Dispatcher  DDDDDDDDDDDDDDDDDDDD 
□  □□□□□  (D  D  D  D  Account  Manager  DDDDDDDDDDDDDDD 
DDDDDDDDDDD  )D 


424  Telepathy 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD 

D  D  D  Telepathy  DDDDDDAPIDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□ 
□□□□□□□□□□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□ 
(口  □□□□□)□□□□□□□□□□□□□ 


D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  (interfaces □  □ 

D  D 

D 

D 

D 

D 

□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD  ("Escheris typing...' 

□□)□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
•DDDDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
•DDDDDDDDDDDDDDDDDDDD 


DDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

20.5    □  □  □ 

Telepathy  □□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDD  Telepathy  DDDDDDDDDDDDDDDD 

•  Account  Manager  □  Channel  Dispatcher  DDDDDDDDDDDDDDD  Mission  Con- 
trol Account  Manager  □  Channel  Dispatcher  □□□□□□□□□□)□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□)□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDD 


Danielle  Made  ley  425 


•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Channel  Dispatcher  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Chan- 
nel Dispatcher  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


门 

□ 

门 
□ 

门 
□ 

门 
□ 

门 门 

门 
□ 

门 
□ 

门门 门门门 /门 门门 门门 门门 门门 门门 门门 门门 门门门 
□  □□□□  (□□□□□□□□□□□□□□□□□□ 

门 门 

门 

门 

n 

门 门 

|— 1 

D 

D 

D 

T—l 

u 

D  D 

D 

D 

门门门门门门门门 ヽ 门 

D 

D 

D 

u 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

□  □□  (DDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDD 

- D 

D 

D 

D 

DD 

D 

D 

DDDDDDDDD  Account  Manager  □□□□□□□ 

D  D 

D 

D 

D 

D  D 

DD 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

DDDDDDDDDDDD 

20.6  Telepathy 

Telepathy  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  4D  Telepathy  D  D  D 

D  D  D  D  D  Telepathy  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Telepathy 


D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  Connection  Manager  DDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D  D  D-Bus  DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

□  □□□□□□  XEP-0016  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  com.  example.  PrivacyLists  DDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

D  D-Bus DDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

□  □□□□□  (DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  )  口 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  (D 

D 

D 

D 

D  D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  )D 

4 Extensible  Messaging  and  Presence  Protocol  (XMPP)  □□□□□□□ 


426  Telepathy 


DDDDDDDD 

Telepathy  □□□□□□□□□□□□  One  Laptop  Per  Child  □□□□□□□□□□ 

D  XMPP  DDDDDDDD  (XEP)  □□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDD  Telepathy-Gabble  (XMPP  Connection 
Manager)  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDXEPDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D 


20.7  □□□□□□□□□□□□□□□□□□□□ 


D 

D 

D 

D 

D 

Connection  Manager  □  C/GLib  DDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  Connection  Manager  DDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D-Bus  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD  D-Bus □□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  Telepathy-GLib  □  □  Connection  Manager  DDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  Channel  Manager  □□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D  D  Channel  Manager  □  DDDDDDDD  BaseConnection  □ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

C/GLib  D  DDDDDDDDDDDD  mixing  DDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  DD  APIQ  DDDDDDDDDDD  APIQ  DDDDDDDDD  APIQ  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  mixinD  D  D-Bus  D  DDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD  D  of  dT .  Connection .  Interface .  Contacts 
D  of  dT .  Channel . Interface .  Group  D  DDDDDDDDDDDD  mixin  D  DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  mixin □  □  □  □ 


20.8    □  □ 

Telepathy  □□□□□□□□□□□□□□  API  D  D-Bus  □□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDD  D-Bus  □□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  Telepathy  D  D  D  D  D-Bus  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Danielle  Made  ley  427 


TpBaseConnectionManager 


TpBaseConnection 


channel-managers 


Connection. Interface. Avatars         Connection. Interface. Aliasing 


MyTextChannelManager 

channels 


-o[   TpChanne LManager 


D  20.5:  DDDDDDDDDDDDDDDDDDDDDD 


Mixin  DDDDAPIDDDDDDD 
mixin      Q    D  D  D       Telepathy  DDDDDDDDDDDD 
TpPresenceMixin    D  D  D  D  Telepathy  DDDDDDDDDDDDDDD 
(odfT - Connection . Interface - Presence)  DDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

(odfT . Connection . Interface . SimplePresence) DDDDDDDDDDDDDD 
DDDDDDDDDD  Connection  Manager  D  DDDDDDDDDDDDDDDD 

DDDDDDDD 

D  D  D  D  D  mixin  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 


Telepathy  D  DDDDDDDDDDDDDDD  DDD  D-Bus  D  D  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  Telepathy  D  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD 

D-Bus  DDDDDDDDDDDDDDD  D-Bus  DDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


428  Telepathy 


D 

D 

D 

D 

D 

D 

D 

D 

D 

1  ― 1 I ― 1 I ~~ I  I ~~ I      / ハ     j_  I  I         _|  n  I ~~ I ひ 丄 ハ I                   n  t"  I ~~ I ハ _ 丄 t      丄         _c  I ~~ I  I ~~ I    \  I ~~ I 

□  □  □  □  (GetHandleQ  GetCnannelTypeQ  Getlnterfaces  □  □  )  □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

1 ~~ I  I ~~ I    T"\    ti  I ~~ || ~~ !门 门门 门门 门门 门门 门门 门门 门门门 I ― 1 ハ―丄 a," !门门 

□  □  D-Bus DDDDDDDDDDDDDDDDDDD  GetAll □  □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDD 

contacts  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD  GetAll  □□□□□□□□□□□□□□□□□□□□□ 
D  D  contacts  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D-Bus  DDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDD  Group  DDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D  D 

□  □□□□  API  □□□□□□□□□□□□□□□□□ 

APID 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDAPIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


429 


□  21 口 


Thousand  Parsec 

Alan  Laudicina  and  Aaron  Mavrinac 


DDDDDDDDDDDDD 100  □□□□□□□□  1000  DDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

Thousand  Parsec  口 

n 

口 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  AID 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□  "4X"  ("explore,  expand, 
exploit,  and  exterminate"  DD)DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□  'D  D  D  D  D  4XDDDDDDDDDDDDDDDDDDDDD  (explore)  口  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDD  (expand)D  DDDDDDDDDDDDDDDD 

□  □□□□□  (exploit)  DDDDDDDDDDDDDDDDDDDDDDDDD  (exterminate)  口 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Thousand  Parsec  D  D  D 


'Thousand  Parsec  □□□□□□□□□□□□□□□□□DDDDDDDDDVGA  Planets  □  Stars.'U  UUU  Master 
of  Orion  0  Galactic  Civilizations  □  Space  Empires  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□  Civilization  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

口口  □□□  4X  DDDDDDDDDDDDDDDD  Imperium  Galactica  口  Sins  of  a  Solar  Empire  □□□□□□□ 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□ 

□  □□□□)□□□□□□□□□□□□□□□□□(□□□□□□□□□□□)□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□  Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDD  Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDD 

DDDDDDDDDDDDD  tpclient-pywx DDDDDDDDDDDD  wxPython □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  libtpclient-Py DDDDDDDDD 
DDDDDDDD  Python  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D  D  D  D  Python  D  D  D  D  D  D libtpproto-py  DDDDDDDDD  Thousand  Parsec  □ 

DDDDDDDDDDDDDDDDDD  tpserver-cppQ  DDDDDDDD  C++D  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Missile  and  Torpedo 


21.1  □□□□□□□□□□□ 

Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDD  Missile  and  Torpedo  Wars  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Thousand 

Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


432    Thousand  Parsec 


Missile  and  Torpedo  Wars  DDDDDDDDDDDDDDD  Thousand  Parsec  D  D  D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□ 

DDDDDDDD)DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Scout  □□□□  (□□□□□□□□□□)□□□□□□□□□  Scout  Hull Q  Alpha  Missile  Tube 

□  □□□□□□  Explosive  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Build  Weapon  D  D 
DDDDDDDDDDDDDDDDDDDDD  Load  Armament  DDDDDDDDDDD  Build 
Weapon  Q 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Load  Armament  D  D  D  D 
DDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (mineable) □  □  □  □  □ 

D  D  (inaccessible)  □  □  Mine  □□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


□□□□□□ 


Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

DDDDDDDDD 

DDDDDDDDDDDDDD  Thousand  Parsec  □ 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D  D  D 

D 

D 

D 

Universe 口  Galaxy 口 

Star  SystemQ  Planet 口  □  □  □  Fleet  □□□□□□□ 

Universe  □  Thousand  Parsec  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  Universe  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Alan  Laudicina  and  Aaron  Mavrinac  433 


Thousand  Parsec  DDDDDDDDDDDDDD  "year"  DDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□  32  □□□□□□□□□□□□□□  4,294,967,295  □  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 

Galaxy  DDDDDDDDDDDDD  (Star  System  □  Planet  口  Fleet)  DDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Galaxy 
DDDDDDDDDDDDDDDD  Universe DDDDDDDDD 

DDDDDDDDDDDDDDDDD  Star  System  D  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  Star  System  D  DDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□  )PlanetD 

Fleet  D  DDDDDDDDDD 


Planet  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD  Planet  DDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D  D  D  D  D  Planet  □□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDD  Plante DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

D  D  D  Planet  □□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

o 

o 

o 

o 

- D  D  Planet  D  DDDDDDDDD  ID (口  DDDDDDDDD  -DD 

•  D  D  Planet  DDDDDDDDD  ID (口  )D  D  D  D  Planet  □□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  4XD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

DDDDDDDDDDDDDDDDDD  Fleet  □□□□□□□  Planet  □  □ 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD 4XDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD  MoveQ  InterceptQ  BuildQ  ColonizeQ  Mine  □  □ 

D  Attack  DDDDDDDDDD 

4XD  DDDDDDDD  (□□□  explore)  D  DDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD  MoveQ  DDDDDDDDDDD  Fleet  D  DDDDDDDDD 

D  D  D  D  D  Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□  Move  □  □ 


434    Thousand  Parsec 


DDDDDDDDDDDDDDDDDDD  Minisec  □  Missile  and  Torpedo  Wars  □  □  □  □  Move 


n  n  n  n 
U  U  U  U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Move 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

A      0  , 、し 1  ― 1 

AttacK  u 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

n 

u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

nnnnnnnnn  Minisec  n  Missile  and  Tornedo  Wars  l~l  l~l  l~l  l~l  l~l  l~l 

l_ll_ll_ll_ll_ll_ll_ll_ll_l 丄 v 丄 1111 凸レレ |_j 丄 y 丄 レ aiiu  iuijj レ v  v  ai a  |_J   |_J   |_J   |_J  |_J  [_J 

n 

u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnn  Move  n 

n 
u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

n  n  n  rnnnnnnnnnnnnnn^nnnnnnnnnn  Risk  n 

n 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n inn 
U  i  U  U 

nnnnnnnnnnnnrnnnnnnnnnnnnnnnnnnn 

n 

u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

n  n  n 

n  n  n 
U  U  U 

D  Fleet  DDDDDDDDDDDDDDDDD  Intercept  □□□□□□ 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n 
U  U  U  U 

(DDDDDDDD)DDDDDDDDDDDDDDD  MoveQ  D  D  D 

D 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDD  intercept  D  D  D  DD 

D 

D 

D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

Build  DDDD4XDDDDDD  (expand  D  exploit)  DDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Build  D  D  D  Planet  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□  □□□□□(□□□□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDD 

Build  □□□□□□□  Colonize  □  □  □  expand  □  exploit  □□□□□□□□□□□□□□□□ 

D  D  D  D  Fleet  DDDDDDDDDDDDDDDDDDDD  Colonize  □□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 

Mine  D  D  D  exploit  □□□□□□□□□□□□□□□  Planet  □□□□□□□□□□□□□ 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDD  Attack  □□□□□□□□□  Fleet  □  Planet  □ 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDD  4XDDDDDDDDDD  exterminate  D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  (Move  □  Intercept  □□□□□□ 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD)  Attack  D  DDDDDDDDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD 


Alan  Laudicina  and  Aaron  Mavrinac  435 


D  D 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Planet D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Thousand 

Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  Home  Planet  D  DDDDDDDDD 
DDDDDDDDDDDDDDDD 

Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDD  Minisec  □  □  Ship  Parts  □  □  □ 
DDDDDDDDDDDDDDDDDDDDD  Planet  D  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  Ship  Parts  □  □  □  □  Build  □  □  □ 
Fleet  DDDDDDDDDDDD 


Missile  and  Torpedo  Wars  □ 

D 

D 

□□□□□□ 

D  D  D  D 

□□□□□□ 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

□□□□□□ 

D  D  D  D 

□□□□□□ 

D 

D 

D 

D 

DD 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

□□□□□□ 

D  D  D  D 

□□□□□□ 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

□□□□□□ 

D  D  D  D 

□□□□□□ 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

□□□□□□ 

D  D  D  D 

□□□□□□ 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDD 

D 

D 

□  Missile  and  Torpedo 

Wars  D  D  D  D  D  ( 

; D 

D 

D  D 

D 

D 

D 

D 

□  )□□□□□  Factories  □  □ 

D 

D 

□□□□□□ 

D  DD  D 

□□□□□□ 

D 

D 

D 

D 

D  D 

D 

D 

□  □  □  □ 


Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDD 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DD 

D 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Thousand  Parsec  Component 
Language  (TPCL)  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

436    Thousand  Parsec 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

nnnnnnnnnnnn 

uuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

nnnnnnnnnnnn 
UUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 

u 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

nnnnnnnnnnnn 
UUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n  n 
U  U 

n 
U 

nnnnnnnnnnnn 
UUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 

u 

n 
U 

n  n 

u  u 

n 

u 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDD 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n  n 
U  U 

n 
U 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

Thousand  Parsec  DDDDDDDDDDDDDDDDDD  tpclient-pywx  □ 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDD 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

□  Missile  and  Torpedo  Wars  □ 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

□□□□□□ 

21.2    Thousand  Parsec  D  DDDD 

Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDD  Thousand  Parsec  □□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  AI(D  □□□)□□□□□ 

DDDDDDDDDDD-DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 

□  □□□□□□□□□■□□□□□□□□□□□□■□□□□□□□DO  DD  Header 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


Alan し sudicins  and  Aaron  Mavrinac  437 


n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n  n  n 
U  U  U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

D 

Thousand  Parsec  □□□□□□  TCP/IP  □□□□□□□□□□□□□□□  HTTP  □  □  □  □  □ 

D  D  D 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□□□□  SSL  □□□□□□ 

D  D  D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDD  Header  DDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD  Request  D  Response  D 

D  D  D 

D 

D 

D 

D 

D  D  D  Request  D  D  D  D  D  (DDDDDDDDDDDDDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

DD)DDDDDDDDDDDDDDDD  Response  DDDDDDDDDDD 

D  D  D 

D 

D 

D 

D 

□  □□□□□□□□□□□  OK  □□□□□  Fail D  D  D  D  (D  D  D  D  Response) 

D  DD 

D 

D 

D 

D 

D  Boolean  D  DDDDDDDDDDDD  Sequence  D  D  D  D  (D  D  D  Response) 

D  D  D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

Thousand  Parsec  Q  D  □□□□□□□□□□□  ID  □□□□□□□□□□□  ID  □□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDD  Get  with  idq  D  D  D  D  D  IDD  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDD  Get  with  id  and  slot  □  □  □  □  □ 
DDDDDDD  id  DDDDDDDDDDDDDDDDD  (DDDDDDDDDDDDDDD 
D)DDDDDDDDDDDDDDD  id  DDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDGetiD  Sequence 

DDDDDDDD  id  Sequence DDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDD  Get  ID  Sequence  D  D  D  D  D  D  ID  Sequence  DDDDDDDDDD 
□  □□□□□  Get  With  ID  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


□  □□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  connect DDDDDDDDDDDDDDDDDDDDDDDDDDDDOKDDDD  Fail 

□  □□□□□  Fail  DDDDDDDDDD  Connect  DDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Redirect 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  Login □□□□□□□□□□□□□□ 


438    Thousand  Parsec 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  Create  Account  DDDDDDDDD 

Thousand  ParsecQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDGet  Features 
□  □□□□□  Features  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D 

•  SSL  D  D  D  HTTP  DDDDDDDD  (DDDDDDDDDDDDDDD)DDDDD 
D  D  D 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
•DDDDDDDDD  ID  DDDDDDDDD  (DDDDDDDD  )D 

D  D  D  D  Get  Games  DDDDDDDDDDDDDDDD  Game  DDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Game □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDD  (□□□□)□□□ 

•DDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDD 


•DDDDDDDD  (DDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

DD  D 

DDDDDDDDD  )D 

□  □□□□□□□□□□□□□□□□□□□□□□(□□□□□□)□ 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

□  Get  Player  IDs  DDDDDDDDD  List  of  Player  IDs  D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDD  Get  Player  Data  D  D  D  D  D  D  Player  Data 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

Player  Data DDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD  Finished  Turn  □ 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDGet  Time  Remaining □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  Time  Remaining □□□□□□ 
D  D  D  D  D 

D  D  D  D  Thousand  ParsecQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDD  "board" DDDDDDDDDDDD 


Alan し sudicins  and  Aaron  Mavrinac  439 


□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□Get 
Board  IDs  □  □  □  □  □  □  List  of  Board  IDs  □□□□□□□□□□□  □  Get  Board  □  □  □  □ 

D  D  Board  D  DDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDGet  Message DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD  (D  D  D  D  Get  Message  DDDDDDDDDD  Get 
with  id  and  slot  DDD)DDDDDD  Message  DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  Thousand  Parsec  DDDDDDDDDD  (□□□□□□□ 
DDDDDDD)DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Post  Message  D  D  D 
D  (Messsage  DDDDDDDDDDD)DDDDDDDDDDDDDDDDDDDDDDD 

□  □  D  D  D  D  D  Remove  Message  D  D  D  D  (口  DDDDDD  GetMessage)  □  □ 


□  □□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 

D  D  D  Get  Object  IDs  D  D  D  D  D  (Get  ID  Sequence)  DDDDDDDDDDDDDDDD 

List  of  object  iDsDDDDDDDDDDDDDDDDDDDDDDDDDDDDDGet 
object  byiDDDDDDDDDDDDDDD  object DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  Get  object  IDs  by  Position 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  Get  Order  Description  IDs  DDDDDDDDDDDDDDDDDDD 

□  List  of  Order  Description  IDs  □  □  □  □  ID  D  D  D  D  Get  Order  Description  ODD 

D  D  D  D  D  order  Description  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  Order  □□□□□  (DDDDDDDDDDDDDDDD 
DDDDD)DDDDD  Outcome  D  D  D  D  D  (DDDDDDDDDDDDDDD)DDDDDD 
DDDDDDDDDDDDDD  Result  DDDDDDDDDDDDD 

DDDDDDDDD  Order  D  D  D  D  D  Outcome  DDDDDDDDDDDD  (□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDD)D  Result  DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDGet  Order  Queue 

IDsQ  List  of  Order  Queue  IDsQ  Get  Order  Queue  □  □  □  Order  Queue  □  □□□□□□□ 


440    Thousand  Parsec 


□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□  2D  Get  Order  D  D  D  D  D 
D  D  Remove  Order  D  D  D  D  (D  D  D  D  GetWithlDSlot  DDDDD)DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDD  insert  Order  D  D  D  D  D  D  Order  D  D 
DDDDDDDDDDDDDDDDDDDDDDDD  Probe  Order DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□Get 
Resource  Description  IDs  DDDDDDDDDD  List  of  Resource  Description  IDs  □ 

□  □□□□□□□□□□□  Get  Resource  Description  □□□□□□  Resource  Description 

DDDDDDDDDDDDDD 
□□□□□□□ 

Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  Category  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAdd  Category  D  D  D 

DDDDDDDDDDDD  Category  D  DDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDGet  Category  IDsQ  D  D  D  D  D  List  of  Category 

ids  DDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD  Component  DDDDDDDDD 
DDDDDDDDDD 

•DDDDDDDDDDDDDD 
•DDDDDDDDDDDDDDDDDDDD 

•  Requirements  □  □  □  Thousand  Parsec  Component  Language  (TPCL)  □  □  □ 

•DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDD  Requirements DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Requirements  □□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□□□□□□□  口  Missile  and  Torpedo  Wars  口  ロロ  口口  Alpha  Missile  口  口口  口 

D  D  D  Alpha  Missile  TubeDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

2DDDDDDnnDnDDnnnnnnDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□ 


Alan  Laudicina  and  Aaron  Mavrinac  441 


<prop> 

<CategoryIDName>Ships</CategoryIDName> 
<rank  value="0"/> 
<name>Colonise</name> 

<displayName>Can  Colonise  Planets</displayName> 
<description>Can  the  ship  colonise  planets</description> 
<tpclDisplayFunction> 

(lambda  (design  bits)  (let  ((n  (apply  +  bits)))  (cons  n  (if  (=  n 1 ) "Yes"  "No")) ) ) 
</tpclDisplayFunction> 
<tpclRequirementsFunction> 

(lambda  (design)  (cons  #t  "")) 
</tpclRequirementsFunction> 
</prop> 

D  21.1: D  D  D  D  D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  (□□□□  TPCL) □□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDD  Property DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDD  Component  DDDDDDDDD 
Property  D  D  D  D  D  D  TPCL  D  D  D  D  D  D  D  Property  DDDDDDDDDDDDDDDD 
D  D  D 

(□□□□)□□□□□□□□ 
•DDDDDDDDDDDDDDDDDD 
(TPCL 

•DDDDDDDD DD 

•  Calculate  口  □  □  □  □  Requirements  口  □  □  Thousand  Parsec  Component  Language  (TPCL) 

D  D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  TPCLD  D  D  D  D  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D l D  Armor  DDDDDDDDD  OD  Invisibility  DDDDDDDDDDDDDD 

Invisibility  DDDDDDDD  Armor  □□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDD  Calculate  DDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDD  Missile  and  Torpedo  Wars  DDDDDDDD 
DDDDDDDXMLDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  21.1Q  D  DD 

□  □□□□□  Ships  D  DDDDDDDDDDODDDDDDDDDDDDDDDDDDDD 
D  D  Colonise  DDDDDDDDDDDDDDDDDDDDDDDDDD  TPCL  □  Calculate 
D  D  (tpclDisplayFunction)  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 


442    Thousand  Parsec 


□ 

□ 


□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□ 


□ 

□ 


□ 

□ 


,o 

」N 

□ 


□ 

□ 


□ 

□ 


D  D 

D  D 

D  D 

D  D 


□ 

n 


□ 

□ 


□ 

□ 


□ 

□ 


□ 

□ 


□ 

□  _u 

□  _u 


□ 

し 

c 

p 

T 

□ 


□ 

n 


□ 

□  _u 

□  _u 

□  _u 

□  _u 


□ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


□ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


□ 

D 


□ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u  _u 

□  _u  _u 

□  _u  _u 

□  _u  _u 

□  _u  _u 

□  _u  _u 

□  _u  _u 


□ 

□ 


□ 

□ 


□ 

□  _u 

□  _u 

□  _u 

□  _u 


□ 

□ 


□ 

□ 


□ 

□ 


□ 

□ 


□  _u 


□ 

□ 


□ 


□ 


□ 

□ 


□ 

□ 


□ 


D  D 

D  D 


□ 


D  D 

D  D 


□ 

u 

G 


□  _u 

□  _u 

□  _u 


□ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


□ 

□ 


□ 

□ 


□ 

□ 


□ 

e 


o 

L 

□ 


□ 

□  _u 

□  _u 

□  _u 

□ 

□ 


□ 


□ 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 

□  _u 


Alan  Laudicina  and  Aaron  Mavrinac  443 


□  □□□□□  command  Update DDDDDDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□Get 
Command  Description  IDsDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDGet  Command  Description  DDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  D  D  Command  Description  DDDDDDDDDD 

□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□ 
□  □□□□□□□□□□□□□  )□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

21.3  □□□□□□ 

□□□□□□□□ 

Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

□  □  Thousand 

Parsec  □ 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□ 

D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

tpserver-cpp  DDDDDDDDDDDDDDDD 

□□□□□□ 

DD  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDD 

□□□□□□ 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

tpserver-cpp  Q  DDDDDDDDD  MySQL  □  □ 

SQLite  □  □  □ 

D  D  D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

Persistence  DDDDDDDDDDDDDDDDDD  (□□□□□ 

D 

D 

D 

D 

D 

D  D 

DD 

D 

D 

□□□□)□□□□□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D  D 


Thousand  Parsec  Component  Language 


Thousand  Parsec  Component  Language  (TPCL)  □ 

DD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

444   Thousand  Parsec 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D 

TPCL  Q  Scheme  □□□□□□□□□□□□□□□□□□□□□□□  Scheme  R5RS  □  □  □ 


n  n 
U  U 

n 
U 

n 
U 

n 
U 

n  n  n  d《dc  nnnnnnnnnnnnnnnnnnn  c ハ v»omo  n  n  n  n  n 
U  U  U lOi<3  UUUUUUUUUUUUUUUUUUU  ocneme  U  U  U  U  U 

U 

n 
U 

n 
U 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDD 

D 

D 

D 

D 

TPCL  Q  Requirements  DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D  D 

D 

D 

D 

D  D  D 

(lambda  (design) 

(if  (>  (designType . MaxSize  design)  (designType . Size  design)) 
(if  (=  (designType. num - hulls  design) 1 ) 
(cons  #t  "") 

(cons  #f  "Ship  can  only  have  one  hull") 

) 

(cons  #f  "This  many  components  can't  fit  into  this  Hull") 

) 

) 

Scheme  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (MaxSize  □  sizeQ  D 
D  D  Num- Hulls)  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  size  DDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□ 
D  D  Requirements  DDDDDDDDDDDDDDDDD)D 


BattleXML 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Thousand  Parsec 


DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D 

D  (□□□□□□□□□□□)□□□□□□□□□□ 

DDDDDDDDD 

D 

D 

D  D 

D 

D 

D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDD 

D 

D 

DD 

D 

D 

D 

D  D 

□  □□□□□□□□□□□□□(□□□□□□□□□□□□□□□)□□□□ 

DDDDDDDDDDD  BattleXML  D  DDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  (□□□□□□□□□□□□□□□)□□□□□□  (D  DDDDDDDDDDD 


Alan  Laudicina  and  Aaron  Mavrinac  445 


□  □)□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  Thousand  Parsec  □ 

DDDDDDDDDDDDDDDDDDDD  2D □□□□□□□  3D □□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDD  BattleXMLQ  DDDDDDDDDDD 
DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDD  xmld 

□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□□□□) 


D  D  D 

D  D  D 

D  D 

■ ~~ i I ~~ i I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ i I ~~ i I ~~ i 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D  D  D 

n  n 

nnnnnnnnnnnnnnnn  xml n n n 

n 

n 

n 

n 

n 

n 

n 

n 

n 

n  n 

D  D  D 

D  D  D 

n  n 

u  u 

nnnnnnnnnnnnnn 

D  D 

D  D  D 

n  n 

u  u 

nnnnnnnnnnnnnnnnnnnnnn 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n 

u 

n  n 

u  u 

D  D  D 

D  D  D 

n  n 
U  U 

D  D  IDD  D  D  (DDDDDDDDDDDD)DD 

D 

D 

D 

D 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

D  D  D 

D  D  D 

D  D 

DDDDDDDDDDDDDDDDDDDD  (D 

D 

D 

D 

D 

口 

D 

) 口 

D 

D 

D  D 

D  D  D 

D  D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D  D  D 

D  D 

DDDDDDDDDDDDDDDD 

D  D  D  D  D 

D 

D  D 

D  D  D 

D  D 

Thousand  Parsec  DDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D  D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D  D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D  D  D 

D  D  D 

D  D 

DDDDDDDDDDDDDDDDDDDDDDDDDD 

□  □□□□□  metaserver-lite  PHP  □□□□□□□  Thousand  Parsec  □□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  HTTPQ  DDDDDDD 
D  update  DDDDDDDDDDDDDD  (DDDDDDDDDDDDD)DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
(口  □□□□□□ 10D 


D  D 

D 

D 

DDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDD  URL(D  D 

□  tP: 

〃口 

D  D 

D  D 

D 

D 

badge  D  DDDDDDDDDD 

DD 

D 

D  D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDD 

D 

D 

D 

DDDDDDDDDDDDDDD  get □□□□□□□□□□□□□ 

D  D 

D 

D  D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D  D 

D  D 

D  D 

D 

D 

DDDDDDDD  Game  DDDDDDDD  tpclient-pywx  D  D  D  D 

D  D 

D 

D  D 

D  D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDD 

446    Thousand  Parsec 


□□□□□□□□□□□□ 

Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAIDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  GUID  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDD(DDDDDAIDDDDDDDDDDDD 
□  )□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□  XML  DTD 

DDDDDDDDDDDDDDDDDDDDDD  XML  □□□□□□□□□□□□□□□□ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDAIDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDD 
•DDDDDDDDD(DDDDDDDDDDD)DDDDDDDDDDD 
•DDDDDDDDDDDDDDDDDD 


D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

□  □□  (D  DDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

)DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDD  (□□□□□ 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDDDDDD  AIDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D  D 

D  D 

D 

DDDDDDDDD 

Alan  Laudicina  and  Aaron  Mavrinac  447 


n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnn  (nnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnn\nnnnnnnnnnnnnnnn 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 

u  u 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnn    a  t  n 
UUUUUUUUUUUUUUUUUUUUUUUUUU  Ai u 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 

u  u 

n 

u 

n  n 

u  u 

n 

u 

n 

u 

nnnnnnnnn  /n  nnnnnnnnnnnnnnnn\nn 

UUUUUUUUU  (UUUUUUUUUUUUUUUUU)UU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnn  /n  nnnnnnnn ヽ nnnnnn 
UUUUUUUUUUUUU  (UUUUUUUUU)UUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnn 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n 
U  U 

n 
U 

n  n 
U  U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnn  znnnnn 

UUUUUUUUUUUUUUUUUUUUUUU  (uuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D 

D 

D  D 

D 

D 

■ ~~ i I ~~ 1 I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ 1 \  I ~~ I  I ~~ I  I ~~ I  I ~~ I  r ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ I  I ~~ 1 I ~~ 1 

□□□□□□□□□)□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D  D 

D 

D  D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDD  Thousand  Parsec  □□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  D  Thousand 

Parsec  □□□□□□□  Python  DDDDDDDDDDDDDDDDDD  libtpclient-py  □  □ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  D  D  D  singlePlayerGame  DDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□□□ 
XML DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D)DDDDDDDDDDDDDDDDDDDDDDD(DDDDDDDDDDDDAIDDD 
□  □□□□□□  Python  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD) 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

l-DDDDDDDDDDDDDDD  SinglePlayerGame.  rulesets  DDDDDDDDDD 
DDDDDDDDDDDDDDD  SinglePlayerGame.  rname  D  D  D  D  D  D 

2.  DDDDDDDDDDDDDDDDDDDD  SinglePlayerGame . list_servers_with- 

-ruleset  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDD  SinglePlayerGame.  sname  D  D  D  D  D  D 

3.  DDDDDDDDDDDDDDDDDDDDDDDDDDDD  SinglePlayerGame.  list— rparams 
SinglePlayerGame.  list.sparams  DDDDDDDDDDDDDDDDD 

4.  DDDDDDDDDDDDDDD  AID  D  D  D  D  D  D  SinglePlayerGame.  list_aiclients_- 
with.rulesetQ  D  D  D  SinglePlayerGame . list.aiparams  D  D  DDDDDDDDDDD 

DDDDDDDDDDDDD 


448    Thousand  Parsec 


5.  SinglePlayerGame.  start  DDDDDDDDDDDDDDDDDDDDDDDDDDD 
TCP/IP  □□□□□□□ 

6.  DDDDDDDDDDDDD  (DDDDDDDDDDDDDDDDD  AI D  D  D  D  D  D 

DDDDDDDDDDD)DD  SinglePlayerGame.  stop  D  D  D  D 

Thousand  Parsec  DDDDDDDDDDDDDDDDD  tpclient-pywx  DDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDD  tpserver-cPP  D  D  D  D  D  D  D 
D  D libtpclient-py  DDDDDDDD  tpclient-pywx  DDDDDDDDDDDDDDDD 
SQLiteD  DDDDDDDDDDDDDDDDDDD  SQLiteQ  DDDDDDDDDDDDDD 
D  D  D  D 匪 MS  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  SQLite 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□□□□□□□□□□ 
DDDD)DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD 


21.4    □  □ 

D  D  D  D  Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  (TimAnsell 


D  Lee  Begg)  □□□□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDD 

DDDDDDDD 

Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDD  Thousand  Parsec  □  □  □  □ 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□□□□□□□□□□ 


Alan し sudicins  and  Aaron  Mavrinac  449 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  D  D  Thousand  Parsec  □□□□□□□□□□□ 


□  □□□□□□□□□□ 

Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDD 
□  D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D  Thousand  Parsec  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

□  □□□□□  Thousand  Parsec  □□□□□□□□□□□□□□□□ 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

D 

1000  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 

450    Thousand  Parsec 


□  22 口 


Violet 

Cay  Horstmann 

2002  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
[Hort)5]D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDUMLDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□□□□□□  Java  □□□□□□□□□□□□□□□□□ 

D  D  D  D  D  (JavaQ  DDDDDDD1DDDDDDDDDDDDD)DDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDD  Decorator  D  DDDDDDDDDDDD  Swing 
D  JScrollPane DDDDDDDDDDDDDDDDDDDDDDJavaDDDDDDDDDD 
DDDDDDDDDDDDDDD 


D  22.1:  Violet  Q  □□□□□□□ 


DDDDDDDD UMLQ DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  JavaQ  DDDDDDDDDDDDDD  (D  22.1) 口  □□□□□□□□□ 


DDDDDDDDDDDDDDDDDDD  Rational  Rose  □□□□□□□□□□□□□□□□ 
D  D  D  [Shu05]D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDD  ArgoUMLQ  DDDDDDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDmDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDD  Violet  D  D  D  D 


22.1    Violet  D  □ 

Violet  D  D  D  D  UML  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
D UML DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□□□□□□□□□□□□□□□(□□□□□□□□□□□□□□□□□□□□□□□□□ 

□  □□□□□□  )□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
Violet  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
Java  2D  D  D  D  DD  D  API  □  DDDDDDDDDDDD 

Violet  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD 

Violet  DDDDDDDDDDDDDDD  UML  DDDDDDDDDDDDDDDDDDD 
Violet  DDDDDDDDDDDDDDDDDDDD 

•  Violet  D  D  D  UML  DDDDDDDDDDDDDDDDDDDDDDD  UML  □  □  □  □ 
DDDDDDDDDDD 

- Violet  D  DDDDDDDDDD  DDDDDDDDDD  Violet  D  DDDDDDDDDDD 
DDDDDDDDDDDD 

•  Violet  D  DD  D  UMLD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

•  Violet  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 

(口 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□) 口 
Violet  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD UMLQ DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  SourceForge 

D  Diomidis  Spinellis  □□□□□□□□□  UMLGraph  [Spi03]  DDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDnO 

□  □  □  □ 


452  Violet 


U  01N  u  oenerai  ruoiic  License  U  U  U  U  U  U  zuio  U  U  U  Alexandre  ae  reiiegnn  y 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

n  n  n  n  n  n  c^ii«c«  nnnnnnnnnnnnnnnnnnnnnnnnnnn 
U  U  U  U  U  U  eclipse  UUUUUUUUUUUUUUUUUUUUUUUUUUU 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 

uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 

n 
U 

n 
U 

n 
U 

n 
U 

n 
U 

D  D  D  D  D  Violet  DDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDD  (JavaBeans  DDDDDDDDDDDDDD  Java  WebStartQ  □ 

D 

D 

D 

D 

D 

nnnnnn)nnnnnnnnnnnnnnnnnnnnnnnnn 

22.2  □□□□□□□□□□ 

Violet  D  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  Violet  UML  □ 

D 

D 

D 

D 

□  □□□□□□□□□□□□□□□□□□□□□□(□□□□□□□)□□□□□□□□□□ 

UML DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDERDDDDDDDDDDDDDDDDD 


n 

X 

File  Edit 



D  22.2:  DDDDDDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
□  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□(□  22.2)0 


Cay  Horstmann  453 


simpleGraph  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDD 

public  class  SimpleGraph  extends  AbstractGraph 

public  Node 口  getNodePrototypes() 

return  new  Node[] 
{ 

new  CircleNode(Color. BLACK) , 
new  CircleNode(Color. WHITE) 

}; 

} 

public  Edge 口  getEdgePrototypes () 

return  new  Edge 口 
{ 

new  LineEdge() 

} 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  22.2  D  DDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDD  Node  D  Edge  DDDDDDDDDDDDDDDDDDDDDDDDDDDD 

•DDDDDDDDDDDDDD  getshape DDDDDDDDDDDDDDDDDDDD 

DDDDDDDDD  Java2D  shape  DDDDDDDDDD 
- Edge DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

D  D  D  D 

•  Node  DDDDDDDDD  getConnectionPoint  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDD  (D  22.3 □  □  □  ) 口 

•  Edge  DDDDDDDDD  getConnectionPoints  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  grabber  口  □ 
DDDDDDDDDD 

•DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDD 


D 

D 

D 

D 

D 

D 

D  D  D 

AbstractNodeQ  AbstractEdge  D  DDDDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  RectangularNode  □  SegmentedLineEdge  DDDDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDDDDDD 

D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDD  CircleNode  D  LineEdge  D  D  D 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDDDDDDD  draw  D  D  D  D  D  contains  □ 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

D  D  D 

DDDDDDDDD  getConnectionPoint  DDDDDDDD 

D 

D 

D 

D 

D  D 

D 

D 

D 

D 

D 

DD  D 

22.4  D  DDDDDDDDDDDDDDD  (□□□□  Violet  D 

D 

D 

D 

D 

□  □ ) 口 


454  Violet 


D  22.3:  DDDDDDDDDDDDDDDDDD 


public  class  CircleNode  extends  AbstractNode 

public  CircleNode(Color  aColor) 

size  =  DEFAULT— SIZE; 
x  =  0; 
y  =  0; 

color  =  aColor; 


public  void  draw(Graphics2D  g2) 

Ellipse2D  circle  =  new  Ellipse2D . Double (x ,  y,  size,  size) ; 

Color  oldColor  =  g2 . getColor() ; 

g2.setColor(color) ; 

g2.fill(circle); 

g2 . setColor(oldColor) ; 

g2.draw(circle) ; 

public  boolean  contains(Point2D  p) 

Ellipse2D  circle  =  new  Ellipse2D. Double (x,  y,  size,  size) ; 
return  circle. contains(p); 


public  Point2D  getConnectionPoint(Point2D  other) 

double  centerX  =  x  +  size  I  2; 

double  centerY  =  y  +  size  I  2 ; 

double  dx  =  other. getX()  -  centerX; 

double  dy  =  other. getY()  -  centerY; 

double  distance  =  Math.sqrt(dx  *  dx  +  dy  *  dy) ; 

if  (distance  ==  0)  return  other; 

else  return  new  Point2D.Double( 

centerX  +  dx  *  (size  IT)/  distance, 
centerY  +  dy  *  (size  IT)/  distance) ; 


Cay  Horstmann  455 


private  double  x,  y,  size,  color; 

private  static  final int  DEFAULT_SIZE  =  20; 

public  class  LineEdge  extends  AbstractEdge 

public  void  draw(Graphics2D  g2) 

{  g2.draw(getConnectionPoints()) ;  } 

public  boolean  contains(Point2D  aPoint) 

final  double  MAX— DIST  =  2; 

return  getConnectionPoints() . ptSegDist(aPoint)  <  MAX_DIST; 


"|Violet  UML  Editor 


diagrarr 


SimpleGraph 


LineEdge 


AbstractGraph 


一 


«interface» 
Graph 


AbstractNode 


AbstractEdge 


«interface» 
Node 


«interface» 
Edge 


: : Select 

Class 
― ; Interface 

Package 
」Note 

面 Linked  diagram 
lii  Depends  on 
》 Inherits  from 
、へ Implements  interface 
》 Is  associated  with 
Is  an  aggregate  of 
、 Is  composed  of 


□  22.4:  Simple  Graph  □  □  □  □  □ 


DDDDDDDDDDD  Violet  D  DDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


456  Violet 


DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDD 

DDDDDDDDDDDDDDDDDDDDDDDDD  JGraph  [Ald02]  □  JUNG2  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 


22.3    JavaBeansD  □□□□□□□□ 

DDDDDDDDDDD  JavaQ  DDDDDDDDD  JavaBeans  DDDDDDDDDDDDD 
DDGUIDDDDDDDDGUIDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDDDD  GUIQ  □□□□□□□  GUID  DDDDDDDDDDDDDDDDD 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

JavaQ  DDDDDDDDDDDDDDDDDDDDDDDDDDDDD  JavaBeans  □  □  □  □ 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD  BeanlnfoQ  D 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
DDDDDDDDD  JDKDDDDDDDDDDDDDDDDDDDDDDD  Java.  awt.  Color 
□  □□□□□□ 

Violet  DDDDDDDD  JavaBeans  DDDDDDDDDDDDDDDDD  CircleNode  □  □ 

DDDDDDDDDDDDDDDDDD  color  D  DDDDDDDDDDD 

public  void  setColor(Color  newValue) 
public  Color  getColor〇 

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD(D 

22.5)0 


22.4 

□  □  □ 

D  D 

D 

D 

D 

D  D  D  D 

DDDDDDDDDD 

D 

D 

Violet  口 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D  D  D  D 

DDDDDDDDDD 

D 

D 

D  D  D  D 

DDDDDDDDDDDDD  XMIQ  D 

□  3 

D 

D 

D  D  D  D 

D  D  D  D  UML  D  D  D 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D  D  D  D 

DDDDDDDDDD 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D  D  D  D 

DDDDDDDDDD 

D 

D 

D  D  D  D 

DDDDDXMIDDDDDDDDDD 

D  D 

D 

D 

D  D  D  D 

DDDDDDDDDD 

D 

D 

D  D  D  D 

□  □□□□□  [PGL+05]  口 

D 

D 

D 

Java  Q  口 

DDDDDDDDDD 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D  D  D  D 

DDDDDDDDDD 

D 

D 

D  D  D  D 

DDDDDDDDDDDDDDDDD 

D  D 

D 

D 

D  D  D  D 

□  □□□□□□  JavaBeans 

D  D  D  D 

DDDDDDDDDDD  XML  □  □  □ 

2http: //jung.sourceforge. net 

3http: //www. omg.org/technology/documents/formal/xmi . htm 


Cay  Horstmann  457 


File  Edit 


D  22.5:  □□□□□□  JavaBeans  Color  Editor  □□□□□□□□□ 

DDDDDDDDDDDDDDDDDD  4D  Java  □□□□□□  (Violet  □  □  □  □  □  UML  □ ) 
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 

<?xml  version="1 . 0"  encoding="UTF-8"?> 
<java  version="1 . 0"  class="java. beans. XMLDecoder"> 
く object  class="com. horstmann . violet . ClassDiagramGraph"> 
<void  method="addNode"> 

class="com. horstmann . violet . ClassNode"> 
.</void> 


<object  id="ClassNodeO" 
<void  property="name">. 
</object> 

<object  class=" java . awt . 

<double>200 . 0</double> 

<double>60 . 0</double> 
</object> 
</void> 

<void  method="addNode"> 
<object  id="ClassNode1 " 
<void  property="name">. 
</object> 

<object  class=" java - awt . 
<double>200 . 0</double> 
<double>21 0 . 0</double> 

</object> 

4http: //jcp.org/en/jsr/detail?id=57 


geom.Point2D$Double"? 


class? com. horstmann . violet . ClassNode" 
. .</void> 

geom.Point2D$Double"> 


458  Violet 


</void> 

ぐ void  method^" connect "> 
く object  class="com. horstmann. violet .ClassRelationshipEdge"> 
く void  property=