Slide 1

Slide 1 text

ԘҪඒ࡙ TIJPJNN!DPF@ 'VLVPLBSCYճ-5େձ ࣮࿥ NSVCZ૊ΈࠐΈମݧ

Slide 2

Slide 2 text

aaॕ'VLVPLBSC։࠵

Slide 3

Slide 3 text

ࣗݾ঺հ ԘҪඒ࡙ ͓͍͠ (JU)VC!TIJPJNN 5XJUUFS!DPF@ 'VLVPLBSCͱ"TBLVTBSCʹ͍ΔNSVCZॳֶऀ ࠷ۙͷग़དྷࣄɿࡢ೔Ѫ༻ͷ؟ڸΛഁյ͠·ͨ͠

Slide 4

Slide 4 text

NSVCZͱ͸ Ҿ༻IUUQTHJUIVCDPNNSVCZNSVCZXIBUJTNSVCZ NSVCZJTUIFMJHIUXFJHIUJNQMFNFOUBUJPOPGUIF3VCZMBOHVBHF DPNQMZJOHUP QBSUPG UIF*40TUBOEBSE*UTTZOUBYJT3VCZY DPNQBUJCMF NSVCZDBOCFMJOLFEBOEFNCFEEFEXJUIJOZPVSBQQMJDBUJPO8F QSPWJEFUIFJOUFSQSFUFSQSPHSBNNSVCZ BOEUIFJOUFSBDUJWFNSVCZ TIFMMNJSCBTFYBNQMFT:PVDBOBMTPDPNQJMF3VCZQSPHSBNTJOUP DPNQJMFECZUFDPEFVTJOHUIFNSVCZDPNQJMFSlNSCDz

Slide 5

Slide 5 text

NSVCZͱ͸ Ҿ༻IUUQTHJUIVCDPNNSVCZNSVCZXIBUJTNSVCZ NSVCZJTUIFMJHIUXFJHIUJNQMFNFOUBUJPOPGUIF3VCZMBOHVBHF DPNQMZJOHUP QBSUPG UIF*40TUBOEBSE*UTTZOUBYJT3VCZY DPNQBUJCMF NSVCZDBOCFMJOLFEBOEFNCFEEFEXJUIJOZPVSBQQMJDBUJPO8F QSPWJEFUIFJOUFSQSFUFSQSPHSBNNSVCZ BOEUIFJOUFSBDUJWFNSVCZ TIFMMNJSCBTFYBNQMFT:PVDBOBMTPDPNQJMF3VCZQSPHSBNTJOUP DPNQJMFECZUFDPEFVTJOHUIFNSVCZDPNQJMFSlNSCDz ʮNSVCZ͸ΞϓϦέʔγϣϯʹϦϯΫͯ͠૊ΈࠐΉ͜ͱ͕Ͱ͖Δʯ [

Slide 6

Slide 6 text

3VCZͰॻ͔Εͨιʔείʔυͱ $Ͱॻ͔ΕͨΞϓϦέʔγϣϯ͕͋Δͱ͖ɺ ΞϓϦέʔγϣϯ $ 3VCZ ʮNSVCZΛΞϓϦέʔγϣϯʹ૊ΈࠐΉʯΠϝʔδ

Slide 7

Slide 7 text

3VCZͰॻ͔ΕͨॲཧΛΞϓϦέʔγϣϯίʔυʹຒΊࠐΈɺ ΞϓϦέʔγϣϯ $ 3VCZ ʮNSVCZΛΞϓϦέʔγϣϯʹ૊ΈࠐΉʯΠϝʔδ 3VCZ

Slide 8

Slide 8 text

ຒΊࠐΜͩॲཧ͝ͱΞϓϦέʔγϣϯΛ࣮ߦ͢Δ ΞϓϦέʔγϣϯ $ 3VCZ ʮNSVCZΛΞϓϦέʔγϣϯʹ૊ΈࠐΉʯΠϝʔδ 3VCZ

Slide 9

Slide 9 text

NSVCZΛ$ΞϓϦέʔγϣϯʹ૊ΈࠐΉํ๏͍Ζ͍Ζ &YFDVUJOH3VCZDPEFXJUINSVCZ IUUQTNSVCZPSHEPDTBSUJDMFTFYFDVUJOHSVCZDPEFXJUINSVCZIUNM

Slide 10

Slide 10 text

NSVCZΛ$ΞϓϦέʔγϣϯʹ૊ΈࠐΉํ๏͍Ζ͍Ζ ΞϓϦέʔγϣϯίʔυ಺ͰNSVCZͷ$"1*Λհͯ͠ 3VCZͷιʔείʔυΛ࣮ߦ͢Δํ๏ 3VCZ ΞϓϦέʔγϣϯ $

Slide 11

Slide 11 text

NSVCZΛ$ΞϓϦέʔγϣϯʹ૊ΈࠐΉํ๏͍Ζ͍Ζ ιʔείʔυ 3VCZ Λݩʹ$ͷؔ਺Λ࡞੒͠ɺ ΞϓϦέʔγϣϯίʔυ಺͔ΒJODMVEFͯ͠ݺͼग़͢ํ๏ 3VCZ ΞϓϦέʔγϣϯ $ $ $

Slide 12

Slide 12 text

NSVCZΛ$ΞϓϦέʔγϣϯʹ૊ΈࠐΉํ๏͍Ζ͍Ζ ιʔείʔυ 3VCZ ͔ΒόΠτίʔυ͕هड़͞ΕͨϑΝΠϧΛ࡞੒ ΞϓϦέʔγϣϯίʔυ಺͔ΒಡΈࠐΉํ๏ ͳͲͳͲʜ 3VCZ ΞϓϦέʔγϣϯ $ όΠτίʔυ NSCD NSCD

Slide 13

Slide 13 text

΍ͬͯΈ·͠ΐ͏

Slide 14

Slide 14 text

ࠓճ΍Δ͜ͱ ͋Δͱ͜Ζʹ$Ͱॻ͔Εͨ5$1Τίʔαʔόʔ͕ ΫϥΠΞϯτ αʔόʔ )FMMP )FMMP

Slide 15

Slide 15 text

ࠓճ΍Δ͜ͱ αʔόʔ 5$1Τίʔαʔόʔ $ ͷ࣮૷ int main(void) { // αʔόʔΞυϨε৘ใͷऔಘɹ // ιέοτͷ࡞੒ // ϦΫΤετͷ଴ͪड͚ // ϦΫΤετͷड͚෇͚ // ϦΫΤετͷಡΈࠐΈ // Ϩεϙϯεͷૹ৴ // ιέοτͷഁغ return 0; }

Slide 16

Slide 16 text

ࠓճ΍Δ͜ͱ int main(void) { // αʔόʔΞυϨε৘ใͷऔಘɹ // ιέοτͷ࡞੒ // ϦΫΤετͷ଴ͪड͚ // ϦΫΤετͷड͚෇͚ // ϦΫΤετͷಡΈࠐΈ // Ϩεϙϯεͷૹ৴ // ιέοτͷഁغ return 0; } ⬅︎ ͜Ε͕ۤखͳͷͰ ɹ3VCZͰ αʔόʔ 5$1Τίʔαʔόʔ $ ͷ࣮૷

Slide 17

Slide 17 text

struct addrinfo server_addr_hints, *server_addr, *server_addr_tmp; int addrinfoerr; memset(&server_addr_hints, 0, sizeof(struct addrinfo)); server_addr_hints.ai_family = AF_INET; server_addr_hints.ai_socktype = SOCK_STREAM; server_addr_hints.ai_ fl ags = AI_PASSIVE; if ((addrinfoerr = getaddrinfo(HOST, PORT, &server_addr_hints, &server_addr)) < 0) { gai_strerror(addrinfoerr); } <$ͷ৔߹>αʔόʔΞυϨε৘ใऔಘ // ศ্ٓ"'@*/&5ʹ͍ͯ͠·͢

Slide 18

Slide 18 text

struct addrinfo server_addr_hints, *server_addr, *server_addr_tmp; int addrinfoerr; memset(&server_addr_hints, 0, sizeof(struct addrinfo)); server_addr_hints.ai_family = AF_INET; server_addr_hints.ai_socktype = SOCK_STREAM; server_addr_hints.ai_ fl ags = AI_PASSIVE; if ((addrinfoerr = getaddrinfo(HOST, PORT, &server_addr_hints, &server_addr)) < 0) { gai_strerror(addrinfoerr); } <$ͷ৔߹>αʔόʔΞυϨε৘ใऔಘ // ศ্ٓ"'@*/&5ʹ͍ͯ͠·͢ ᶃΞυϨε৘ใͷώϯτΛ֨ೲ͢Δߏ଄ମͱ ɹΞυϨε৘ใΛ֨ೲ͢Δߏ଄ମͷͨΊͷϝϞϦྖҬΛ֬อ ᶄΞυϨε৘ใͷώϯτΛ֨ೲ͢Δߏ଄ମʹΞυϨε৘ใͷώϯτΛ֨ೲ ᶅΞυϨε৘ใͷώϯτΛ֨ೲͨ͠ߏ଄ମΛར༻ͯ͠ ɹ࠷ॳʹݟ͔ͭͬͨΞυϨε৘ใΛΞυϨε৘ใΛ֨ೲ͢Δߏ଄ମʹ֨ೲ ɹ˞͜ͷͱ͖ɺΞυϨε৘ใ͸ϦϯΫϦετʹͳ͓ͬͯΓɺ ɹɹΞυϨε৘ใΛ֨ೲ͢Δߏ଄ମ͸ଞʹར༻Ͱ͖ΔީิͱͳΔ ɹɹΞυϨε৘ใ΁ͷϙΠϯλΛ͍࣋ͬͯΔ

Slide 19

Slide 19 text

int listener; for (server_addr_tmp = server_addr; server_addr_tmp; server_addr_tmp = server_addr_tmp->ai_next) { listener = socket(server_addr_tmp->ai_family, server_addr_tmp->ai_socktype, server_addr_tmp->ai_protocol); if (listener < 0) continue; if (bind(listener, server_addr_tmp->ai_addr, server_addr_tmp->ai_addrlen) < 0) { close(listener); continue; } break; } <$ͷ৔߹>αʔόʔΞυϨε৘ใऔಘ

Slide 20

Slide 20 text

int listener; for (server_addr_tmp = server_addr; server_addr_tmp; server_addr_tmp = server_addr_tmp->ai_next) { listener = socket(server_addr_tmp->ai_family, server_addr_tmp->ai_socktype, server_addr_tmp->ai_protocol); if (listener < 0) continue; if (bind(listener, server_addr_tmp->ai_addr, server_addr_tmp->ai_addrlen) < 0) { close(listener); continue; } break; } <$ͷ৔߹>αʔόʔΞυϨε৘ใऔಘ ᶆϦΫΤετΛ଴ͪड͚ΔιέοτͷͨΊͷϝϞϦྖҬΛ༻ҙ ᶇΞυϨε৘ใΛ֨ೲ͢Δߏ଄ମ͕࣋ͭϦϯΫΛͨͲͬͯ ɹ͜ͷߏ଄ମͷҰ෦ͷ৘ใ͔ΒιέοτΛ࡞੒͠ɺ ɹߋʹ͜ͷߏ଄ମͷଞͷ৘ใ͔Β࣮ࡍʹΞυϨεͱόΠϯυͰ͖Δ͔ࢼΈΔ ᶈιέοτͷ࡞੒ͱΞυϨεͷόΠϯυʹ੒ޭͨ͠ΒιέοτΛฦ͢

Slide 21

Slide 21 text

int listener; for (server_addr_tmp = server_addr; server_addr_tmp; server_addr_tmp = server_addr_tmp->ai_next) { listener = socket(server_addr_tmp->ai_family, server_addr_tmp->ai_socktype, server_addr_tmp->ai_protocol); if (listener < 0) continue; if (bind(listener, server_addr_tmp->ai_addr, server_addr_tmp->ai_addrlen) < 0) { close(listener); continue; } break; } <$ͷ৔߹>αʔόʔΞυϨε৘ใऔಘ ᶆϦΫΤετΛ଴ͪड͚ΔιέοτͷͨΊͷϝϞϦྖҬΛ༻ҙ ᶇΞυϨε৘ใΛ֨ೲ͢Δߏ଄ମ͕࣋ͭϦϯΫΛͨͲͬͯ ɹ͜ͷߏ଄ମͷҰ෦ͷ৘ใ͔ΒιέοτΛ࡞੒͠ɺ ɹߋʹ͜ͷߏ଄ମͷଞͷ৘ใ͔Β࣮ࡍʹΞυϨεͱόΠϯυͰ͖Δ͔ࢼΈΔ ᶈιέοτͷ࡞੒ͱΞυϨεͷόΠϯυʹ੒ޭͨ͠ΒιέοτΛฦ͢ ➡︎ ೉͍͠ʜ ɹΞυϨεͷݕࡧͱιέοτͷ࡞੒Λಉ࣌ʹߦͬͯ ɹΞυϨεͷ༗ޮੑΛݕূ͢Δඞཁ͕͋Δ ޮ཰͕ѱ͍

Slide 22

Slide 22 text

Addrinfo.getaddrinfo('localhost', 12345, Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_PASSIVE). fi rst <3VCZͷ৔߹>αʔόʔΞυϨε৘ใऔಘ BEESJOGPSC "EESJOGPΦϒδΣΫτΛͭ͘Δ͚ͩʂ "EESJOGPΦϒδΣΫτ͕༗ޮͳΞυϨε৘ใΛ͍࣋ͬͯΔ

Slide 23

Slide 23 text

Addrinfo.getaddrinfo('localhost', 12345, Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_PASSIVE). fi rst <3VCZͷ৔߹>αʔόʔΞυϨε৘ใऔಘ BEESJOGPSC ͜ͷॲཧΛΤίʔαʔόʔͷ಺෦Ͱ࣮ߦ͠ɺ ιέοτΛ࡞੒͢Δ ฦΓ஋ͱͳΔ"EESJOGPΦϒδΣΫτ ͷΞυϨε৘ใ Λར༻ͯ͠

Slide 24

Slide 24 text

3VCZιʔείʔυΛΤίʔαʔόʔʹ૊ΈࠐΉ ΤίʔαʔόʔʹJODMVEFͯؔ͠਺ͱ࣮ͯ͠ߦ͢Δ BEESJOGPSC "EESJOGPHFUBEESJOGP Τίʔαʔόʔ $ BEESJOGPD BEESJOGP BEESJOGP લड़ͷ3VCZιʔείʔυΛݩʹ$ؔ਺BEESJOGP Λ࡞੒͠ɺ

Slide 25

Slide 25 text

NSVCZ͕༻ҙ͍ͯ͠ΔNSCDίϚϯυΛར༻͢Δ͜ͱͰ $ؔ਺BEESJOGP BEESJOGPD Λ؆୯ʹ࡞੒͢Δ͜ͱ͕Ͱ͖Δ ͜͏ͯ͠࡞੒ͨ͠BEESJOGP ؔ਺ΛΤίʔαʔόʔ͔Β࣮ߦ͢Δ ɹ $ mruby/bin/mrbc -Baddrinfo addrinfo.rb 3VCZιʔείʔυ͔Β$ؔ਺Λ࡞੒͢Δ ؔ਺໊ͱιʔεϑΝΠϧΛ౉ͯ͠NSCDίϚϯυΛ࣮ߦ

Slide 26

Slide 26 text

#include #include “addrinfo.c” mrb_state *mrb = mrb_open(); // ͜͜Ͱ΍Δ͜ͱ // ɹɾBEESJOGP ؔ਺Λݺͼग़͢ // ɹɾ"EESJOGPΦϒδΣΫτ͔ΒΞυϨε৘ใΛऔಘ͢Δ // ɾɹऔಘͨ͠ΞυϨε৘ใͰιέοτΛ࡞੒͢Δ mrb_close(mrb); FDIPTFSWFSD BEESJOGPDΛಡΈࠐΉͱɺ BEESJOGP ؔ਺͕ར༻Ͱ͖ΔΑ͏ʹͳΔ 3VCZιʔείʔυΛΤίʔαʔόʔʹ૊ΈࠐΉ

Slide 27

Slide 27 text

mrb_value addr = mrb_load_irep(mrb, addrinfo); mrb_value domain = mrb_funcall(mrb, addr, "afamily", 0); mrb_value socktype = mrb_funcall(mrb, addr, "socktype", 0); mrb_value protocol = mrb_funcall(mrb, addr, "protocol", 0); mrb_value port = mrb_funcall(mrb, addr, "ip_port", 0); mrb_value address = mrb_funcall(mrb, addr, "ip_address", 0); BEESJOGP ؔ਺Λݺͼग़͢ FDIPTFSWFSD BEESJOGP ؔ਺Λ࣮ߦ͢Δͱ"EESJOGPΦϒδΣΫτ͕ฦͬͯ͘Δ

Slide 28

Slide 28 text

mrb_value addr = mrb_load_irep(mrb, addrinfo); mrb_value domain = mrb_funcall(mrb, addr, "afamily", 0); mrb_value socktype = mrb_funcall(mrb, addr, "socktype", 0); mrb_value protocol = mrb_funcall(mrb, addr, "protocol", 0); mrb_value port = mrb_funcall(mrb, addr, "ip_port", 0); mrb_value address = mrb_funcall(mrb, addr, "ip_address", 0); "EESJOGPΦϒδΣΫτ͔ΒΞυϨε৘ใΛऔಘ͢Δ ͜ͷ"EESJOGPΦϒδΣΫτ͔Β ιέοτͷ࡞੒ʹඞཁͳ֤छΞυϨε৘ใΦϒδΣΫτΛऔಘ͢Δ FDIPTFSWFSD υϝΠϯ໊ ιέοτλΠϓ ϓϩτίϧ ϙʔτ൪߸ *1ΞυϨε

Slide 29

Slide 29 text

mrb_value addr = mrb_load_irep(mrb, addrinfo); mrb_value domain = mrb_funcall(mrb, addr, "afamily", 0); mrb_value socktype = mrb_funcall(mrb, addr, "socktype", 0); mrb_value protocol = mrb_funcall(mrb, addr, "protocol", 0); mrb_value port = mrb_funcall(mrb, addr, "ip_port", 0); mrb_value address = mrb_funcall(mrb, addr, "ip_address", 0); ֤ΞυϨε৘ใΦϒδΣΫτ͸͜ͷޙɺ ιέοτΛ࡞੒͢Δ$ؔ਺ͷҾ਺ͱͯ͠࢖༻͞ΕΔ ͦͷࡍ3VCZΦϒδΣΫτ͔Β$ͷJOUܕʹม׵͓ͯ͘͠ඞཁ͕͋Δ FDIPTFSWFSD "EESJOGPΦϒδΣΫτ͔ΒΞυϨε৘ใΛऔಘ͢Δ υϝΠϯ໊ ιέοτλΠϓ ϓϩτίϧ ϙʔτ൪߸ *1ΞυϨε

Slide 30

Slide 30 text

mrb_value addr = mrb_load_irep(mrb, addrinfo); mrb_value domain = mrb_funcall(mrb, addr, "afamily", 0); mrb_value socktype = mrb_funcall(mrb, addr, "socktype", 0); mrb_value protocol = mrb_funcall(mrb, addr, "protocol", 0); mrb_value port = mrb_funcall(mrb, addr, "ip_port", 0); mrb_value address = mrb_funcall(mrb, addr, "ip_address", 0); FDIPTFSWFSD "EESJOGPΦϒδΣΫτ͔ΒΞυϨε৘ใΛऔಘ͢Δ υϝΠϯ໊ ιέοτλΠϓ ϓϩτίϧ ϙʔτ൪߸ ͜͜·Ͱ͸*OUFHFSΦϒδΣΫτ *OUFHFSΦϒδΣΫτ͸NSVCZͷ$"1*Λར༻͢Δ͜ͱͰ $ͷJOUܕ΁ม׵͢Δ͜ͱ͕Ͱ͖Δ

Slide 31

Slide 31 text

"EESJOGPΦϒδΣΫτ͔ΒΞυϨε৘ใΛऔಘ͢Δ mrb_value addr = mrb_load_irep(mrb, addrinfo); mrb_value domain = mrb_funcall(mrb, addr, "afamily", 0); mrb_value socktype = mrb_funcall(mrb, addr, "socktype", 0); mrb_value protocol = mrb_funcall(mrb, addr, "protocol", 0); mrb_value port = mrb_funcall(mrb, addr, "ip_port", 0); mrb_value address = mrb_funcall(mrb, addr, "ip_address", 0); FDIPTFSWFSD 4USJOHΦϒδΣΫτ͸௚઀$ͷJOUܕ΁ม׵Ͱ͖ͳ͍ FHlz *1ΞυϨε͸4USJOHΦϒδΣΫτ ͋Β͔͡Ί4USJOHΦϒδΣΫτ͔Β*OUFHFSΦϒδΣΫτ΁ม׵͢Δඞཁ͋Γ

Slide 32

Slide 32 text

*1ΞυϨε จࣈྻ Λ*1ΞυϨε ਺஋ ʹม׵͢Δ class Addr2Int RE_IPV4ADDRLIKE = %r{ \A (\d+) \. (\d+) \. (\d+) \. (\d+) \z }x def self.convert(addr) m = RE_IPV4ADDRLIKE.match(addr) octets = m.captures octets.inject(0) { |i, s| (n = s.to_i) < 256 s.match(/\A0./) i << 8 | n } end end BEESJOUSC ࢀߟIUUQTHJUIVCDPNSVCZJQBEESCMPCDDCFBECDDGEMJCJQBEESSC- *1ΞυϨεͷจࣈྻΛ਺஋ʹม׵͢Δ "EES*OUDPOWFSUϝιουΛ༻ҙ *1"EESFTTϥΠϒϥϦͷUP@Jϝιουͷ࣮૷Λ͓आΓͯ͠ʜ

Slide 33

Slide 33 text

"EES*OUDPOWFSUϝιουΛ࣮૷ͨ͠ιʔεϑΝΠϧΛ Τίʔαʔόʔ಺͔ΒಡΈࠐΉ NSVCZͷ$"1*Λར༻ͯ͠"EES*OUDPOWFSUϝιουΛݺͼग़͢ Τίʔαʔόʔ $ BEESJOUSC "EES*OUDPOWFSU Τίʔαʔόʔ͔Β"EES*OUDPOWFSUϝιουΛݺͼग़͢ "EES*OUDPOWFSU

Slide 34

Slide 34 text

"EESJOGPΦϒδΣΫτ͔ΒΞυϨε৘ใΛऔಘ͢Δ mrb_value addr = mrb_load_irep(mrb, addrinfo); // … mrb_value address = mrb_funcall(mrb, addr, "ip_address", 0); FILE *addr2int_src = fopen("addr2int.rb", "r"); mrb_load_ fi le(mrb, addr2int_src); fclose(addr2int_src); mrb_value addr2int_klass = mrb_obj_value(mrb_class_get(mrb, "Addr2Int")); mrb_value inaddr = mrb_funcall(mrb, addr2int_klass, "convert", 1, address); FDIPTFSWFSD BEESJOUSCιʔεϑΝΠϧΛ ಡΈࠐΉ "EES*OUDPOWFSUϝιουʹ*1ΞυϨε จࣈྻ Λ౉࣮ͯ͠ߦ

Slide 35

Slide 35 text

"EESJOGPΦϒδΣΫτ͔ΒΞυϨε৘ใΛऔಘ͢Δ mrb_value addr = mrb_load_irep(mrb, addrinfo); // … mrb_value address = mrb_funcall(mrb, addr, "ip_address", 0); FILE *addr2int_src = fopen("addr2int.rb", "r"); mrb_load_ fi le(mrb, addr2int_src); fclose(addr2int_src); mrb_value addr2int_klass = mrb_obj_value(mrb_class_get(mrb, "Addr2Int")); mrb_value inaddr = mrb_funcall(mrb, addr2int_klass, "convert", 1, address); FDIPTFSWFSD ➡︎ *1ΞυϨεΛද͢*OUFHFSΦϒδΣΫτ͕ฦͬͯ͘Δ BEESJOUSCιʔεϑΝΠϧΛ ಡΈࠐΉ "EES*OUDPOWFSUϝιουʹ*1ΞυϨε จࣈྻ Λ౉࣮ͯ͠ߦ

Slide 36

Slide 36 text

struct sockaddr_in saddr; saddr.sin_family = mrb_integer(domain); saddr.sin_addr.s_addr = htonl(mrb_integer(inaddr)); saddr.sin_port = htons(mrb_integer(port)); int listener; if ((listener = socket(mrb_integer(domain), mrb_integer(socktype), mrb_integer(protocol))) < 0) { perror("socket(2)"); exit(1); } // … औಘͨ͠ΞυϨε৘ใͰιέοτΛ࡞੒͢Δ FDIPTFSWFSD ΞυϨε৘ใͷ*OUFHFSΦϒδΣΫτΛ$ͷJOUܕʹม׵͠ɺ ιέοτΛ࡞੒ ҎԼɺͦͷଞͷॲཧΛ࣮૷ ม׵ ιέοτ࡞੒ ม׵ ม׵ ม׵ ม׵ ม׵

Slide 37

Slide 37 text

׬੒ αʔόʔ NSVCZͷMJCNSVCZBϑΝΠϧͱϦϯΫͯ͠ΤίʔαʔόʔΛίϯύΠϧ ΤίʔαʔόʔΛىಈ͢Δ

Slide 38

Slide 38 text

׬੒ αʔόʔ ΫϥΠΞϯτ NSVCZͷMJCNSVCZBϑΝΠϧͱϦϯΫͯ͠ΤίʔαʔόʔΛίϯύΠϧ ΤίʔαʔόʔΛىಈ͢Δ ΫϥΠΞϯτ͔Βαʔόʔ΁ϝοηʔδΛૹ৴͢Δ

Slide 39

Slide 39 text

׬੒ αʔόʔ αʔόʔ ΫϥΠΞϯτ NSVCZͷMJCNSVCZBϑΝΠϧͱϦϯΫͯ͠ΤίʔαʔόʔΛίϯύΠϧ ΤίʔαʔόʔΛىಈ͢Δ ΫϥΠΞϯτ͔Βαʔόʔ΁ϝοηʔδΛૹ৴͢Δ αʔόʔ͸ϝοηʔδΛड͚औΓɺͦͷ··ΫϥΠΞϯτ΁ฦ৴͢Δ

Slide 40

Slide 40 text

׬੒ αʔόʔ αʔόʔ ΫϥΠΞϯτ NSVCZͷMJCNSVCZBϑΝΠϧͱϦϯΫͯ͠ΤίʔαʔόʔΛίϯύΠϧ ΤίʔαʔόʔΛىಈ͢Δ ΫϥΠΞϯτ͔Βαʔόʔ΁ϝοηʔδΛૹ৴͢Δ αʔόʔ͸ϝοηʔδΛड͚औΓɺͦͷ··ΫϥΠΞϯτ΁ฦ৴͢Δ ΫϥΠΞϯτ͸αʔόʔ͔Βͷฦ৴Λड͚औΔ

Slide 41

Slide 41 text

ࢀߟਤॻ 8FCͰ࢖͑Δ NSVCZγεςϜϓϩάϥϛϯάೖ໳ ஶऀɿۙ౻Ӊஐ࿕ IUUQTXXXDSDPNCPPLEFUBJM ೖ໳NSVCZ $͔ΒNSVCZ"1*Λ࢖͍͜ͳ͢ ஶऀ:BNBOFLLP IUUQTCPPUIQNKBJUFNT

Slide 42

Slide 42 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ ḉ

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

No content