Comments
Description
Transcript
mikutterの薄い本 vol.2 PDF版
ẴắẟᾼᾸᾺῄῃῃᾴ῁ᴾ ẺỉẲẪềấẪủợạὲᴾ PLNXWWHU भුःম৩ভ ౣ PLNXWWHU भුःম YRO َघओः 0 মُ WZLWWHU ॡছॖ॔থॺؚPLNXWWHU पणःथभँैोुऩःਵ Learn You the mikutter for Great TEOKURE! Price: 1000 favs to @toshi_a Release: 4 August 2012 chief : @brsywe , @ch_print What is “ࡍࡈ࠸ M ᮏ”? 㹼mikutter ࢆධࢀࡓࡇ࡞࠸ேࠊே⏕࠸ᨵࡵ࡚ࠋ㹼 @brsywe す➃ࡢᨺ㏦ᒁෆႚⲔᐊ㛗 1.ࡍࡈ࠸ M ᮏ࡞ࡗࡓ⤒⦋ ㄞ⪅ㅖྩ࡛࠶ࢀࡤࠊᒧᗘᛮ࠺➻ࡔࠋ ࠗࡍࡈ࠸ Haskell ࡓࡢࡋࡃᏛࡰ࠺࠘ࡢࣃࢡ࡛ࣜࡣ࡞࠸ࠋࡑ ࢀࡣṇࡋࡃࡶ࠶ࡾࠊㄗࡗ࡚ࡶ࠸ࡿࠋ☜ࠗࡍࡈ࠸ mikutter ࡓࡢࡋࡃ࡚࠾ࡃࢀࡼ࠺࠘ࢆ␎ࡋ”ࡍࡈ ࠸ M ᮏ”࡞ࡗࡓࡢࡔࠋణࡋࢀ⮳ࡿࡣࡢせᅉࡀ࠶ࡗࡓࡇࡀྰᐃ࡛ࡁ࡞࠸ࠋ ࡇࡢⷧ࠸ᮏࡢ⏬ࠊᡭ㐜ಀ࡛࠶ࡿࢃࡓࡋࡣࠊࡑ࠺ࠊM ࡛࠶ࡿࠋྍឡ࠸ዪࡢᏊ㋃ࡲࢀࡓ࠸ࡑ࠺ ࠸࠺(௨ୗ⦅⪅ࡼࡾ๐㝖)ࠋⱸⓒྜᵝࡀ㋃ࢇ࡛࠸ࡿ⤮ࢆᕸᅋࡢୖ 1m ࡄࡽ࠸㓄⨨ࡉࢀࡿࡼ࠺ࡘࡿ ࡋ࡚࠾࠸ࡓࡇࢁࠊⰍࢇ࡞ேࡽኚែᢅ࠸ࡉࢀࡓࠋྍឡ࠸ዪࡢᏊ㋃ࡲࢀࡓࡾࡲࢀࡿࡢࡗ࡚⏨ࡢ ክ࡛ࡍࡽ᪉࡞࠸࡛ࡍࡼࡡࠋ 2.ᮏ᭩ࡅࡿࢃࡓࡋࡢᙺព⩏ ࡚࠾ࡃࢀࡉࢇࡓࡕཎ✏ࢆദಁࡍࡿಀࢆົࡵࡓࡔࡅ࡛࠶ࡿࠋᅇᰯṇసᴗࡣ @ch_print ࡀࡸࡗ࡚ ࡃࢀࡿࡋࡡࠋ 3.ࡘ࠸ࡇ࡞࠸ࡔฟࡋࡓ vol.1 ࡘ࠸࡚ᨭሗ࿌ ๓ᅇࠊ ࠗ㝔ヨཷࡗࡓࡽ mikutter ࡢⷧ࠸ᮏฟࡍ࠘Ⓨゝࡋࡓࡇࡀ⅏࠸ࡋᖺࡢ 1 ᭶ࡇࡳࢺࣞ 19㸦㜰㸧࡚ ࠊ ࠕmikutter ࡢⷧ࠸ᮏ vol.1ࠖࢆⓎ⾜ࡋࡓࠋᏊ∧ࡇࡑ༑వ㒊ࡋ‽ഛࡋ࡚࠸࡞ ࡗࡓࡶࡢࡢࠊpdf ∧ࡣ⣼ィ 1000 ࡢࢡࢭࢫࡀ࠶ࡗࡓࠋ୍ே࡛ᩘᅇࡣࢡࢭࢫࡋࡓࡾࡍࡿࡔ ࢁ࠺ࡋᐇ㝿ࡢࡇࢁࡣᩘⓒே࡛࠶ࢁ࠺ࠋᗄవྡࡽ࠾ࡶࢁࡗࡓ࡛࣮࡞ࡢឤඹࠊ࠶ฟᒎ ㈝⏝ࡢ୍㒊ࡀฟࡓࡽ᭷ࡾ㞴࠸࡞ப࠺ࡇ࡛ Amazon ࢠࣇࢺๆࡢᐤ㝃ࢆເࡗࡓࡇࢁࠊ4165 㞟ࡲ ࡗࡓࠋࡇࡢࢠࣇࢺๆࢆࡗ࡚ࠗ㟁ᧁⴌ⋤ 2012 ᖺ 02 ᭶ྕ࡛࠘ࠗࡾࡤࡽࡗ࠘ࢇ࠶࠷࡛࠸ࢀۼ 㸦ዲ ࡁ࡞⤮ࡢ⨾ᑡዪࢤ࣮࣒ࡢࣅࢪࣗࣝࣇࣥࣈࢵࢡ㸧➼ࡢ㉎ධ㈝⏝ᙜࡋࡓࠋᐤ㝃ࢆࡋ࡚ࡃࡔࡉࡗ ࡓྛࡣࡇࡢሙ࡛ឤㅰࡢពࢆ⾲ࡋࠊ⏝㏵ࡀࡑࢇ࡞ࡶࡢ࡛࠶ࡗࡓࡇࡘ࠸࡚῝ࡃ࠾ルࡧ⏦ࡋୖࡆ ࡿḟ➨࡛࠶ࡿࠋ࡞࠾ࠊᐤ㝃ࢆເࡿࡇࡀၥ㢟ࡢᣦࡶ࠶ࡾ࠼ࡿࡀࠊᮏ᭩ࡣぢ࡚ࡢ㏻ࡾ┈ࡀ┠ⓗ ࡛ࡣ࡞࠸ࠋvol.1 ࡘ࠸࡚࠸࠼ࡤⓎหฟᒎせࡋࡓ㈝⏝ࡀ 2 ࢆ㍍ࡃ㉸࠼࡚࠾ࡾࠊ┈࡞ࢇࡒฟ ࡿࢃࡅࡀ࡞࠸ࠋ ࡞࠾ࠊvol.1 ࡅࡿㄗ᳜ࡢᣦࢆ twitter ࡛ᣠ࠸㞟ࡵ࡚ᒃ࡞ࡀࡽ༙ᖺ⤒㐣ࡋࡓ⌧ᅾ⿵ゞ∧ᕪ ࡋ᭰࠼࡚࠸࡞࠸ࡢࡣࢃࡓࡋࡢᛰ៏࡛࠶ࡿࠋෆᐃ࡛ࡓࡽᕪࡋ᭰࠼ࡿࡢ࡛ࢃࡓࡋෆᐃୗࡉ࠸ࠋ 4.࡞ࢇ࡛ vol.2 ฟࡍࢇࡔ ࡢኌᑐࡋ࡚ ࡇࡳࢺࣞ 19 @toshi_a ࢆࡧฟࡋࠊ㦫វࡉࡏࠊࡑࡢᚋ㞴Ἴࡢ↓༳ⰋရࡢႚⲔࢫ࣮࣌ࢫ࠸࡚ ┬ࢆ⾜ࡗࡓࠋࡑࡇ࡛ࡣ⥾ษ㥑ື㛤Ⓨࡢព⩏ࠊ๓ࡢィ⏬࣭࿘▱㸦⩈ࡌࡷ࡞࠸ࡼ㸟㸧ࡢᚲせᛶࠊ ᐃᮇห⾜ࡼࡿሗࡢᵓᡂࡢ㈉⊩➼ࡀᣲࡆࡽࢀࡓࠋ࠶᭩ࡁ㊊ࡾ࡞࠸ఱࡀ࠶ࡗࡓࡑ࠺࠸ 2 ࠺ࡇࠋ⌧ᅇࡣ vol.1 ࡼࡾ㐭ศ㔞ࡀቑ࠼࡚࠸ࡿࠋࡑࡋ࡚ࠊ ࠕmikutter ࡢⷧ࠸ᮏไసጤဨࠖ ࡀࢥ࣑ࢣⴠࡕࡓࡢࡣᮏᙜ⏦ࡋヂ࡞ࡗࡓ࣯(‘Ȱ’)㺧୕࣯(‘Ȱ’)㺧ࠋⴠ㑅ࡣྲྀࡾᩒ࠼ࡎ᭩㢮ഛࡼࡿ ࡶࡢ࡛ࡣ࡞࠸ࡢ࡛ࢃࡓࡋࢆ㈐ࡵ࡞࠸࡛ࡃࡔࡉ࠸ࠋㅰ⨥ぢ࡞ࡽࡶ࠺ࡋࡲࡋࡓࡽ࣯(‘Ȱ’)㺧୕࣯(‘Ȱ’)㺧ࠋ 5.ࡍࡈ࠸ M ᮏࡢ┠ᣦࡍࡇࢁ mikutter ࡀࣇ࣮ࣜࢯࣇࢺ࡛࠶ࡿ௨ୖࠊ ᵝࠎ࡞ฎሗࡀᩓᅾࡋ࡚࠸ࡿࡢ࡛ࡣ࡞࠸⪃࠼ࡽࢀࡿࠋ ࡑࢀࡽࢆ㐺ᐅᣠ࠸ୖࡆࠊᵓ⠏ࡋࠊࡲࡓ᪂ࡓຍࡍࡿࡇ࡛ mikutter ࣮ࣘࢨ࣮ࠊࡑࢀຍࢃࢁ ࠺ࡍࡿணഛ㌷ࡢཧ⪃᭩࡞ࡿࡇࢆᮇᚅࡋ࡚࠸ࡿࠋ⏬⪅࣭⦅㞟⪅ࡀࣃࢯࢥࣥ᫂ࡿࡃ࡞࠸Ⅽࡑ ࡾࡷ࠵ഛ㊊ࡽࡠࡇࢁࡀ࠶ࡿࡔࢁ࠺ࠋ㈼᫂࡞ㄞ⪅ㅖྩࡀࡇࢀࢆ࠺ࡇ࠺ά⏝ࡋ࡚ୗࡉ ࠸㺓㺣㺚㺊㺛ࠋ ᭱ᚋࠊᐃᮇⓗኚືࢆࡲࡵࡿࡇࡣព⩏ࡀ࠶ࡿࡢ࡛ࡣ࡞࠸ப࠺ヰࡀ࠶ࡾࡲࡋࡓࡢ࡛ࠊ ࡶࡋࡼࡗࡓࡽ vol.3 (௬)ྥࡅ࡚グࢆ㡬ࡅࡿ႐ࡧࡲࡍࠋ2 ྡ௨ୖࡽཎ✏ࡶࡽ࠼ࡓࡽฟࡍࢇࡌ ࡷ࡞࠸࡞㸦ே㸧ࠋ 㘓 ࢥ࣑ࢣᛂເࡋࡓࡁࡢࢧ࣮ࢡࣝ࢝ࢵࢺ㸦ࡑࡽࡲࡵࡉࢇ @soramame_bscl ࡢ⤮ࢆࢃࡓࡋࡀࢧ࣮ࢡࣝ࢝ࢵࢺ⏝ៃ࡚࡚⦅㞟ࡋ࡞ ࠾ࡋࡓࡶࡢ࡛ࡍࠋ 㸧 㸦⾲⣬⤮:@soramame_bscl , @shijin_cmpb㸧 <<┠ḟ>> 㡫㻌 㢟┠㻌 ⴭ⪅㻌 㼙㼕㼗㼡㼠㼠㼑㼞 䛷ᗈ䛜䜛ே䛸䛾䛴䛺䛜䜚㻌 㻮㼍㼞㼐㼕㼏㼔㼑㼋㻭㻌 㻠㻌 䝇䝬䞊䝖䝣䜷䞁䛷䛚ᡭ㍍ 㼙㼕㼗㼡㼠㼠㼑㼞㻌 㻱㼕㻹㼋㻳㼀㻼㻱㼋㻌 㻤㻌 㼄㻼 䛻 㼙㼕㼗㼡㼠㼠㼑㼞 䜢ධ䜜䛶䜏䜘䛖䚹㻌 㼏㼍㼠㼕㼚㼍㻜㻝㻟㻌 㻝㻜㻌 㼙㼕㼗㼡㼠㼠㼑㼞 䛸 㻺㼑㼠㻮㻿㻰 䛾䛶䛚䛟䜜䛺㛵ಀ㻌 㼠㼟㼡㼠㼟㼡㼕㼕㻌 㻝㻝㻌 㼙㼕㼗㼡㼠㼠㼑㼞㻌㻯㼛㼐㼑㻌㻾㼑㼍㼐㼕㼚㼓㻌 㼛㼟㼍㼋㼗㻌 㻞㻜㻌 㼙㼕㼗㼡㼠㼠㼑㼞 䛷 㻸㼕㼒㼑㼘㼛㼓㻌 㼗㼍㼠㼟㼥㼛㼟㼔㼕㻌 㻞㻤㻌 㼙㼕㼗㼡㼠㼠㼑㼞 䛻౽ᶵ⬟䜢䟿㻌 㼏㼛㼟㼙㼛㼋㼋㻌 㻟㻜㻌 䛯䛾䛧䛔 㼙㼕㼗㼡㼠㼠㼑㼞 䜲䞁䝇䝖䞊䝹㻌 㻼㼔㼑㼚㼛㼙㼑㼞㻌 㻟㻣㻌 䝥䝷䜾䜲䞁㛤Ⓨ䛾䝧䝇䝖䝥䝷䜽䝔䜱䝇㻌 㼠㼛㼟㼔㼕㼋㼍㻌 㻠㻥㻌 ᕳᮎ㻌 㼎㼞㼟㼥㼣㼑㻌 㻢㻜㻌 3 mikutter ࡛ᗈࡀࡿேࡢࡘ࡞ࡀࡾ @Bardiche_A 佘 Contents 1 2 3 4 5 6 7 㸸 ࠶ࡽࡍࡌ 1.1 mikutter 1.2 ࠺ࡇ࡞ࡗࡓ⤒⦋ mikutter ⏝ᚋ 2.1 TL ୖࡢኚ 2.2 㛤Ⓨ⪅(@toshi_a)ࡢὶ toshi_a ㅮ₇ in 㤶ᕝ 3.1 ࠸ࡁࡉࡘ 3.2 ㅮ₇ෆᐜ 3.3 ᚋグ mikutter ࡢᐉఏ 4.1 άື⠊ᅖ 4.2 ᡂᯝ ᚋ 5.1 ᐉఏάື 5.2 ࣉࣛࢢࣥ㛤Ⓨ ࡲࡵ ཧ⪃ᩥ⊩ 1 ࠶ࡽࡍࡌ 1.1 mikutter PLNXWWHU ࡣ#WRVKLBD ࡼࡗ࡚㛤Ⓨࡉࢀࡓ࡚࠾ࡃࢀ 7ZLWWHU ࢡࣛࣥࢺ࡛࠶ࡿࠋ7ZHHQࠊ 7ZHHW'HFNࠊ6DH]XUL ࡞ࡢከࡃࡢࢡࣛࣥࢺࡀ :LQGRZV ࢆ୰ᚰᑐᛂࡋ࡚࠸ࡿࠋ 0DF ࡞ࡽ <RUX)XNXURX ࡔࢁ࠺ࠋࡋࡋࠊ/LQX[ ୖ࡛ືసࡍࡿࢡࣛࣥࢺࡣ࡞࡞ぢࡘ ࡅࡿࡇࡀฟ᮶࡞࠸ࠋࡑࢇ࡞≧ἣࢆ៧࠼ࡓ#WRVKLBD ࡣ PLNXWWHU ࢆ㛤Ⓨࡍࡿࡇࡋࡓࠋ 1.2 mikutter ࢆ࠺ࡇ࡞ࡗࡓ⤒⦋ ⚾ࡀ PLNXWWHU ฟࡗࡓࡢࡣࡽ ᖺ༙㐳ࡿࡇ࡞ࡿࠋᙜࡣࠊ)HGRUD ࢆ࠺ ࡼ࠺࡞ࡾࠊ7ZLWWHU ࢡࣛࣥࢺࢆ᥈ࡋ࡚࠸ࡓࠋࡋࡋࠊୖグࡢ㏻ࡾ࡞࡞ࡇࢀ࠸ࡗ ࡓࡶࡢࡀ࡞ࡗࡓࠋࡑࢇ࡞ᢡࠊኌࢆࡅࡽࢀࡓࠋ ࠕmikutter ࡘࡗࡓࡽ࠼࠼ࡸࢇࠖ ࡞ࢇࠊ㌟㏆ PLNXWWHU ࢆ▱ࡗ࡚࠸ࡿே㛫ࡀ࠸ࡓࡢࡔࠋࡑࢀࡽࠊ័ࢀ࡞࠸࡞ࡀࡽࡶᚲ せ࡞⎔ቃࢆᩚ࠼࡚ PLNXWWHU ࡀືసࡍࡿࡼ࠺ࡋࡓࠋࡑࡢⅬ࡛ࠊPLNXWWHU ࡢ࡞ືస⎔ቃࡣ 8EXQWX ࡔࡗࡓࠋࡋࡋࠊ≉ⱞປࡍࡿࡇࡶ࡞ࡃືసࡇࡂࡘࡅࡿࡇࡀ࡛ࡁࡓࠋࡑࢀ ࡽࡣࠊPLNXWWHU ࢆ୰ᚰ 7ZLWWHU ࢆ⏝ࡍࡿࡼ࠺࡞ࡗࡓࠋ 2 mikutter ⏝ᚋ 2.1 TL ୖࡢኚ PLNXWWHU ࢆ࠺ࡲ࡛ࡣ 6DH]XUL ࡸ 7ZHHQ ࢆࡗ࡚࠸ࡓࠋ7/ ࡣ㌟㏆࡞ேࡸࠊ㧗ᰯࡢྠᮇ ࡞ࡀ୰ᚰࡔࡗࡓࠋࡋࡋࠊPLNXWWHU ࢆ࠺ࡼ࠺࡞ࡗ࡚ࡽࡣࠊ#WRVKLBD ࢆጞࡵࡍࡿ ࡚࠾ࡃࢀ⣲ᬕࡽࡋ࠸ே㐩ᕠࡾ࠶࠺ࡀ࡛ࡁࡓࠋ ㄽࠊ⚾ࡢ 7/ ࡣ࡚࠾ࡃࢀάẼࡀ࠶ࡩࢀࡓࠋ 2.2 㛤Ⓨ⪅(@toshi_a)ࡢὶ PLNXWWHU ࡢ㛤Ⓨ⪅࡛࠶ࡿ#WRVKLBDࠊ ᙼࡣึ㡢࣑ࢡࢆឡࡋ࡚࠾ࡾࠊ᎑ゝࡗ࡚ࡣࡤࡽ࡞࠸ࠋ ᙼࡢࢥࣥࡽࡣ࣑ࢡࡢឡࡀ࠶ࡩࢀ࡚࠸ࡿࡼ࠺ࡔࠋ࠶ࡿ᪥ࠊ⚾ࡣ PLNXWWHU ࢆูࡢ⎔ቃ ࡛ືࡑ࠺ࡋ࡚࠸ࡓࠋࡋࡋࠊ࠺ࡶ࠺ࡲࡃ࠸࡞࠸ࠋࡑࡇ࡛ࠊᗘ⏕ᨺ㏦࡛㛤Ⓨࢆ ⾜࡞ࡗ࡚࠸ࡓ#WRVKLBD ࣜࣉࣛࢆ㏦ࡗ࡚ࡳࡓࠋࡍࡿᙼࡣẼࡉࡃ┦ㄯࡗ࡚ࡃࢀࡓࠋ 㛤Ⓨ⪅ࡢ㊥㞳ࡀ࠸㏆࠸ࡢࢆᐇឤࡋࡓ▐㛫ࡔࡗࡓࠋ 3 @toshi_a ㅮ₇ in 㤶ᕝ 3.1 ࠸ࡁࡉࡘ ⚾ࡣ࠶ࡿᅜࡢᏛ⏕ࡔࠋሗ⣔ࡢศ㔝ࢆᑓᨷࡋ࡚࠸ࡿࠋཷㅮࡋ࡚࠸ࡿㅮ⩏ࡢ୍ࡘࠊ እ㒊ࡽㅮᖌࢆࢇ࡛ㅮ₇ࢆࡋ࡚ࡶࡽ࠺࠸࠺ࡶࡢࡀ࠶ࡗࡓࠋ⚾ࡣࠊᢸᙜᩍဨࡢඖᛴ࠸ ࡔࠋࡑࡋ࡚ࠊ#WRVKLBD ࡢࢆ⤂ࡋ࡚ࡳࡓࠋㅮ₇ࢇ࡛ࡣࡶࡽ࠼࡞࠸ࠊࠋᩍဨࡣᛌ ㅙࡋࠊ᪩㏿ 7ZLWWHU ࡛#WRVKLBD ኌࢆࡅ࡚ࡳࡓࠋ౫㢗ࡀ࠶ࡿఏ࠼ࡓᚋࡢᙼࡢ᭱ึࡢ㏉ ࡣࠊ ࠕẼࢆ☜࠺࠻࠸ࠖ ࠋࡑࡢᚋࠊ⤒⦋ࡸࡽࢆヰࡋࡘࡘ΅ࡋࡓࡇࢁࠊᛌㅙ㸽ࡋ࡚ࡶࡽ ࠼ࡓࠋỴࡵᡭࡣ࠺ࢇࡔࡗࡓᛮ࠺ࠋᙼ⮬㌟ࡢணᐃ↷ࡽࡋྜࢃࡏ࡚᪥⛬ࢆㄪᩚࡋࡓࠋ⤖ ᯝⓗࠊㅮ⩏࡛ࡣ࡞ࡃᢸᙜᩍဨࡀ㢳ၥࢆࡋ࡚࠸ࡿࢧ࣮ࢡࣝദࡢㅮ₇࠸࠺ᙧ࡛ദࡍࡇ ࡞ࡗࡓࠋ࡞࠾ࡇࡢⅬ࡛ᙼᐇ㝿ࡗࡓࡇࡣ࡞ࡗࡓࠋ 3.2 ㅮ₇ ㅮ₇ࡢ㛤ദࡀỴࡲࡾࠊ᪥⛬ࡸෆᐜࡢㄪᩚࡶ⾜ࡗࡓࠋ㛤ദつᶍࡸෆᐜ࡞ࡽ $71' ࢆ❧ ࡚ࡿࡇࡋࡓࠋࡋࡋࠊᆅ⌮ⓗ㐲࠸ࡇࠊ᪥⛬ⓗࢠࣜࢠࣜࡔࡗࡓࡓࡵእ㒊ࡽࡢ ⫈ㅮ⪅ࢆ㞟ࡵࡿࡇࡣฟ᮶࡞ࡗࡓࠋ ㅮ₇࡛ࡣࠊPLNXWWHU ࢆ㢟ᮦࡋࡓ 266 ࡢ❧ࡕୖࡆࡘ࠸࡚ヰࡋ࡚ࡶࡽࡗࡓࠋ ⚾⮬㌟ࡣ 26& ࡞ཧຍࡍࡿ࡞ࡋ࡚ 266 ഹ࡞ࡀࡽࡶ㛵ࢃࡾࢆᣢࡘࡼ࠺ࡋ࡚࠸ࡓࠋ ࡋࡋࠊ୍⯡ࡢᏛ⏕ࡽࡍࡿࠊ266 ࡀࡢࡼ࠺࡞ࡶࡢ࡛࠶ࡾࠊసࡽࢀ࡚࠸ࡿ㐣⛬࡞▱ ࡿ⏤ࡶ࡞࠸ࡢࡀᐇ࡛ࡶ࠶ࡿࠋࡑࢇ࡞Ꮫ⏕ྥࡅ࡚ࠊPLNXWWHU ࡀࢇ࡞㐨ࢆࡓࡗ࡚ࡁࡓࡢ ࢆ♧ࡋࠊ266 ࡣᩜᒃࡀ㧗ࡃཧຍࡋࡃ࠸ࡶࡢ࡛ࡣ࡞࠸࠸࠺ࡇࢆᩍ࠼࡚ࡃࢀࡓࠋ 3.3 ᚋグ ࡇࡢㅮ₇ࡣࠊ7ZLWWHU ࡀ࡞ࡅࢀࡤᐇ⌧ࡍࡿࡇࡣ࡞ࡗࡓࠋࡲࡓࠊPLNXWWHU ࡀ࡞ࡃ࡚ࡶᐇ ⌧ࡣᡂࡋᚓ࡞ࡗࡓࡔࢁ࠺ࠋ7ZLWWHU PLNXWWHU ࠸࠺അ↛ࡽࠊㅮ₇ࡲ࡛ࡇࡂࡘࡅࡿࡇ ࡀ࡛ࡁࡓࡢࡣṇ┤࡞ࡇࢁೀ࡛࠶ࡗࡓࡋゝ࠸ࡼ࠺ࡀ࡞࠸ࠋᩍဨせᮃࢆ㏻ࡋࠊ ⏬࣭΅࣭㐠Ⴀࢆ⾜࠺ࡇࡀ࡛ࡁࡓࡢࡣࠊ ࿘ᅖࡢຓࡅࡶ࠶ࡗ࡚ࡇࡑࡔࡗࡓࠋ ྑᅗ ᐇ㝿❧࡚ࡓ $71' 4 mikutter ࡢᐉఏ 4.1 άື⠊ᅖ ⚾ࡣࠊ$71' ࡢᅗࡽࡶࢃࡿࡼ࠺ࠊ࠺ࢇ┴ࡢᏛᅾ⡠ࡋ࡚࠸ࡿࠋᚑࡗ࡚άື⠊ᅖ ࡶ࠺ࢇ┴ࡀ୰ᚰ࡞ࡗ࡚࠸ࡿࠋᐉఏ࠸ࡗ࡚ࡶࠊ㌟㏆࡞ேࠕࡇࢇ࡞ 7ZLWWHU ࢡࣛࣥ ࢺࡶ࠶ࡿࡼࠖ࠸ࡗࡓ㑅ᢥ⫥ࡢ୍ࡘࡋ࡚ᥦࡍࡿᙧࡀࢇࡔࠋ࠸࠺ࡢࡶࠊ⚾ࡀ ࠺ࡼ࠺࡞ࡗࡓࡢࡶࠊྠࡌࡼ࠺࡞⤂ࡀ࠶ࡗࡓࡽࡔࠋࠕᮏᙜ࠸ࡓ࠸ேࡀ࠼ࡤ࠸࠸ࠖ ࠸࠺ࡢࡀ⚾ࡢ⪃࠼ࡔࠋ 4.2 ᡂᯝ ⚾ࡀᅾ⡠ࡍࡿᏛ࡛ࡣࠊ:LQGRZV ࡀࢩ࢙ࡢ༙࡛࠶ࡾ /LQX[ ࣮ࣘࢨࢆぢࡘࡅࡿࡇࡣ 㞴ࡋ࠸ࠋࡋࡋࠊࢧ࣮ࢡࣝࡢᚋ㍮ࡀࡇࡽ⪺ࡁࡘࡅ࡚⚾᥋ゐࡋ࡚ࡁࡓࠋ⚾ࡣᑟධࢆ ᡭఏ࠺ࡇࡋࡓࠋࡉࡽࠊᖺධᏛࡋࡓ᪂ධ⏕ࡶ PLNXWWHU ⯆ࢆᣢࡗ࡚࠸ࡿ 0DF ࣘ ࣮ࢨࡀ࠸ࡓࠋᙼࡶᑟධࢆ㡹ᙇࡗ࡚࠸ࡿࠋ 5 ᚋ 5.1 ᐉఏάື ᐉఏάືࡣᚋࡶៅࡲࡋࡸ⾜࠺ࠋࠎⓗᐉఏࡋࡼ࠺ࡶࠊ7ZLWWHU ࣮ࣘࢨࡘ /LQX[ ࣮ࣘࢨ࡛࠶ࡿᏛ⏕ࢆぢࡘࡅࡿࡇࡣᅔ㞴ࡔࠋ࡞ࡢ࡛ࠊᇶᮏⓗ࡞᪉㔪ࡋ࡚ࡣࠊ7ZLWWHU ୖ࡛ PLNXWWHU ࢆࡗ࡚࠸ࡿࡇࢆࣆ࣮ࣝࡋࠊྠࡌᏛᰯࡢᏛ⏕࡛࠶ࢀࡤࡑࢀ࡞ࡃࣉ࣮ࣟࢳࢆ ࡅ࡚ࡳࡿ࡞ࡿࡔࢁ࠺ࠋࡋࡋࠊ⧞ࡾ㏉ࡍࡼ࠺ࡔࡀᙉไࡣࡍࡿࡘࡶࡾࡣ࡞࠸ࠋ࠶ࡃࡲ ࡛ࠊᮏேࡀỴࡵࡿࡇࡔࠋ 5.2 ࣉࣛࢢࣥ PLNXWWHU ࡣࣉࣛࢢࣥࢆ⏝࠸ࡿࡇ࡛᪥ࢆᣑᙇࡍࡿࡇࡀ࡛ࡁࡿࠋ᪤Ⰽࠎ࡞࣮ࣘࢨࡀ 㛤Ⓨࡋ࡚࠾ࡾ⏝ࡶ࡛ࡁࡿࠋ⚾ࡣ⌧ᅾࠕVKLQGDQPDNHUࠖࢆ⏝ࡋ࡚࠸ࡿࠋࡇࢀࡣࠊPLNXWWHU ୖࡽデ᩿࣓࣮࣮࢝ࢆ⏝ࡋࠊ⤖ᯝࢆ SRVW ࡍࡿࡇࡀ࡛ࡁࡿࠋᑟධᡭ㡰ࡣୗᅗࡢ㏻ࡾࡔࠋ ືస☜ㄆࡣࠊ'HELDQ PLNXWWHU ⣔࡛⾜ࡗࡓࠋ ᚋࡣࠊ⮬సࡢࣉࣛࢢࣥࢆ సᡂࡋ࡚ JLWKXE බ㛤ࡍࡿࡇࢆ ┠ᶆࡋ࡚࠸ࡿࠋ⌧ᅾࡣࢇ࡞ෆᐜ ࡢࣉࣛࢢࣥࡍࡿࢿࢱࢆ ⪃࠼࡚࠸ࡿࠋ $ cd mikutter/plugin/ $ git clone https://github.com/toshia/shindanmaker $ sudo apt-get install ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8 $ sudo apt-get install libreadline-ruby1.8 libruby1.8 libopenssl-ruby $ sudo apt-get install libxslt-dev libxml2-dev $ sudo gem install nokogiri 6 ࡲࡵ ᅗᑟධᡭ㡰 ᅇࡣࠊᢏ⾡ⓗ࡞ෆᐜ࡛ࡣ࡞ࡃ⚾ࡀ PLNXWWHU ࢆࡗ࡚ࡁ࡚࠺ࡔࡗࡓࠋఱࢆࡋ࡚ࡁࡓ ࡢ࠸࠺ࡇࢆࡲࡵࡿࡇࡋࡓࠋ࠸࠺ࡢࡶࠊ㛤Ⓨ⪅ࢆㅮ₇ᣍᚅࡋࡓࡇࢆࡶࡗ እ㒊ᗈࡵࡓࡗࡓ࠸࠺ࡇࡀ࠶ࡿࠋᆅ᪉ࡢᏛ࡛ࡣࠊ࡞࡞እ㒊ࡢࡘ࡞ࡀࡾࢆ ᣢࡘࡇࡀ㞴ࡋ࠸ࠋࡑࡢࡓࡵࠊព㆑ࡢ㧗࠸➗Ꮫ⏕୍⯡ࡢᏛ⏕࡛ຊ㔞ᕪࡀ⏕ࡌ࡚ࡋࡲ࠺ࡇ ࡶ࠶ࡿࠋㄽࠊ୍⯡ࡢᏛ⏕࡛ࡶඃ⚽࡞ேᮦࡣ࠸ࡃࡽ࡛ࡶ࠸ࡿࠋࡑࢇ࡞୰࡛ࠊព㆑ࡢ㧗࠸➗ Ꮫ⏕࡞ࡿࡓࡵࡢ୍ࡘࡢࡁࡗࡅ࡞ࢀࡤᛮ࠸ࠊᅇࡢグࢆ᭩ࡃ⮳ࡗࡓࠋᅇࡢグ ࢆ᭩ࡃ࠶ࡓࡾࠊ⦅㞟࣭ห⾜࡞ࢆ⾜ࡗࡓ#EUV\ZH ࡸ#FKBSULQW ឤㅰࡋࡘࡘࠊ࠾⑂ࢀ ᵝ࡛ࡋࡓ࠸࠺ゝⴥࢆ㏙ࡓ࠸ࠋࡲࡓࠊPLNXWWHU 㛵ࢃࡗ࡚ࡁࡓࡍ࡚ࡢேឤㅰࡋࡘࡘ ࡚࠾ࡃࢀ࡚࠸ࡲࡍࡡᚋࡶ࠺ࡒࡼࢁࡋࡃ࠾㢪࠸ࡋࡲࡍࠋ᭱ᚋࠊ⛶ᣋ࡞ᩥ❶࠾ࡁྜ ࠸ୗࡉࡗࡓ࠶࡞ࡓឤㅰࡋࡲࡍࠋ 7 ཧ⪃ᩥ⊩ - mikutter ࣭ http://mikutter.hachune.net/ - mikutter ࡢⷧ࠸ᮏ〇సጤဨ(ATND) ࣭ http://atnd.org/events/24999 - toshia - GitHub ࣭ https://github.com/toshia - す➃ࡢᨺ㏦ᒁࠊbrsywe-mikutter ࣭http://home1.tigers-net.com/brsywe/mikutter2.html - ⊧Ẽ㉁ࡢᛀഛ㘓 ࣭ http://d.hatena.ne.jp/Bardiche_A/ +7 6E5/ !"#$ %&'( 89:;<<=>?@,A,) B,A .C )* + +,-./01!2 3 456 DEFG(HI$JG,5K7LM,CNG ON ! PQ R S T(UP?@F+ONON ?#V.C1W?X Y6-./ Z[\] . ^[ N 1W _`]ab?@F+89:;<<=> cdecde6 5G6Af!gh ij kOj$l$NG6+C$fm,n op q$,qrGstuAvw ./ xy$7 z ?' T6A{_R | z }~$•€ !" # # $ %&'' # '( ' ! " # '' %% # % &''% v {_R ‰ 6 1 %) $%& + 6 ' # # '(%' %%' * 6 ' # * %% %&'' ••• $ # ,- , , ' ./$012/3 4 53 + ' %% ' # 4 5 ?ƒ„6 : # ‡ˆ6-./Nu PQ Š )‹[ @ -. R # # …†G S T ? C 5 $ -6A/75 Œ•Ž•,•4 / ‘G’“”• F•G -.– 7 8 5( 9‚ 1 ?ƒ„.u ;"<=> ?7 @ABCDEFGHEFI JKLMNFOCFPNQRST>UVWXI@YZ[\] ^ _`@YSa@bc`defZRgh] iKjLMNFOCFPNQkalDLAfmfmKnopLqrN>stua@vwIxy@z] {|@Yu}~@•€>•‚_ƒA„…ZRgh] †‡dˆ‰cgŠK‹>KRŒ•\aŽBNF@••‘NF’“C@ efSfK”•Š–u„—A˜ ™š]›œ•J]•‘NF’“C@ deŠ–u„—AžI›Ÿ— S`z¡>¢£m] ¤Ki¥ ZRSI¦b`‰ d§‰¨ha©_a@ª>[«efZRgh] b‡@Aj¦¬@-•‘®@¯f °B’d± ²³´a ?µ¶ >—f–a ·µ ON¸ %&'' # '( ' ' # %) ¹¹¹¹9 %&'' %% '(%' %%' # ,- , , ' ./$012/3 4 53 ¹¹¹¹9. % &''% 6 6 ' ' %% ' 8 5( ¹¹¹¹¹¹¹¹¹¹¹¹¹¹ 5 # # 7 Windows XP SP3 ࡛ mikutter ࢆ࠸ࢀ࡚ࡳࡼ࠺ࠋ author: @catina013 !" #$% 123456789:; < OB => ?@A 4PQ>JK F WWX ?Y & '() *( + ,-. /0 B(C4DEF>%GH%IJK L AM N>I RSTU4>%I M>I VM/IHJI? ? A Z5 [> \ ]I^ FI_24`K% F %a bc?de fI%gI%hi_FjIk F l m F8pdeq(rs k7/XnXn F/? Fj6c tnI AFjIk A FI_lAMo$JIFjIk X\/uv w xbkk gb ]I^FI_\F yz{b| I }}( !" ~( €(• ‚H%IJƒ„…†,.(‡/ˆ‰ i_?n #$% LJ\F ?IŠ/‹ ”• –— !"## ]I^ $ %& ' Œ4•…Ž>%••‘ ’“4Li_ #( ) # ˜ >J Ž…)€(•P™ \F/ ¡ ¢£ /š }}( \\ ¤¥ aI%n›œ(+( ~( €(• •žPŸF?H%I *& + ¦§/‹8% Œ /?b‹8% * &+ FA ŒF?H%I \ F ‹FAŒ¨\\ ©ª \ ‹FAŒFI_«/ * & + ˆ¬ 6¯ / Kk² , &- fI% 4UA / »FIHJ¼I½(•¾ 4¿HJn kJ . ' ÅÆ?ÇÈFjIk Ç FÏÐ 4±>%I Àb Á½(•¾ 4X kkUA n. ' \cM ¢£AM , &- HJK>k FI_l/IbfA·¸Mc%/I n FI_l/É]I^ Ž(CtË ÌÍ c%/I n bcJ °. ' ³´ µ¶ k7 , &¹^º Xc/ , &- 4-®>%I 6¯ ( €(• Ê°IbfA / °. ' \F/ÃÄ 4UA²%I?IFI_%a ‹* & + FAŒ [ÎFI_ /ÅÆ >Ñ_ / ‹FAŒ Ò4±>%I AFIÐÓ \\ /‹* & + Œ4±>%I FÖÐ »| ‹ * & + ˆ¬ ×Ø /?I¯cš * & + ÔrI6Õ 0 12 » | ÞßàÔŠá•„ C i_ â ã. n\ ‹* & + ˆ¬ 0 12 » ŒFI_O Ù(ÚÛ ÜÝ ?H%>kIk 0 12 » ÜÝ4o$ F \ ä¢ ^å èé êÐ ?M‹* & + Fë%ì? Œ _æ çf ŒFjH%nMÐÓíIk² ‹* & + ˆ¬/îïðñ(Ž §?I¯cš n 3 () |AM¹^º FI_jI4‹* & + FAŒFI_Ïò ó$%bcJF\ô , &ý F 0 12 » » ÷I/ÔrÆ» þ ÿ ÷I/Ôrùûÿ AIl ‹/67 ù ?Kk ŒFI_ çŠ ´ iH%0 ( cJ n K \cM'() *( ? (™( ÀAHJ ÷I ø ùû÷I °4 >J'() *( [> þ n F » » þ /?IAFjIk X FÏÐ An>ck² * & +/ [ÎF>% 4Ir i_?0 4ü F4 / * & + FÔ # /øù ?MÓ a¯ êÐ FX ?ör ÷I » 4 Gõ örMck ÷I øù I_ú»ùûFÆ»ùû ÷I F* & + 0 12 »?MUb/7Œ 55 J }(Ù McJn aI%/ Ž(½C‡ ( FI_ » 4 X /67 » 4 | AM >J C() _æ I6Õ çt ¶ $J$%°£&4©'>%0 [>% * & + / : +67 8 x !²7 8 ˆ¬ "( >%0 #(B¾ ?š ðñ(Ž4ü | PŸ Ž}()(B¾ Î* c (™( ¿I³´ d6 û+ ©' c% IJi_ jIk m, i_ ¬ : /‹ "( !>?I$%ŒFI_j-AMokH%I J$ Ø#AM 8 ˆ ¶ 769 . ' & #(B¾ 4o$ # .H%Ik>J kJ 3I4 /‹ 4ðñ(Ž ç5 '() *( + ,-. (: & a¯ 1( ; HJ*C( "( ã kJ ™( 6^«œ(} UI%I ,%>;3 / ?š I6Õ ?•@…Ž4œ E>JP½ 4•® / Q½ C<=?š !" / yØ;' ž ½C ? ;, #(B¾ X þ n9æ ; OB ° B„() 8 < ™ &®>%Ik "( #(B¾ M & *0 < 565 "( / D49æóh ÂJ #(B¾ U BF X >%I 4&®>k>J 0123 iH%/ I2JK ;L TU ( &®nHH%Ik 1( /‹ yÌÍŒFI_\F ‹ _Þ M)Ž °H%I 6¯? \ ‹ */m, i_ ‹Iô ?OB 4/0 ŒFI_ UI%I OB 4&®>k &®ŒFI_n £/ìN O>IFI_5å UbŒFI_\F 0 ?¥º ?K æ HJK §JMXYŒ>%>kHJK Zšb? F‹+(WC2Uœ…M(• I_ÇÈ [H%>kI ‰´4 F2> ã>B # ŒFI Kk \FAM‹P+ ´ P+ w .H C4Qbi_?FI_A •(R4SH% 8 4P+ Týi_?U>h WC 2U>%ž 7 c%I UI%I ã}( ƒ„ Ž (•)=CœQ} ŒFI_PQnH6ck>J \ i_ JOB , &- } Ž4 4&®>%Ik ½° 2 ð(½(4ü$JÁ½(•¾ F¼G /‹ ? OB UbŒFI_ >Ñ_ óh ´: AAM?IÆ; A /7 2§ \ ‹ N>IOB 4üý Iô ?OB 4þ8 ?H%‹Iô ?OB Œ >C ° 8= ðñ(Ž /0½1CŒFnÏ_¦§/01( F?H%Ik *FÏÐ 276 / ?šn °B„() MUI%I?b%nž Xc/Xc •‡ X 2V/‹+ ( J|¯ XYŒF §J|¯ \+XY >%>kHJK>k >A> ç] (™( FH% Þ ^)( (FI_n / )}à(B¾ °=)}` K * & +° cc [Î /!g ( F? P % i_?2 ÔŠá • §k I?A?Ayz \\k Œ ¥ ŒPd/e ‰ f9æº!g >A?b $% k>%° m, i_ 0 ˆ¬ PjXY 3IEk4š_°H ô_FoFúp4qIJ‹^ŒFI_rs td4Í>%F Ab´ u H IA ² Kk ´ &® /OB M7 {2 UA )ž 4vw |¯ fx§%>k t ¥4|bJ$ OB Pd LJ¥ &®PQ •Ò ƒc iK • Ž }M~ 4 FI_n 4h¡>%nM_A ‚å >J 1( † €}â ¦§AFI_ /lk>I5å €?IFI_ÇÈ [K æ k Kk cÓ š ?mn°Ek %nM_\F [Î ? = Ž…)abFIHJ I6Õ ‹ (™(â i_?‹ Mhi c?IFI_5å i_ ï_` ¥4„¯Mc%>kHJÆ;/]…FörMc AF/jI 1( M %abc%IHJ fI%gI%I§JIF jIk Àb * & + PŸ Ž}()(B¾ FÔ‡ nˆv GRç‰ /+(WCF¹^º? ( ™(½ Ù} h ükc%I% >@11 >™°6^«.f?š ð(ã•(#Ÿ(=)}à(B¾ / ^d GRF/Š •…à(•B # 4¿H% Ž(C c i_ ?H%Ik qIMc%I •…à(•B # / ! $ ' •…à(•*( |¯ ?b * & + ° F‹Óc n $ &4 ) nðñ(Ž[Î >%I% ?š / ˆv •…à(•B # F>%Œq c%Ik • X ! $ ' œ(} } Ž ˆ‰ i_?Þß…Žž ƒck>J &' ( ))*' + , -& . 2& *33 * 4 33 &5 ( ) )& & 8 )& 7 *' : / 0/ *) 5 7 8 6 33 * -+11 * 3. 4 1 " 8 )& 6 * * 4 9 " 5 ) ) 6 ) 5 38 5* " *) 73 78 7 33 8 & & '1- ') 7.7:* ' )1/ 001 1 ;1 )' ; 0 ; : 3 ! $ '/ FÔ‡ k ŽI :÷H%X kkŠ F\ô ƒc%IH%>kHJi_?\ • Ž \c4LJ•¬ ŠJæ/š_jHJ |ô_AFI_F\ô/ %a§ \c4Þß…Ž>J ! $ ' 0 ( ' •b 0 12 » ¿Ð = Ž4‘>%I% IIör|HJ 3;< .; ž œ…M(• úp/¿Io$J •…à(• >J / HJ/7? |¯š L F?I? F \F >J 3;< .; H¥/ n’H%I ‹8% ß “ X>% ô_\F/+AKk þ” X ˜ ™b I¡ \F/ §k² H/ • –— g’H%I š½(•¾ \ Þß…Žœ…M(•4LJ 3;< .; c%IJ\FAM # A/¡ ;n Kk² =(+ 1AM/_A ‹ c› gIJäœ ŒFÞœ Ž /•A \ ÌÍú !g>%IJn Fj6ck • Ž öž ? 4Ÿ¯% \ ž œ…M(• = ŽŒ ?bFn¡ 4¿Io$J (™( šc|¯IJ /\ ž œ…M(•4¥ >?¯cÓ 4¿Io $ \F/?AHJ >Ñ_ \_>%A _U§nçû P ¢ / /œ 4<@ HJ nA• 4 OB UAX_ŒFI X_F_£_AM¤¥>F¯ŒFgI% HJK ¡ ? 1( 4UA {%bcJ B(C4ªM²JK>%>kIk>J «œ Ùð #(B¾ &®nÅ¢ ¬6Kç-fIJ A •¬6K † 4UA ç ? ! & C 4.c? MP½… 4 ¦bŽ +(WC4 ±L >J &®W ®¯F 4o$k>J 5å/Ø HJ\F >J FH% 3 () ° B 9 /kHJb°¡ ,%>;3 / =ãâ X ²I 1 ,%>;3 / d/ ! $ ' 4¿ÐÓ ¡ ¨©4>%<„ !" "( ?IŒFI_½ . ˆ ‹œQ}/ # /67 |¯FI_ÇÈ >J X_Fw§A7 I_\F >k>J Øp? M‹ !" OB &® x¯%´ç¦|HJK>JJ$ >ÓMb :/ OB X_>% Û Ž(CP /‹,C+ (ˆ¬ ab /2U> Ir ˆ¬ ž Xc n?¯?> )ž ² ß $$ 4>%I?I >ff#ƒŽ( $k>J 2U>X_ 2U>?I }( B¾…Ž4 8' ¸JK>? MN >X_?F\ô4f °I%IJF\ô Xc 7(!! ? ¶ c ¥ n³kK X_\_ ,Ÿ… ab /X_I_%abcJOB 22 i_ ?Kk>J \ 6/´>bn i¶¶¶ŒF·¸¹+ Ï6c%IJ & ?š UbIô ?OB F/‹ C ' OB 4UA tËŒ4qÃ>i_ FI_W I6Õ * ‹0 œQ} g§ó \F 0 \ * /‹%abc * ‹%abc * 1 1 1 a¯ /?IAFjH%Ik %abc * \ ‹ 1 $ Œ ñ(Ž>J X\AM1(Ž cÓXc?K ab $ Pd fI%/Å ’Æ° kJ E & °b 1 $ FI_ / PŸ œ(•Œ Ç•È nÌÍ>%I É F %abcÌx4® n F>%‹ / D ðñ(Ž ¦§|ŒFÏ_ÓAK £ ¿Ð AM% ¹+bMI^Ø :ŒFI_Ïò ¦§Æ- $%F£&4¥± n Ê (™( /%abc%>kH%I Š ìN Àb Xc ŒFI_ÍÎ Kk nFnF K * & +°4 Ðc X A6K£&/ÑÒ c%I IæÏbð FI_¢ê Ó If \ôAMAAf% ŽI Ö × æHFnokM7Ifk H%n£ :ŒF‹ c?I FI_¢ê ØL i_ ?H%>kHJ ÛÜ cÓ\c/š_L%n‹%abcŒ /¼bAM (™( ÀI ¿H%I =)}n%abc FI_Ìx ( 4UA>%f $ Œ ÊÊH%nM_F>% ?@‹%abcŒ? A FI_\F4ÜÝ>JIFjIk c i_ ?Kk>J ÙAMFn?b\c4PÚº ‹ 'ÕAM / * 2U Å Àb Kk>J XcPd/%abc /?bÔÕ n HJ 6c ‹\_ 4UA œQ}Ä M %abcJŠJæ4? FA>JI FI_jI ó$Mc%IJK :4A¯% n 88 B . ' nHFn ‹nHFÁ abcŒFI_6¯ /Ë>%?b XnXn /‹ > WW $ Œ Ò %abc? AFI_F ‹2U>%ž Á3 ž(? iô>b ' §k>J 6? &® ¾¿¯ FI_ÀhF/Š o$J §J ŒFI_ \F 8pœQ} YK?AHJK £q ? AFI_ /Š5å 2U 6 ‹•…†b| I 6µ & 4UA 1( n ,%>;3 / 4¼½K ŒFÏ6 ÓAK \c Ik Jb /ºI).» Ž ^d 5å Åb?cÓ ‹ C' ¥ µ _æ 5å 23n ) |HJK F' |HJK Ik|¿H%I Š IJK>k Kk m OB nÝs ðñ(Ž>%>k_J$ Þpº Oム6^«.fFÏÐÓ ( & (™( þ / ,&&E &! 6¯ P Ž…) fI%n * & + B& Œq c%I ° A / A ß$%IJK && 4 4 °C ॠ4¿H%I Š áw IJK>k Žänåw c7 Â>b.H%§J X ?Çâ / Oムab4íã (™(n%abcJkkæ FI_5ån ãƒ)œ >%Ik> J \ i_?¡P 4üý ab4 1 %abcçV4èé> çAM Âê H%hi_ FI_P+P $ ? OB ° * 1 ëìí FI_‹FK Ð7æÑHF>JOB HJ\F %abc4Lï $ F/8pŠ l ?Kk Oム\ %abc * îùïFI_Ãnnü$%ÀHðñ>? M HJ XnXn X\òóŒFI_ƒ (=)} Ž(C UA²cÓP+ˆ¬ Š nX\ ø§?§HA¯ HJ\F/:÷I Kk² † ?@A 1( GH%I B( C fI%g§JIFjIk ‹ 1( B(C4G ŒFI_\FPd/ Å ž«B(C4 H%GHJ I_jI FK Ð7ôb okK 4 % X ¤Pd/û>ü> }( B¾…Ž }( B¾…Ž /‹ £õ §%IJ !"## >J 1; 4¥ ½Ù(’“? %Ýs) !'' #7!+ +G = Þ ¯ÿO Þ…Ž n , ( ×Û >ffÁ¾ Š ¯ÿ > #…+( FhbHJ( \F ?K X 6 • H% G ÿ B(C ¤4A¯%>kHJ þŸ„ H% ½m6FI_ >J L%IJ|bF> ‹hbHJ(æs Œ b HJMII?(ŒFjHJ|¯|HJ ¯ÿFB(C l 9æ ( ýþ> ¶ FH% Ð AMÃn?IiqŒFI_n M>b X hbH X k >J 8' £õ ¯ÿ/ Яÿ þ çfFI_\F i_ >J I_ör tnöq4 LA¯J J(æs ½Ù(/ > /‹ H%GH%h F FI_\F jI ÃAø IB(C ùú|HJ H%IJ / 4 >MHJ½Ù(’“ ? H G Fm4¡H%nM_\FnÞª|i? F c n 4Lf¯%qÃ>J X ?6¯ B(C 8 â 1. ð ‡ G F Ab kKw ²7Gc > nM_tnw÷ ªc Jçÿ !" pn H% • ( ' 6JkJ ¯P( 4 HFB(C ¯ þP( 4 !"## \\ HJ ÿ _æ • ÿ3b4GH%>k_ ): (™( /l4 B(C4 #6 6 ! ø+ GR>JF\ôjH%IJˆ kF?Kk>J X ˜‹ D §f¯J !'' ¯4 (™(nÀb I8 E c FI_ kKB(C4çw 4 HJ G ùú ªKJIŒFI_ÃL [>% M>I n K /• ! ÿnGH%>k_FI_%abcJ kF ?Kk>J \ i_ >% If>A‹ J ŒFI_%abc?de ¶ >%>kH >J \ i_? ? 1( FIÐÓ OB PQ° B(CGR iK 1( k nJM ck>J ¢ê 4A¯%bc 4&® ¢ê 1 (: & &® ˆm/ 1( &® / ?OB Þœ Ž &®4>% |¯|F AM°H% ŠÓAK|HJ¯cš i_ ?H%AM/ ˜ MßÙ( ? Aib6A ?AHJ¯š MßÙ( l4 Ç•È I% IŠ 5>%bc i_ ?HJ #Oóh !" B(CnMHJ¶ #p$n49æk>J t yÃL /ˆ‰ i_ ¢ê / F¼G {%bcJ & $ ˜6¸R (Ž FAd8 ÅIŠ %&Ò>%J'H%l ?H% HH%JH%ÏHJMØp‹ H%Ò'ŒF FK Ð7 , ( L²%hJMÁ˜ AcJ æs B(C è(>% ‹'() *( H%=Cœ? 'ŒFA) cJ Ž *+f4jI¡M cJ B(C k/FnAbF>% &® t U> , PjXYnXc?K ø¢|¯cšn :4uH%L {%bc nM_\Fnø¢ FI_\F4w§A ck>J !"#$ 1( &® h?M7 /6^9ÿ a¯ /00 n ?AM7-.4/ Ð%Ik ÂêOB 0 /0 fI%/ m¹ nÜÝ>Ji_ ‹+(WC 2U>JMXYŒ‹ž §JMXYŒ ¬6H%>kI 1( nOB #ƒ Ž¯1 )ž )Ž •® c%I |¯ FI _\F À… Kk>J >A> Á3 ‹Iô ?OB 0 ׌FI_ƒc çû ‹ §ff Kk Á3 / B„() #& UIJ 2¶ŒFI_ Œ -.4Ÿ¯ ‹ Ubk /0 aI% 0 a¯ U 2 ð(½(4UA Þª J$ X / !"## ¯ÿ !'' #5G AC ýþ c%Ik 4UA ø§?U =)}F /Þpº „¯F?H%I ÃA / 3 () F B 9 EFI_ëìº 1 } íE c%I J$(Cã >° aI% 4(Cã 2 ð(½(4£& ° 80 IFI_\Fn\ ƒc4˜5>>%Ik F B 9 E° B* (' 4 de 3 () ˆ¬ c?K ê6 =)}n(Cã c J$ 276 / ?š O Ù(?OB ½ 34 8 ° 8) !>?I¹^ kJ ! $ ' & FIHJX a¯ 78?9:;<À²F>% > n=>>%Ik %& F Ab ‹ &®ŒFI_n [>%ÀHðñ>%IJ FI_=)} X>% 4ÏIJIFjIk ^Ø 1( 4nJM>%bcJFI_Õ /IbMö?4>%nYKk² K F_y~Ik>J \ 24`K%a@ PLNXWWHU &RGH 5HDGLQJ #RVDBN ⎿⎉⎍⎎ ⏀⎫⎖⏔ろPLNXWWHU⎌⎚⎿⎧⎤ޡを⎮⏉⎚⎿⎧⎤ޡゎ PLNXWWHU⎰⎠⎡ࡒ⏃⎨⎒⎡⎇ޡഇള⎫⏫␥⏠⏞␄⎨⎚⎍ろ⏹⍬⏵⏯⍬␅⏃ಒ⎬ళ⎅⏞␓␦⎨⎚ゎ PLNXWWHU⏓ ҉ਏ⎘⎠⎅⎒⎪ۚਏ⎍⏉⎐ഇ⎌⏊⎫⎅ろPLNXWWHU⎯֘ஓ⎍⎋⎌⎘⎅⎯⎨⎘⎠⎅ろҺ266⎡⎘⏀⎠⎅ゎ ඕۣ⎨⎰⎞ ⏔⎫⎃⎫⎠⎯⎠⏂⎬ろPLNXWWHU⎯⏯⍬␅⏓ѽ⎘⎧⎅⎎⎿⎚ゎ ⎫⎋ろ⎔⎯Ւߏ⎯⏯⍬␅⎰␦␏⏴␣ߗ⎯⏃⎯⎫⎯⎨ろ⎔⎯ඕ⎍ࡥ⏌⎯⎌⏊⎐⎅⎰⎬ܝബۖ⎍⎃⏌⎌⏃⎘⏍⎫ ⎅⎔⎩⏓⎕ຎࢨ⎐⎡⎖⎅ゎ Φゐ⏀⎐⏀⎐ ⎿⎛⎰7ZHHWࠟண⎌⏊ ೞ⎯⏞␓␦⎫⏊⏤␄␦␙⏠␄⎌⏊⏂⎧⎅⎐⎯⎍⏷⏦␦⍬⎨⎚⎍ろPLNXWWHU⎰ߢঽ⎯⏠␕␄␋␅␦⏬⏓ۚ ત⎘⎧⎞⎯λೱ⎩⎘⎧7ZHHWࠟண⏅*8,१ढ़⏓⎘⎧⎅⏌⎯⎨ろ ⏤␄␦␙⏠␄⎨⎃⏌ PLNXWWHUUE ⎌⏊⏔⎨⏃ুਹ ਉ⎰⎫⎌⎫⎌٪⎉⎧⎎⎿⎜⏔ゎ ⎞⎔⎨ろܞѾ⎰7ZHHW⏓ࠟண⎚⏌⎩⎔⏎⏓ਘӆ⏋⎬⎘⎧⏔⎨⎅⎐⎔⎩⎬⎘⎿⎚ゎ ѽ⎚⏌⎠⏂⎬⎰PLNXWWHU⎯␓␥⏬ ⏠Նۚ⎬ԟ⎚⏌ગߨ⎍์⎩⎫⏋⎿⎚⎍ろ์⎬⎫⎤⎠⏊⎞⎯⎘⎧⎅⎐⎯⎨अజ⎃⏋⎿⎜⏔ゎ ⎿⎠ろ#WRVKLBD ⎖⏔⎍␓␥⏬⏠⎯ࢆ⎎൘⏓ധ⎬Ւߏ⎩⎘⎧ࢆ⎅⎧⎅⏌⎩ް⎇⎯⎨⎞⎢⏊⏃⎅⎖⎡⎐⎧⎘⎬۪ދゎ PLNXWWHU⎯7ZHHWࠟண⎬⎰ॽ⎫⎍⏊⎯5(67 $3,⎬⏉⏌⏃⎯⎩8VHU6WUHDP⎬⏉⏌⏃⎯⎯ࠦຳ⎍⎃⏋⎿⎚⎍ろ 5(67 $3,⎯൘⎍ࡸ⎨ѽ⎘⏅⎚⎅⎯⎨⎔⎤⎢⏓ਘӆ⏋⎬ѽ⎘⎧⎅⎎⎿⎚ゎ ␑⏝⏠⎰ FRUHDGGRQUHVW UHVWUE ⎨⎚ゎ ␦⏵␄ FRUHDGGRQUHVWUHVWUE FRGLQJ XWI 5HVW $3, ࡎ ၿ ᙎ ᷔ ࡒ ࢤ ࢉ ࣅ ࣎ ࢉ ࣘ ࡹ ᘯ ᕿ ࡀ ࡲ ࢼ ࣎ ࢉ ࣘ 3OXJLQ FUHDWH UHVW GR GHI VHOI GHILQHBSHULRGLFDOBH[HFXWHU DSL LQWHUYDO FRXQW VXFFHVV FRXQWHU 8VHU&RQILJ > LQWHUYDO @ ODPEGD ^ _ VHUYLFH _ FRXQWHU LI FRXQWHU ! 8VHU&RQILJ > LQWHUYDO @ FRXQWHU VHUYLFH FDOOBDSL DSL FRXQW 8VHU&RQILJ > FRXQW @^ _ PHVVDJHV _ VXFFHVV FDOO VHUYLFH PHVVDJHV LI PHVVDJHV DQG QRW PHVVDJHV HPSW\ " ` HQG ` HQG #FUDZOHUV > ODPEGD ^ _ VHUYLFH _ 3OXJLQ FDOO SHULRG VHUYLFH `@ #FUDZOHUV GHILQHBSHULRGLFDOBH[HFXWHU IULHQGVBWLPHOLQH UHWULHYHBLQWHUYDOBIULHQGWO UHWULHYHBFRXQWBIULHQGWO GR _ VHUYLFH PHVVDJHV _ 3OXJLQ FDOO XSGDWH VHUYLFH PHVVDJHV 3OXJLQ FDOO PHQWLRQ VHUYLFH PHVVDJHV VHOHFW ^ _ P _ P WRBPH " ` 3OXJLQ FDOO P\SRVW VHUYLFH PHVVDJHV VHOHFW ^ _ P _ P IURPBPH " ` HQG #FUDZOHUV GHILQHBSHULRGLFDOBH[HFXWHU UHSOLHV UHWULHYHBLQWHUYDOBPHQWLRQ UHWULHYHBFRXQWBPHQWLRQ GR _ VHUYLFH PHVVDJHV _ 3OXJLQ FDOO XSGDWH VHUYLFH PHVVDJHV 3OXJLQ FDOO PHQWLRQ VHUYLFH PHVVDJHV 3OXJLQ FDOO P\SRVW VHUYLFH PHVVDJHV VHOHFW ^ _ P _ P IURPBPH " ` HQG GHI VWDUW VHUYLFH QRWLFH ERRW SHULRG #FUDZOHUV HDFK ^ _ V _ V FDOO VHUYLFH ` 5HVHUYHU QHZ ^ VWDUW VHUYLFH ` HQG RQERRW GR _ VHUYLFH _ VWDUW VHUYLFH HQG HQG ⎅⎨⎚⎮ゎ ⎞⏍⎨⎰ろࡼ⎬⏔⎨⎅⎎⎿⎘⏈⎇ゎ ۱ෳ⎨⎰ 3OXJLQFUHDWH UHVW ⎩⎘⎧ UHVW ⎩⎅⎇ঽ⎯␓␥⏬⏠⏓ݩढ़⎘⎧⎅⎿⎚ゎ ⎔⎔⎨␒⏿⏫⏓⎘⎧ ⎅⎿⎚⎍ろ⎔⎯␒⏿⏫⎰ਓܽ⎬ь⎖⏍ろ␒⏿⏫⎨␔␍␝⏹⏿␅⏓⏋⎠⎘ࡥ⎴څろ์⎫ബॅ⎫⎪⏓զ⎘⎠⏋⎘⎧ ⏠␕␄␋␅␥⎯୕⏓ݩ۱⎫⎅⎿⎚ゎ ゚۱ෳ⎯ GHILQHBSHULRGLFDOBH[HFXWHU ⎰ೱ⎨⎨⎯⎫␅⏿⏹␝⏌⎅⎧⎤ޡろ⎩⏋⎃⎉⎛⎰ટ⎅⎧⎋⎅⎧ ⏀छ⏂⎿⎚ゎ ⎚⏌⎩ろ۱ෳろ۱ෳ⎨⎞⏍⎟⏍⎔⎯␝⏹⏿␅⎍⎮⎚⎿⎅⎧⏍⎖ࡥ⎴څゎ ⎫⎬⏅⏊ #FUDZOHUV ⎬⎔⎯ ␝⏹⏿␅⎯റ⏋ખ⏓⏍⎧⎅⎿⎚ゎ ߹⎰ GHILQHBSHULRGLFDOBH[HFXWHU ⎰ろキ LQWHUYDO ഇ⎕⎩⎬ DSL ⏓⎴څろढ़ٌ⏊⎠⎘ڸї⏓ωॅ⎬⎘⎧ VXFFHVV ⏓⎷څギ⎩⎅⎇␥␜⏼ߧ⏓റ⎚␝⏹⏿␅⎨ろ ۱ෳろ۱ෳ⎨⎰⎔⎯␝⏹⏿␅⎍റ⎚␥␜⏼ߧ⏓జໆ⎬ҳ⎘⎧⎅⎿⎚ゎ ␥ ␜⏼ߧ⎰۱ෳ⎨ VHUYLFH ⎩⎅⎇ωॅ⏓ࠟ⎤⎧⎅⎧ろ۱ෳ⎨ VHUYLFHFDOOBDSL ⏓⎫ࠞ⎍⎯⎇⎅⎩⎚ࡥ⎴څՆ⎨ ⎚ゎ ⎔⏍⎬⎥⎅⎧⎰⎚⎿⎘ࡧڤゎ ⎞⎘⎧⎔⎔⎨ҳ⎖⏍⎠␥␜⏼ߧ⎰ろ۱ෳ⎯ VWDUW ⎯ય⎨⎚⎿⎅⎧⏍⎖ࡥ⎴څゎ ⎔ ⎯␝⏹⏿␅⏓⏉⎐٪⏌⎩ろ݂ ⎬ڤ5HVHUYHUQHZ ⎩⎅⎇⎯⎍⎃⏋⎿⎚⎮ゎ ⎔⏍⎰PLNXWWHU⎯␥⏠␒␥␦⎨ろޱ⎘⎠ೀ ॅ⎍رѬ⎘⎠߹⏓⏫⏿␒⎨ڤ۱⎚⏌⏃⎯⎨⎚ゎ ⎥⎿⏋ろ VWDUW ⎍ ⎩⏌⏍⎖ࡥ⎴څ#FUDZOHUV ⎯␥␜⏼ߧ⏓߹۱⎘⎠ڤろ ೀ ⎠⎿⎬ڤVWDUW ⏓⎇⏉⎚ࡥ⎴څาช⎘⎧⎅⏌⎯⎨ろٌї⎩⎘⎧ഇ⎕⎩⎬ #FUDZOHUV ⎯␥␜⏼ߧ⎍⎬ߏ⏌⏍⎱څ ⎫⏋⎿⎚ゎ ⎠⎡⎘ろ⎔⏍⏓߹⎬ࡾ݂⎰⎬⏂⎠⏌⎚ټѾ VWDUW ⏓⏔⎜⎿⎒⎅⎱⏍⎒⎫⏊⏅⎨⏔څゎ ⎔⎯ฉෳ⏓⎇⎯⎍゚ ۱ෳ⎯ RQERRW ⎨⎚ゎ PLNXWWHU⎯␓␥⏬⏠⎨⎰ろ⎔⎯⏉⎇⎫ࢆ⎎൘⏓⎚⏌⎩ ERRW ⏠␕␄⎬⎘⎧␒⏿⏫⏓⏠␕ ␄␋␅␥⎩⎘⎧୕⎚⏌⎔⎩⎍⎨⎎⎿⎚ゎ ERRW ⏠␕␄⎰PLNXWWHU⎯Քஓߗ⎬λ⎡⎒१⎚⏌⎯⎨ろ⎔⏍⎨ VWDUW ⎯݂ࡾ⎯Ѿ⎍⎚⎿⎜ࡥ⎴څゎ ⎔⎔⎨ ERRW ⏠␕␄⎯ωॅ⎩⎘⎧ VHUYLFH ⎍⎖⏍⎧⎅⎿⎚⎍ろ⎔⏍⎰⎫⏔⎨⎘⏈⎇⎌ゎ VHUYLFH ⎩⎅⎇⎯ ⎰ PLNXWWHU ⏳ ⏵ ␂ ␜ ⎍ ଚ ֤ ⎘ ⎧ ⎅ ⏌ろ 7ZLWWHU ⎯ $3, ⏓ ⎘ ࡥ ⎴ څળ ࣐ ш ⎚ ⏌ ⎠ ⏂ ⎯ ⏦ ␒ ⏴ ⏣ ⏫ ␄ ⎨ろ ⎠ ⎩ ⎉ ⎱ IULHQGVBWLPHOLQH ⏓ωॅ⎬⎘⎧ VHUYLFHFDOOBDSL ⏓⎩⎷څ7ZHHW⎯ೱ ⏌⎃⎨ټ0HVVDJH ⏫␥⏵⎯⏠ ⏵⏻⏵⎯జໆ⎍റ⎤⎧⎎⎿⎚ゎ ⎖⎤⎎ GHILQHBSHULRGLFDOBH[HFXWHU ⎨٪⎠⏋⎨⎚⎮ゎ #FUDZOHUV ⎯યङ⏓٪⎧⎅⎎⎿⎘⏈⎇ゎ ۱ෳ⎯ࡾՃшߗ⎬ろ 3OXJLQFDOOSHULRG VHUYLFH ⎚⏌⎡⎒⎯␥␜ ⏼ߧ⏓⏍⎧⎅⎿⎚ゎ ⎔⏍⎰⏠␕␄⏓१⎖⎜⏌Ւ൚⎨ろ キ SHULRG ⏠␕␄⏓ωॅ VHUYLFH ⎨१⎖⎜⏌ギ⎩⎅⎇Τ ය⎨⎚ゎ ⎢⎫⏀⎬ SHULRG ⏠␕␄⎰ろೀ⎕⎩⎬Ѿ१⎚⏌⎔⎩⎍സ࣍⎖⏍⎧⎅⏌⏠␕␄⎨⎚ゎ ⎔⎯⏠␕␄⎰٠ ٌݲї⏅␑⏥⍬ろ␦⏵␄⎯ߗҷ௨⎫⎪⎬⎍⎚⎨⎯⏌⎅⎧⏍⏐ޡろ⎔⎇⎅⎇⏳⏵␂␜⏀␥␓⏃␄␕⏠⎅⎾⎤⏀ܛ ⏬⏠⎯λೱ⎩⎘⎧߹ਂ⎖⏍⎧⎅⏌⎯⎰ళ⎅⎨⎚⎮ゎ ⎖⎧ろ #FUDZOHUV ⎬⎰⎃⎩⎚⎿⎅⎧⎤ࣛ⎍ߧ⏼␜␥⎯ڃゎ ゚۱ෳ⎨զ⎖⏍⎧⎅⏌⏃⎯⎰ DSL ωॅ⏓٪⏌⎩ IULHQGVBWLPHOLQH ⎩⎫⎤⎧⎅⎿⎚ゎ ⎥⎿⏋⎔⏍⎰ろ⎅⏐⏇⏌キ␗⍬␜⏻⏠␜␥⏠ギ⏓ࠟண⎚⏌ࡽ⎯⏉⎇⎨⎚ゎ ⎔⎯څ ⎴ࡥ⎘⎍ढ़⏊⎠⎘ڸਞ⎐␒⏿⏫⎍⎍⎚⎿⏍⎱څろ⎔⎯⎩⎎⎬ࠟண⎘⎠7ZHHW⎯జໆ⎍ PHVVDJHV ⎬⎖⏍⏌⎯⎨ろ ␒ ⏿⏫⎨⎰⎔⏍⏊⎯␝⏿⏷⍬⏴⏓ωॅ⎩⎘⎧ XSGDWH ろ PHQWLRQ ろ P\SRVW ⏠␕␄⏓१⎖⎜⎧⎅⎿⎚ゎ ⎉ろ⎔⏍⎡ ⎒をߟ⎰⎪⎇⎚⏌⎯を⎩ް⎇⎌⏃⎘⏍⎿⎜⏔⎍अజ⎕ๆゎ PLNXWWHU⎯*8,⏯⍬␅⎨⎰⎔⏍⏊⎯⏠␕␄⎬⎘⎧⏠␕ ␄␋␅␥⏓୕⎘⎧⎋⏋ろ⏠␕␄⎍ಓ⏔⎨⎎⎠⏊ωॅ⎩⎘⎧⎤⎧⎎⎠7ZHHW⏓ߟ⎚⏌⏉⎇⎬⎫⎤⎧⎅⏌⎯⎨ろ ࠟ ண⎘⎠7ZHHW⎰⎬⎫⏊⎛⎢⏄⏔⎩ѳ⎬ߟ⎖⏍⎿⎚ゎ ⎔⎯⏉⎇⎬ろ⎫⏔⎨⏃⏠␕␄⎨ߖ⎤⎧⎅⎐⎯⎍PLNXWWHU⎯ ⎨⎚ゎ ⎅⎌⎬⏃⏦␒⏴⏣⏫␄⎮⎚⎨⎅⎾⎤ڽޱゎ ゚۱ෳ⎰ߢഇ·⎯␦␓␥⏠⎬⎘⎧ஔ⎙ࡽ⏓⎘⎧⎅⏌⎡⎒⎫⎯⎨Ӎ͵⎘⎿⎚ゎ ⎩⎔⏎⎨ろ⎔⎯⏯⍬␅⏓٪⎧ъ⎌βӽ⏓ӽ⎙⎫⎅⎨⎘⏈⎇⎌ゎ ⎞⎇ろ HQG ⎡⎒⎯۱⎍⎼⎩⏔⎪⎫⎐ろ␒⏿⏫⎯݂⎯ڤഓ ⎯⎧⎅⎧⏍⎌ࢆ⎬ڤろ⎬۱ෳ⎫⎪⎨⎰໓ਞ⎚⏌ HQG ⏅ ` ⎍۱⎬⎿⎩⏂⏊⏍⎧⎅⎿⎚ゎ ⎔⎯ࢆ⎎൘⎨␐⎩ ⏌ञ⏃⎅⏌⎩ް⎅⎿⎚⎍ろ⎔⏍⎰⎪⎇٪⎧⏃/LVS⎯ࢆ⎎൘⎨⎚⎮ゎ #WRVKLBD⎖⏔⎰/LVSHU⎫⎯⎨ろ໓ਞ⎚⏌ HQG ⏓۱ ⎬⎿⎩⏂⎠⎐⎫⏌ƧƧ⏊⎘⎅⎨⎚ゎ ⎔⎯λ٪ബ⎫⎎ࢆ⎯آ൘⏃ろPLNXWWHU⎯⏯⍬␅⏓⎰⎨ࣘ⏌ګҙ⎜⎫⎅ය⏐⎅⎨⎚⎮ ⎢⎫⏀⎬5XE\⎨⎰ HQG ⎬۱⏯⎩⎇ޡ⍬␅⎍࡙ૠ⎬⎫⎤⎧⎘⎿⎇⎯⎨ろ໓ਞ⎚⏌ HQG ⏓⎿⎩⏂⏌⎯⎰߄௨ड़⏓ࣘ⎓⏌⎩ ⎅⎇ڹї⏃⎃⏋⎿⎚ゎ ⏠␕␄⏓૰⎤⎧ UHVWUE ⎨ XSGDWH ⏠␕␄⎬⏉⎤⎧୯⎓⏊⏍⎠7ZHHW੬⎰⎪⎔⎹۱⎐⎯⎨⎘⏈⎇⎌ゎ XSGDWH ⎨JUHS⎚⏌⎩⎅⎐⎥ ⎌␎⏿␄⎘⎿⎚⎍ろ⎔⎔⎨⎰ FRUHDGGRQIULHQGBWLPHOLQHUE ⏓٪⎧⏀⎿⎘⏈⎇ゎ ␦⏵␄ FRUHDGGRQIULHQGBWLPHOLQHUE FRGLQJ XWI 0RGXOH QHZ GR PDLQ *WN 7LPH/LQH QHZ SOXJLQ 3OXJLQ FUHDWH IULHQGBWLPHOLQH SOXJLQ DGGBHYHQW ERRW ^ _ VHUYLFH _ 3OXJLQ FDOO PXLBWDEBUHJLVW PDLQ +RPH 7LPHOLQH 08, 6NLQ JHW WLPHOLQH SQJ ` SOXJLQ DGGBHYHQW XSGDWH ^ _ VHUYLFH PHVVDJHV _ PDLQ DGG PHVVDJHV ` HQG ⎔⏍⎰␗⍬␜⏻⏠␜␥⏠⏓ߟ⎚⏌⎠⏂⎯␓␥⏬⏠⎨⎚ゎ ⎔⎯␓␥⏬⏠⎰⎢⏈⎤⎩ࢆ⎎൘⎍ ⎧⎐ڄ3OX JLQFUHDWH ⎬␒⏿⏫⏓⎚⎯⎨⎰⎫⎐ 3OXJLQDGGBHYHQW ⎫⎪⎨⏠␕␄␋␅␥⏓୕⎘⎧⎅⎿⎚⎍ろԷඕ⎰ UHVWUE ⎩ஔ⎙⎨⎚ゎ ゚۱ෳ⎨⎰ ERRW ⏠␕␄⎯␋␅␥⏓୕⎘⎧⎅⎿⎚ゎ PXLBWDEBUHJLVW ⎰⏻␒⏓୕⎚⏌⏠␕␄⎨ろ۱ෳ ⎨१ढ़⎘⎧⎅⏌ *WN7LPH/LQH ⎯⏠⏵⏻⏵⏓⎘⎧⎅⎿⎚ゎ ゚۱ෳ⎍ XSGDWH ⏠␕␄⎯␋␅␥⎨⎚ゎ ࡸ⎬ PDLQ ろ⎚⎫⏐⎢␗⍬␜⏻⏠␜␥⏠⎬⎘⎧⎖⏍⎠7ZHHW ⏓ωॅ⎬⎘⎧ DGG ⏓⎚⎨⎒⎡⏌⎅⎧⎘ࡥ⎴څゎ ԑ⎨⎚⎮ゎ ⎡⎒⎪⎔⏍⎡⎒⎡⎩ъ⎍Ք⎎⎧⎅⏌⎌ഇ⎌⏋⎿⎜⏔ゎ⎖⏊⎬ধ⎤⎧⏀⎿⎘⏈⎇ゎ ⏻⏠␜␥⏠ PLNXWWHU⎯␗⍬␜⏻⏠␜␥⏠⏻␒⎰ *WN7LPH/LQH ⎯⏠⏵⏻⏵⎨ろচ ⎰ٿFRUHPXLFDLURBWLPHOLQHUE ⎬ ⎃⏋⎿⎚ゎ FRUHPXLJWNBWLPHOLQHUE ⎨⎰⎫⎅⎯⎨શΤ⎘⎧⎐⎡⎖⎅ゎ ␦⏵␄ FRUHPXLFDLURBWLPHOLQHUE FRGLQJ XWI UHTXLUH JWN UHTXLUH FDLUR FODVV *WN 7LPH/LQH *WN 9%R[ HQG PLTXLUH PLTXLUH PLTXLUH PLTXLUH PLTXLUH PLTXLUH PXL PXL PXL PXL PXL PXL FUXG FHOOBUHQGHUHUBPHVVDJH WLPHOLQHBXWLOV SVHXGRBPHVVDJHBZLGJHW SRVWER[ LQQHUBWO PLTXLUH FRUH PHVVDJH PLTXLUH FRUH XVHU PLTXLUH OLE UHVHUYHU EHJLQ UGRF ࢤࢉࣅ࣎ࢉࣘࡕ *WNࢋ࢈࢝ࢌࢨࢭࠀ HQG FODVV *WN 7LPH/LQH )5$0(B3(5B6(&21' )5$0(B06 WRBI )5$0(B3(5B6(&21' LQFOXGH *WN 7LPH/LQH8WLOV VQLS ۱ෳΙ⎬ۼബ⎫␝⏹⏿␅⎍⎘ࡥ⎴څ٪⎉⎿⎚⎮ゎ UHTXLUH ⎙⏄⎫⎐⎧ PLTXLUH を⎔⏍⎰⎅⎤⎠⎅を ⎔⏍⎰PLNXWWHU⎍ߢұૌ⎘⎠ UHTXLUH ⎨⎚ゎ λωॅ⎨⏀␡⏴␞⏁ܛ⍬⎯ࠦຳ⏓ޱ⎚⏌Ιҙ⎰ೞ⎯ UHTXLUH ⎩ബ⏐⏋⎿⎜⏔ゎ ⎢⏈⎤⎩Ժ⏋ஞ⏓⎘⎧ PLTXLUH ⎯զ⏓٪⎧⏀⎿⎘⏈⎇ゎ UHTXLUH ⏃⏀⎤⎐⏀⎐ PLTXLUH ⎯զ⎰ FRUHPLTXLUHUE ⎬⎃⏋⎿⎚ゎ ␦⏵␄ FRUHPLTXLUHUE FRGLQJ XWI ེ࠶ࡕࡒᘺళࡒᾓࡊ⣶ࡥࡳࡲࣆࢢࢨࢮࡹၿ∄ࡀࡲ UHTXLUH VHW ࣄࡊࡍ࠲ࡶࠫࠫࡔࠀ ࢩࢉࣘࢫ࣐࣡ࠫࠫࡔ࣡ࠀ ࡐ࠭⛆ࠫࡕ࠲ࡹᘲ࠶ࡏ࢘࣡ࢮࡱ⬱࠶ࡑࡱࡄ࠭ࡇ࠲ࡰ✆࠾࠶ࡖᘲ࠲ࡑࠫ࠸ࡐࠫࠫࡔࠀ ࡆࡱࡎ႞ࠫᗐࡏ࠲ࡒᢔࠫࡍࡆࡰⴄࡒࡥࠫࡍ࠶ࡳࡲࡺࡇ࣡ࠀ Ꮢࡑ࠳ࡰࡑࡺࡍࡶ࠲ࡱࡀࠫ✠ᖱࡑࡺࡇࡴ࠭ࠀ ⛠ 0LTXLUH PLTXLUH ࡕ ࢍ ࢉ ࣏ ࢇ ࢞ GHI PLTXLUH DUJV 0LTXLUH PLTXLUH DUJV HQG #WRVKLBD⎖⏔⎯␛⏫͵⎍⏐⎤⎧⎎⎿⎚⎮ゎ ⏹⍬⏵⏯⍬␅⎿⎨⏀⎤⎐⏀⎐⎨⎚ゎ ⎞⏍⎰⎖⎧⎋⎎ろ PLTXLUH ⎯ඕਹ⎰␞⏴␡⍬␝⏹⏿␅⎬ࡽ⏓Ϋ࣬⎘⎧⎅⏌⎡⎒⎯⏉⎇⎨⎚ゎ ඕਹ⏓٪⎧⏀⎿⎘⏈⎇ゎ ␦⏵␄ FRUHPLTXLUHUE PRGXOH 0LTXLUH FODVV VHOI 3$7+B.,1'B&219(57(5 +DVK QHZ ^ _K N _ K > N @ N WRBV ` 3$7+B.,1'B&219(57(5 > PXL @ PXL JWNB 3$7+B.,1'B&219(57(5 > PXL @ &ODVV QHZ ^ GHILQHBPHWKRG ^ _ RWKHU _ UHQGHU ODPEGD ^ _ U _ )LOH MRLQ PXL ^ U ` B RWKHU ` LI RWKHU RU )LOH7HVW H[LVW " UHQGHU > FDLUR @ UE UHQGHU > FDLUR @ HOVH UHQGHU > JWN @ HQG ` ` QHZ 3$7+B.,1'B&219(57(5 > FRUH @ 3$7+B.,1'B&219(57(5 > XVHUBSOXJLQ @ SOXJLQ &+,ࡕ࢘ࢇࢢ࣡࢞࢘࣡ࢮࢺࢆࢉ࣐ࡹ✡ࡦ⣶ࡧࠀ BNLQGB ࡖ ࢺ ࢆ ࢉ ࣐ ࡕ ὥ ⲙ ߿ BILOHB ࡖ ࢺ ࢆ ࢉ ࣐ ു ⿏ ᑆ ቍ ၏ ࡹ ⮏ ࠶ ⿐ ࠀ BILOHB ࡹ ḗ ᴯ ࡀ ࡲ ࡏ ߿ ࡄ ࡕ ࢬ ࢈ ࣑ ࢭ ࣏ ৽ ࡕ U X E \ ࢺ ࢆ ࢉ ࣐ ࡹ ࡍ ✡ ࡦ ⣶ ࡧ ࠀ ࡄࡕ⮭߿ࡄࡕࢬ࢈࣑ࢭ࣏৽ࡒࢬ࢈࣑ࢭ࣏࠳ࠩࡳࡗ߿ࡄࡕࢬ࢈࣑ࢭ࣏ࡒ ࡄࡕࢬ࢈࣑ࢭ࣏ࡏീുࡕ 5XE\ࢺࢆࢉ࣐࠳ࠩࡲࡏၿ࠾ࡍ✡ࡦ⣶ࡩ࠭ࡏࡀࡲࠀ ([DPSOH PLTXLUH SOXJLQ 'LUHFWRU\ KLHUDUFK\ SOXJLQV D UE C E 5($'0( E UE C F UE D UEࡏE U E ࠳ ✡ ࡦ ⣶ ࡥ ࡳ ࡲ F U E 5 ( $ ' 0 ( ࡖ ✡ ࡦ ⣶ ࡥ ࡳ ࡑ ࠫ GHI PLTXLUH NLQG ILOHV NLQG NLQG WRBV\P LI ILOHV HPSW\ " PLTXLUHBDOOBILOHV NLQG HOVH LI NLQG OLE 'LU FKGLU 3$7+B.,1'B&219(57(5 > NLQG @^ ILOHV HDFK ^ _ ILOH _ PLTXLUHBRULJLQDOBUHTXLUH ILOH WRBV ` ` HOVH ILOHV HDFK ^ _ ILOH _ ILOHBRUBGLUHFWRU\BUHTXLUH 3$7+B.,1'B&219(57(5 > NLQG @ ILOH WRBV ` HQG HQG HQG PLTXLUHࡏീࡇ࠳߿ࡍࡕࢺࢆࢉ࣐࠳Ⴚ➯ࡒࡑࡲ GHI PLTXLUHBDOOBILOHV NLQG NLQG NLQG WRBV\P 'LU JORE 3$7+B.,1'B&219(57(5 > NLQG @ VHOHFW ^ _ [ _ )LOH7HVW GLUHFWRU\ " [ RU ? UE [ ` VRUW HDFK ^ _ UE _ ILOHBRUBGLUHFWRU\BUHTXLUH UE ` HQG GHI ILOHBRUBGLUHFWRU\BUHTXLUH UE LI PDWFK UE PDWFK A? UE UE PDWFK >@ HQG FDVH ZKHQ )LOH7HVW GLUHFWRU\ " )LOH MRLQ UE SOXJLQ )LOH MRLQ UE )LOH EDVHQDPH UE LI )LOH7HVW H[LVW " SOXJLQ RU )LOH7HVW H[LVW " ^ SOXJLQ ` UE PLTXLUHBRULJLQDOBUHTXLUH SOXJLQ HOVH PLTXLUHBRULJLQDOBUHTXLUH UE HQG HOVH PLTXLUHBRULJLQDOBUHTXLUH UE HQG HQG GHI PLTXLUHBRULJLQDOBUHTXLUH ILOH UHTXLUH ILOH HQG HQG ۱ෳ⎍ PLTXLUH ⎯ඕਹ⎨⎚ゎ ঽ⎯UGRF⎬⏃⎰ࢆ⎅⎧⎃⏋⎿⎚⎍ろ⎩⏋⎃⎉⎛⏔⎨⏀⎿⎘⏈⎇ゎ ⎖⎤⎎ ٪⎠⎩⎎⎰ ILOHV ⎬␞⏴␡⍬⎍ޱ⎖⏍⎧⎅⎠⎯⎨۱ෳ⎌⏊⏀ި⏂⎿⎚ゎ NLQG ⎍ OLE ⎌⎪⎇⎌⎨ഇԻ ⎘⎧⎅⎿⎚⎍ろ⏉⎐٪⏌⎩⎪⎤⎢⏃ 3$7+B.,1'B&219(57(5>NLQG@ ⎯␃⏟⏫␄␦ч⎌⏊␞⏴␡⍬⏓⏀⎿⎅⎨⏔ܛ ⎚ゎ 3$7+B.,1'B&219(57(5 ⎰゚۱ෳ⎨զ⎖⏍⎧⎅⏌␋⏿⏳␡⎨ろ۱ෳ⎬⎃⏌⏉⎇⎬ろധ⎬ޱ⎘⎫⎒⏍⎱ NLQG ⎯⏓⎬ڤю⎘⎠ഓߓໆ⎩⎫⏋⎿⎚ゎ ࡚์⎫⎯⎰⎞⎯ ⎯ڤ3$7+B.,1'B&219(57(5>PXL@ ⎯զ⎨⎚ゎ ⎔⎔⎬⎰⏫␥⏵⎯⏠⏵⏻⏵⎍ҳ⎖⏍⎧ ⎅⎧ろ⎔⎯⏫␥⏵⎰۱ෳ⎨ ⎍⏦⍬␌⍬⍬␅⎖⏍⎧⎅⎧ય⎨ъ⏅⏊ࡽ⏓⎘⎧⎅⎿⎚ゎ ์⎚⏌⎬⎔⎯⎬ڤਞ⎐ഓߓ ໆ⎬⏉⎤⎧ࡽ⏓ബ⎉⎠⎅⎩⎅⎇⎔⎩⎨⎚⎮ゎ ඕਹ⏓٪⎧⏀⏌⎩ろPXL␃⏟⏫␄␦Ιч⎨ڤਞ⎯␞⏴␡⍬⎯ঽ⎬ FDLURB ⏓⎒⎠␑⏝⏠⎍ਣ⏓⎌⎇⎪⎌⏌⎅⎧⎘ݚ⎘ろ ⎞⎯⏉⎇⎫␑⏝⏠⎍⎫⎒⏍⎱⏐⏋⎬ JWNB ⏓⎒⎠ ␑⏝⏠⎬⎘⎧⎅⎿⎚ ゎ ⎫⎝⎔⎯⏉⎇⎬⎫⎤⎧⎅⏌⎌⎩⎩⎇ٿろPXL␃⏟⏫␄␦⎬⎰PLNXWWHU⎯8,ԟ⎍⏠⏝␑⎯ؙ⎤⎧⎅⏌⎯⎨⎚⎍ろ ٴゖ⎯PLNXWWHU⎰*7.⎯/LVW9LHZ⎯Ն⎡⎒⎨7ZHHW⏓ߟ⎘⎧⎅⎠⎠⏂ FDLURB ⎯⎅⎠␑⏝⏠⎰⎫⎐ろু ⎧ JWNB ⎨⎘⎠ゎ ⎩⎔⏎⎍/LVW9LHZ⎬ুೱ⎜⏌⎩ബಾѳਙ⎍ઢ⎅⎠⏂ろ⎃⏌ߗՃ⎌⏊ѳਉಾѳ␥⏠␒␥␦⎯ FDLUR⏓⎧⎤ޡ7ZHHW⏓ಾѳ⎚⏌Ն⎍߹ٲଯ⎬ю⎖⏍⏌⏉⎇⎬⎫⏋⎿⎘⎠ ゎ ⎔⎯⏓Քஓ⏦␓⏳␣⎨ஓଯ⎬ উ⏋Ԁ⎉⏌⎠⏂ろ JWNB ⎯⎅⎠֑⎯␑⏝⏠⎩ FDLURB ⎯⎅⎠ई⎘⎅␑⏝⏠⏓ຑ൘ߖ⎤⎧⎋⎅⎧⏀⏠⏝␑⏁ܛ ⏓ஓଯ⎬ബш⎖⎜⏌⎩⎅⎇൘൚⏓ࠟ⎤⎠⎯⎍ ⎔⎯ 3$7+B.,1'B&219(57(5>PXL@ ⎯ศ⎩ް⏐⏍⎿⎚ゎ PLTXLUH ߢ ਹ⎰⎔⎯ബۖΙঽ⎌⏊⎃⏋⎿⎘⎠⎍ろஓଯ⎬⍬␅␍⏵⏓ബۖ⎚⏌⎩⎅⎇ PLTXLUH ⎯⎍݂⏃Կ⎖⏍⎧⎅⏌⎯⎰⎔ ⎯ೱഇ⎬β⎅⎃⏋⎿⎜⏔ゎ ⎃⎩⎰ ۱ෳ⎯ PLTXLUHBRULJLQDOBUHTXLUH ⎩ ۱ෳ⎯ ILOHBRUBGLUHFWRU\BUHTXLUH ⎨⎚⎍ろঽࠋ⎰ඕ⎯ UHTXLUH ⏓⎨⎒⎡⎷څろ ⎯⏵␍⎰ࠋڤදಗ⎍␃⏟⏫␄␦⎡⎤⎠⏊⎞⎯ય⎬⎃⏌ஔ⎯␑⏝⏠⏓ UHTXLUH ⎚⏌⎡⎒⎨ ⎚ ゎ ⏻⏠␜␥⏠݁ ⎞⏍⎨⎰ *WN7LPH/LQH ⎬⏋⎿⎘⏈⎇ゎ ⎔⎯␑⏝⏠⎨٠⎩⏌⎒⎌⏓ݲഇ⎌⏋⎿⎚⎍ろ DGG ⎫⏔⎧␝⏹⏿␅⎰⎔⎯␑⏝⏠⎬⎰⎃⏋⎿⎜⏔ゎ ⎘⎌⎘গଟ⎯ FDLURBWLPHOLQHUE ⏓٪⎧⏀⏌⎩ろ۱ෳ⎨ *WN7LPH/LQH8WLOV ⏓ LQFOXGH ⎘⎧⎅⎿⎚ゎ ঽଯ⎬⏃⎅⎌⎬⏃҃⎘ ⎅⎯⎨ FRUHPXLJWNBWLPHOLQHBXWLOVUE ⏓٪⎧⏀⎿⎘⏈⎇ゎ ␦⏵␄ FRUHPXLJWNBWLPHOLQHBXWLOVUE BPHVVDJHB ࡹ ⤚ ࡀ ࡲ ࠀ ⧋ ల ࡎ ♣ ᕝ ࡕ 0 H V V D J H ࢻ ࢝ ࢌ ࢭ ࡹ ᧲ ࡀ ࠺ ࡏ ࡩ ࡎ ࠴ ࡲ ࠀ GHI DGG PHVVDJH LI PHVVDJH LVBD " (QXPHUDEOH WKHQ VHOI EORFNBDGGBDOO 3OXJLQ ILOWHULQJ VKRZBILOWHU PHVVDJH ILUVW HOVH P 3OXJLQ ILOWHULQJ VKRZBILOWHU > PHVVDJH @ ILUVW ILUVW VHOI EORFNBDGG P LI P LVBD " 0HVVDJH HQG VHOI HQG DGG ⎯զ⎍⎃⏋⎿⎘⎠ゎ ⎩⏋⎃⎉⎛ PHVVDJH ⎰జໆ⎍റ⎤⎧⎐⏌⏃⎯⎩⎚⏌⎩ $UUD\ ⎰ (QXPHUDEOH ⎫⎯⎨۱ෳ⎯ LI ⎬ω⎤⎌⎌⏋⎿⎚ゎ ⎔⎔⎨⎰ 3OXJLQILOWHULQJ ⎬ PHVVDJH ⏓⎘⎧ろ⎞⎯ٌї⎯গஏ์⏓ EORFNBDGGBDOO ⎬୯⎓⎧⎅⎿⎚ゎ 3OXJLQILOWHULQJ ⎰PLNXWWHU⎯␓␥⏬⏠Ն⎯࡚์⎫⏃⎯⎨ろ⏠␕␄⎩ஔโ⎬⎘⎧␑⏟⏻⏓୕⎘⎧⎋⎐⎔⎩ ⎨⏦␒⏴⏣⏫␄⏓ߢ⏊⎌ڤศ⎬৭⎚⎿⎎⎨⎍⎩⎔⏌⎚ݩゎ ⎔⎔⎨⎰ PHVVDJH ⏓ VKRZBILOWHU ␑⏟⏻⎬⎘⎧⎅⎿⎚ ⎍ろ⎔⎯␑⏟⏻⎰ 0HVVDJH ⎯జໆ⎌⏊ߟ⎚⏌⏃⎯⎡⎒⎧⎘ޝ⏓⎚⎨⏻⏟␑⎯⏂⎠⏌⎚ݪゎ ⎠⎩⎉⎱␛␡⍬␄⎘ ⎧⎅⏌␢⍬⏲⎯7ZHHW⎰$3,⎌⏊ࠟண⎘⎠ٌї⎬ԥ⎿⏍⎧⎅⎿⎚⎍ろ7/⎬ߟ⎘⎧⎰⎅⎒⎫⎅⎯⎨⎔⎯␑⏟⏻⎨ݪ ⎖⏍⎿⎚ ゎ ⎿⎠ろ␑⏟⏻⏓⎘⎠ٌї⎬⎘⎧ ILUVW ⏓ࠟ⎤⎧⎅⏌⎯⎰ろ 3OXJLQILOWHULQJ ⎍яബૠ⎯ωॅ⏓ࠟ ⏌⎠⏂ろറ⏋ખ⎰์⎨⎃⎤⎧⏃జໆ⏓റ⎚⎔⎩⎬⎫⎤⎧⎅⏌⎠⏂⎨⎚ ゎ ⎞⏍⎨⎰ EORFNBDGGBDOO ⏓٪⎧⏀⎿⎘⏈⎇ゎ JWNBWLPHOLQHBXWLOVUE ⎬⏃⎔⎯␝⏹⏿␅⎰⎃⏋⎿⎚⎍ろ LQFOXGH ⎯ٴ FDLURBWLPHOLQHUE ⎨݁զ⎖⏍⎧⎅⏌⎯⎨⎞⎢⏊⎍ ⎚⎿⏍⎱څゎ UHQGHU>FDLUR@ ⎰ 3URFFDOOFDLUR ⎩ஔ⎙⎨⎚ゎ5XE\ವࡵ⎯Ւ൚⎨⎚⎍ろ⎅⎿⎅⎢ӽଯ⎨⎰⎫⎅Չ⎍⎘⎿⎚ゎ ␦␏⏴␣⎌⏊⎰FDLUR⎬⏉⏌ಾѳ⎍␃␑⏥␄⎬⎫⎤⎧⎅⎿⎚ゎ ำક⎨⎚⎍Ιঽ␓␥⏬⏠⏓⎎⎩⎠⎅⎧⎤ݩろ␃⏟⏫␄␦⎯ч⎬ PDLQUE ⎩⎅⎇ঽ⎨ඕਹ⏓ટ⎅⎧⎘⎿⎅ろ⍬␅⎖⏍⎫⎐⎧⏔⎡⎔⎩⎍⎃⏋⎿ ⎘⎠ゎ ״ਹଯ⎫ࡽ⎰ FRUHDGGRQSURILOHUE ⎬⎃⏋⎿⎚ゎ ωॅ⏓ GHI IDUJV ⎯⏉⎇⎬⎘⎧ࠬ⎒⏌⎩ろ I ⎯ ⏃⎨⎘ࡥ⎴څDUJV >@ ⎩⎫⏋⎿⎚⎮ゎ ⎠⎡⎘યङ⎰⎿⎤⎠⎐ஔ⎙⎫⎯⎨ろ␦␑⏝⏫⏻␦⏬⎖⏍⎧⎫⎅⏃⎯⎩ް⏐⏍⎿⎚ゎ ␦⏵␄ FRUHPXLFDLURBWLPHOLQHUE ᕿ ࠾ ࠫ ࡩ ࡕ ࠲ ࡰ Ⱨ ᴳ ࡒ SDFN࠾ࡍࠫ࠶ࠀ GHI EORFNBDGGBDOO PHVVDJHV UHPRYHV DSSHQGV PHVVDJHV SDUWLWLRQ ^ _ P _ P > UXOH @ GHVWUR\ ` UHPRYHBLIBH[LVWVBDOO UHPRYHV UHWZHHWV DSSHQGV PHVVDJHV SDUWLWLRQ ^ _ P _ P > UHWZHHW @ ` DGGBUHWZHHWV UHWZHHWV DSSHQGV VRUWBE\ ^ _ P _ P PRGLILHG WRBL ` GHDFK PHWKRG EORFNBDGG HQG ࣏ ࢩ ࢉ ࣡ ࢭ ࡹ ⤚ ࡀ ࡲ ࠀ BPHVVDJHVB ࡒ ࡖ 0HVVDJH ࡕ ⧋ ల ࡹ ᑗ ၿ ࠾ ߿ ࡄ ࡳ ࡰ ࡖ UHWZHHWࡎࡑ࠸ࡳࡗࡑࡰࡑࠫ GHI DGGBUHWZHHWV PHVVDJHV PHVVDJHV HDFK ^ _ PHVVDJH _ LI QRW LQFOXGH " PHVVDJH UHWZHHWBVRXUFH EORFNBDGG PHVVDJH UHWZHHWBVRXUFH HQG ` HQG ゚۱ෳ⎨⎰ GHVWUR\ ␝⏿⏷⍬⏴⎯ࡽ⏓⎘⎧⎅⎿⎚ゎ ⎔⏍⎰7ZHHW⏓⎬⎎⎩⎅⎠⎘ݪೱଯ⎬१ढ़⎖⏍ ⏌␝⏿⏷⍬⏴⎨ろ P>UXOH@ GHVWUR\ ⎯⎩⎎⎰ң⎚⏌,'⎯7ZHHW⏓⎚⎿⎘ݪゎ 8VHU6WUHDP⎬ঋਞ⎘⎧⎅⏌⎩ ⎎⏃ GHOHWH ⏠␕␄⎍ಓ⏔⎨⎎⎿⎚⎍ろPLNXWWHU⎨⎰⎔⎯⏠␕␄⎰ࡽ⎘⎧⎅⎫⎅⏉⎇⎨⎚ ׀ය⎯⎃⏌ञ⎰ FRUH DGGRQVWUHDPLQJVWUHDPHUUE ⏓⏔⎨⏀⎧⎐⎡⎖⎅ゎ ゚۱ෳ⎰␦␀⏠⍬␄⎯ࡽ⎨⎚ゎ ␑⏥⍬⎘⎧⎫⎅ञ⏅ॽ⎯7ZHHW⎍␦␀⏠⍬␄⎖⏍⎧⎎⎠⏊ろ⎞⎯7ZHHW⏓ 7/⎬ߟ⎘⎫⎅⎩⎅⎒⎫⎅⎯⎨ࡽ⎘⎧⎅⎿⎚ゎ ۱ෳ⎰⎞⎯ろ⎥⎿⏋ೞ⎯7ZHHW⎯ࡽ⎨⎚ゎ 7ZHHW⏓ۖईߗԝ⎯ई⎘⎅ࡼ⎬⏹⍬␄⎘⎧⎌⏊ү 0HVVDJH ⏓ EORFNBDGG ⎯ωॅ⎬⎘⎧ ⎚⎿⎅⎧⎘ࡥ⎴څゎ GHDFK ⎩⎅⎇⎯⎰٪Ӿ⏍⎫⎅␝⏹⏿␅⎨⎚⎍ろ⎔⏍⎰ HDFK ⎯ઢБ౦⎨ろ ਓܽ⎬ু⎧⎯์⎬⎘⎧⍬␓⎚⏌⎯⎨⎰⎫⎐ろі⎫⏓⎅܄ܝ٪ ⎥⎛⎘ࢢ⎧⎤⏊ظHDFK ⎯ࡽ⏓⎘⎧⎅⎐␝⏹⏿␅⎨ ⎚ゎ ⎔⎯߹ਂ⎬⎰ 'HIHUUHG ⎩⎅⎇⏫␥⏵ FRUHOLEGHIHUUHGGHIHUUHGUE ⎍ ⎚⎿⎅⎧⏍⏐ޡゎ EORFNBDGG ⎰ࢢ⎘⏍⎠⎩⎔⏎⎨চ⎚⎿⎅⎧⏍⎖ٿゎ ␦⏵␄ FRUHPXLFDLURBWLPHOLQHUE BPHVVDJHB ࡹ 7 / ࡒ ⤚ ࡀ ࡲ GHI EORFNBDGG PHVVDJH W\SHBVWULFW PHVVDJH ! 0HVVDJH LI QRW #WO GHVWUR\HG " UDLVH LG PXVW WKDQ EXW VSHFLILHG ^ PHVVDJH > LG @ LQVSHFW ` LI PHVVDJH > LG @ LI DQ\ "^ _ P _ P > LG @ PHVVDJH > LG @ ` FDVH ZKHQ PHVVDJH > UXOH @ GHVWUR\ UHPRYHBLIBH[LVWVBDOO > PHVVDJH @ ZKHQ PHVVDJH UHWZHHW " DGGBUHWZHHWV > PHVVDJH @ HOVH BDGG PHVVDJH HQG HQG HQG VHOI HQG ۱ෳ⎯ W\SHBVWULFW ⎰ωॅ⎯⎨␅⏿⏹␝⏌⎚⏫⏿⏣⏽⏓ؠろ⎔⎔⎨⎰ 0HVVDJH Ιҙ⎯ຶ⎩⏌⏍⎖⎍ؠҙ⏓୯ ⎓⏌⏉⎇⎬⎘⎧⎅⎿⎚ゎ ⎔⎯␝⏹⏿␅⎰ FRUHXWLOVUE ⎨চ⎚⎿⎅⎧⏍⎖ٿゎ ⎔⎔⎨⎯ࡽ⎯ඕਹ⎰゚۱ෳ⎨⎚ゎ ۱ෳ⎩۱ෳ⎯ ZKHQ ঐ⎰ EORFNBDGGBDOO ⎌⏊⎠⎩⎎⎬⎰ ࡽ⎨⎯⎫⏀ろ߹߸ଯ⎬⎰ BDGGPHVVDJH ⏓⎚⎿⏋⎫⎩⎒⎡⎷څゎ BDGGPHVVDJH ⏓٪⎧⏀⎿⎘⏈⎇ゎ 7/⎯⏹⍬␄⎰7UHH9LHZ⎍⏅⎤⎧⏌⎯⎨⎔⎯⏹⍬␄⎰⎅⏊⎫⎅Չ⎍⎚⏌⎘ろ⎞⏃⎞⏃պࡼ⎯⏉⎇⎫Չ⏃⎘⎿⎚ゎ M4XHU\⎯'HIHUUHG⎩ஔ⎙⏉⎇⎫ӽ⎙⎨⎚ゎ ␦⏵␄ FRUHPXLFDLURBWLPHOLQHUE GHI BDGG PHVVDJH VFUROOBWRB]HURBODWRU LI #WO UHDOL]HG " DQG #WO YDGMXVWPHQW YDOXH PLUDFOHBSDLQWHU #WO FHOOBUHQGHUHUBPHVVDJH FUHDWHBPLUDFOHBSDLQWHU PHVVDJH LWHU #WO PRGHO DSSHQG LWHU > *WN 7LPH/LQH ,QQHU7/ 0(66$*(B,' @ PHVVDJH > LG @ WRBV LWHU > *WN 7LPH/LQH ,QQHU7/ 0(66$*( @ PHVVDJH LWHU > *WN 7LPH/LQH ,QQHU7/ &5($7(' @ PHVVDJH PRGLILHG WRBL LWHU > *WN 7LPH/LQH ,QQHU7/ 0,5$&/(B3$,17(5 @ PLUDFOHBSDLQWHU #WO VHWBLGBGLFW LWHU #UHPRYHUBTXHXH SXVK PHVVDJH LI #WO UHDOL]HG " VHOI HQG BDGG ⎍߹⎹⏠␥␜⏠⏻⎬ݘ7ZHHW⏓૰ю⎚⏌ࡽ⎩⎫⏋⎿⎚ゎ ⎔⎔⎨⎯ࡽ⎰⎥ろ7ZHHW⏓ಾѳ⎚⏌⎠⏂⎯⏦␒ ⏴⏣⏫␄⏓१ढ़⎚⏌⎔⎩⎩ろ⎔⎯⏦␒⏴⏣⏫␄⏓*7.⎯ 7UHH9LHZ ⎬⏍⏌⎔⎩⎨⎚ゎ ۱ෳ⎨⎰7ZHHW⏓ಾѳ⎚⏌⎠⏂⎯⏦␒⏴⏣⏫␄⎨⎃⏌ 0LUDFOH3DLQWHU ⏓१ढ़⎘⎧⎅⎿⎚ゎ ⎪⎔⎌⎨ഔ⎅⎠ ঽ⎨⎚⎮ゎ ␛⏫⎍⎞⏔⎫ঽ⎯љ⏓љ⎤⎧⎅⎠⏉⎇⎫ƧƧゎ ⎯ ࣘ܄0LUDFOH3DLQWHU ⎯⏯⍬␅⎰Ӎ͵⎘⎿⎚⎍ろ⎔⏍⎰PLNXWWHU⏻⏠␜␥⏠⎯⏧␥␜ഇ⎯ࡽ⏓⎚ ⏌⏦␒⏴⏣⏫␄⎨⎚ゎ 7ZHHW⏓ѳ⎬ಾѳ⎘⎠⏋ろ⏫␦⏿⏫⎘⎠⎩⎎⎬ࣸ⏓⎒⎠⏋85/⎯গ⎬ಓ⏔⎡⏋⎩⎅⎇ࡽ⎰ু⎧ 0LUDFOH3DLQWHU ⎍⎘⎧⎅⎿⎚ゎ ׀ය⎯⎃⏌ञ⎰ FRUHPXLFDLURBPLUDFOHBSDLQWHUUE ⏓⏔⎨⏀⎧⎐⎡⎖⎅ゎ ゚۱ෳ⎨⎰ろ*7.⎯ 7UHH9LHZ ⎬⎚␃⍬⏻* ߧآWN&58' ⎬ PLUDFOHBSDLQWHU ⏅7ZHHW⎯юࣣൎ ⏓⎚⎿⎅⎧⎜ݗゎ 7UHH9LHZ ⎨⎰⎔⎯ࣣൎ⏓⎧⎘⎬ٴѳ⏓ಾѳ⎚⏌⎯⎨⎚⎍ろ*7.⎯ѽ⎰ඕۣ⎯౮Ξ⏓⎉⏌⎯ ⎨Ӎ͵⎘⎿⎚ゎ #WO ⎩⎅⎇⎯⎍ *WN&58' ⏓* ⎠⎘ࢨزWN7LPH/LQH,QQHU7/ ⎨ろ 7UHH9LHZ ⎍␃⍬⏻⏓উ⎬ࡽ ⎨⎎⏌⏉⎇⎬⏧␥␜⎯⎫⎪⏓സߖ⎘⎧⎅⎿⎚ゎ ۱ෳ⎰⏻⏠␜␥⏠⎬ກ⏍⏌7ZHHWॅ⎍ਪ⎐⎫⏋⎚⎏⎠⎩⎎ろ΄⏓␦␞␝⎧⎤⎅⎧⎘ݪ⏊⎌⎯⏃⎅ڄస⎘⎫⎅⏉ ⎇⎬⎚⏌⎠⏂⎯ટ⎨⎚ゎ ⎃⎩⎍⎎ 7ZHHW⎯ࠟண⎌⏊⏠␕␄⎬⏉⏌⎠⏊⎅Ѿ⎘ろ⏻⏠␜␥⏠⎹⎯૰ю⎿⎨⏓٪⎧⎅⎎⎿⎘⎠⎍ろ⎅⎌⎍⎡⎤⎠⎨⎘⏈⎇⎌ゎ 0LUDFOH3DLQWHU ⏅⏤␂⏟␂⏟⎯ࡽろ 'HIHUUHG ⎯߹ਂ⏃⎫⎌⎫⎌ళ⎅⎯⎨⎚⎍ろ⎯ࣅ⎰⎨⎔⎔ࣘ܄ѻ⎨ ⎎⎿⎜⏔⎨⎘⎠ゎ ⎔⎯Ւߏ⏓⏔⎨׀ය⎍⏐⎅⎠ञ⎰ॖಒ⎔⏍⏊⎯⏯⍬␅⏃⏔⎨⏀⎧⎐⎡⎖⎅ゎ ⎞⎘⎧҉ຜ⎨⎎⏌ ⏅␌⏬⏓٪⎥⎒⎠⏊ KWWSGHYPLNXWWHUKDFKXQHQHWSURMHFWVPLNXWWHU ⎬⏽⏭⏿␄⏓উ⎤⎠⏋␍⏿⏽⏓⎤⎠⏋ ⎘⎧⏀⎧⎐⎡⎖⎅ゎ ⎞⏍⎨⎰ゎ mikutter で Lifelog @katsyoshi 1 はじめに 3 mikutter-fluentd twitter の日々流れてくるツイートを保存したく mikutter-fluentd は mikutter のイベントを直接 ないですか? mikutter なら比較的楽にツイートを Database に挿入するのではなく,一度 fluentd に 保存して,保存したツイートを見ることができま 投げ,fluentd で受け fluentd が各サービスに保存し す.また,日々のツイート数をグラフ化したりする ます.保存するサービスには,Redis, MongoDB, ことができます.そんな方法をちょっとだけ説明し Amazon S3 などがあります.今回は fluent-plugin- ます. mongo を用いて,MongoDB に保存します. 3.1 mikutter-fluentd の設定 まず,mikutter-fluentd の設定を行ないます.参 考文献 [4] から mikutter の plugin をダウンロード します.ダウンロードしたら,mikutter の plugin ディレクトリに mikutter-fluentd.rb を置きます. ファイルを plugin ディレクトリに置いたら,fluentlogger-ruby を Gem でインストールします. 2 保存方法 mikutter で timeline の保存するツールとしてい くつか plugin が提供されてます. • mikutter-sqlite[2] • mikutter-mongodb[3] $ git clone \ git://github.com/katsyoshi/mikutter-fluentd.git $ cd mikutter-fluentd $ cp mikutter-fluentd.rb ~/.mikutter/plugin/. $ gem install fluent-logger • mikutter-fluentd[4] mikutter-sqlite は,SQLite3 で mikutter で起き るイベント (update, mention 等) を保存します. この plugin の特徴として,保存されたイベントは これで mikutter 側の設定は終了です. mikutter に反映させることができます. mikutter-mongodb は,mikutte-sqlite の mon- fluentd のインストールは,gem でインストール godb クローンとしての開発をはじめました.保存 しますが,fluent-logger-ruby のインストール時に 対象として,home の timeline,mention などです. 同時にインストールされてると思います.されて 保存されたイベントは mikutter に反映させること ない場合は,gem コマンドでインストールします. ができない.めんどうくさくなったので開発がと つぎに,mongodb のインストールと fluent-plugin- まってる.ヽ (’ω’) ノ三ヽ (’ω’) ノもうしわけねぇ mongo のインストールを行います.こちらも同様 もうしわけねぇ に gem コマンドでインストールします. 最近話題のロギングツールの fluetd[5] を利用し, $ gem install fluentd # インストールされてない場 開発しているのが mikutter-fluentd です.くわし 合 くは 3 章で説明します. $ gem install fluent-plugin-mongo mongo bson_ext つぎに fluentd 側の設定を行ないます.fluentd の設定としては,mikutter から投げられたデータ を各サービスに投げるだけです.設定が終ったら, ま ず ,MongoDB に 保 存 し た デ ー タ を 取 出 て fluentd を起動し,mikutter を立ちあげるとロギ ングが開始します.fluentd の起動は,-c オプショ ンで設定ファイルの指定,-p オプションで plugin ディレクトリを指定します.gem 化されていない fluent-plugin がある場合は-p オプションを指定し ます. JSON 形式のテキストファイルとして保存します. 保存したテキストファイルのデータを読み込み, jqplot で表示させると以下の図のようになります. <source> type forward </source> <match mikutter.timeline> type mongo database fluentd_mikutter collection timeline buffer_chunk_limit 3m </match> <match mikutter.favorited> type mongo database fluentd_mikutter collection favorite buffer_chunk_limit 3m </match> 図1 日毎のツイート数 ここでは,jqplot の BarRederer.js を利用して表 示させています.ほかにも線グラフなど様々なプラ グインが提供されています. 5 おわり みくったーを使って,twitter のログをとり,そ $ fluentd --setup ~/.fluent.d # fluentd の初期 のログを可視化することを行いました.mikutter- 化 fluentd を利用することで簡単にログを残すことが $ emacs ~/.fluent.d/fluent.conf # 前出の設定フ でき,更にそのログから日々のツイート数などを見 ァイルの編集 ることができました.みなさんもログを残してみて $ fluentd -c ~/.fluent.d/fluent.conf \ -p ~/.fluent.d/plugin -vv & # 一行で $ cd ~/mikutter $ ruby mikutter どんなことが起きたかを可視化すると楽しいと思い ますよ. これで mikutter から fluentd に投げられて,flu- 参考文献 entd から mongodb に保存されるようになります. [1] toshi a, つぎに mongodb 保存したツイートを可視化しま mikutter, “http://mikutter.hachune.net,” Jun., 2012 しょう. [2] toshi a, mikutter-sqlite, “https://github.com/toshia/mikutter-sqlite,” 4 可視化しよう Jun., 2012 本章では,fluentd で集めたツイートを可視化し [3] katsyoshi, mikutter-mongodb, てみようと思います.可視化する対象としては,ツ “https://github.com/katsyoshi/mikutter- イート数とします.可視化方法としてグラフを用い mongodb,” Jun., 2012 ます.グラフ化するために利用するライブラリと [4] katsyoshi, mikutter-fluentd, して,jquery プラグインの jqplot と Google Chart “https://github.com/katsyoshi/mikutter- API があります.どちらも利用しやすいグラフ化 fluentd,”Jun., 2012 ツールです.今回はとりあえず jqplot での作成方 [5] Treasure 法について解説します. Data Inc., “http://fluentd.org,” Jun., 2012 fluentd, !" #$%!" & &'()(*+, -./0(0 '123 4256(067 89 65:23 (;<&=>)3 ?@&ABCBDE*+, FGDH4)I*J06(0 6 &KL MNO+, , P Q 6 RST06(0UVW?56X(*+, Y3)J3> d4)e3_` 6Z[>)(*+&7\] f PgQ ! t67P Q abc Q&dh>)(*+, fi j&klmn>)(2E7o y ^4)_` pq ^4)_` rst uv w x>2 z{|}pqO~€n>)(*+, • ² # * ( #( ‚‚ 0 ( (* / 0- • D?Y0 1?/6Œ3P / „…O Q 65(0V 10 †+?‡O+,ˆ •1?Ž•{ •‘ ’“”(V VD?{2(O+&KL />YE”(6/T ³>*´R, ƒ „… O pq C6R‰Š ‹ DE*+, •–O, —‡˜™, š™› œ• ‡ t žE*IŸ0, ¡¢ +,/> £¤ ¥) y ®I) J¯*E " #$ ! % d4)(*+, 6(0 5B¦lI2§¨© •°U • £± Y0 ª()«¬ -0V O+, •3/6&O°*+› ! &' ( ) !! &)* ( +! !, d(* - ./ " #$ ( +! ! &' ( .# &' % ( &' ( )* ) !! &)* ( ) ," .+ ! ! / / & ) //O7 £±O§¨© 6 ‹1)(*+, 4)(2C0&µ¶O+&7 6 /> ¸Lk¹9 I 3)Vºl&»¼n>2½ 7 }Y0 I)(?5BO+, ¾FY0 $% §¨© 0O+·7£± Y0 ? ! % " #$ " #$ +?V z V•1)I*(*+·, ¿O+› ! &' ) !! &)* ( +! ! &' .# * % ( 4)(*+·, ) !! &)* ( +! !, .+ ! - ./ ! / / & ) (7/ À `E, ºlÁ HE*IŸ0, VATR fi j&ªÃn>)()7 2!" 2 2§¨© +?ÄÅÆÇ3 2 24 ' 2$%24 ' / ºl+?È > d0/6 ÉÊI2 I*+, 9°*´R2 ®I) ( 1 Y0 yg *6Ë)5 EÌÍ •3/6&ÎÏ? 5$6 5B+?/6&ÎÏ?Y0 6(0fi j&ªÃn>)(*+,+?67ºlV E*+, / P Q - '00 Ð¼Ñ ( 0( 7 0 0 0 0 OÒÓn>)(*+, Ô (7*2Õ h5B /AB Þß V (P Q O+·, /)J3>65Öh ( % i× Ø Ù Ú))I*4)tÛ OÜ(){Y06(0Ý{, 8 ( 6(0V &àán>)(? Od4){*IŸ0, vVd4)(*+, >B d4)•(2o j&£±› 9 :;: ( ' :< :;: = > ( > ( ' ( ? 9âãL äÊ+?2Ë âãi× @ "8 5 @ + ? " % 8 ? - #A7A7* # ? (( - * !( 9É1æ42çè Ü3Y ?( ( 6CD 26CD 2 ( `Ê®åØ Ù 6+? ! #' "B 29+( /2* ( / /0 E*I2,J#é:ê> !# ( ! &D E*+·, /> ëì R OIŸ05, P \ Vð> (ñ ò Q 6šì &D*E í/>Všì6 n>)( ( O/ yg ÖîP Q ëÅ6Ö4)ï(5 «36 &¹9I 3 E *+ó ô*E7 P Q àá+?÷©øvù }°ÎI jvù Œõ© P ö>) jPgQ ! QÛú© !# 0O+·7 /> YE vù 5ô % i× (1 j Œõ© P üý+?/6&O°7°AR6 þAÿ1?/6&ÎÏ?Y0 (h1O+, ûªI)(*+, ! yg O+, VÚAƒ&E7 E*I2, ÿÿI){? % i× >?Ø Ù &•12 B V•(){*IŸ0, % i× &þAÉ1)(? % A7A7 O+,/> ÿÿI -°*+, " # 9,0 0 0 = > ( > " % 8 ( - #2 ( 24 A7A7* " "" 22 ( ( # * 2Ë J JI*(, (O+·7n+& , $$ À %EE d4){*IŸ0, %EE `ÊO°? y tOI5V÷©øP RO+,‚ 07 ‚‚ 9 ( 9 ( § V R)D? 54)é\ D? ‚‚ B·, F F B 0 # --B (4 ( ;; ?* + - ( -'' (-G '' G '' G + ?( (-'' (-'' (-'' (-'' ?( G ? # ? ( *G = # (-''?H#*4 2 ( ( # ? ( *G #; ? ? #= ? ? ''= ( - ''( FF 2( ''( BB G E" >3 >G00 ( ( ( # # ( 4 / ( ( # + ''( / ( &2 FF - **G FF 2) 2 FF % 8 ( *G # **G '' I( - 24 2A7A72*G -o jOv '' G t I)?é J * FF #* FF '' G G / '' BI542,//*Oµ¶ EE ‰Oo \- Ù (6 7: ©+? I , ‰ '1?6 -o jO † &t 9 I2 O v t I ÷E*I2, I)(? OIŸ05óé'1 % V # K FG 3 S4)\ª - L 8 8 n>7 •t& €O°*+, % 8 ( D67 •1?6 4)*+&7/EG Ö% V0•()I*42 RO+, 6C 6C D #( ( * '' 8 :B 6C #* S5BŽU (, " 8 ( M N 8 O L O F: ( ( 2 2# L 8 D ( < 8 O O 8 ( ( # 5 * #3 :B ( ( DC C D * BB" - 8 % A7A7* : 542/6 I) :: DC D ( ( DC C D '' 6CD :B 6C &% ) ( ( DC C D I" DC D I #* BB 2 D I BB 26C :: ( ( ! ! ! 2 2 ã ø ( ( "" H F P P '' &% "- 8 "- 8 ) :B 6C #* 2 2 ? ( H ( ( ,2 ( ,,2 " " ( - 8 F: ( 26 - '2 P J#éà 6n43E6•1*+·,K OV - L &ÎÏ?{2(O+·,/EG2* 2, 8 D ( (: H £¤O B (5Vð>*´R, +?6 % `Ê# $M `Ê < ±E (: HO OI2, & V0(( ! %9&Q I (6,i v&"3 E+#? Ov OHE*I2,/>AGR6Ü1?5B'°, t –¢ O$%I)3Sn(, ô*E- I)(?RO+é • ' % A7A7 ' % A7A7 % 8 ( /R ÍF f ( ¡O+, '()() i× 6`ÊO°>[ ‰R Ö%O•5>)()V(( O+, A7A7 ² ÿÿ ( \]I)( ( O)F2*+Odª+?/6 ,-I*+,. P *+Odª+?6ÿÿ /4æB>? />B o I w&D? (3È Ã•I (ÿÿ n>? w&DE7 O0ÃI)3Sn(, - '00 j Ð¼Ñ ( 0( 7 0 % % ( ÒÓn>)(* +, 1‘•1?Š&I*+,C R:% 6 C8 ˆ V M ? T U ? ƒ d4) v ÎÏ?Y0 I){? $6S d4) v +?VïI7 V((OIŸ0, D6&° < 25Bd4)°)7Ð3 Ö4)(2 ¿ 4&/ ?6(0 RS57X8 ( 5 E 0 46(Y0 AŸ46 Š&+? ?Y0 »¼ / „… çè ¥)B4dª *275 CDçO % % P Q O1R KLI2ƒO ÀL*2D? B-55 •()( Q %9 ((1‰7"(Y· %9, \ YE?3 ? ( w&DE*+, 8E H? G …&O°)I*0 O…È MöI2C0&(( ªÃI65 S42EI* @ „…• VDE*+ 0 ( F+?/6&O°*+, I7 F+?/6V 5 ƒO Q P $ 5BP Q @A g jI)3Sn(, ' - '00 ( 0( 7 0 0 0 % % ( ' - '00 ( 0( 7 0 % % />B P (6 O, +,o j X(ô(2=5B>–>–•1? ?5 O-ÎÏ?5q5B 65zRO{2(O+·,1‘6 5 Oë;@<&554)(? &£± Q ÍF&I*+, 65 9: KL Y0 P (6 O, i vHI v N5O+, YEJ z{7‰ n>*+, Y0 9H&-h> PQ @ nR - = JROk¹97 Oºl&STn>?Y0 ÍP, 'U V WX ‰ Jd(3Sn(, E*I2, たのしい mikutter install @Phenomer 2012-07-10 はじめに 1 一部界隈で何故か導入が難しいと思われているらしい mikutter。本稿ではその導入方法 等を複数解説し、「難しい」というイメージの払拭を試みる。 Arch Linux で最新の mikutter を使おう 2 2.1 概要 最近流行りの Linux ディストリビューション、Arch Linux1 に mikutter を導入する手順 を紹介する。 2.2 AUR の (不) 安定版のパッケージを利用する Arch Linux には既に Arch User Repository(AUR) に mikutter のパッケージが存在する。 AUR は、yaourt2 を用いると簡単に利用できる。残念ながら yaourt は公式リポジトリには存 在しない。そこで、yaourt の配布リポジトリである repo.archlinux.fr を/etc/pacman.conf に追加し、yaourt を利用可能にする。 ✓ ✏ ✒ ✑ ✓ ✏ ✒ ✑ [archlinuxfr] Server = http://repo.archlinux.fr/$arch yaourt のインストールは、いつも通り pacman を用いる。 miku@negi% sudo pacman -Sy miku@negi% sudo pacman -S yaourt 後は mikutter を AUR からビルドしインストールして、mikutter を実行するだけであ る。build の際にウィザード形式でいろいろ聞かれるが、それとなく答えておけば問題な い。自動的に ruby 等の依存関係も yaourt が解決してくれる。 1 Arch Linux http://www.archlinux.org/ 現在は mikutter の開発も Arch Linux で行われている。パッ ケージの更新が非常に早く、ローリングリリースが行われている点が特徴であり、ユーザの環境は常に最先端 に保たれる。 2 pacman の フ ロ ン ト エ ン ド。 AUR を 用 い た パッケ ー ジ の ビ ル ド 等 も 一 括 し て 行 え る 。 http://archlinux.fr/yaourt-en 1 ✓ ✏ miku@negi% yaourt -S mikutter ... ==> Edit PKGBUILD ? [Y/n] ("A" to abort) ==> n ... ==> Continue building mikutter ? [Y/n] ==> y miku@negi% mikutter ✒ 2.3 ✑ 開発リポジトリを利用する mikutter の最新機能を使いたい、またプラグイン開発等を行いたい場合など、最新の mikutter を使いたくなることが多々あると思われる。(mikutter の trunk 追い掛けユーザ の割合はかなり高いというウワサもあったりなかったり) mikutter の開発は、(一応)Subversion にて行われている。3 そのため、リポジトリから 最新のリビジョンを取得する場合は、subversion が必要になる。また、subversion にてソー スを入手する場合、依存関係の解決は行われないため、mikutter に必要なライブラリのイ ンストールも行う。4 ✓ ✏ ✒ ✑ ✓ ✏ ✒ ✑ ✓ ✏ ✒ ✑ miku@negi% sudo pacman -S subversion ruby-gtk2 libnotify subversion をインストールできれば後は簡単。mikutter のリポジトリをチェックアウト するだけである。 miku@negi% sudo pacman -S subversion miku@negi% svn co svn://mikutter.hachune.net/mikutter/trunk mikutter miku@negi% ruby mikutter/mikutter.rb リポジトリの更新は、svn の update コマンドを用いる。 miku@negi% cd mikutter && svn up 2.4 開発バージョンのパッケージを作って利用する Arch Linux で mikutter を動かしているホストが何台もある場合、いちいち手動で subversion で更新するのは面倒な上に、mikutter.hachune.net への負荷も大きくなる。そこ で、mikutter の trunk 版パッケージを作成しプライベートリポジトリに登録することで、 それを自宅ネットワーク内のホストにて共有可能にする。 筆者は mikutter 開発者の toshi_a 氏に「subversion はオワコン、git 使ってるよ」と言われふぇぇした 記憶がある。 4 ruby-gtk2 と libnotify の二つをインストールすれば他の依存関係は自動的に解決される。 3 2 2.4.1 Web サーバの作成 Web サーバの構築は、ruby が入っているのであれば webrick が最も手っ取り早い。以 下は、/var/repo を http://10.39.39.39:3939/ として公開する Web サーバのワンライナー である。5 ✓ ✏ ✒ ✑ miku@negi% sudo mkdir /var/repo miku@negi% sudo chown miku:miku /var/repo miku@negi% ruby -r webrick -e "WEBrick::HTTPServer.new(:Port=>3939, :DocumentRoot=>’/var/repo’).tap{|s| trap(:INT){s.stop}}.start" NGINX 等の Web サーバを利用したほうがよい場合が多いが、ここでは解説の単純さを 優先する。 2.4.2 mikutter-svn パッケージの作成 今回は mikutter の subversion パッケージを作成するため、AUR に公開されている mikutter の PKGBUILD はそのまま利用できない。そこで新たに mikutter-svn の PKGBUILD スクリプトを作成する。作成した PKGBUILD スクリプトは以下のようになった。 :DocumentRoot=>Dir.pwd とすればカレントディレクトリを公開する簡易 HTTP サーバとして使える。 shell の alias に登録しておくと何かと便利。 5 3 ✓ # Maintainer: Phenomer <[email protected]> pkgname=mikutter-svn pkgver=20120710 pkgrel=1 pkgdesc="a moest twitter client" arch=(’i686’ ’x86_64’) url="http://mikutter.hachune.net/" license=(’GPL v3’) depends=(’ruby’ ’ruby-gtk2’ ’ruby-cairo’) makedepends=(’subversion’) optdepends=(’libnotify’) conflicts=(’mikutter’) provides=(’mikutter’) install= _svntrunk=svn://mikutter.hachune.net/mikutter/trunk _svnmod=mikutter ✏ build() { cd "${srcdir}" if [ -d "${_svnmod}/.svn" ]; then cd "${_svnmod}" && svn up else svn co "${_svntrunk}" "${_svnmod}" fi } package() { mkdir -p "$pkgdir/usr/bin" mkdir -p "${pkgdir}/usr/lib" cp -r "${srcdir}/${_svnmod}" "${pkgdir}/usr/lib/mikutter" rm -rf "${pkgdir}/usr/lib/mikutter/.svn" cat <<EOF > "$pkgdir/usr/bin/mikutter" #!/bin/sh ruby /usr/lib/mikutter/mikutter.rb $0 EOF chmod a+x "$pkgdir/usr/bin/mikutter" } ✒ ✑ ✓ ✏ ✒ ✑ これを用いて makepkg を行えば、最新の mikutter-svn パッケージを作成できる。ビル ド前には、subversion での利用時同様に依存関係を事前に解決しておく。 miku@negi% sudo pacman -S subversion ruby-gtk2 libnotify miku@negi% ls PKGBUILD miku@negi% makepkg ... ==> Finished making: mikutter-svn 811-1 (2012 年 7 月 9 日 月曜日 02:52:48 JST) 2.4.3 プライベートリポジトリの作成とパッケージの追加 プライベートリポジトリの作成とパッケージ追加は、repo-add コマンドを用いて簡単 に行うことができる。このコマンドにより、自動的にパッケージのデータベースが作成さ れ、クライアントの pacman がリポジトリの状態を参照可能になる。 4 ✓ ✏ ✒ ✑ miku@negi% cp mikutter-svn-811-1-x86_64.pkg.tar.xz /var/repo miku@negi% cd /var/repo miku@negi% repo-add mikutter.db.tar.xz \ > mikutter-svn-811-1-x86_64.pkg.tar.xz ==> Adding package ’mikutter-svn-811-1-x86_64.pkg.tar.xz’ -> Computing checksums... -> Creating ’desc’ db entry... -> Creating ’depends’ db entry... ==> Creating updated database file ’mikutter.db.tar.xz’ 2.4.4 リポジトリを利用 yaourt を導入した際と同様に、/etc/pacman.conf に今回作成したリポジトリを追加する。 ✓ ✏ ✒ ✑ ✓ ✏ ✒ ✑ [mikutter] Server = http://10.39.39.100:3939/ これで pacman にて mikutter-svn を利用可能になった。 miku@negi% pacman -Sy miku@negi% pacman -Si mikutter-svn Repository : mikutter Name : mikutter-svn Version : 811-1 URL : http://mikutter.hachune.net/ Licenses : GPL v3 Groups : None Provides : mikutter Depends On : ruby ruby-gtk2 ruby-cairo Optional Deps : libnotify Conflicts With : mikutter Replaces : None Download Size : 1539.11 KiB Installed Size : 8188.00 KiB Packager : Unknown Packager Architecture : x86_64 Build Date : 2012 年 07 月 09 日 02 時 52 分 44 秒 MD5 Sum : 1813728ee6e9b1c34731854c371477cc SHA256 Sum : 4d9c49b4c1a54f17b1407614b8b6ae62 10e56a20c2143c7d76b6753c8107b252 Signatures : None Description : a moest twitter client 2.5 ソースから野良ビルド mikutter が最新でも、ruby や ruby-gtk2 が古くては面白くない。6 そこで、ruby と rubygtk2 をソースからビルドする手順も紹介しておく。これは Arch Linux だけではなく Debian 等でも、パッケージ名を読み替えつつ同様の手順を踏むことで行える。 6 Arch Linux では最新の安定版が利用できることが多い。 5 2.5.1 ruby のビルド 以下が ruby の trunk7 のビルド手順であるが、早速失敗する。 ✓ miku@negi% miku@negi% miku@negi% miku@negi% miku@negi% ... executable ✒ svn co http://svn.ruby-lang.org/repos/ruby/trunk ruby cd ruby autoconf ./configure --prefix=/usr/ruby --enable-shared make host ruby is required. use --with-baseruby option. ✏ ✑ 「trunk の ruby をビルドする際は、ruby が必要」らしい。仕方がないので ruby をイン ストールしやり直す。 ✓ ✏ ✒ ✑ ✓ ✏ ✒ ✑ miku@negi% sudo pacman -S ruby miku@negi% ./configure --prefix=/usr/ruby --enable-shared miku@negi% make ... make: exec(bison) failed (No such file or directory) 今度は bison が実行できないと怒られる。これまた仕方がないのでインストールする。 miku@negi% sudo pacman -S bison miku@negi% make && sudo make install miku@negi% /usr/miku/bin/ruby -v ruby 2.0.0dev (2012-07-08 trunk 36337) [x86_64-linux] 環境によっては、ruby の拡張ライブラリの利用に必要なライブラリやヘッダファイル が不足している場合がある。今回は、openssl と zlib が必須となるが、その他に gdbm や libyaml、readline、ncursesw、tk 等も必要に応じて導入する。 2.5.2 ruby-gtk2 のビルド ruby-gtk2 のビルドの前に、pkg-config と gtk2 の導入が必要である。8 ✓ ✏ ✒ ✑ ✓ ✏ ✒ ✑ miku@negi% pacman -S pkg-config gtk2 また、ruby の pkg-config ライブラリも必要になる。これは rubygems を用いてインス トールする。9 miku@negi% /usr/miku/bin/gem install pkg-config ruby-gtk2 のリポジトリ10 からチェックアウトし、コンフィグを実行する。 Ruby - レポジトリガイドhttp://www.ruby-lang.org/ja/documentation/repository-guide Arch Linux なら gtk2、Debian 系なら libgtk2.0-dev である。 9 pkg-config のリポジトリ (https://github.com/rcairo/pkg-config/) からソースを入手しインストールを 試みたが失敗するようなので今回は見送った。 10 SourceForge.net - Ruby-GNOME2 http://sourceforge.net/scm/?type=svn&group_id=53614 7 8 6 ✓ ✏ ✒ ✑ ✓ ✏ ✒ ✑ ✓ ✏ miku@negi% svn co \ https://ruby-gnome2.svn.sourceforge.net/svnroot/ruby-gnome2/ ruby-gnome2/trunk ruby-gnome2 miku@negi% cd ruby-gnome2 miku@negi% /usr/miku/bin/ruby extconf.rb ... ----Target libraries: glib2, gio2, gdk_pixbuf2, pango, atk, gtk2 Ignored libraries: gstreamer, gtksourceview2, rsvg2, poppler, goocanvas, vte ----Done. いくつかのパッケージの config に失敗するが、ruby-gtk2 としての動作に支障は無いため 今回は無視して make。 miku@negi% make ... エラー: expected expression before ’/’ token が、いきなりエラー多発。なにやら C++ライクなコメント (//) が全て不正扱いされエ ラーになっている模様。 % % % % % % % % % % % % vi vi vi vi vi vi vi vi vi vi vi vi ✒ glib2/ext/glib2/rbgobj_valuetypes.c glib2/ext/glib2/rbgobj_param.c glib2/ext/glib2/rbgobj_type.c glib2/ext/glib2/rbglib_keyfile.c glib2/ext/glib2/glib-enum-types.c glib2/ext/glib2/rbgobj_signal.c glib2/ext/glib2/rbgobj_object.c gdk_pixbuf2/ext/gdk_pixbuf2/rbgdk-pixdata.c gdk_pixbuf2/ext/gdk_pixbuf2/rbgdk-pixbuf.c gtk2/ext/gtk2/rbgtkaccellabel.c gtk2/ext/gtk2/rbgtkwidget.c gtk2/ext/gtk2/rbgtkcontainer.c その他にも glib.h のインクルードのエラー等、細かな修正が必要な箇所があった。 ✑ ✓ ✏ ✒ ✑ ✓ ✏ ✒ ✑ % vi glib2/ext/glib2/rbglib_win32.c /* #include <glib/gwin32.h> */ #include<glib.h> % vi glib2/ext/glib2/rbglib_int64.c /* #include <glib/gtypes.h>*/ #include <glib.h> 何十回と make を繰り返し、ようやく全てのビルドが完了した。 miku@negi% sudo make install ----SUCCEEDED: glib2 gio2 gdk_pixbuf2 pango atk gtk2 FAILED: NONE ----Done. 2.5.3 rcairo のビルド 最後にもうひとつ、rcairo が必要である。 7 ✓ miku@negi% miku@negi% miku@negi% miku@negi% ✒ git clone https://github.com/rcairo/rcairo cd rcairo /usr/miku/bin/ruby extconf.rb make && sudo make install これで、mikutter の動作に必要なライブラリは全て揃った。 2.5.4 ✏ ✑ 動作確認 今回作成した環境では、mikutter は AOuth 認証画面まで正しく行うことができたもの の、残念ながら gdk と rcairo のエラーにより、タイムラインの表示を行うことができな かった。ruby の trunk は比較的普通に利用できるが、ruby-gtk2 の trunk を利用するのは、 gtk2 との関係もあるためかなかなか難しいようだ。11 LTSP を用いた mikutter 環境展開システムの構築 3 3.1 概要 大学の研究室等で mikutter を広めたい、しかし学生は皆 Windows ユーザー。そんな状 況を打破するべく、LTSP12 を用いた mikutter 環境展開システムの構築方法を紹介する。 3.2 クライアント環境 PXE boot に対応したネットワークインターフェースを持ち、Debian wheezy(i386)13 が 正常に動作するコンピュータを想定する。BIOS のブート順の設定にて、PXEboot(ネッ トワークブート) を最優先にしておく必要がある。 3.3 サーバ環境 物理ネットワークインターフェースが 2 ポート利用できるサーバを準備する。今回は、 ネットワークインターフェース (RTL8169、いわゆる蟹) が 3 ポート存在するはつねサー バを利用し、その上に Xen DOMU を作成し Debian wheezy(x86_64) をインストールし た。勿論仮想化を行わず直接 Debian をインストールしてもよい。また、サーバは Debian に限らず Ubuntu 等でも同様の手順にて構築できる。14 筆者は ruby と mikutter は Subversion にて取得したものを用い、ruby-gtk2 と rcairo は rubygems に てインストールしたものを用いている。ruby-gtk2 と rcairo の gem パッケージ (gtk2, cairo) はディストリ ビューションに依存しないため、常に最新安定版を利用できる。 12 LTSP(Linux Terminal Server Project) とは、Linux を用いた容易に利用できるシンクライアントシス テムのサポートを目指したプロジェクトである。 13 Debian http://www.debian.org/ 14 Ubuntu の 場 合 、イ ン ス ト ー ラ の 時 点 で LTSP の 設 定 を 行 う こ と が 可 能 で あ る 。 https://help.ubuntu.com/community/UbuntuLTSP/LTSPQuickInstall 11 8 ✓ ✏ ✒ ✑ name="mikan" vcpus=2 memory=1024 vif=[’mac=00:16:3e:39:13:30,bridge=bridge0’, ’mac=00:16:3e:39:13:31,bridge=bridge1’] disk=[’phy:/dev/mapper/hvg0-Mikan,sda,w’] kernel="/home/miku/vm/bzImage" root=’/dev/xvda ro’ ネットワークインターフェースは、eth0 が外向け、eth1 が内部向け (クライアント側) になる。また、eth0 には 10.39.39.100/24、eth1 には 192.168.67.1/24 がそれぞれ割り当て られる。 3.4 サーバ環境構築 LTSP サーバ上にて、クライアントが mikutter を起動できる状態になるまでの設定を 行う。 3.4.1 ネットワークの設定 初めに、今回の環境に合わせネットワークインターフェースの設定を行う。Debian で は/etc/network/interfaces にネットワーク設定を記入する。 ✓ ✏ auto lo eth0 eth1 iface lo inet loopback iface eth0 inet static address 10.39.39.102 netmask 255.255.255.0 gateway 10.39.39.1 dns-domain k.hachune.net dns-nameservers 10.39.39.1 iface eth1 inet static address 192.168.67.1 netmask 255.255.255.0 ✒ ✑ networking の restart は deprecated となっているので、一旦 reboot を行う。また、iptables 等の設定は ltsp-server-standalone のインストール時に既に行われる。 3.5 LTSP パッケージの導入 次に LTSP サーバをインストールする。この際、クライアントが利用するデスクトップ 環境も同時にインストールを行う。デフォルトは gnome であるが、今回は軽量さを重視し て awesome を利用する。 ✓ ✏ ✒ ✑ miku@mikan% sudo aptitude install ltsp-server-standalone awesome 9 3.5.1 dhcpd の設定 クライアントは PXE boot と NFS root で起動される。まず、/etc/ltsp/dhcpd.conf を 編集する。/etc/dhcp/dhcpd.conf ではないので注意が必要である。 ✓ ✏ authoritative; subnet 192.168.67.0 netmask 255.255.255.0 { range 192.168.67.20 192.168.67.250; option domain-name "ltsp.k.hachune.net"; option domain-name-servers 192.168.67.1; option broadcast-address 192.168.67.255; option routers 192.168.67.1; next-server 192.168.67.1; # get-lease-hostnames true; option subnet-mask 255.255.255.0; option root-path "/opt/ltsp/i386"; if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" { filename "/ltsp/i386/pxelinux.0"; } else { filename "/ltsp/i386/nbi.img"; } } ✒ ✑ ✓ ✏ ✒ ✑ ✓ ✏ ✒ ✑ また、/etc/default/isc-dhcp-server の設定も必要である。ここでは、DHCPD_CONF と INTERFACES の行を環境に合わせ修正する。 DHCPD_CONF=/etc/ltsp/dhcpd.conf INTERFACES="eth1" 設定が完了したら、dhcpd の再起動を行う。 miku@mikan% sudo service isc-dhcp-server restart 3.5.2 NFS の設定 次に、NFS の設定を行う。今回は/opt/ltsp をクライアントのルートディレクトリとし て 192.168.67/24 のネットワークに公開するため、/etc/exports に以下の行を追加する。 ✓ ✏ ✒ ✑ ✓ ✏ ✒ ✑ /opt/ltsp 192.168.67.0/24(ro,no_root_squash,async,no_subtree_check) 設定が完了したら、NFS 関連サービスを再起動する。 miku@mikan% sudo service nfs-common restart miku@mikan% sudo service nfs-kernel-server restart 3.5.3 tftpd の設定 クライアントの起動に必要なカーネルや初期イメージは、dhcp により指定され tftp に より転送される。tftp の設定は、LTSP インストール時に既に行われている為必要ないが、 もし修正が必要になった場合は/etc/defaults/tftpd-hpa を参照する。 10 3.5.4 クライアントブート環境の作成 /opt/ltsp 以下に展開される、クライアントブート環境を作成する。ltsp-build-client コ マンドを用いると、指定したアーキテクチャのイメージを自動的に作成できる。クライア ントのアーキテクチャに x86_64 を指定することもできるが、ここでは設定ファイルにデ フォルトで記入されている i386 を用いる。 ✓ ✏ ✒ ✑ miku@mikan% sudo ltsp-build-client --arch=i386 ディストリビューションを一から構築する為かなり時間がかかる場合があるが、じっくり 待つ。 3.5.5 クライアントの起動 クライアント側となる PC の PXE boot 機能を BIOS にて有効にし、eth1 側のネット ワークに接続、起動する。PXE boot が一番最初になるよう Boot 順に注意する。 3.5.6 デスクトップ環境と mikutter の設定 クライアント環境 (/opt/ltsp 以下) は、クライアントを動作させるための限られた用途 に用いられる。一見クライアント環境はクライアント上で動いているように見えるが、実 体はサーバ上にあり、サーバのリソースを各クライアントにて共有する。そのため、クラ イアントでユーザが利用するソフトウェアパッケージはサーバ側に導入する。 mikutter を利用するには、サーバ側に最低限以下のパッケージを導入する必要がある。 • ruby • ruby-gtk2 • libnotify-bin また、以下のパッケージを導入することでより華麗に mikutter を利用できる。 • 日本語フォント (fonts-vlgothic 等) • 日本語インプットメソッド (ibus-mozc 等) • subversion (trunk 追い掛け用) • 仮想端末 (sakura 等) その他にも、いくつかの設定が必要になるかもしれない。 • locales の再設定 • tzdata の再設定 11 4 あとがき 本稿ではひたすらに mikutter を利用できる環境の構築について解説を行った。本稿作成 の作業を元に、近いうちに mikutter 用の Arch リポジトリを hachune.net にて公開したい と考えている。しかし、諸事情により hachune.net のサーバをリプレースが必要で、少々 時間が掛かりそうだ。 5 参考文献 • PKGBUILD - ArchWiki https://wiki.archlinux.org/index.php/PKGBUILD • VCS PKGBUILD Guidelines - ArchWiki https://wiki.archlinux.org/index.php/VCS_PKGBUILD_Guidelines • AUR(en) - mikutter http://aur.archlinux.org/packages.php?ID=47755 • LTSP Manual https://sourceforge.net/projects/ltsp/files/Docs-Admin-Guide/LTSPManual.pdf 12 #WRVKLBDࠉࠉࠉ 1 ֱֽפェỺս׆ְדּפו׆צ mikutterֱֽ݅֡פղյ֎ծՓՠոԧոՕ֓ղյ᷋ണ֚֡݅ս՚Ԩ׀؉זդᘈՠ֛ տՓՓսնԧܾ֑⩺֛֞չ՞յ֑⬆ֈ֛տկՓծՓ֎֢չն՜֚սնը՛ԧ۠పվェỺڂն Ցղծ֙ৣוײֺזդ֛յՓչՓ⇔սᵪḙնչ՚չ՚⨿ճՠմ֘ՓェỺḒսᠷ┣֓ב؉ ֡Փ՞ճ՚⌓ۡզծՓշᆪՓ֍ըԨ 1.1 mikutter▬ܼսᠷ┣ mikutterպվࢶỾ٨սㅅզᠷ┣՛Ց֚շ⩺֛֞յՓ֍ը՛ԧェỺḒսㅅզᠷ┣֑Փ՞ճ՚ Ց֙֍ըԨ 1.1.1 Ruby׀؉ Rubyս☇Փշբ֜սցշճշզյԧֱפպⴟպ׀؉ࢱ֡זզյໜ⥽ն՜֚բ շ՛Ꭵա֛֘֍ըԨզ՚զլս׀؉ז՛ݷը֚ףֱ՛Ցղծ֘ԧᄙᯤ؉זզյՙ ՚չՠ֛տՓՠ֍ժ֢Ԩmikutterնլ֛֡ը֚սվᯝ⚍նզ֖ՕԨլբնGUIֱֽפ վ≚⌃նվՑ֙֍ը՛Ruby׀؉֡ᐖݶզյՓ֍ըԨALT+X֡፥զյ֎յ՞կդ ՓԨ ս֗Օպԧד׆؉ם׆؉սը՟٫պֱב؉ࢱוḡ㇁ս֗Օչ֑ս՛जյ՜֍ըԨբբ պRuby׀؉ࢱ֡זը֚շԧլսໜ⥽⌧ᙸ՛ְּ֯דנְדպ⦓₄դ֛֍ըԨ ≚ਚչֱֽפվԧmikutter֡࣋ⱈযժթշ֑բբպקס׀զյፒK֡ש፥ժտפ ו׆ֱֱֽ֡؉ն՜յզ֍Փ֍ըԨ౧ૐչᠷ┣նը՛ԧῖղյՓ֚շmikutterս ェỺচᴠ՛٫՛֚բշվギⷹՓᯝՓնըԨ 1.1.2 ׯֽאםה؉ז mikutterֱֽ֡פᘈՓյ٢ṇ֗՞Ց֚սվԧmikutter▬ּܼ֡ײׄאդժ֚շՓ ՕբշնըԨբսᖐԧֵ؉վ׀؉պजդ֛թԧᢜపⱈযᖐպֽםઽ֡զ֗Օշ զ֍ըԨբսᎥযվԧֱֽ֡פェỺը֚շ՜պվ⸶㏟պչ֚սնԧ۶٬ս֗Օչ׀ זնmikutter֡ⱈযզ֍զ֖Օ WZG^RNPZYYJWWGIJGZL −−d ebug ַ֡״ׄפճՠյⱈযը֚շԧmikutterվׯֽאםה؉זնⱈযզ֍ըԨ ؉חպվඋ⻪սא؉ׅ՛⦓₄դ֛յՓ֚շᆪՓ֍ըԨբ֛վ֯׀պۧⶇ֍֛յՓ֚ ໘ս֡זאւजզծᖐպजդ֛֑֚սնըԨࢽܼἃպׯֽאםה؉זնվոՕՓ ղծⷹՓ՛Ց֚ս՚֡⨿յՓ՜ծՓշᆪՓ֍ըԨ ּײׄאᖐպוּאם؉⦓֡׆₄ը֚ ᵣౠվּײׄאզծշ՜պוּאם؉⦓֡׆₄զ֍ժ֢՛ԧׯֽאםה؉זնվ լ֛֡⦓₄զ֍ըԨ noticeԦ⭲ઽ؈ֵ؉א؉⦓ׅ֡₄ printֽאםהվԧ֗՞ֽאםה֛֚֞ݝጤᦢս٢ճնըԨRubyնվ p זאչ ո՛֗՞֍֛֞ݝըԨmikutterն֑ᄙᯤբ֛֡हḒը֚բշվն՜֍ը՛ԧ mikutter▬ܼ՛ notice, warn, error շՓՕ֡זאᐖݶզյՓ֚սնԧլհ ֘֡ݝՕբշ֑ն՜֍ըԨ STYNHJሚ \FWS⭲ઽ JWWTWֵ؉ լ֛խ֛זאકսⷊ֙ԧnotice՛٢◠ἃչሚԧwarnվ⭲ઽԧerrorվֵ؉ א؉⦓ׅ֡₄ը֚ծպݝՓ֍ըԨբ֛֘ս p շսհ՛Փվԧըֈյ᠉᪘ֵ؉ जպא؉ׅ՛जդ֛֚բշԧׯֽאםה؉זնչՓշໜㅁս⦓₄՛դ֛չՓ սնԧṋၚ⋥պվज֡ࢱ֛ծ֍֍ն؉׆ը֚բշ՛ն՜֚շՓՕ᮸նըԨ٢ ᔰԧ⇁٢ცᔂ֡ᔎລऱշզյլս֍֍⦓₄զյզ֍Օսնԧᔎລऱպ൵ᐞն՜չՓַ וִּׅףպվઙ՜֍ժ֢ԨݧൿշզյԧExceptionսׂ׆ּףսֱ׆׆՛ ᩘդ֛ծઐվԧוּאם؉⦓֡׆₄զ֍ըԨݧտԧ۶٬ս׀؉׀֡ז؉ պࢱզյໜ⥽զյ֎֍զ֖ՕԨ GJLNS WFNXJJWWTWYJXY WJXHZJ"#J JWWTWJ JSI ۶٬ս֗Օչज՛ᅐ֛֚֘վթնըԨ JWWTWJ[FQNSEWJXHZJNSUTXYJWWTWYJXY KWTRJ[FQNSEUTXY KWTR`2.0:99*7D).7bHTWJUQZLNSLZNWGNSEJ[FQ KWTR`2.0:99*7D).7bHTWJUQZLNSLZNWGNSEUTXY KWTR`2.0:99*7D).7bHTWJRZNLYPDUTXYGT]WGNSEUTXYDNY KWTR`2.0:99*7D).7bHTWJFIITSFIITSWGNSEHFQQ KWTR`2.0:99*7D).7bHTWJFIITSFIITSWGNSEGQTHPNSHFQQDPJ^UWJXXDJ[JSY KWTR`2.0:99*7D).7bHTWJFIITSFIITSWGNSEJFHM KWTR`2.0:99*7D).7bHTWJFIITSFIITSWGNSEHFQQDPJ^UWJXXDJ[JSY KWTR`2.0:99*7D).7bHTWJRZNLYPDUTXYGT]WGNSEGQTHPNS\NILJYDUTXY KWTR`2.0:99*7D).7bHTWJRZNLYPDJ]YJSXNTSWGNSEHFQQ KWTR`2.0:99*7D).7bHTWJRZNLYPDJ]YJSXNTSWGNSEGQTHPNSDDYWFHP KWTRRNPZYYJWWGNSEHFQQ KWTRRNPZYYJWWGNSERFNS KWTRRNPZYYJWWGNSEGTTY KWTRRNPZYYJWWGNSE!RFNS# 1.1.3 pryպּ֚֗ײׄאᖐսַוִּׅףੜ᯾ ֍ծּ֑֓ײׄאզծᖐսՙ⫌նըԨּײׄאզծᖐպએ൵ᔂ՛ոՕՓղծߗ֡ޢ᎕զ յՓ֚՚ԧַוִּׅף՛ոս֗ՕչᲩቻպչղյՓ֚՚֡ῖ֚ᅮ⨸՛Ց֙֍ըԨբՕՓղ ծḒⷄպվݝֹ֡אםהՕսնը՛ԧᘐ⌛ו׆ד՛յ֘Twitter֡կ֘կ֘ឱզ֎ծՓᖐպ ⱈֹ֡אםהযզյզ֍Օշԧয݅՛ⷫ՞չղյզ֍Փ᧡֛պ֛ⷫ֙ڝԧքՐ֡ըં┣ ᆱ՛Ց֙֍ըԨ pryշվ irbս֗ՕչֱפնըԨgemնֱו׆؉ն՜֍ըԨ LJRNSXYFQQUW^ UW^ @BUW^RFNS# pryז׀նֱפ՛ↁհ٫՛֙֍ըԨᘬἃպվirbշઔէ֗Օպݝ֚ս նը՛ԧբբնݧտlsշ՚ࢱը֚շ @BUW^RFNS#QX XJQKRJYMTIXNSHQZIJUWN[FYJUZGQNHYTDX QTHFQXDDINWDDJ]DDKNQJDDNSDDTZYDDUW^D[JWXNTS @BUW^RFNS#F"@B "#@B @BUW^RFNS#QX XJQKRJYMTIXNSHQZIJUWN[FYJUZGQNHYTDX QTHFQXDDINWDDJ]DDKNQJDDNSDDTZYDDUW^DF[JWXNTS @BUW^RFNS# շԧunixսlsז׀ս֗Օպԧᵣౠս׀׆؉פ՚֘⨿֚൵ᔂշזא՛٢⩑ն ՜֍ըԨ֍ծcdז׀նոսַוִּׅףս׀׆؉פն׀؉֡זໜ⥽ը֚՚᎙໘ն ՜֍ըԨݧտ൵ᔂaպࢱղյ֚⺑ऱսڂպࢱղյ֎֍զ֖ՕԨ @BUW^RFNS#HIF @BUW^!&WWF^##QX *SZRJWFGQJRJYMTIXFQQ$FS^$HMZSPHTQQJHYDHTSHFYIJYJHYJFHMDHTSXJFHMDJSYW^ JFHMDXQNHJJFHMD\NYMDNSIJ]JFHMD\NYMDTGOJHYJSYWNJXKNSIKNSIDFQQKQFYDRFULWJU LWTZUDG^NSOJHYRF]RF]DG^RJRGJW$RNSRNSDG^RNSRF]RNSRF]DG^STSJ$TSJ$ UFWYNYNTSWJIZHJXQNHJDGJKTWJXTWYDG^ &WWF^RJYMTIX!!!"#""@B@B"FXXTHFYHQJFWHTQQJHYHTQQJHY HTRGNSFYNTSHTRUFHYHTRUFHYHTSHFYHTZSYH^HQJIJQJYJIJQJYJDFYIJQJYJDNK IWTUIWTUD\MNQJJFHMJFHMDNSIJ]JRUY^$JVQ$KJYHMKNQQKNSIDNSIJ]KNWXY KQFYYJSKQFYYJSKWT_JS$MFXMNSHQZIJ$NSIJ]NSXJWYNSXUJHYOTNSPJJUDNK QFXYQJSLYMRFURFUUFHPUJWRZYFYNTSUTUUWJYY^DUWNSYUWJYY^DUWNSYDH^HQJ UWTIZHYUZXMWFXXTHWJOJHYWJOJHYWJUJFYJIDHTRGNSFYNTSWJUJFYJIDUJWRZYFYNTS WJUQFHJWJ[JWXJWJ[JWXJWJ[JWXJDJFHMWNSIJ]WTYFYJWTYFYJXFRUQJXJQJHY XJQJHYXMJQQOTNSXMNKYXMZKKQJXMZKKQJXN_JXQNHJXQNHJXTWYXTWY XTWYDG^YFPJYFPJD\MNQJYTDFYTDFW^YTDXYWFSXUTXJZSNVZSNVZSXMNKY [FQZJXDFY_NUa XJQKRJYMTIXDDGNSINSLDNRUQDD QTHFQXDDINWDDJ]DDKNQJDDNSDDTZYDDUW^D @BUW^!&WWF^## շԧזאշլս׀׆؉פս൵ᔂ՛⨿֍ըԨբ֛՛mikutterշܾսジތ՛Ց֚՚ շՓՕշԧໜվmikutterվׯֽאםה؉זᖐպּײׄאը֚շԧ֑զՑ֛տּא ׄײը֚ॐպpry֡ↁհ٫ա֚֗ՕպչղյՓ֍ըԨ֍ծֱֽפ՚֘ into_debug_mode֡זאւजժտԧՓճն֑pry՛㙇Ց֛տ㙈ⱈযն՜֍ ըԨնվԧໜㅁպݝղյ֎֍զ֖ՕԨ۶٬ս֗Օչֱֽ֡פᘈՓծշզ֍ըԨ 5QZLNSHWJFYJHWFXMIT TSZUIFYJITaRJXXFLJXa RJXXFLJXJFHMITaRa STYNHJRYTDX JSI JSI JSI ٢◠ሚշզյר؉ֱֱսֱב؉ࣅו֡ਪລըֱֽ֚פպ⨿֍ ըԨໜ⥽զյ֎֍զ֖ՕԨ JWWTW`2.0:99*7D).7bHTWJUQZLNSWGNSEWJXHZJNSGQTHPNSJ[JSYD\WFUZSIJKNSJI RJYMTIEJFHMKTW!2NPZ9\NYYJW]# KWTR`2.0:99*7D).7bHTWJXJW[NHJWGNSERJYMTIDRNXXNSL KWTRMTRJYTXMNRNPZYYJWUQZLNSHWFXMWGNSEGQTHPQJ[JQXNS!YTUWJVZNWJI# KWTR`2.0:99*7D).7bHTWJUQZLNSWGNSEHFQQ ڂṃ KWTRRNPZYYJWWGNSE!RFNS# +WTRMTRJYTXMN)THZRJSYXMTGG^XHWNUYXRNPZYYJWYWZSPHTWJUQZLNSWG%QNSJ 5QZLNSJ[JSYD\WFU IJKJ[JSYD\WFUHFQQGFHP QFRGIF`aFWLXa GJLNS HFQQGFHPHFQQFWLX%UQZLNSDJ]NY WJXHZJ*]HJUYNTS"#J "#NSYTDIJGZLDRTIJJGNSINSL WFNXJJJSIbJSI @BUW^5QZLNS# ּײׄאզյוּאם؉׆՛⦓₄դ֛֍զծԨ٢⥽Ὁպֵ؉սబ՛जյՓ֍ ը՛ԧ٢ܼܾ՛ሊՓ֢նզ֖Օ՚Ԩբսᖐԧ٢ṇ٬֡⨿֚շPryופפ՛ↁհ٫ ՛ղյ֍ըռԨհ֖ղշ៥ຟ֡⨿յ֎֍զ֖ՕԨ @BUW^5QZLNS#QX HTSXYFSYX&HYN[NY^)NWJHY2JXXFLJ*]JHZYJ'T]*]JHZYJW,:.8JYYNSL8YWJFRNSL 4GOJHYRJYMTIXIJKZS^FRQDYFL 5QZLNSRJYMTIXFGTWYDTSDJ]HJUYNTS$FHYN[NY^FIIDJ[JSYFIIDJ[JSYDKNQYJW FIIDJ[JSYDMTTPGTTYDUQZLNSHFQQ㙇ṃ㙈 5QZLNSRJYMTIXFHYN[JFHYN[J$FIIDJ[JSYFIIDJ[JSYDKNQYJWFIIDJ[JSYDMTTPFY HWJFYJIJYFHM㙇ṃ㙈 HQFXX[FWNFGQJX%%FIIDJ[JSYDMTTP%%J[JSY%%J[JSYDKNQYJW%%J[JSYVZJZJ%%UQZLNSX QTHFQXDDINWDDJ]DDKNQJDDNSDDTZYDDUW^DFWLXHFQQGFHPJ @BUW^5QZLNS#XJQK "#5QZLNS @BUW^5QZLNS# բբվPluginּⳲ▬׆նըռԨᣟᆑչ՛ֱ֘וצս׀؉ּאםս׀׆؉פնվ չՓնըԨໜվֱוצս׀؉ּאםնֵ؉՛ⱈբ֚շᅮթբբնPry՛ւज դ֛֍ըԨ׀؉⨿֡זյ֑ᕨ֘՚չⷊ֙ԧ㙒ճս൵ᔂ՛໘դ֛յՓ֍ըռԨ ൵ᔂ args ቐૐ ֱ׀וצ؉ּאםսცᔂ(⺑ऱ) callback ׀؉(Ⳳ▬ּאםProc) e ݧൿַוִּׅף onupdateպᩘդ֛֚ცᔂ֡⨿յ֎֍ըԨ @BUW^5QZLNS#FWLX "#@!8JW[NHJYTXMNDF#@ֱב؉וBB @BUW^5QZLNS# ՑՑԧonupdateվԧ⇁٢ცᔂ՛Serviceԧ⇁ڸცᔂպֱב؉ו՛ࢱղյ՞֢֚նը ռԨCtrl-D֡ࢱզյmikutter֡٢ႛ⌛ڳզյԧonupdateսცᔂ֡Ὅզյ۶٬ս ֗Օպުᣄզյ࣋ⱈযը֚շԧ؉חպֱב؉ו՛ᢜԫշ⦓₄դ֛֚շᆪՓ֍ ըԨ 5QZLNSHWJFYJHWFXMIT TSZUIFYJITaXJW[NHJRJXXFLJXa RJXXFLJXJFHMITaRa STYNHJRYTDX JSI JSI JSI Pryվࢱ֛յՙ՞կՠնmikutter՚֘हḒն՜֚սնԧֱֽ֡פェỺը֚չ֘ࢱ ֛յՙՓյᐳվչՓնզ֖ՕԨ 1.1.4 ֱֽפェỺḒսmikutter֚֡݅ mikutterվԧն՜֚կՠᠷ┣ֱֽ֡פշզյໜ⧅ը֚ծպԧ᠉᪘ᠷ┣֑֊շ֢ո՛ ֱֽפնն՜յՓ֍ըԨݧտԧGUI⹙थնդֱֽפպչղյՓ֚֊ոնԧ֯׀ ՛ໜㅁպ֓ղյՓ֚բշն׳؉׃՛ቐ⭪ը֚֗ՕչբշվԧTwitterAPIս∌ᵪ՞֘Փչ֑ սնըԨծկզԧᤌथTwitterAPIּ֡؉ը֚սվrestֱֽפԧUserStreamվ streamingֱֽפ՛፫ᄙզյՙ֙ԧՑ՞֍նAPIսּ֯׆ጤ֡ᐖݶը֚֍նպḸ ֛֘յՓ֍ըԨmikutterֱֽ֡פェỺը֚շչ֚շԧܾႛ֑mikutter֡ⱈযը֚ բշպչ֚շᆪՓ֍ը՛ԧmikutter֡ᤌపⱈযը֚սվ՚չ֙ս⯞፫պչ֙֍ըզԧAPI ս؉ואוպცղ՚՚֚ઐ֑Ց֙֍ըԨզ՚զԧェỺڂսֱֽפշվὍᏻジތ ՛չՓࢳֱֽ֡פ֯׀յ्ㄘը֛տԧェỺḒսⴟ⻪չ᷋ണ֡ጤⴟպ֚݅բշ՛ն՜֍ ըԨ ֱֽפ֯׀ նվԧໜㅁպ⨿ֱֽ֡פ֯׀յ֎֍զ֖ՕԨֱֽפս֊շ֢ովԧ /core/addon սڂպࢱղյՓ֍ըԨծկզԧguiֱֽפկՠվ /core/plugin պࢱղյՓ֍ըԨբ֛վ༪ᙒսם؉״ׅնࢳյ*/core/plugin* պ⌼٢դ֛֚ڴ໘ նըԨնվaddon⨿֡וְּהյ֎֍զ֖ՕԨ চᙸ ֱֽפક activity ְּ֯דנְד alsa ⷊῖֳׂז api_request_file_cache TwitterAPIֺײׄאװ aspectframe 㙞㙞㙞 bitly URL⎿ׂ؉׆נbit.lyսURLའェ bugreport ֽםઽ change_account ֳָ֯ו൵ᘅ contextmenu ⨸ڌչmikutterז׀ directmessage DMジⷒ extract ፦जף followingcontrol ֱֶע؉㙎ֶע؉ジⷒ friend_timeline ר؉TL image_file_cache ḡࡅײׄאװֱֺ֮ע libnotify ⷊῖ֡libnotifyն⦓₄ը֚ list ו׆ mentions ״ׄ؈ֱפ notify ⷊῖ openimg ḡࡅײנפ؉ profile ׳؉׃սְעפ؉ proxy ֺׄפ rest REST APIԨᤌथսTLᘅᔫ⇔ search ⌅ᠷ┣ set_input ⪛໘սԲࢱԳ set_view ⪛໘սԲ⦓₄Գ settings ⪛໘ף shortcutkey ׄ״؉ֺואָו؉ᠷ┣ smartthread זא׆⫌ܚ streaming UserStreamշו׆Streamingᠷ┣ tco ⎿URLԧt.coའェ շԧໜպ29߀սֱֽפ՛ᘐळ՚֘ࢱղյՓ֍ըԨ֍ծԧpluginוְּהպ վ۶٬սֱֽפ՛ࢱղյՓ֍ըԨ ֱֽפક চᙸ core ֯׀ᠷ┣Ԩ्ㄘըֈ՜նվչՓ gui ְֳ⦓ֳ֡ז₄ ֱֽפ֯׀շվՓԧጛ⫊ֱֽפնըԨ੫֙ൿզյ֑য՜֍ըԨໜㅁպ֓ղ յ֎֍զ֖ՕԨ ्ֱֽ֡פㄘզ֗Օ /core/addonն rm -rf * զծ՞չ֚շՙ֑Փ֍ը՛ԧᦰቐըֈ՜բշ՛٢ճᘕ֙֍ ըԨaddon.rbշՓՕ्ֱ֮֡עㄘը֚շ٢⹙ֱֽפ՛য՚չ՞չ֙֍ըԨՑ շԧਚ⋸պ्ㄘը֚շԧቐൿշᠷ┣՛᧾֚սնֱֽ݅פዺոբ֜նվչ՞չ֚ բշ՛֊շ֢ոնըԨඕղյळյ֞՚֚բշ֑Ց֚սնըԨշՓՕ֞ՠնԧaddon ך֡וְּה؉զԧᔫզ՞addon֡݅ዺզԧլսڂպaddon/addon.rb֡ ס׀؉զյ՞կդՓԨբ֛֑ԧᵣౠェỺڂսם؉״ׅնվaddon.rb्֡ㄘը֚բ շպչղյՓ֚սնԧaddon.rb՛⨿ᄙծ֘չՓઐվ⌎՚Փբշվ⒐թպ٢ᆪՓ պ᧾զյզ֍ղյ㉜չՓնըԨ ܾ֑չՓmikutterսٵḯ նվᕐⷎⱈযզյ֎֍զ֖ՕԨ ֱב؉וፒKק׆؉׆՛Ց֚կՠսᣟᆑչְֳֳז՛⦓₄դ֛֍ըԨբբ՚֘ծ հսTwitterּוֱ֯վ֍֚…ԨՓճ՚ᅮթNo1սTwitterּ݅֡וֱ֯ ղյԧTwitter₈պ40ࡪזն⯰դ֛֢֚կԨլ֢չᥧቐպ᪑հ֛֚ḡ㇁նըԨ ⱈযվᄙᯤᕐ՞չղյՓ֚զԧAPI֑ං՞յ٢ႛզ՚ו׆ֵּզ֍ժ֢Ԩծկԧբ ֛նվᘬᄙպܾ֑ն՜չՓսնԧ्ㄘզծֱֽפսڂ՚֘ friend_timeline շ rest ֱֽ࢘֡פսaddonוְּהպጘզյ֑Օ٢ႛⱈযզյ֎յ՞կդ ՓԨר؉ֱֱ՛⦓₄դ֛ԧᔂथպ٢ႛֱֱ՛ᘅᔫդ֛֚շՓՕԧ 2008ၾ֡ᄵᄼշդժ֚Twitterּוֱ֯պչ֚շᆪՓ֍ըԨ ▬थս֛֚ࢱֱֽ֡פ բբ֍ն՜ծ֘Ցշվ▬थն݅ղծ~ ֱֽ֡פ/.mikutter/plugin ۶٬պᘈՓ յ՞կՠնըԨբՕՓղծ᷋ണ֚֡݅ואվԧ࢝պⶨֈծ֗Օպⴟ⻪պչ֚սն ו׆דզ֓ըՓշՓՕբշշԧジތսչՓֱֽפ՛չՓբշնֽםս໘՛ᕬ պչ֚շՓՕբշ՛Ց֙֍ըԨբսּאטּדվԧ▬थ՛ᖱݝՕmikutter՚֘⨸ٮ չ֯׀ᠷ┣्֡ㄘզծՓઐպ֑ݝ֍ըԨ 1.2 mikutter-mode ׀؉֡זᘈ՞պվְֵ֑הඋڷնըԨmikutterֱֽפվRubyս׀؉זչսնጤ ֛ծֵݝְ֡הՕբշ՛ն՜֍ըԨզ՚զᘐⶕԧmikutterս׀؉ז՛ᔄᵪդ֛յ՜յԧ ְֵהպmikutter֡ᘈ՞ծսᓙᐪᠷ┣֡ճՠ֚բշ՛ં┣պչղյᙒ֍զծԨբբն վ֯׀սェỺպڌպ֛֞ݝյՓְֵ֚הԧEmacsսծպᘈ՚֛ծmikutter-mode֡ ≚ਚպ⌓ۡզ֍ըԨ https://github.com/toshia/mikutter-mode 1.2.1 i-menu i-menuվԧ٢◠ἃչIDEս֗Օչּ֓׆ジᔂս⦓֡ו׆₄ը֚ծսelispնըԨ mikutter-modeվԧ ֱֽפս໘ェܶ ֱוצԧְעսּאע ֡ԧi-menuպ⦓₄ը֚ᠷ┣՛Ց֙֍ըԨծ՞դ֢սֱּאע֡וצը֚շ՜վԧimenu՚֘⸔ፘզյפװׅն՜֚սն⻨ը֚նզ֖ՕԨ 1.2.2 yasnippet yasnippetվԧ໘սׯ؉זսᖐպ໘սਚ⫮սᅈ֜ն⪛໘դ֛ծֺ؉֡՞շאקט׆ ו՛འェդ֛֚շՓՕ֑սնըԨmikutter-modeպվԧլ֛՛ᘕচչշ՜պկՠয݅ը֚ ואקט׆՛Փ՞ճ՚ᐖݶդ֛յՓ֍ըԨݧտԧוְּהֱֽפպ⅐սֱ֮ע ֡݅ዺզյ۶٬ս֗Օպפֱզԧ UYQ lսᅈ֜նའェֺ؉֡፥ըշ 5QZLNSHWJFYJIT JSI շԧֱֽפսו־׆պའェդ֛֍ըԨ׀սᅈ֜պָ؉՛যը֚սնԧ׆ ࢱֽ֡אզյֺף؉֡፥ըշ⥽ڸὉպָ؉՛㊏ւԧའェ⌛ڳնըԨբՕՓղծ׆ ואקטվԧඋ⻪պᐖݶդ֛յՓ֚շ⩉֚֊Օ՛උ൵չսնԧmikutter-modeպդ ֛յՓ֚սվգ՞࠾՚նըԨ֎չդ֢֑֗՞Ց֚מ؉ৣואקט׆֡զյ֎յվՓ՚՛ նզ֖Օ՚Ԩ 1.2.3 mikutter_mode.rb ᘐᅈպԧໜ㌶ἃչ֑սնվՑ֙֍ը՛ԧmikutter_mode.rbս⌓ۡնըԨmikuttermodeպ۪ཤըֱֽ֚פնԧmikutterֱֽפսໜ⥽֡mikutterᘬܼս࣋ⱈযᯝզ նໜᵣզ֗ՕշՓՕ֑սնըԨ ֱו׆؉ mikutter-modeսוׅתս plugin/ ۶٬պՑ֚ mikutter_mode וְּה ~ ֡/.mikutter/plugin պס׀؉զ֍ըԨ֍ծԧdbus-ruby֡gemնֱו׆؉ զյ՞կդՓԨ LJRNSXYFQQIGZXWZG^ ݝղյ֎֚ ֍թԧmikutter_mode.rbֱ֡ו׆؉զծmikutter֡ׯֽאםה؉זնⱈযզ ֍ըԨլզյ ~/.mikutter/plugin/ պԧ⸉ᄙչֱ֮ע㙇բբնվԧtest.rb㙈֡݅ ዺզ֍ըԨᣄၚպmikutter-mode՛ֱו׆؉դ֛յՓ֚չ֘ԧ۶٬սࣖὨս֗ Օպԧׯ؉ֱזպ Mikutter շ⦓₄դ֛յՓ֚վթնըԨ դյԧբսֱֽפվ test շՓՕֱוצ՛ỺḊը֚շԧԲו׆דԳշՓՕ noticeא؉⦓ׅ֡₄զ֍ըԨໜㅁպ֓ղյ֎֚պվ࣋ⱈয՚׀ֱֽ֡פ ؉պקס׀չսնը՛ԧEmacsշmikutterպᣄၚպmikutter-mode՛ֱו׆ ؉դ֛յՓ֛տԧ֮עאםնC-c C-c շפֱը֚կՠնբս׆ֱֱֽ֡פ ו؉ը֚բշ՛ն՜֍ըԨ STYNHJMTRJYTXMNRNPZYYJWUQZLNSRNPZYYJWDRTIJRNPZYYJWDRTIJWGNSEGQTHP QJ[JQXNS!HQFXX8JW[JW#WZG^HTIJJ]JHZYJ TWLRNPZYYJWJ[FQ STYNHJMTRJYTXMNRNPZYYJWUQZLNSRNPZYYJWDRTIJRNPZYYJWDRTIJWGNSEGQTHP QJ[JQXNS!HQFXX8JW[JW#WJYZWSX YJXY STYNHJMTRJYTXMNRNPZYYJWUQZLNSRNPZYYJWDRTIJRNPZYYJWDRTIJWGNSEGQTHP QJ[JQXNS!HQFXX8JW[JW#WZG^HTIJJ]JHZYJ MTRJYTXMNRNPZYYJWUQZLNSYJXYWG STYNHJMTRJYTXMNRNPZYYJWUQZLNSRNPZYYJWDRTIJRNPZYYJWDRTIJWGNSEGQTHP QJ[JQXNS!HQFXX8JW[JW#WJYZWSX YJXY ٫⪍ս֗Օչא؉ׅ՛؉חպ⦓₄դ֛֚շᆪՓ֍ըԨᢜպໜㅁպtestֱצ ֡וỺḊդժ֍ըԨ׀؉՚֘۶٬ս׀؉֡זໜ⥽զ֍զ֖ՕԨ 5QZLNSHFQQYJXY ۶٬ս֗Օչज՛ᅐ֛֘֍ըԨ࣋ⱈযᯝզպmikutterו׆ֱֱֽ֡פ؉ն ՜֍զծԨ STYNHJMTRJYTXMNRNPZYYJWUQZLNSYJXYWGNSEGQTHPQJ[JQXNS !HQFXX8JW[JW#ו׆דնը ֱֽפս▬য࣋؉ז test.rb պՑղծ onunload պճՓյ⫹ᕨզյՙ՜֍ըԨmikutter-mode֡ݝղ յֱֽ֡פ؉זը֚ᖐԧընպլսֱֽפ՛؉זդ֛յՓ֚ᖐ՛Ց֙֍ ըԨլսઐԧ٢ႛֱֽפ՛੫֙ൿդ֛ԧᔫզՓֱֽפ՛؉זդ֛֍ըԨ բՕՓՕԧmikutterս⌛ڳ۶ൿս⨸బնֱֽפ՛੫֙ൿդ֛֚ᖐպ onunload ּאף՛տ֛֚սնըԨծզպ֑Օ٢ႛ C-c C-c շפֱզյ֎֍զ֖ՕԨ۶ ٬ս֗Օպजդ֛֚շᆪՓ֍ըԨ STYNHJMTRJYTXMNRNPZYYJWUQZLNSYJXYWGNSEGQTHPQJ[JQXNS !HQFXX8JW[JW#֯؉ז onunload սڌչݝՓⷷվԧThread֓Gtk⇔ԧֱֽפ՛੫֙ൿդ֛յ֑⩫ᓥդ ֛չՓַ⩫֡וִּׅףᓥը֚ԧּו׆הἃչऋᵪ֡ᘈ՞ծնըԨ mikutter_mode.rbս۠ᅈ mikutter_modeվᘐⶕ֓ղշᘬᛘἃպェỺպώጤդ֛ճճՑ֚֍կỺའⷄ٫սᠷ┣ նը՛ԧEmacs٫նEmacs Lisp֡ᘈ՞֗Օպmikutterֱֽפ՛ᘈՠ֚֗Օպ չ֚⃩֡װׄדתծֱֽפնըԨᘐᔫսሚվԧ٫պᘈՓծgithubսק؉ ⨿ׅ֡յ՞կդՓԨᵣౠվEmacsսᎄᄄᠷ┣ս֎⺑ြզյՓ֍ը՛ԧDBus՛ݝ֚ չ֘ۨսְֵה؈IDEն֑ઔ៥սբշ՛ն՜֚վթնըԨ 2 ֍շ ॐపԧmikutterս⟗Փᘬvol.1պԲWriting mikutter pluginԳ֡KդժյՓծկ՜ԧ Web٫ն֑ࢷェզ֍զծԨሹ໘զծ⫺⒒վmikutterպհ֖ղշᠷ┣֡ⱟզծՓۘնզծԨ բս⫄֎վՑ֚ℇႛዺআզԧֱֽ֚ۘ݅֡פսࢱゟշզյ⫺֍֛֚֗Օպչ֙֍զծԨ ٢ᔰԧՑ֚ℇႛֱֽ֡פᘈ՞բշ՛ᕌၚἃպչղյ՞֚շԧmikutterాᘕսֽאםה սᔰᦢ՛֍շ֍ղյࢷェդ֛յՓչՓծԧ٢ᣈⲗ֎ⶇ֢կֱֽ֡פᘈբՕշզծᖐպ ⯞፫պչղյՓ֚־؉׆՛ᓽ⨿դ֛֍զծԨլս֗Օչ⌣⎚՚ֱֽ֘פェỺսפו׆צ ۡ⌓֡׆ְדּը֚וײֺזսᅮ⨸ᆱ֡էԧ۠పբս֡וײֺזᘈ՞պ△֙֍ զծԨἅդ֢՛mikutter֡▬थ☉պ᚜֚٢պչ֛տႁՓնըԨ ᕳᮎ ࠶ࡀࡁ @brsywe ๓ᅇ 24 ࣮࣌ࢪ࡛ᅇ 60 ࣮࣌ࢪ࡞ࡗࡓ mikutter ࡢⷧ࠸ᮏࠋ࠾ࡓࡢ ࡋࡳ㡬ࡅࡲࡋࡓ࡛ࡋࡻ࠺ࠋ ๓ᅇࡣᵝᏊぢࡔࡗࡓேࡀἑᒣ᭩࠸࡚ୗࡉ ࡗࡓࡇࡶ࠶ࡾࠊ࣮࣌ࢪᩘࡀ୍Ẽቑ࠼ࡲࡋࡓࡡࠋ ᛮ࠼ࡤ༙ᖺ๓ࠋࡇࡳࢺ࡛ࣞ㡺ᕸࡋࡓࡁࡣ mikutter ࢆࡃ▱ࡽ࡞ ࠸ࡅࢀཷࡅྲྀࡗࡓப࠺ேࡶᒃࡲࡋࡓࠋ࠸ࡲࡈࢁ twitter ᗈ࠸ᾏࡢ ࡇ࡛࡚࠾ࡃࢀ࡚࠸ࡿࡢࡋࡽࠋ ࠶࡞ࡓࡀࡓࡢ࡚࠾ࡃࢀࣛࣇࡢ୍ຓ࡞ࡿࡇࢆᮇᚅࡋࡘࡘࠋ Ќ@shijin_cmpb ̿̿ḟྕண࿌̿̿ ཎ✏ᥦฟᮇ㝈㸸11 ᭶ᮎ᪥ Ⓨ⾜ணᐃ㸸C83㸦12 ᭶ᮎ㸾ᮾி㸧 ࡲࡓࡣ ࡇࡳࡗࡃࢺࣞࢪ࣮ࣕ21㸦1 ᭶୰᪪㸾㜰㸧 ၥྜࡏඛ㸸 @brsywe ዟ ষ ؟ফ া ੂගਸ਼ ླྀ3') ග 26&72.<2 ੂගਸ਼ ླྀ ؟া 26&.<272 ষ؟PLNXWWHU 峘ු岮ম৩ভ ষ؟#EUV\ZH ਧഈ峘ଣଛଂཹภশ ৴൪؟EUV\ZH # KRWPDLOFRMS ഀླྀ嵣ᐑഘੈৡ؟,8-. ࡈពぢ࣭ࡈឤࡣ࠾Ẽ㍍࠺ࡒࠋtwitter ࣁࢵࢩࣗࢱࢢ #ࡍࡈ࠸ M ᮏ mikutter ࡢⷧ࠸ᮏไసጤဨ࢙࢘ࣈ࣮࣌ࢪ㸦ྑࡢ QR ࢥ࣮ࢻࡶྠࡌ㸧 http://home1.tigers-net.com/brsywe/mikutter.html ㏣⿵㸦mikutter ࡢⷧ࠸ᮏ vol.2 ึ∧➨ 1࣭㸰ๅ/PDF ∧ඹ㏻㸧 ௨ୗࡢ㏻ࡾㄗ᳜ࡀࡈࡊ࠸ࡲࡍࡢ࡛ゞṇࢆᚚ㢪࠸⮴ࡋࡲࡍࠋ ࠙44 ࣮࣌ࢪ 2.5.4ࠚ AOuth ۑOAuth mikutter ࡢⷧ࠸ᮏไసጤဨ࡛ࡣࠊAmazon ࢠࣇࢺๆࡼࡿ㔠㖹㠃ࡢᨭࢆཷࡅࡅ࡚࠾ࡾࡲࡍࠋࡶࡋࠊ࠶࡞ࡓࡀࡇࡢⷧ ࠸ᮏࢆㄞࢇ࡛ࠊఱࡋࡽ‶㊊ឤࢆᚓࡽࢀࡓ࡞ࡽࠊ㏦ࡗ࡚㈔࠼ࡿࡑࡢ‶㊊ឤࢆㄡඹ᭷࡛ࡁࡿࡶࠋ ୖࡢ࢙࢘ࣈ࣮࣌ࢪࢆᚚཧ↷ࡃࡔࡉ࠸ࠋ