Slide 1

Slide 1 text

Ϟδϡʔϧͷਂ͞ʹ͍ͭͯ CAEC MeetUP #4

Slide 2

Slide 2 text

Me • தඌ ྋ (@nakabonne) • தԝେֶ঎ֶ෦3೥ • AWAϚΠΫϩαʔϏε • Go, Envoy, etc…

Slide 3

Slide 3 text

My tasks https://www.redhat.com/cms/managed-files/service-mesh-1680.png

Slide 4

Slide 4 text

My tasks https://github.com/DataDog/dd-py-tracing-workshop

Slide 5

Slide 5 text

Agenda • ྑ͍Ϟδϡʔϧͱ͸ • deep moduleͱ͸

Slide 6

Slide 6 text

ྑ͍Ϟδϡʔϧͱ͸

Slide 7

Slide 7 text

খ͍͞Ϟδϡʔϧʁ

Slide 8

Slide 8 text

–The Unix Philosophy “Small is beautiful”

Slide 9

Slide 9 text

ԿނϞδϡʔϧΛ࡞Δͷ͔

Slide 10

Slide 10 text

ؔ࿈ੑͷߴ͍ཁૉ͕ू·Δ →࣮૷ͷෳࡶ͞ΛԼ͛Δ

Slide 11

Slide 11 text

Open a file in Java FileInputStream fileStream = new FileInputStream(fileName); BufferedInputStream bufferedStream = new BufferedInputStream(fileStream); ObjectInputStream objectStream = new ObjectInputStream(bufferedStream);

Slide 12

Slide 12 text

Open a file in Java FileInputStream fileStream = new FileInputStream(fileName); BufferedInputStream bufferedStream = new BufferedInputStream(fileStream); ObjectInputStream objectStream = new ObjectInputStream(bufferedStream); ॳาతͳI/O

Slide 13

Slide 13 text

Open a file in Java FileInputStream fileStream = new FileInputStream(fileName); BufferedInputStream bufferedStream = new BufferedInputStream(fileStream); ObjectInputStream objectStream = new ObjectInputStream(bufferedStream); όοϑΝϦϯά

Slide 14

Slide 14 text

Open a file in Java FileInputStream fileStream = new FileInputStream(fileName); BufferedInputStream bufferedStream = new BufferedInputStream(fileStream); ObjectInputStream objectStream = new ObjectInputStream(bufferedStream); read/write

Slide 15

Slide 15 text

࣮૷ͷෳࡶ͕͞࿙ΕͯΔ…

Slide 16

Slide 16 text

• খ͍͞ͱ͍͏͜ͱ͸ɺ࣋ͬͯΔ৘ใྔ͕গͳ͍ • ࣋ͬͯΔ৘ใྔ͕গͳ͍ͱɺ࣮૷ͷෳࡶ͕͞࿙ Ε΍͍͢ • ࣮૷ͷෳࡶ͕͞࿙Ε͍ͯΔͱɺ࣮૷มߋ͕पΓ ʹӨڹΛ༩͑΍͘͢ͳΔ

Slide 17

Slide 17 text

খ͞͞Λҙࣝ͗͢͠Δ

Slide 18

Slide 18 text

খ͞͞Λҙࣝ͗͢͠Δ

Slide 19

Slide 19 text

ߴڽूʁૄ݁߹ʁ

Slide 20

Slide 20 text

ߴڽूʁૄ݁߹ʁ

Slide 21

Slide 21 text

ߴڽूʁૄ݁߹ʁ ྑ͍ΠϯλʔϑΣʔε͕ඞཁ

Slide 22

Slide 22 text

ྑ͍ΠϯλʔϑΣʔεͱ͸

Slide 23

Slide 23 text

Bad interface

Slide 24

Slide 24 text

Bad interface

Slide 25

Slide 25 text

Bad interface

Slide 26

Slide 26 text

͔͠͠ιϑτ΢ΣΞ͸มߋ͞ΕΔ →͜ͷໃ६ͷதͰ΋่Εͳ͍͜ͱ͕ٻΊΒΕΔ

Slide 27

Slide 27 text

Good interface ෆมʢ௥ՃҎ֎ͷมߋΛڐ͞ͳ͍ʣ

Slide 28

Slide 28 text

And

Slide 29

Slide 29 text

࢖͍΍͋͘͢Δ΂͖

Slide 30

Slide 30 text

–Rich Hickey “Easy is relative”

Slide 31

Slide 31 text

Կ͕ศར͔͸ϢʔβʔʹΑΔ

Slide 32

Slide 32 text

Use case Edge case General case

Slide 33

Slide 33 text

Use case Edge case General case

Slide 34

Slide 34 text

Ұൠతͳέʔεʹߜͬͯ ࢖͍΍͢͞Λ௥ٻ͢Δ

Slide 35

Slide 35 text

ෳࡶԽͷཧ༝ FileInputStream fileStream = new FileInputStream(fileName); BufferedInputStream bufferedStream = new BufferedInputStream(fileStream); ObjectInputStream objectStream = new ObjectInputStream(bufferedStream); όοϑΝϦϯά͠ͳ͍ͱ͍͏ ΤοδέʔεΛڐ༰͍ͯ͠Δ

Slide 36

Slide 36 text

Good module ؔ࿈ੑͷߴ͍ͨ͘͞ΜͷཁૉΛӅ࣋ͪ͠ɺ ҰൠతͳέʔεͰ࢖͍΍͘͢ෆมͳΠϯλʔ ϑΣʔεʹΑͬͯڧྗͳػೳΛఏڙ͢Δ

Slide 37

Slide 37 text

ߟ͑Δ͜ͱଟ͗͢ʂ

Slide 38

Slide 38 text

ຊ୊

Slide 39

Slide 39 text

deep module

Slide 40

Slide 40 text

A Philosophy of Software Design • ஶऀ͸ελϯϑΥʔυେֶ John Ousterhoutڭत • ઐ໳͸෼ࢄγεςϜ΍OS ͳͲଟذʹ౉Δ

Slide 41

Slide 41 text

deep module γϯϓϧͳΠϯλʔϑΣʔεͰ ڧྗͳػೳΛఏڙ͢Δ

Slide 42

Slide 42 text

deep vs shallow modules

Slide 43

Slide 43 text

deep vs shallow modules

Slide 44

Slide 44 text

ΠϯλʔϑΣʔεͷෳࡶ͞͸ίετͰ ػೳͷڧྗ͞͸རӹ

Slide 45

Slide 45 text

ࢹ఺ • ػೳ͸ڧྗ͚ͩͲɺͦΕҎ্ʹΠϯλʔ ϑΣʔε͕ෳࡶʹͳͬͯͳ͍͔ʁ • ΠϯλʔϑΣʔε͸؆୯͚ͩͲɺػೳ ͸ශऑͰ͸ͳ͍͔ʁ

Slide 46

Slide 46 text

ྫɿUnix ϑΝΠϧI/O • open() • read() • write() • close() • lseek() ←ෆม

Slide 47

Slide 47 text

Χʔωϧ ϢʔβΞϓϦέʔγϣϯΛ҆ఆͯ͠ ಈ࡞ͤ͞ΔͨΊʹઃܭ͞Ε͍ͯΔ →ࢀߟʹͳΔ

Slide 48

Slide 48 text

·ͱΊ

Slide 49

Slide 49 text

·ͱΊ • ྑ͍Ϟδϡʔϧͱ͸ʮؔ࿈ੑͷߴ͍ͨ͘͞ΜͷཁૉΛӅ࣋ͪ͠ɺҰൠత ͳέʔεͰ࢖͍΍͘͢ෆมͳΠϯλʔϑΣʔεʹΑͬͯڧྗͳػೳΛఏ ڙ͢Δ΋ͷʯ • ࣮ݱ͢ΔͨΊʹʮϞδϡʔϧͷਂ͞ʯΛҙࣝ͢Δ • ͋͘·ͰҰͭͷߟ͑ํͰ͋ΔͨΊɺ൓࿦΢ΣϧΧϜ

Slide 50

Slide 50 text

͋Γ͕ͱ͏͍͟͝·ͨ͠