Slide 1

Slide 1 text

#1 Readable Code Part 1 ͸͡ΊͯͷITษڧձ Sekainet Inc. Yasutaka KOUNO

Slide 2

Slide 2 text

www.sekainet.co.jp Տ໺ɹ߁ོ ̍̔̑̕೥ੜ·Εɹ ෱ౡݝ܊ࢁࢢग़਎ ౎಺ͷதݎSIerʹ6೥൒ैࣄ 2012೥10݄ʹηΧΠωοτΛ্ཱͪ͛ JavaΛϝΠϯʹWebΞϓϦέʔγϣϯͷόο ΫΤϯυɾαʔϏεߏஙΛओʹ୲౰

Slide 3

Slide 3 text

www.sekainet.co.jp גࣜձࣾηΧΠωοτ ઋ୆ͷWebΞϓϦέʔγϣϯ੡࡞ձࣾ ۀ຿ܥWebΞϓϦέʔγϣϯΛओʹ։ൃ 2012೥૑ۀ ݱࡏ̑ظ໨ ࣾһ͸ษڧձ΍ϋοΧιϯͳͲͷ
 ΠϕϯτʹΑ͘ࢀՃ͍ͯ͠·͢

Slide 4

Slide 4 text

www.sekainet.co.jp Agenda ͳͥɺಡΊΔίʔυΛॻ͘΂͖ͳͷ͔ʁ ·ͣ͸ɺ໊લΛվળ͠Α͏

Slide 5

Slide 5 text

ͳͥɺಡΊΔίʔυΛॻ͘΂͖ͳͷ͔ʁ ಡΊΔίʔυͱ͸ͳΜͩΖ͏ʁ ಡΊΔίʔυΛॻ͘͜ͱʹͲΜͳҙ͕ٛ͋ΔͷͩΖ͏ʁ ಡΊΔίʔυΛॻ͔ͳ͍͜ͱʹɺͲΜͳةݥ͕͋ΔͷͩΖ͏ʁ ·ͣ͸ɺ໨తΛ֬ೝ͠Α͏ɻ

Slide 6

Slide 6 text

www.sekainet.co.jp ίʔυͷՁ஋ͬͯͳΜͩΖ͏ʁ ʁ ࣮ࡍʹಈ͘ίʔυ ʹ Ձ஋ͷ͋Δίʔυ

Slide 7

Slide 7 text

www.sekainet.co.jp ಈ͘ίʔυ͸ར༻ऀʹՁ஋Λ΋ͨΒ͕͢… ಈ͘͜ͱ͚ͩΛ༏ઌͯ͠ίʔυΛॻ͍ͨΒ Ԛͯ͘ಡΊͳ͍ɻߏ଄͕ཧղͰ͖ͳ͍ υΩϡϝϯτ΋੔උ͞Ε͍ͯͳ͍ ͦΕʹΑΔฐ֐͸ όάͷमਖ਼͕ࠔ೉ ػೳ௥Ճ͕ࠔ೉ ߋʹ೉ղͳίʔυ͕૿͑Δ ৽نࢀೖϝϯόʔ͕ཧղͰ͖ͳ͍ ݁Ռɺӡ༻ίετ͕ઇͩΔ·ࣜʹ૿͑ͯΏ͘

Slide 8

Slide 8 text

www.sekainet.co.jp ׂΕ૭ཧ࿦ ʮݐ෺ͷ૭͕յΕ͍ͯΔͷΛ์ஔ͢Δͱɺ ୭΋஫ҙΛ෷͍ͬͯͳ͍ͱ͍͏৅௃ʹͳΓɺ ΍͕ͯଞͷ૭΋·΋ͳ͘શͯյ͞ΕΔʯ ѱ͍؀ڥΛ์ஔ͢Δͱߋʹ؀ڥ͕ѱԽ͢Δ ͱ͍͏ཧ࿦ɻ ߥΕ͍ͯΔঢ়ଶʼܰ൜ࡑ͕૿͑ΔʼϞϥϧ ͕௿Լͯ͠൜ࡑ͕૿͑Δʼڟѱ൜ࡑΛؚΊ ͨ൜ࡑ͕૿͑Δͱ͍͏΋ͷɻ ίʔυͰ΋ಉ͜͡ͱ͕ى͜Δɻ

Slide 9

Slide 9 text

www.sekainet.co.jp ಡΊͳ͍ίʔυʹٕज़తෛ࠴ ಈ͘͜ͱΛ༏ઌͯ͠ɺಡΊͳ͍ίʔυΛ์ஔ͍ͯ͠Δ ͱɺͦΕ͕ݺͼਫͱͳͬͯߋʹಡΊͳ͍ίʔυ͕૿େ ͍͖ͯ͠·͢ɻ ͜ͷΑ͏ͳঢ়ଶΛआۚͱརଉʹͳͧΒ͑ͯɺ
 ٕज़తෛ࠴ͱݴ͍·͢ɻ ٕज़తෛ࠴͕૿͑͗͢Δͱɺ࠷ऴతʹ͸ͲͷΑ͏ͳର ॲ΋ࠔ೉ʹͳΓɺίʔυΛ͢΂ͯഁغ͢Δ͜ͱʹͳΓ ·͢ɻ

Slide 10

Slide 10 text

www.sekainet.co.jp ಈ͍ͯ΋ɺಡΊͳ͍ίʔυ͸ӡ༻͕ࠔ೉ Ձ஋͸௿͘ɺίετʹݟ߹Θͳ͍

Slide 11

Slide 11 text

www.sekainet.co.jp Ͱ͸ɺՁ஋͕͋Δίʔυͱ͸ʁ ҎԼͷ̏ͭͷཁ݅Λຬͨͨ͠΋ͷ
 • ਖ਼͘͠ಈ࡞͢Δίʔυ • ༰қ͔ͭਖ਼֬ʹཧղͰ͖Δίʔυ • मਖ਼΍֦ு͕༰қͳίʔυ

Slide 12

Slide 12 text

www.sekainet.co.jp Ձ஋ͷ͋ΔίʔυΛॻͨ͘Ίͷख๏ • ςετۦಈ։ൃ(TDD) • ΞδϟΠϧ։ൃ/εΫϥϜ • ϑϨʔϜϫʔΫ • σβΠϯύλʔϯ • ܧଓతΠϯςάϨʔγϣϯ • ߏ଄ԽϓϩάϥϛϯάɾΦϒδΣΫτࢦ޲ • etc.

Slide 13

Slide 13 text

www.sekainet.co.jp ໌೔͔Β୭Ͱ΋͙͢ʹ࣮ફͰ͖ͯɺ ্ྲྀɾԼྲྀɾ্ڃऀɾॳ৺ऀΛ໰Θͣɺ ͔͠΋ޮՌ͕ߴ͍ํ๏

Slide 14

Slide 14 text

Ϧʔμϒϧ ίʔυ

Slide 15

Slide 15 text

www.sekainet.co.jp ಡΈ΍͍͢ίʔυ͸Ձ஋ͷ͋ΔίʔυͷୈҰา • ؒҧ͑ʹ͍͘͠ɺؒҧ͍Λݟ͚ͭ΍͍͢ • ແବͳίʔυ΍ίϝϯτɺυΩϡϝϯτʹ
 ࣌ؒɾࢥߟΛୣΘΕͳ͍ • ༏Εͨઃܭ΍ςετͷ͠΍͢͞ʹͭͳ͕Δ • ଐਓԽͨ͠(̋̋͞Μ͡Όͳ͍ͱΘ͔Βͳ͍)
 ίʔυ͕ແ͘ͳΔ

Slide 16

Slide 16 text

www.sekainet.co.jp Ϧʔμϒϧίʔυͷجຊతͳߟ͑ํ

Slide 17

Slide 17 text

www.sekainet.co.jp ͲͪΒ͕༏Ε͍ͯΔʁ // ύλʔϯ1 int i = 0; while (list.size() > i) { Object element = list.get(i); System.out.println(element); i++; } // ύλʔϯ2 for (Object element : list) { System.out.println(element); }

Slide 18

Slide 18 text

www.sekainet.co.jp ίʔυ͸ଞͷਓ͕ ࠷୹࣌ؒͰཧղͰ͖ΔΑ͏ʹ
 ॻ͔ͳ͚Ε͹͍͚ͳ͍ɻ

Slide 19

Slide 19 text

www.sekainet.co.jp ݪయ͸ͪ͜Β ॻళ΍ωοτͰߪೖͰ͖·͢ɻ ͓͢͢Ί͸ΦϥΠϦʔ EBookετΞͰ
 ൢച͍ͯ͠ΔPDF൛Ͱ͢ɻ
 λϒϨοτ΍PCͳͲΛ࢖͑͹Ͳ͜Ͱ΋ಡ Ή͜ͱ͕Ͱ͖·͢ɻ https://www.oreilly.co.jp/books/ 9784873115658/

Slide 20

Slide 20 text

·ͣ͸ɺ໊લΛվળ͠Α͏ ಡΈ΍͍͢ίʔυΛॻ͘ʹ͸ɺ͍ͭ͘΋ͷΤοηϯε͕͋Γ·͢ɻ ίʔυ্Ͱ͸ɺม਺໊΍ఆ਺໊ɺؔ਺໊ͱҾ਺໊ɺߏ଄ମ໊΍Ϋϥ ε໊ͳͲͱ͍ͬͨΑ͏ʹɺ࣮ʹଟ͘ͷ໊લΛ෇͚Δࣄ͕Ͱ͖·͢ɻ ίʔσΟϯά࡞ۀͷଟ͘͸ɺ͜ͷ໋໊ʹඅ΍͞Ε͓ͯΓɺ౰વಡΈ ΍͢͞ʹ΋ଟ͘ͷӨڹΛ༩͍͑ͯ·͢ɻ ·ͣ͸ɺ͜ΕΒͷ໊લ෇͚ͷํ๏Λվળ͍͖ͯ͠·͠ΐ͏ɻ

Slide 21

Slide 21 text

www.sekainet.co.jp ൚༻తͳ໊લΛཞ༻͠ͳ͍

Slide 22

Slide 22 text

www.sekainet.co.jp ൚༻తͳ໊લΛཞ༻͍ͯ͠·ͤΜ͔ʁ Έͳ͞Μ͕ίʔυΛॻ͘ͱ͖ɺ
 ࣍ͷΑ͏ͳ໊લΛΑ͘࢖ͬͯ͸͍·ͤΜ͔ʁ get, set, str, text, list, map, result, buf, temp, obj1, obj2, size, date, hoge, foo ͜ΕΒ͸൚༻తͰศརͰ͕͢ɺͲ͜Ͱ΋࢖͑ΔΘ͚ Ͱ͸͋Γ·ͤΜɻ

Slide 23

Slide 23 text

www.sekainet.co.jp /** WebαΠτͷΠϯλʔϑΣʔε. */ interface WebSite { Page getPage(); } /** WebαΠτͷΠϯλʔϑΣʔεʢվળҊʣ. */ interface WebSite { Page downloadPage(); } Javaͷgetter(ϓϩύςΟ)͔ͳʁ ҧ͏ͳΒͲ͔͜Βऔͬͯ͘Δͷʁ ίϝϯτ͕ͳͯ͘΋Πϯλʔωοτ͔Β μ΢ϯϩʔυ͢Δ͜ͱ͕ਪଌͰ͖Δɻ

Slide 24

Slide 24 text

www.sekainet.co.jp /** ೋ෼໦Ϋϥε. */ class BinaryTree { int size(); } /** ೋ෼໦ΫϥεʢվળҊʣ. */ class BinaryTree { int height(); int numNodes(); } ߴ͞ʁ ϊʔυͷ਺ʁ ͳΜͷαΠζʁ

Slide 25

Slide 25 text

www.sekainet.co.jp /** εϨουΫϥε. */ class Thread { void stop(); } /** εϨουΫϥεʢվળҊʣ. */ class Thread { void kill(); void pause(); // resume()ͰॲཧΛ࠶։ } ڧ੍ऴྃʁɹҰ࣌ఀࢭʁ

Slide 26

Slide 26 text

www.sekainet.co.jp ൚༻తͳ໊લΛආ͚ͯ ΑΓ໌ྎͳݴ༿Λ༩͑Α͏ʂ

Slide 27

Slide 27 text

www.sekainet.co.jp Ͱ΋ɺ΍Γա͗ʹ͸஫ҙ͠Α͏ɻ class String { // ͨͱ͑͹ɺStringʹ͜Μͳϝιου͕͋ͬͨΒࠞཚͯ͠͠·͏ɻ String[] split(String regex); String[] divide(String regex); String[] partition(String regex); // "boo:and:foo".split(":") > ["boo", "and", "foo"] // "boo:and:foo".divide(":") > ["boo", ":", "and", ":", "foo"] // "boo:and:foo".partition(":") > ["boo", ":and", ":foo"] }

Slide 28

Slide 28 text

www.sekainet.co.jp ୹໊͍લʹؾΛ͚ͭΔ

Slide 29

Slide 29 text

www.sekainet.co.jp ୹ͯ͘΋໰୊ͳ͍ม਺໊ // ࠨӈͷ஋ΛೖΕସ͑Δ if (right < left) { int tmp = right; right = left; left = tmp; } ͜ͷtmp͸ੜଘظ͕ؒ୹͘ Ұ࣌తͳม਺ͱ͍͏ҙਤ͕఻ΘΔ

Slide 30

Slide 30 text

www.sekainet.co.jp ୹͍ͱ໰୊͕͋Δม਺໊ // Ϣʔβʔ৘ใΛจࣈྻԽ String tmp = user.name(); tmp += " " + user.phone_number(); tmp += " " + user.email(); ... template.put("user_info", tmp); template.put("server_info", tmp); // ؒҧ͍ʹؾ෇͔ͳ͍ userInfoͳͲͷม਺໊Ͱ͋Ε͹ɺ
 ΑΓΘ͔Γ΍͘͢ɺؒҧ͍Λ๷͛Δ

Slide 31

Slide 31 text

www.sekainet.co.jp ϧʔϓΠϯσοΫε i, j, k, idx͸ɺ୹͍͚ͲΑ͘ҙຯΛද͍ͯ͠Δɻ Ͱ΋ɺ࣍ͷΑ͏ͳέʔεͰ͸͘͢͝ಡΈͮΒ͍ɻ for (int i = 0; i < clubs.size(); i++) for (int j = 0; j < clubs[i].members.size(); j++) for (int k = 0; k < users.size(); k++) if (clubs[i].members[k] == users[j]) System.out.println("user[" + j + "] is in club[" + i + "]"); membersͷΠϯσοΫε͸ j usersͷΠϯσοΫε͸ k ifจҎԼͰऔΓҧ͍͑ͯΔ

Slide 32

Slide 32 text

www.sekainet.co.jp ϧʔϓΠϯσοΫεͷվળ ͳΜͷͨΊͷΠϯσοΫε͔໌֬ʹ͠Α͏ // ci = clubs_idx, mi = members_idx, ui = user_idx for (int ci = 0; ci < clubs.size(); ci++) for (int mi = 0; mi < clubs[ci].members.size(); mi++) for (int ui = 0; ui < users.size(); ui++) if (clubs[ci].members[ui] == users[mi]) System.out.println("user[" + mi + "] is in club[" + ci + "]"); members[ui]ͳͲͷ
 ؒҧ͍͕Θ͔Γ΍͘͢ͳΔ

Slide 33

Slide 33 text

www.sekainet.co.jp ϧʔϓΠϯσοΫεΛආ͚Δ for (Club club : clubs) for (User member : club.members) for (User user : users) if (member == user) System.out.println("user[" + user + "] is in club[" + club + "]"); ՄೳͰ͋Ε͹֦ுforจͳͲΛ࢖༻ͯ͠ϧʔϓΠϯ σοΫεͷ࢖༻ͦͷ΋ͷΛආ͚Α͏ɻ ΠϯσοΫεͷؒҧ͍ͷ༨஍͕ͳ্͍ʹɺ ίʔυ΋γϯϓϧʹ

Slide 34

Slide 34 text

www.sekainet.co.jp tmp, it, result, i, j, k ͳͲͷ໊લΛ࢖͏ͱ͖͸ɺ
 ม਺ͷੜଘظؒ΍είʔϓΛؑΈͯɺ৻ॏʹѻ͓͏ɻ ଟ͘ͷ৔߹ɺ΋ͬͱྑ໊͍લ͕͋Δɻ

Slide 35

Slide 35 text

www.sekainet.co.jp ΑΓ۩ମతͳ໊લΛ࠾༻͢Δ

Slide 36

Slide 36 text

www.sekainet.co.jp /** ೚ҙͷTCP/IPϙʔτΛαʔό͕ϦοεϯͰ͖Δ͔֬ೝ͢Δ. */ public boolean serverCanStart() { ... } /** ೚ҙͷTCP/IPϙʔτΛαʔό͕ϦοεϯͰ͖Δ͔֬ೝ͢Δ.(मਖ਼൛) */ public boolean canListenOnPort() { ... } ػೳʹରͯ͠ɺϝιου໊͕แׅత͗͢Δ

Slide 37

Slide 37 text

www.sekainet.co.jp —extra_loggingͳͲɺ΋ͬͱ௚઀తͳ໊લʹ͠Α͏ —run_locally Φϓγϣϯ ࣗ࡞ϓϩάϥϜͷΦϓγϣϯɻ ௥ՃͷσόοάϩάΛग़ྗ͢Δ͕ɺಈ࡞͕஗͘ͳΔɻ ந৅తͰ໊લ͔Β
 ༻్Λ૝૾Ͱ͖ͳ͍ αʔόʔͰ௥Ճϩά ͕΄͍͠ͱ͖͸ʁ ϩʔΧϧͰύϑΥʔϚϯ εςετΛ͢Δͱ͖͸ʁ

Slide 38

Slide 38 text

www.sekainet.co.jp ػೳͷൣғΛ௒໊͑ͨલΛ ͚ͭͳ͍Α͏ʹ͠Α͏ɻ ͦ͏͢Ε͹ɺػೳ௥Ճ΋͠΍͘͢ͳΔ

Slide 39

Slide 39 text

www.sekainet.co.jp ໊લʹ৘ใΛ෇༩͢Δ

Slide 40

Slide 40 text

www.sekainet.co.jp //ॲཧ࣌ؒͷܭଌʢमਖ਼൛ʣ long startMs = new Date().getTime(); ... long elapsedMs = new Date().getTime() - startMs; System.out.println("ಡΈࠐΈ࣌ؒɿ" + (elapsedMs / 1000L) + "ඵ"); // ॲཧ࣌ؒͷܭଌ long start = new Date().getTime(); ... long elapsed = new Date().getTime() - start; System.out.println("ಡΈࠐΈ࣌ؒɿ" + elapsed + "ඵ"); elapsedʹ͸ϛϦඵ͕ ઃఆ͞Ε͍ͯΔ

Slide 41

Slide 41 text

www.sekainet.co.jp ୯Ґͷઃఆྫ ϝιουͷԾҾ਺ ୯Ґ౳Λ௥Ճͨ͠ԾҾ਺ start(int delay) delaySecs createCache(int size) sizeKb downloadThrottle(float limit) maxKbps rotate(float angle) degreesCw

Slide 42

Slide 42 text

www.sekainet.co.jp ॏཁͳଐੑͷ෇༩ྫ ม਺໊ վળޙͷม਺໊ password plaintextPassword hashedPassword comment unescapedComment html htmlUtf8 data dataUrlEncoded // ͜ͷΑ͏ʹࠞಉ͠қ͍৔ॴͰ׆༻͢Δͱྑ͍ if (passwordMatches(plaintextPassword, hashedPassword)) { ... }

Slide 43

Slide 43 text

www.sekainet.co.jp ୯Ґ΍ॏཁͳଐੑ͸ ม਺໊ʹ௥Ճͯ͠ ৗʹҙࣝͰ͖ΔΑ͏ʹ͢Δ

Slide 44

Slide 44 text

www.sekainet.co.jp ௕͗͢Δ໊લΛආ͚Δ

Slide 45

Slide 45 text

www.sekainet.co.jp ௕໊͍લ͸ཧղΛԕ͚͟Δ newNavigationControllerWrappingViewControllerForDataSourceOfClass() ࠓ·Ͱ͸ɺ • ۩ମతͳ໊લΛ͚ͭΖ • త֬ͳ໊લΛ͚ͭΖ • ୯ҐΛ͚ͭΖͱ ݴͬͨ۩߹ʹղઆ͖ͯ͠·ͨ͠ɻ Ͱ΋ɺ͔ͩΒͱ͍ͬͯ͜Μͳ໊લ͸୭΋๬ΜͰ͍·ͤΜɻ

Slide 46

Slide 46 text

www.sekainet.co.jp /** Ϣʔβʔςʔϒϧʹର͢ΔݕࡧΛߦ͏. */ interface UserRepository { List findAdminUsersFromUserTable(); } UserRepositoryͳΒUserTable͔Β
 ݕࡧ͢Δͷ͸ࣗ໌ /** Ϣʔβʔςʔϒϧʹର͢ΔݕࡧΛߦ͏(վળҊ). */ interface UserRepository { List findAdminUsers(); }

Slide 47

Slide 47 text

www.sekainet.co.jp // είʔϓ͕খ͚͞Ε͹୹໊͍લͰ΋͍͍ if (debug) { Map m = new HashMap<>(); lookUpNamesNumbers(m); System.out.println(m); } // Ұํɺϝϯόม਺΍άϩʔόϧม਺ͩͱmͷ໨త͕෼͔Βͳ͍ lookUpNamesNumbers(m); System.out.println(m);

Slide 48

Slide 48 text

www.sekainet.co.jp লུͷ͔ͨ͠ʹ͸ؾΛ͚ͭΔ // ͜ͷলུ͸ɺ৽͍͠ϝϯόʔ͕ཧղͰ͖ΔͩΖ͏͔ʁ class BEManager // BackEndManagerͷུ // ͜ͷলུ͸ཧղͰ͖Δ eval // evaluation doc // document str // string ϓϩδΣΫτݻ༗ͷ΋ͷ͸লུ͠ͳ͍΄͏͕ྑ͍ ϓϩάϥϚʹͱͬͯҰൠతͳলུ͸ͯ͠΋ྑ͍

Slide 49

Slide 49 text

www.sekainet.co.jp ௕໊͍લΛೖྗ͢Δ͜ͱ͸೉͘͠ͳ͍ EclipseΛྫʹڍ͛Δͱ • େจࣈʹΑΔলུه๏ ✦ “LHM”ͱೖྗͯ͠ίʔυิ׬͢Δͱɺ”LinkedHashMap”͕ೖྗ͞ΕΔɻ ✦ “LinH”ͱೖྗͯ͠ίʔυิ׬͢Δͱɺ
 ”LinkedHashMap”ͱ”LinkedHahsSet”͕ީิʹڍ͕Δɻ • ίʔυςϯϓϨʔτͷ࢖༻ ✦ “sysout”ͱೖྗͯ͠ίʔυิ׬͢Δͱɺ
 ”System.out.println()”͕ೖྗ͞ΕΔɻ

Slide 50

Slide 50 text

www.sekainet.co.jp ௕͗͢Δ໊લ͸ཧղΛԕ͚͟Δ Ұํɺ௕໊͍લͰ΋ೖྗ͸؆୯ͩ ༏ઌ͢΂͖͸ཧղ͠΍͍͢͜ͱ

Slide 51

Slide 51 text

www.sekainet.co.jp ίʔσΟϯάελΠϧΛकΔ

Slide 52

Slide 52 text

www.sekainet.co.jp جຊతͳίʔσΟϯάελΠϧΛकΖ͏ // ΫϥεɾΠϯλʔϑΣʔε͸େจࣈͰ࢝ΊΔ public class TaskQueue { // ఆ਺(static final)͸େจࣈͱΞϯμʔείΞ public static final int LIMIT_TASK_NUM = 100; // ม਺΍ϝιου͸খจࣈͰ࢝ΊΔ private Queue tasks; public void addQueue(Task task) { ... } public Object executeQueue() { ... } } https://kazurof.github.io/GoogleJavaStyle-ja/ ࢀߟࢿྉ: Google Java Style Guide

Slide 53

Slide 53 text

www.sekainet.co.jp νʔϜશһ͕ελΠϧΛकΔ͜ͱͰ ཧղ͕ૣ·Δ

Slide 54

Slide 54 text

www.sekainet.co.jp ࠓ೔ͷ·ͱΊ

Slide 55

Slide 55 text

www.sekainet.co.jp • ໌֬ͳ୯ޠΛબͿ ✴ ঢ়گʹԠͯ͡getͰ͸ͳ͘fetch΍downloadΛ࢖͏ • ൚༻తͳ໊લΛආ͚Δ ✴ ໌֬ͳཧ༝͕ͳ͚Ε͹ɺtmp΍resultΛ࢖Θͳ͍ • ΑΓ۩ମతͳ໊લΛ͚ͭɺแׅతʹ͗͢͠ͳ͍ ✴ serverCanStart()ΑΓcanListenOnPort()ͷ΄͏͕໌֬ • େ੾ͳ৘ใΛ௥Ճ͢Δ ✴ ϛϦඵΛද͢msΛ෇͚ΔɻੜύεϫʔυΛplaintextPasswordͱ͢Δɻ • είʔϓʹ߹໊ͬͨલΛ෇͚Δ ✴ ୹͍είʔϓͳΒ୹໊͍લͰྑ͍ɻ௕͍είʔϓͳΒ௕ͯ͘΋໌֬ʹɻ • େจࣈ΍ΞϯμʔείΞͳͲʹҙຯΛࠐΊΔ ✴ ྫ͑͹ɺҰ໨Ͱఆ਺ͱղΔΑ͏ͳ໊લ(LIMIT_TASK_NUM)Λ͚ͭΔɻ

Slide 56

Slide 56 text

www.sekainet.co.jp ࠷ޙʹɿ ιʔείʔυ͸ઃܭॻ ઃܭॻ࡞੒͕ઃܭͰɺϓϩάϥϛϯά͸੡଄ͩͱೝ͍ࣝͯ͠·ͤΜ ͔ʁ͜Ε͸Α͋͘Δؒҧ͍Ͱ͢ɻ ϓϩάϥϛϯάݴޠ͸ਓ͕ؒ෼͔Γ΍͍༷͢ʹ࡞ΒΕͨݴޠͰ͢ɻ ͦͯ͠ɺϓϩάϥϜΛ੡଄͢Δͷ͸ίϯύΠϥͷ࢓ࣄͰ͢ɻ ίϯϐϡʔλʔʹͱͬͯɺม਺໊ͳͲͷ໊લ͸ແՁ஋Ͱ͢ɻ ͦΕͰ΋ɺຆͲͷݴޠͰ໊લΛࣗ༝ʹ͚ͭΒΕΔͷ͸ɺͦΕʹΑͬ ͯਓؒͷཧղ͕େ͖͘վળ͢Δ͔ΒͰ͢ɻ ϓϩάϥϛϯάͱ͸ɺਓؒʹ෼͔Γ΍͍͢ઃܭॻ=ιʔείʔυΛ ࡞੒͢Δ͜ͱͰ͢ɻ ιʔείʔυ͸ࢲୡͷॏཁͳίϛϡχέʔγϣϯͷҰͭͰ͢ɻͰ͢ ͔Βɺ૬खΛྀͬͯΘ͔Γ΍͘͢ॻ͘͜ͱ͕ͱͯ΋ॏཁͳͷͰ͢ɻ

Slide 57

Slide 57 text

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