rabbit-slide-aycabta-rubyconf-2019 2019.11.20.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8b159cb8e03440a921ec9b71cb20a15e5830e7a36598c0848c8a215d2e99eb2f
4
+ data.tar.gz: 6f0be17fcebe660f853fbb4d1b1336a2d62f399302ba6672dd987c2effe151bd
5
+ SHA512:
6
+ metadata.gz: 60971cdbf59bd067d85a283653081a7360861fada4bff9bd55c473a7fec2cd6e45dca26d6ce623d9608ba63935f38864191c42b9c50ac4666197860bcb787228
7
+ data.tar.gz: b6cd5ca11424c35374918bed82b4f2ae45c84231e9e0ba114a33cb0269498fde801a0e064c4a39088be19c1c20bb86c18a4e99e8cba628e867c7fd03ae881dfd
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ --size=1920,1080 technical_background_of_interactive_cli_of_ruby_2.7.rab
@@ -0,0 +1,6 @@
1
+ = IRB Reboot: Modernize Implementation and Features
2
+
3
+ == License
4
+
5
+ CC BY-SA 4.0
6
+
@@ -0,0 +1,16 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ end
11
+
12
+ desc "Tag #{spec.version}"
13
+ task :tag do
14
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
15
+ sh("git", "push", "--tags")
16
+ end
@@ -0,0 +1,136 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
3
+ <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Layer_1" width="198.13" height="197.58" viewBox="0 0 198.13 197.58" overflow="visible" enable-background="new 0 0 198.13 197.58" xml:space="preserve" inkscape:version="0.48.0 r9654" sodipodi:docname="Logo-Ruby.svg"><metadata id="metadata3320"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/></cc:Work></rdf:RDF></metadata><defs id="defs3489"><linearGradient id="XMLID_17_-9" gradientUnits="userSpaceOnUse" x1="174.0737" y1="215.5488" x2="132.27631" y2="141.7533"><stop offset="0" style="stop-color:#FB7655" id="stop3272-4"/><stop offset="0" style="stop-color:#FB7655" id="stop3274-5"/><stop offset="0.41" style="stop-color:#E42B1E" id="stop3276-1"/><stop offset="0.99" style="stop-color:#990000" id="stop3278-0"/><stop offset="1" style="stop-color:#990000" id="stop3280-3"/></linearGradient><linearGradient id="XMLID_18_-7" gradientUnits="userSpaceOnUse" x1="194.895" y1="153.5576" x2="141.0276" y2="117.4093"><stop offset="0" style="stop-color:#871101" id="stop3285-8"/><stop offset="0" style="stop-color:#871101" id="stop3287-8"/><stop offset="0.99" style="stop-color:#911209" id="stop3289-6"/><stop offset="1" style="stop-color:#911209" id="stop3291-0"/></linearGradient><linearGradient id="XMLID_19_-4" gradientUnits="userSpaceOnUse" x1="151.79539" y1="217.7852" x2="97.929703" y2="181.638"><stop offset="0" style="stop-color:#871101" id="stop3296-6"/><stop offset="0" style="stop-color:#871101" id="stop3298-7"/><stop offset="0.99" style="stop-color:#911209" id="stop3300-6"/><stop offset="1" style="stop-color:#911209" id="stop3302-0"/></linearGradient><linearGradient id="XMLID_20_-9" gradientUnits="userSpaceOnUse" x1="38.696301" y1="127.3906" x2="47.046902" y2="181.66141"><stop offset="0" style="stop-color:#FFFFFF" id="stop3307-7"/><stop offset="0" style="stop-color:#FFFFFF" id="stop3309-5"/><stop offset="0.23" style="stop-color:#E57252" id="stop3311-9"/><stop offset="0.46" style="stop-color:#DE3B20" id="stop3313-7"/><stop offset="0.99" style="stop-color:#A60003" id="stop3315-8"/><stop offset="1" style="stop-color:#A60003" id="stop3317-5"/></linearGradient><linearGradient id="XMLID_21_-3" gradientUnits="userSpaceOnUse" x1="96.132797" y1="76.715302" x2="99.209602" y2="132.1021"><stop offset="0" style="stop-color:#FFFFFF" id="stop3322-3"/><stop offset="0" style="stop-color:#FFFFFF" id="stop3324-8"/><stop offset="0.23" style="stop-color:#E4714E" id="stop3326-3"/><stop offset="0.56" style="stop-color:#BE1A0D" id="stop3328-7"/><stop offset="0.99" style="stop-color:#A80D00" id="stop3330-9"/><stop offset="1" style="stop-color:#A80D00" id="stop3332-3"/></linearGradient><linearGradient id="XMLID_22_-7" gradientUnits="userSpaceOnUse" x1="147.103" y1="25.521" x2="156.3141" y2="65.216202"><stop offset="0" style="stop-color:#FFFFFF" id="stop3337-8"/><stop offset="0" style="stop-color:#FFFFFF" id="stop3339-7"/><stop offset="0.18" style="stop-color:#E46342" id="stop3341-4"/><stop offset="0.4" style="stop-color:#C82410" id="stop3343-1"/><stop offset="0.99" style="stop-color:#A80D00" id="stop3345-9"/><stop offset="1" style="stop-color:#A80D00" id="stop3347-0"/></linearGradient><linearGradient id="XMLID_23_-9" gradientUnits="userSpaceOnUse" x1="118.9761" y1="11.5415" x2="158.66859" y2="-8.3048"><stop offset="0" style="stop-color:#FFFFFF" id="stop3352-8"/><stop offset="0" style="stop-color:#FFFFFF" id="stop3354-8"/><stop offset="0.54" style="stop-color:#C81F11" id="stop3356-5"/><stop offset="0.99" style="stop-color:#BF0905" id="stop3358-8"/><stop offset="1" style="stop-color:#BF0905" id="stop3360-4"/></linearGradient><linearGradient id="XMLID_24_-3" gradientUnits="userSpaceOnUse" x1="3.9033" y1="113.5547" x2="7.1701999" y2="146.2628"><stop offset="0" style="stop-color:#FFFFFF" id="stop3365-7"/><stop offset="0" style="stop-color:#FFFFFF" id="stop3367-1"/><stop offset="0.31" style="stop-color:#DE4024" id="stop3369-3"/><stop offset="0.99" style="stop-color:#BF190B" id="stop3371-8"/><stop offset="1" style="stop-color:#BF190B" id="stop3373-0"/></linearGradient><linearGradient id="XMLID_25_-9" gradientUnits="userSpaceOnUse" x1="-18.5557" y1="155.10451" x2="135.0152" y2="-2.8092999"><stop offset="0" style="stop-color:#BD0012" id="stop3380-7"/><stop offset="0" style="stop-color:#BD0012" id="stop3382-9"/><stop offset="0.07" style="stop-color:#FFFFFF" id="stop3384-9"/><stop offset="0.17" style="stop-color:#FFFFFF" id="stop3386-3"/><stop offset="0.27" style="stop-color:#C82F1C" id="stop3388-2"/><stop offset="0.33" style="stop-color:#820C01" id="stop3390-4"/><stop offset="0.46" style="stop-color:#A31601" id="stop3392-3"/><stop offset="0.72" style="stop-color:#B31301" id="stop3394-7"/><stop offset="0.99" style="stop-color:#E82609" id="stop3396-1"/><stop offset="1" style="stop-color:#E82609" id="stop3398-2"/></linearGradient><linearGradient id="XMLID_26_-2" gradientUnits="userSpaceOnUse" x1="99.074699" y1="171.0332" x2="52.817699" y2="159.61659"><stop offset="0" style="stop-color:#8C0C01" id="stop3403-0"/><stop offset="0" style="stop-color:#8C0C01" id="stop3405-2"/><stop offset="0.54" style="stop-color:#990C00" id="stop3407-1"/><stop offset="0.99" style="stop-color:#A80D0E" id="stop3409-7"/><stop offset="1" style="stop-color:#A80D0E" id="stop3411-5"/></linearGradient><linearGradient id="XMLID_27_-1" gradientUnits="userSpaceOnUse" x1="178.52589" y1="115.5146" x2="137.43269" y2="78.683998"><stop offset="0" style="stop-color:#7E110B" id="stop3416-7"/><stop offset="0" style="stop-color:#7E110B" id="stop3418-4"/><stop offset="0.99" style="stop-color:#9E0C00" id="stop3420-1"/><stop offset="1" style="stop-color:#9E0C00" id="stop3422-7"/></linearGradient><linearGradient id="XMLID_28_-1" gradientUnits="userSpaceOnUse" x1="193.6235" y1="47.937" x2="173.15421" y2="26.053801"><stop offset="0" style="stop-color:#79130D" id="stop3427-1"/><stop offset="0" style="stop-color:#79130D" id="stop3429-1"/><stop offset="0.99" style="stop-color:#9E120B" id="stop3431-7"/><stop offset="1" style="stop-color:#9E120B" id="stop3433-0"/></linearGradient><radialGradient id="XMLID_29_-4" cx="143.8315" cy="79.388199" r="50.357601" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#A80D00" id="stop3440-0"/><stop offset="0" style="stop-color:#A80D00" id="stop3442-8"/><stop offset="0.99" style="stop-color:#7E0E08" id="stop3444-5"/><stop offset="1" style="stop-color:#7E0E08" id="stop3446-1"/></radialGradient><radialGradient id="XMLID_30_-6" cx="74.0923" cy="145.75101" r="66.943703" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#A30C00" id="stop3451-6"/><stop offset="0" style="stop-color:#A30C00" id="stop3453-2"/><stop offset="0.99" style="stop-color:#800E08" id="stop3455-1"/><stop offset="1" style="stop-color:#800E08" id="stop3457-9"/></radialGradient><linearGradient id="XMLID_31_-6" gradientUnits="userSpaceOnUse" x1="26.669901" y1="197.33591" x2="9.9886999" y2="140.742"><stop offset="0" style="stop-color:#8B2114" id="stop3462-4"/><stop offset="0" style="stop-color:#8B2114" id="stop3464-8"/><stop offset="0.43" style="stop-color:#9E100A" id="stop3466-0"/><stop offset="0.99" style="stop-color:#B3100C" id="stop3468-8"/><stop offset="1" style="stop-color:#B3100C" id="stop3470-1"/></linearGradient><linearGradient id="XMLID_32_-0" gradientUnits="userSpaceOnUse" x1="154.6411" y1="9.7979002" x2="192.039" y2="26.305901"><stop offset="0" style="stop-color:#B31000" id="stop3475-2"/><stop offset="0" style="stop-color:#B31000" id="stop3477-2"/><stop offset="0.44" style="stop-color:#910F08" id="stop3479-9"/><stop offset="0.99" style="stop-color:#791C12" id="stop3481-7"/><stop offset="1" style="stop-color:#791C12" id="stop3483-5"/></linearGradient><linearGradient y2="141.7533" x2="132.27631" y1="215.5488" x1="174.0737" gradientUnits="userSpaceOnUse" id="linearGradient3448" xlink:href="#XMLID_17_-9" inkscape:collect="always"/></defs><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1036" inkscape:window-height="1124" id="namedview3487" showgrid="false" inkscape:zoom="1.3412289" inkscape:cx="99.065005" inkscape:cy="98.790004" inkscape:window-x="882" inkscape:window-y="24" inkscape:window-maximized="0" inkscape:current-layer="Layer_1"/>
4
+ <linearGradient id="XMLID_17_" gradientUnits="userSpaceOnUse" x1="174.0737" y1="215.5488" x2="132.2763" y2="141.7533">
5
+ <stop offset="0" style="stop-color:#FB7655" id="stop3272"/>
6
+ <stop offset="0" style="stop-color:#FB7655" id="stop3274"/>
7
+ <stop offset="0.41" style="stop-color:#E42B1E" id="stop3276"/>
8
+ <stop offset="0.99" style="stop-color:#990000" id="stop3278"/>
9
+ <stop offset="1" style="stop-color:#990000" id="stop3280"/>
10
+ </linearGradient>
11
+
12
+ <linearGradient id="XMLID_18_" gradientUnits="userSpaceOnUse" x1="194.895" y1="153.5576" x2="141.0276" y2="117.4093">
13
+ <stop offset="0" style="stop-color:#871101" id="stop3285"/>
14
+ <stop offset="0" style="stop-color:#871101" id="stop3287"/>
15
+ <stop offset="0.99" style="stop-color:#911209" id="stop3289"/>
16
+ <stop offset="1" style="stop-color:#911209" id="stop3291"/>
17
+ </linearGradient>
18
+
19
+ <linearGradient id="XMLID_19_" gradientUnits="userSpaceOnUse" x1="151.7954" y1="217.7852" x2="97.9297" y2="181.638">
20
+ <stop offset="0" style="stop-color:#871101" id="stop3296"/>
21
+ <stop offset="0" style="stop-color:#871101" id="stop3298"/>
22
+ <stop offset="0.99" style="stop-color:#911209" id="stop3300"/>
23
+ <stop offset="1" style="stop-color:#911209" id="stop3302"/>
24
+ </linearGradient>
25
+
26
+ <linearGradient id="XMLID_20_" gradientUnits="userSpaceOnUse" x1="38.6963" y1="127.3906" x2="47.0469" y2="181.6614">
27
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop3307"/>
28
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop3309"/>
29
+ <stop offset="0.23" style="stop-color:#E57252" id="stop3311"/>
30
+ <stop offset="0.46" style="stop-color:#DE3B20" id="stop3313"/>
31
+ <stop offset="0.99" style="stop-color:#A60003" id="stop3315"/>
32
+ <stop offset="1" style="stop-color:#A60003" id="stop3317"/>
33
+ </linearGradient>
34
+
35
+ <linearGradient id="XMLID_21_" gradientUnits="userSpaceOnUse" x1="96.1328" y1="76.7153" x2="99.2096" y2="132.1021">
36
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop3322"/>
37
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop3324"/>
38
+ <stop offset="0.23" style="stop-color:#E4714E" id="stop3326"/>
39
+ <stop offset="0.56" style="stop-color:#BE1A0D" id="stop3328"/>
40
+ <stop offset="0.99" style="stop-color:#A80D00" id="stop3330"/>
41
+ <stop offset="1" style="stop-color:#A80D00" id="stop3332"/>
42
+ </linearGradient>
43
+
44
+ <linearGradient id="XMLID_22_" gradientUnits="userSpaceOnUse" x1="147.103" y1="25.521" x2="156.3141" y2="65.2162">
45
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop3337"/>
46
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop3339"/>
47
+ <stop offset="0.18" style="stop-color:#E46342" id="stop3341"/>
48
+ <stop offset="0.4" style="stop-color:#C82410" id="stop3343"/>
49
+ <stop offset="0.99" style="stop-color:#A80D00" id="stop3345"/>
50
+ <stop offset="1" style="stop-color:#A80D00" id="stop3347"/>
51
+ </linearGradient>
52
+
53
+ <linearGradient id="XMLID_23_" gradientUnits="userSpaceOnUse" x1="118.9761" y1="11.5415" x2="158.6686" y2="-8.3048">
54
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop3352"/>
55
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop3354"/>
56
+ <stop offset="0.54" style="stop-color:#C81F11" id="stop3356"/>
57
+ <stop offset="0.99" style="stop-color:#BF0905" id="stop3358"/>
58
+ <stop offset="1" style="stop-color:#BF0905" id="stop3360"/>
59
+ </linearGradient>
60
+
61
+ <linearGradient id="XMLID_24_" gradientUnits="userSpaceOnUse" x1="3.9033" y1="113.5547" x2="7.1702" y2="146.2628">
62
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop3365"/>
63
+ <stop offset="0" style="stop-color:#FFFFFF" id="stop3367"/>
64
+ <stop offset="0.31" style="stop-color:#DE4024" id="stop3369"/>
65
+ <stop offset="0.99" style="stop-color:#BF190B" id="stop3371"/>
66
+ <stop offset="1" style="stop-color:#BF190B" id="stop3373"/>
67
+ </linearGradient>
68
+
69
+
70
+ <linearGradient id="XMLID_25_" gradientUnits="userSpaceOnUse" x1="-18.5557" y1="155.1045" x2="135.0152" y2="-2.8093">
71
+ <stop offset="0" style="stop-color:#BD0012" id="stop3380"/>
72
+ <stop offset="0" style="stop-color:#BD0012" id="stop3382"/>
73
+ <stop offset="0.07" style="stop-color:#FFFFFF" id="stop3384"/>
74
+ <stop offset="0.17" style="stop-color:#FFFFFF" id="stop3386"/>
75
+ <stop offset="0.27" style="stop-color:#C82F1C" id="stop3388"/>
76
+ <stop offset="0.33" style="stop-color:#820C01" id="stop3390"/>
77
+ <stop offset="0.46" style="stop-color:#A31601" id="stop3392"/>
78
+ <stop offset="0.72" style="stop-color:#B31301" id="stop3394"/>
79
+ <stop offset="0.99" style="stop-color:#E82609" id="stop3396"/>
80
+ <stop offset="1" style="stop-color:#E82609" id="stop3398"/>
81
+ </linearGradient>
82
+
83
+ <linearGradient id="XMLID_26_" gradientUnits="userSpaceOnUse" x1="99.0747" y1="171.0332" x2="52.8177" y2="159.6166">
84
+ <stop offset="0" style="stop-color:#8C0C01" id="stop3403"/>
85
+ <stop offset="0" style="stop-color:#8C0C01" id="stop3405"/>
86
+ <stop offset="0.54" style="stop-color:#990C00" id="stop3407"/>
87
+ <stop offset="0.99" style="stop-color:#A80D0E" id="stop3409"/>
88
+ <stop offset="1" style="stop-color:#A80D0E" id="stop3411"/>
89
+ </linearGradient>
90
+
91
+ <linearGradient id="XMLID_27_" gradientUnits="userSpaceOnUse" x1="178.5259" y1="115.5146" x2="137.4327" y2="78.684">
92
+ <stop offset="0" style="stop-color:#7E110B" id="stop3416"/>
93
+ <stop offset="0" style="stop-color:#7E110B" id="stop3418"/>
94
+ <stop offset="0.99" style="stop-color:#9E0C00" id="stop3420"/>
95
+ <stop offset="1" style="stop-color:#9E0C00" id="stop3422"/>
96
+ </linearGradient>
97
+
98
+ <linearGradient id="XMLID_28_" gradientUnits="userSpaceOnUse" x1="193.6235" y1="47.937" x2="173.1542" y2="26.0538">
99
+ <stop offset="0" style="stop-color:#79130D" id="stop3427"/>
100
+ <stop offset="0" style="stop-color:#79130D" id="stop3429"/>
101
+ <stop offset="0.99" style="stop-color:#9E120B" id="stop3431"/>
102
+ <stop offset="1" style="stop-color:#9E120B" id="stop3433"/>
103
+ </linearGradient>
104
+
105
+
106
+ <radialGradient id="XMLID_29_" cx="143.8315" cy="79.3882" r="50.3576" gradientUnits="userSpaceOnUse">
107
+ <stop offset="0" style="stop-color:#A80D00" id="stop3440"/>
108
+ <stop offset="0" style="stop-color:#A80D00" id="stop3442"/>
109
+ <stop offset="0.99" style="stop-color:#7E0E08" id="stop3444"/>
110
+ <stop offset="1" style="stop-color:#7E0E08" id="stop3446"/>
111
+ </radialGradient>
112
+
113
+ <radialGradient id="XMLID_30_" cx="74.0923" cy="145.751" r="66.9437" gradientUnits="userSpaceOnUse">
114
+ <stop offset="0" style="stop-color:#A30C00" id="stop3451"/>
115
+ <stop offset="0" style="stop-color:#A30C00" id="stop3453"/>
116
+ <stop offset="0.99" style="stop-color:#800E08" id="stop3455"/>
117
+ <stop offset="1" style="stop-color:#800E08" id="stop3457"/>
118
+ </radialGradient>
119
+
120
+ <linearGradient id="XMLID_31_" gradientUnits="userSpaceOnUse" x1="26.6699" y1="197.3359" x2="9.9887" y2="140.742">
121
+ <stop offset="0" style="stop-color:#8B2114" id="stop3462"/>
122
+ <stop offset="0" style="stop-color:#8B2114" id="stop3464"/>
123
+ <stop offset="0.43" style="stop-color:#9E100A" id="stop3466"/>
124
+ <stop offset="0.99" style="stop-color:#B3100C" id="stop3468"/>
125
+ <stop offset="1" style="stop-color:#B3100C" id="stop3470"/>
126
+ </linearGradient>
127
+
128
+ <linearGradient id="XMLID_32_" gradientUnits="userSpaceOnUse" x1="154.6411" y1="9.7979" x2="192.039" y2="26.3059">
129
+ <stop offset="0" style="stop-color:#B31000" id="stop3475"/>
130
+ <stop offset="0" style="stop-color:#B31000" id="stop3477"/>
131
+ <stop offset="0.44" style="stop-color:#910F08" id="stop3479"/>
132
+ <stop offset="0.99" style="stop-color:#791C12" id="stop3481"/>
133
+ <stop offset="1" style="stop-color:#791C12" id="stop3483"/>
134
+ </linearGradient>
135
+
136
+ <polygon style="fill:url(#linearGradient3448);fill-rule:evenodd" clip-rule="evenodd" points="153.5,130.41 40.38,197.58 186.849,187.641 198.13,39.95 " id="polygon3282"/><polygon style="fill:url(#XMLID_18_-7);fill-rule:evenodd" clip-rule="evenodd" points="187.089,187.54 174.5,100.65 140.209,145.93 " id="polygon3293"/><polygon style="fill:url(#XMLID_19_-4);fill-rule:evenodd" clip-rule="evenodd" points="187.259,187.54 95.03,180.3 40.87,197.391 " id="polygon3304"/><polygon style="fill:url(#XMLID_20_-9);fill-rule:evenodd" clip-rule="evenodd" points="41,197.41 64.04,121.93 13.34,132.771 " id="polygon3319"/><polygon style="fill:url(#XMLID_21_-3);fill-rule:evenodd" clip-rule="evenodd" points="140.2,146.18 119,63.14 58.33,120.01 " id="polygon3334"/><polygon style="fill:url(#XMLID_22_-7);fill-rule:evenodd" clip-rule="evenodd" points="193.32,64.31 135.97,17.47 120,69.1 " id="polygon3349"/><polygon style="fill:url(#XMLID_23_-9);fill-rule:evenodd" clip-rule="evenodd" points="166.5,0.77 132.77,19.41 111.49,0.52 " id="polygon3362"/><polygon style="fill:url(#XMLID_24_-3);fill-rule:evenodd" clip-rule="evenodd" points="0,158.09 14.13,132.32 2.7,101.62 " id="polygon3375"/><path style="fill:#ffffff;fill-rule:evenodd" inkscape:connector-curvature="0" clip-rule="evenodd" d="m 1.94,100.65 11.5,32.62 49.97,-11.211 57.05,-53.02 L 136.56,17.9 111.209,0 68.109,16.13 C 54.53,28.76 28.18,53.75 27.23,54.22 26.29,54.7 9.83,85.81 1.94,100.65 z" id="path3377"/><path style="fill:url(#XMLID_25_-9);fill-rule:evenodd" inkscape:connector-curvature="0" clip-rule="evenodd" d="m 42.32,42.05 c 29.43,-29.18 67.37,-46.42 81.93,-31.73 14.551,14.69 -0.88,50.39 -30.31,79.56 -29.43,29.17 -66.9,47.36 -81.45,32.67 -14.56,-14.68 0.4,-51.33 29.83,-80.5 z" id="path3400"/><path style="fill:url(#XMLID_26_-2);fill-rule:evenodd" inkscape:connector-curvature="0" clip-rule="evenodd" d="m 41,197.38 22.86,-75.72 75.92,24.39 C 112.33,171.79 81.8,193.55 41,197.38 z" id="path3413"/><path style="fill:url(#XMLID_27_-1);fill-rule:evenodd" inkscape:connector-curvature="0" clip-rule="evenodd" d="m 120.56,68.89 19.49,77.2 C 162.98,121.98 183.56,96.06 193.639,64 l -73.079,4.89 z" id="path3424"/><path style="fill:url(#XMLID_28_-1);fill-rule:evenodd" inkscape:connector-curvature="0" clip-rule="evenodd" d="m 193.44,64.39 c 7.8,-23.54 9.6,-57.31 -27.181,-63.58 l -30.18,16.67 57.361,46.91 z" id="path3435"/><path style="fill:#9e1209;fill-rule:evenodd" inkscape:connector-curvature="0" clip-rule="evenodd" d="m 0,157.75 c 1.08,38.851 29.11,39.43 41.05,39.771 L 13.47,133.11 0,157.75 z" id="path3437"/><path style="fill:url(#XMLID_29_-4);fill-rule:evenodd" inkscape:connector-curvature="0" clip-rule="evenodd" d="m 120.669,69.01 c 17.62,10.83 53.131,32.58 53.851,32.98 1.119,0.63 15.31,-23.93 18.53,-37.81 l -72.381,4.83 z" id="path3448"/><path style="fill:url(#XMLID_30_-6);fill-rule:evenodd" inkscape:connector-curvature="0" clip-rule="evenodd" d="m 63.83,121.66 30.56,58.96 c 18.07,-9.8 32.22,-21.74 45.18,-34.53 L 63.83,121.66 z" id="path3459"/><path style="fill:url(#XMLID_31_-6);fill-rule:evenodd" inkscape:connector-curvature="0" clip-rule="evenodd" d="m 13.35,133.19 -4.33,51.56 c 8.17,11.16 19.41,12.13 31.2,11.26 -8.53,-21.23 -25.57,-63.68 -26.87,-62.82 z" id="path3472"/><path style="fill:url(#XMLID_32_-0);fill-rule:evenodd" inkscape:connector-curvature="0" clip-rule="evenodd" d="m 135.9,17.61 60.71,8.52 C 193.37,12.4 183.42,3.54 166.46,0.77 L 135.9,17.61 z" id="path3485"/></svg>
Binary file
Binary file
data/cfp.md ADDED
@@ -0,0 +1,38 @@
1
+ # Technical Background of Interactive CLI of Ruby 2.7
2
+
3
+ ## Abstract
4
+
5
+ Ruby 2.7 will be released with new multiline IRB that uses a new input library Reline. I'll talk about the technical background of it.
6
+
7
+ - the history of terminal
8
+ - the Morse code
9
+ - typewriter
10
+ - teletype
11
+ - escape sequence
12
+ - escape sequence on Unix like OS
13
+ - Windows support
14
+ - GNU Readline compatible features
15
+ - editing modes
16
+ - inputrc that is a setting file
17
+ - I8n support
18
+ - too many character encodings in the world
19
+ - Unicode's complex tweaked specifications
20
+ - ...it's very difficult to understand for non-CJK people so I'll try to explain it by emoji
21
+
22
+ ## Details
23
+
24
+ ## the history of terminal
25
+
26
+ The history of terminal that we're using daily started from hundreds of years ago. It was constructed by coded signals, typing system, and printing system. It was extended with complex printing system and escape sequence to control it. The protocol and its specifications are the base of "terminal" of computer today.
27
+
28
+ ## GNU Readline compatible features
29
+
30
+ GNU Readline has so many features that include emacs like editor, vi like editor, TTY controls, settings file, and macro. I'll talk about how I implemented it almost completely.
31
+
32
+ ## I8n support
33
+
34
+ There are so many character encodings in the world, especially in CJK due to historical reasons. All terminal applications must treat the characters correctly. But it's not easy to implement.
35
+
36
+ And Unicode has so complex specifications of "character", it's constructed by codepoints, combining characters, and glue codepoints. It's very difficult to understand for non-CJK people so I'll try to explain it all by emoji.
37
+
38
+
Binary file
@@ -0,0 +1,15 @@
1
+ ---
2
+ id: rubyconf-2019
3
+ base_name: technical_background_of_interactive_cli_of_ruby_2.7
4
+ tags:
5
+ - rabbit
6
+ - rubyconf
7
+ presentation_date: 2019-11-20
8
+ version: 2019.11.20.0
9
+ licenses:
10
+ - CC-BY-SA-4.0
11
+ author:
12
+ markup_language: :rd
13
+ name: ITOYANAGI Sakura
14
+ email: aycabta@gmail.com
15
+ rubygems_user: aycabta
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg width="842px" height="596px" viewBox="0 0 842 596" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
4
+ <title>Slice</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <defs></defs>
7
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+ <g id="space-pirates-logo" transform="translate(142.000000, 156.000000)" fill-rule="nonzero" fill="#000000">
9
+ <path d="M194.85,284.25 C194.804363,284.258759 194.757172,284.247244 194.720698,284.218449 C194.684224,284.189654 194.662071,284.146424 194.66,284.1 L193.66,274.85 C193.660697,274.822223 193.648525,274.795682 193.62702,274.778087 C193.605515,274.760492 193.577089,274.753817 193.55,274.76 L190.55,275.07 C190.504363,275.078759 190.457172,275.067244 190.420698,275.038449 C190.384224,275.009654 190.362071,274.966424 190.36,274.92 L190.16,272.99 C190.151241,272.944363 190.162756,272.897172 190.191551,272.860698 C190.220346,272.824224 190.263576,272.802071 190.31,272.8 L199.04,271.88 C199.085637,271.871241 199.132828,271.882756 199.169302,271.911551 C199.205776,271.940346 199.227929,271.983576 199.23,272.03 L199.43,273.96 C199.438759,274.005637 199.427244,274.052828 199.398449,274.089302 C199.369654,274.125776 199.326424,274.147929 199.28,274.15 L196.28,274.46 C196.249885,274.458257 196.220899,274.471717 196.202799,274.49585 C196.1847,274.519982 196.179894,274.551577 196.19,274.58 L197.19,283.83 C197.198759,283.875637 197.187244,283.922828 197.158449,283.959302 C197.129654,283.995776 197.086424,284.017929 197.04,284.02 L194.85,284.25 Z" id="Shape"></path>
10
+ <path d="M203.64,271.58 C203.631241,271.534363 203.642756,271.487172 203.671551,271.450698 C203.700346,271.414224 203.743576,271.392071 203.79,271.39 L205.99,271.16 C206.035637,271.151241 206.082828,271.162756 206.119302,271.191551 C206.155776,271.220346 206.177929,271.263576 206.18,271.31 L206.65,275.73 C206.649303,275.757777 206.661475,275.784318 206.68298,275.801913 C206.704485,275.819508 206.732911,275.826183 206.76,275.82 L210.61,275.41 C210.637777,275.410697 210.664318,275.398525 210.681913,275.37702 C210.699508,275.355515 210.706183,275.327089 210.7,275.3 L210.23,270.88 C210.221241,270.834363 210.232756,270.787172 210.261551,270.750698 C210.290346,270.714224 210.333576,270.692071 210.38,270.69 L212.58,270.46 C212.625637,270.451241 212.672828,270.462756 212.709302,270.491551 C212.745776,270.520346 212.767929,270.563576 212.77,270.61 L214,282.06 C214.008759,282.105637 213.997244,282.152828 213.968449,282.189302 C213.939654,282.225776 213.896424,282.247929 213.85,282.25 L211.65,282.48 C211.604363,282.488759 211.557172,282.477244 211.520698,282.448449 C211.484224,282.419654 211.462071,282.376424 211.46,282.33 L210.98,277.78 C210.980697,277.752223 210.968525,277.725682 210.94702,277.708087 C210.925515,277.690492 210.897089,277.683817 210.87,277.69 L207.02,278.1 C206.992223,278.099303 206.965682,278.111475 206.948087,278.13298 C206.930492,278.154485 206.923817,278.182911 206.93,278.21 L207.41,282.76 C207.419043,282.807335 207.40627,282.856225 207.375228,282.893087 C207.344187,282.929949 207.298184,282.950856 207.25,282.95 L205.05,283.18 C205.004363,283.188759 204.957172,283.177244 204.920698,283.148449 C204.884224,283.119654 204.862071,283.076424 204.86,283.03 L203.64,271.58 Z" id="Shape"></path>
11
+ <path d="M217.91,270.07 C217.901241,270.024363 217.912756,269.977172 217.941551,269.940698 C217.970346,269.904224 218.013576,269.882071 218.06,269.88 L225.62,269.08 C225.665637,269.071241 225.712828,269.082756 225.749302,269.111551 C225.785776,269.140346 225.807929,269.183576 225.81,269.23 L226.01,271.09 C226.019043,271.137335 226.00627,271.186225 225.975228,271.223087 C225.944187,271.259949 225.898184,271.280856 225.85,271.28 L220.77,271.82 C220.742223,271.819303 220.715682,271.831475 220.698087,271.85298 C220.680492,271.874485 220.673817,271.902911 220.68,271.93 L220.93,274.27 C220.929303,274.297777 220.941475,274.324318 220.96298,274.341913 C220.984485,274.359508 221.012911,274.366183 221.04,274.36 L225.27,273.91 C225.317335,273.900957 225.366225,273.91373 225.403087,273.944772 C225.439949,273.975813 225.460856,274.021816 225.46,274.07 L225.65,275.91 C225.659043,275.957335 225.64627,276.006225 225.615228,276.043087 C225.584187,276.079949 225.538184,276.100856 225.49,276.1 L221.26,276.55 C221.232223,276.549303 221.205682,276.561475 221.188087,276.58298 C221.170492,276.604485 221.163817,276.632911 221.17,276.66 L221.43,279.11 C221.429303,279.137777 221.441475,279.164318 221.46298,279.181913 C221.484485,279.199508 221.512911,279.206183 221.54,279.2 L226.62,278.66 C226.665637,278.651241 226.712828,278.662756 226.749302,278.691551 C226.785776,278.720346 226.807929,278.763576 226.81,278.81 L227.01,280.67 C227.019043,280.717335 227.00627,280.766225 226.975228,280.803087 C226.944187,280.839949 226.898184,280.860856 226.85,280.86 L219.29,281.66 C219.244363,281.668759 219.197172,281.657244 219.160698,281.628449 C219.124224,281.599654 219.102071,281.556424 219.1,281.51 L217.91,270.07 Z" id="Shape"></path>
12
+ <path d="M238.13,278.25 C238.052539,278.168851 238.052539,278.041149 238.13,277.96 L239.29,276.31 C239.323953,276.274547 239.370912,276.254499 239.42,276.254499 C239.469088,276.254499 239.516047,276.274547 239.55,276.31 C240.489549,276.96707 241.626372,277.281285 242.77,277.2 C244,277.07 244.64,276.42 244.55,275.59 C244.46,274.76 244.02,274.51 242.55,274.46 L241.92,274.46 C239.49,274.38 238.04,273.4 237.82,271.31 C237.6,269.22 239.07,267.53 241.62,267.31 C243.051194,267.127904 244.502966,267.411946 245.76,268.12 C245.87,268.18 245.9,268.25 245.82,268.38 L244.9,270 C244.855386,270.087867 244.748411,270.123526 244.66,270.08 C243.796972,269.593699 242.8066,269.380978 241.82,269.47 C240.82,269.58 240.3,270.17 240.38,270.92 C240.46,271.67 240.98,271.98 242.38,272.03 L243.01,272.03 C245.47,272.1 246.87,273.03 247.1,275.21 C247.33,277.39 245.91,279.09 242.86,279.41 C241.195312,279.601951 239.516998,279.190356 238.13,278.25 L238.13,278.25 Z" id="Shape"></path>
13
+ <path d="M252.15,278.21 C252.104363,278.218759 252.057172,278.207244 252.020698,278.178449 C251.984224,278.149654 251.962071,278.106424 251.96,278.06 L250.75,266.61 C250.741241,266.564363 250.752756,266.517172 250.781551,266.480698 C250.810346,266.444224 250.853576,266.422071 250.9,266.42 L255.48,265.94 C258.05,265.67 259.75,267.05 259.99,269.31 C260.23,271.57 258.83,273.26 256.28,273.53 L254.18,273.75 C254.152223,273.749303 254.125682,273.761475 254.108087,273.78298 C254.090492,273.804485 254.083817,273.832911 254.09,273.86 L254.51,277.8 C254.515602,277.846745 254.501568,277.893719 254.471243,277.929731 C254.440917,277.965742 254.397016,277.987565 254.35,277.99 L252.15,278.21 Z M257.45,269.57 C257.416994,269.118711 257.189662,268.703989 256.826977,268.433414 C256.464292,268.162839 256.001992,268.063075 255.56,268.16 L253.62,268.36 C253.592223,268.359303 253.565682,268.371475 253.548087,268.39298 C253.530492,268.414485 253.523817,268.442911 253.53,268.47 L253.84,271.47 C253.839303,271.497777 253.851475,271.524318 253.87298,271.541913 C253.894485,271.559508 253.922911,271.566183 253.95,271.56 L255.89,271.36 C256.349146,271.372084 256.789721,271.178593 257.09149,270.832332 C257.393259,270.486072 257.524721,270.023186 257.45,269.57 Z" id="Shape"></path>
14
+ <path d="M265.78,265 C265.793858,264.892042 265.881495,264.808579 265.99,264.8 L268.18,264.57 C268.284935,264.559035 268.383873,264.620871 268.42,264.72 L273.62,275.72 C273.62,275.82 273.62,275.89 273.52,275.91 L271.26,276.15 C271.20561,276.165222 271.147382,276.157894 271.09846,276.12967 C271.049538,276.101446 271.014047,276.054705 271,276 L270.11,274 L265.98,274.44 L265.54,276.57 C265.534658,276.682057 265.442184,276.770127 265.33,276.77 L263.06,277.01 C262.94,277.01 262.9,276.96 262.92,276.85 L265.78,265 Z M269.2,272 L267.43,268 L267.38,268 L266.48,272.27 L269.2,272 Z" id="Shape"></path>
15
+ <path d="M276.66,269.66 C276.463665,268.592284 276.463665,267.497716 276.66,266.43 C277.007819,264.539228 278.628372,263.147802 280.55,263.09 C282.333387,262.790939 284.10629,263.675372 284.94,265.28 C284.974326,265.314366 284.986631,265.365001 284.971904,265.411288 C284.957176,265.457574 284.917874,265.491789 284.87,265.5 L283.07,266.55 C283.029892,266.578749 282.979272,266.588651 282.931288,266.577135 C282.883303,266.565618 282.842691,266.53382 282.82,266.49 C282.46078,265.72595 281.660461,265.269768 280.82,265.35 C279.990717,265.394052 279.308149,266.017995 279.19,266.84 C279.11084,268.547033 279.289515,270.256244 279.72,271.91 C280.010023,272.688539 280.809981,273.153436 281.63,273.02 C282.472617,272.928118 283.165806,272.315066 283.36,271.49 C283.373332,271.44308 283.406176,271.404147 283.450179,271.383102 C283.494183,271.362057 283.545106,271.360927 283.59,271.38 L285.59,272.03 C285.635039,272.035197 285.674772,272.061883 285.696621,272.101608 C285.71847,272.141334 285.719729,272.18918 285.7,272.23 C285.216216,273.971402 283.66571,275.202924 281.86,275.28 C279.970292,275.624441 278.096261,274.604136 277.36,272.83 C276.934946,271.824977 276.697693,270.75056 276.66,269.66 Z" id="Shape"></path>
16
+ <path d="M289.2,262.55 C289.191241,262.504363 289.202756,262.457172 289.231551,262.420698 C289.260346,262.384224 289.303576,262.362071 289.35,262.36 L296.91,261.56 C296.955637,261.551241 297.002828,261.562756 297.039302,261.591551 C297.075776,261.620346 297.097929,261.663576 297.1,261.71 L297.3,263.57 C297.309043,263.617335 297.29627,263.666225 297.265228,263.703087 C297.234187,263.739949 297.188184,263.760856 297.14,263.76 L292.06,264.3 C292.032223,264.299303 292.005682,264.311475 291.988087,264.33298 C291.970492,264.354485 291.963817,264.382911 291.97,264.41 L292.22,266.75 C292.219303,266.777777 292.231475,266.804318 292.25298,266.821913 C292.274485,266.839508 292.302911,266.846183 292.33,266.84 L296.56,266.39 C296.607335,266.380957 296.656225,266.39373 296.693087,266.424772 C296.729949,266.455813 296.750856,266.501816 296.75,266.55 L296.94,268.39 C296.949043,268.437335 296.93627,268.486225 296.905228,268.523087 C296.874187,268.559949 296.828184,268.580856 296.78,268.58 L292.55,269.03 C292.522223,269.029303 292.495682,269.041475 292.478087,269.06298 C292.460492,269.084485 292.453817,269.112911 292.46,269.14 L292.72,271.59 C292.719303,271.617777 292.731475,271.644318 292.75298,271.661913 C292.774485,271.679508 292.802911,271.686183 292.83,271.68 L297.91,271.14 C297.955637,271.131241 298.002828,271.142756 298.039302,271.171551 C298.075776,271.200346 298.097929,271.243576 298.1,271.29 L298.3,273.15 C298.309043,273.197335 298.29627,273.246225 298.265228,273.283087 C298.234187,273.319949 298.188184,273.340856 298.14,273.34 L290.58,274.14 C290.534363,274.148759 290.487172,274.137244 290.450698,274.108449 C290.414224,274.079654 290.392071,274.036424 290.39,273.99 L289.2,262.55 Z" id="Shape"></path>
17
+ <path d="M310.32,272.08 C310.274363,272.088759 310.227172,272.077244 310.190698,272.048449 C310.154224,272.019654 310.132071,271.976424 310.13,271.93 L308.92,260.48 C308.911241,260.434363 308.922756,260.387172 308.951551,260.350698 C308.980346,260.314224 309.023576,260.292071 309.07,260.29 L313.65,259.81 C316.22,259.54 317.92,260.92 318.16,263.18 C318.4,265.44 317,267.13 314.45,267.4 L312.35,267.62 C312.322223,267.619303 312.295682,267.631475 312.278087,267.65298 C312.260492,267.674485 312.253817,267.702911 312.26,267.73 L312.68,271.67 C312.685602,271.716745 312.671568,271.763719 312.641243,271.799731 C312.610917,271.835742 312.567016,271.857565 312.52,271.86 L310.32,272.08 Z M315.62,263.44 C315.586994,262.988711 315.359662,262.573989 314.996977,262.303414 C314.634292,262.032839 314.171992,261.933075 313.73,262.03 L311.79,262.23 C311.762223,262.229303 311.735682,262.241475 311.718087,262.26298 C311.700492,262.284485 311.693817,262.312911 311.7,262.34 L312.01,265.34 C312.009303,265.367777 312.021475,265.394318 312.04298,265.411913 C312.064485,265.429508 312.092911,265.436183 312.12,265.43 L314.06,265.23 C314.521211,265.242645 314.963793,265.047834 315.265967,264.699171 C315.568142,264.350509 315.698069,263.884731 315.62,263.43 L315.62,263.44 Z" id="Shape"></path>
18
+ <path d="M322.27,259.06 C322.261241,259.014363 322.272756,258.967172 322.301551,258.930698 C322.330346,258.894224 322.373576,258.872071 322.42,258.87 L324.62,258.64 C324.665145,258.634372 324.710663,258.647074 324.746371,258.675264 C324.782078,258.703455 324.804997,258.744781 324.81,258.79 L326,270.24 C326.005602,270.286745 325.991568,270.333719 325.961243,270.369731 C325.930917,270.405742 325.887016,270.427565 325.84,270.43 L323.64,270.66 C323.594363,270.668759 323.547172,270.657244 323.510698,270.628449 C323.474224,270.599654 323.452071,270.556424 323.45,270.51 L322.27,259.06 Z" id="Shape"></path>
19
+ <path d="M337.66,269.19 C337.542196,269.217752 337.422161,269.153448 337.38,269.04 L334.89,264.93 L333.31,265.1 C333.279885,265.098257 333.250899,265.111717 333.232799,265.13585 C333.2147,265.159982 333.209894,265.191577 333.22,265.22 L333.66,269.44 C333.669043,269.487335 333.65627,269.536225 333.625228,269.573087 C333.594187,269.609949 333.548184,269.630856 333.5,269.63 L331.3,269.86 C331.254363,269.868759 331.207172,269.857244 331.170698,269.828449 C331.134224,269.799654 331.112071,269.756424 331.11,269.71 L329.9,258.26 C329.891241,258.214363 329.902756,258.167172 329.931551,258.130698 C329.960346,258.094224 330.003576,258.072071 330.05,258.07 L334.75,257.57 C337.16,257.32 338.92,258.66 339.14,260.81 C339.332853,262.225688 338.638262,263.61487 337.39,264.31 L340.2,268.71 C340.236952,268.748389 340.246737,268.805441 340.224688,268.853949 C340.202639,268.902457 340.153221,268.932599 340.1,268.93 L337.66,269.19 Z M336.66,261.07 C336.626636,260.654328 336.414716,260.273531 336.079049,260.026097 C335.743382,259.778662 335.316934,259.68889 334.91,259.78 L332.83,260 C332.802223,259.999303 332.775682,260.011475 332.758087,260.03298 C332.740492,260.054485 332.733817,260.082911 332.74,260.11 L333.03,262.83 C333.029303,262.857777 333.041475,262.884318 333.06298,262.901913 C333.084485,262.919508 333.112911,262.926183 333.14,262.92 L335.22,262.7 C335.625393,262.686041 336.006405,262.502911 336.270544,262.195066 C336.534683,261.88722 336.657797,261.482808 336.61,261.08 L336.66,261.07 Z" id="Shape"></path>
20
+ <path d="M346.84,256.47 C346.853858,256.362042 346.941495,256.278579 347.05,256.27 L349.24,256.04 C349.344935,256.029035 349.443873,256.090871 349.48,256.19 L354.68,267.19 C354.68,267.29 354.68,267.36 354.58,267.38 L352.32,267.62 C352.213261,267.639513 352.109233,267.574495 352.08,267.47 L351.19,265.47 L347.06,265.91 L346.62,268.04 C346.614658,268.152057 346.522184,268.240127 346.41,268.24 L344.14,268.48 C344.02,268.48 343.98,268.43 344,268.32 L346.84,256.47 Z M350.25,263.41 L348.48,259.41 L348.43,259.41 L347.53,263.68 L350.25,263.41 Z" id="Shape"></path>
21
+ <path d="M360.44,266.79 C360.394363,266.798759 360.347172,266.787244 360.310698,266.758449 C360.274224,266.729654 360.252071,266.686424 360.25,266.64 L359.25,257.39 C359.250697,257.362223 359.238525,257.335682 359.21702,257.318087 C359.195515,257.300492 359.167089,257.293817 359.14,257.3 L356.14,257.61 C356.094363,257.618759 356.047172,257.607244 356.010698,257.578449 C355.974224,257.549654 355.952071,257.506424 355.95,257.46 L355.75,255.53 C355.741241,255.484363 355.752756,255.437172 355.781551,255.400698 C355.810346,255.364224 355.853576,255.342071 355.9,255.34 L364.63,254.42 C364.675637,254.411241 364.722828,254.422756 364.759302,254.451551 C364.795776,254.480346 364.817929,254.523576 364.82,254.57 L365.02,256.5 C365.028759,256.545637 365.017244,256.592828 364.988449,256.629302 C364.959654,256.665776 364.916424,256.687929 364.87,256.69 L361.87,257 C361.839885,256.998257 361.810899,257.011717 361.792799,257.03585 C361.7747,257.059982 361.769894,257.091577 361.78,257.12 L362.78,266.37 C362.788759,266.415637 362.777244,266.462828 362.748449,266.499302 C362.719654,266.535776 362.676424,266.557929 362.63,266.56 L360.44,266.79 Z" id="Shape"></path>
22
+ <path d="M369.23,254.11 C369.221241,254.064363 369.232756,254.017172 369.261551,253.980698 C369.290346,253.944224 369.333576,253.922071 369.38,253.92 L376.94,253.12 C376.985637,253.111241 377.032828,253.122756 377.069302,253.151551 C377.105776,253.180346 377.127929,253.223576 377.13,253.27 L377.33,255.13 C377.339043,255.177335 377.32627,255.226225 377.295228,255.263087 C377.264187,255.299949 377.218184,255.320856 377.17,255.32 L372.09,255.86 C372.062223,255.859303 372.035682,255.871475 372.018087,255.89298 C372.000492,255.914485 371.993817,255.942911 372,255.97 L372.25,258.31 C372.249303,258.337777 372.261475,258.364318 372.28298,258.381913 C372.304485,258.399508 372.332911,258.406183 372.36,258.4 L376.59,257.95 C376.637335,257.940957 376.686225,257.95373 376.723087,257.984772 C376.759949,258.015813 376.780856,258.061816 376.78,258.11 L377,260 C377.009043,260.047335 376.99627,260.096225 376.965228,260.133087 C376.934187,260.169949 376.888184,260.190856 376.84,260.19 L372.61,260.64 C372.582223,260.639303 372.555682,260.651475 372.538087,260.67298 C372.520492,260.694485 372.513817,260.722911 372.52,260.75 L372.78,263.2 C372.779303,263.227777 372.791475,263.254318 372.81298,263.271913 C372.834485,263.289508 372.862911,263.296183 372.89,263.29 L377.97,262.75 C378.015637,262.741241 378.062828,262.752756 378.099302,262.781551 C378.135776,262.810346 378.157929,262.853576 378.16,262.9 L378.36,264.76 C378.369043,264.807335 378.35627,264.856225 378.325228,264.893087 C378.294187,264.929949 378.248184,264.950856 378.2,264.95 L370.64,265.75 C370.594363,265.758759 370.547172,265.747244 370.510698,265.718449 C370.474224,265.689654 370.452071,265.646424 370.45,265.6 L369.23,254.11 Z" id="Shape"></path>
23
+ <path d="M382.57,263 C382.492539,262.918851 382.492539,262.791149 382.57,262.71 L383.73,261.06 C383.763953,261.024547 383.810912,261.004499 383.86,261.004499 C383.909088,261.004499 383.956047,261.024547 383.99,261.06 C384.929549,261.71707 386.066372,262.031285 387.21,261.95 C388.44,261.82 389.08,261.17 388.99,260.34 C388.9,259.51 388.46,259.26 386.99,259.21 L386.36,259.21 C383.93,259.13 382.48,258.15 382.26,256.06 C382.04,253.97 383.51,252.28 386.06,252.06 C387.491194,251.877904 388.942966,252.161946 390.2,252.87 C390.31,252.93 390.34,253 390.26,253.13 L389.37,254.82 C389.325386,254.907867 389.218411,254.943526 389.13,254.9 C388.266972,254.413699 387.2766,254.200978 386.29,254.29 C385.29,254.4 384.77,254.99 384.85,255.74 C384.93,256.49 385.45,256.8 386.85,256.85 L387.48,256.85 C389.94,256.92 391.34,257.85 391.57,260.03 C391.8,262.21 390.38,263.91 387.33,264.23 C385.646806,264.408998 383.955765,263.972027 382.57,263 L382.57,263 Z" id="Shape"></path>
24
+ <path d="M402.31,250.62 C402.301241,250.574363 402.312756,250.527172 402.341551,250.490698 C402.370346,250.454224 402.413576,250.432071 402.46,250.43 L404.66,250.2 C404.705145,250.194372 404.750663,250.207074 404.786371,250.235264 C404.822078,250.263455 404.844997,250.304781 404.85,250.35 L405.85,259.6 C405.849303,259.627777 405.861475,259.654318 405.88298,259.671913 C405.904485,259.689508 405.932911,259.696183 405.96,259.69 L411.16,259.14 C411.206745,259.134398 411.253719,259.148432 411.289731,259.178757 C411.325742,259.209083 411.347565,259.252984 411.35,259.3 L411.55,261.23 C411.558759,261.275637 411.547244,261.322828 411.518449,261.359302 C411.489654,261.395776 411.446424,261.417929 411.4,261.42 L403.72,262.23 C403.674363,262.238759 403.627172,262.227244 403.590698,262.198449 C403.554224,262.169654 403.532071,262.126424 403.53,262.08 L402.31,250.62 Z" id="Shape"></path>
25
+ <path d="M414.76,249.31 C414.751241,249.264363 414.762756,249.217172 414.791551,249.180698 C414.820346,249.144224 414.863576,249.122071 414.91,249.12 L417.11,248.89 C417.155145,248.884372 417.200663,248.897074 417.236371,248.925264 C417.272078,248.953455 417.294997,248.994781 417.3,249.04 L418.3,258.29 C418.299303,258.317777 418.311475,258.344318 418.33298,258.361913 C418.354485,258.379508 418.382911,258.386183 418.41,258.38 L423.61,257.83 C423.656745,257.824398 423.703719,257.838432 423.739731,257.868757 C423.775742,257.899083 423.797565,257.942984 423.8,257.99 L424,259.92 C424.008759,259.965637 423.997244,260.012828 423.968449,260.049302 C423.939654,260.085776 423.896424,260.107929 423.85,260.11 L416.17,260.92 C416.124363,260.928759 416.077172,260.917244 416.040698,260.888449 C416.004224,260.859654 415.982071,260.816424 415.98,260.77 L414.76,249.31 Z" id="Shape"></path>
26
+ <path d="M427.44,253.76 C427.243665,252.692284 427.243665,251.597716 427.44,250.53 C427.787819,248.639228 429.408372,247.247802 431.33,247.19 C433.113387,246.890939 434.88629,247.775372 435.72,249.38 C435.754326,249.414366 435.766631,249.465001 435.751904,249.511288 C435.737176,249.557574 435.697874,249.591789 435.65,249.6 L433.85,250.65 C433.809892,250.678749 433.759272,250.688651 433.711288,250.677135 C433.663303,250.665618 433.622691,250.63382 433.6,250.59 C433.24078,249.82595 432.440461,249.369768 431.6,249.45 C430.770717,249.494052 430.088149,250.117995 429.97,250.94 C429.89084,252.647033 430.069515,254.356244 430.5,256.01 C430.790023,256.788539 431.589981,257.253436 432.41,257.12 C433.252617,257.028118 433.945806,256.415066 434.14,255.59 C434.153332,255.54308 434.186176,255.504147 434.230179,255.483102 C434.274183,255.462057 434.325106,255.460927 434.37,255.48 L436.37,256.13 C436.415039,256.135197 436.454772,256.161883 436.476621,256.201608 C436.49847,256.241334 436.499729,256.28918 436.48,256.33 C435.996216,258.071402 434.44571,259.302924 432.64,259.38 C430.750292,259.724441 428.876261,258.704136 428.14,256.93 C427.714946,255.924977 427.477693,254.85056 427.44,253.76 L427.44,253.76 Z" id="Shape"></path>
27
+ <path d="M440.94,256 C440.931241,255.954363 440.942756,255.907172 440.971551,255.870698 C441.000346,255.834224 441.043576,255.812071 441.09,255.81 L443.15,255.59 C443.195637,255.581241 443.242828,255.592756 443.279302,255.621551 C443.315776,255.650346 443.337929,255.693576 443.34,255.74 L443.56,257.82 C443.569043,257.867335 443.55627,257.916225 443.525228,257.953087 C443.494187,257.989949 443.448184,258.010856 443.4,258.01 L441.34,258.23 C441.294363,258.238759 441.247172,258.227244 441.210698,258.198449 C441.174224,258.169654 441.152071,258.126424 441.15,258.08 L440.94,256 Z" id="Shape"></path>
28
+ <path d="M32.66,229.64 L47.87,228 C48.5223655,227.942192 49.1050954,227.568647 49.43,227 L62.77,202.71 C63.0949046,202.141353 63.6776345,201.767808 64.33,201.71 L127.83,194.96 C128.59141,194.852569 129.346986,195.191178 129.773524,195.830984 C130.200061,196.47079 130.222017,197.29848 129.83,197.96 L120.26,215.39 C119.935095,215.958647 119.352365,216.332192 118.7,216.39 L113.7,216.92 C112.578862,217.03598 111.76402,218.038862 111.88,219.16 C111.99598,220.281138 112.998862,221.09598 114.12,220.98 L117.35,220.64 L132,219.07 L136.38,218.6 C137.032365,218.542192 137.615095,218.168647 137.94,217.6 L152.3,191.45 C152.692017,190.78848 152.670061,189.96079 152.243524,189.320984 C151.816986,188.681178 151.06141,188.342569 150.3,188.45 L113.76,192.34 C112.99859,192.447431 112.243014,192.108822 111.816476,191.469016 C111.389939,190.82921 111.367983,190.00152 111.76,189.34 L113.98,185.34 C114.372017,184.67848 114.350061,183.85079 113.923524,183.210984 C113.496986,182.571178 112.74141,182.232569 111.98,182.34 L77.61,186 C76.488862,186.11598 75.6740202,187.118862 75.79,188.24 C75.9059798,189.361138 76.908862,190.17598 78.03,190.06 L89.46,188.84 C90.2214096,188.732569 90.9769864,189.071178 91.4035239,189.710984 C91.8300614,190.35079 91.8520174,191.17848 91.46,191.84 L90.26,194.02 C89.9350954,194.588647 89.3523655,194.962192 88.7,195.02 L46.53,199.51 C45.8776345,199.567808 45.2949046,199.941353 44.97,200.51 L30.61,226.66 C30.2207934,227.328761 30.2522672,228.162029 30.6908131,228.799525 C31.129359,229.437021 31.8962858,229.764355 32.66,229.64 Z" id="Shape"></path>
29
+ <path d="M275.6,183.28 C274.983155,183.352029 274.442954,183.727169 274.16,184.28 L264.4,202 C264.062303,202.611303 264.091295,203.359424 264.475289,203.942759 C264.859283,204.526094 265.53499,204.8485 266.23,204.78 L281.82,203.12 C282.436845,203.047971 282.977046,202.672831 283.26,202.12 L293,184.41 C293.337697,183.798697 293.308705,183.050576 292.924711,182.467241 C292.540717,181.883906 291.86501,181.5615 291.17,181.63 L275.6,183.28 Z" id="Shape"></path>
30
+ <path d="M297.52,176.2 L304.13,164.2 C304.40602,163.711524 304.386355,163.109845 304.079028,162.640435 C303.771701,162.171024 303.228099,161.912371 302.67,161.97 L302.67,161.97 C302.153813,162.029055 301.711926,162.367195 301.52,162.85 C300.953824,164.312693 300.186434,165.689284 299.24,166.94 C297.395204,169.349463 294.008698,169.937096 291.46,168.29 C290.941035,167.934955 290.481948,167.499498 290.1,167 C288.97,165.7 286.1,166.2 285.78,166.94 C285.23,168.04 284.54,169.42 283.78,170.76 C283.198205,171.812572 282.303595,172.658258 281.22,173.18 C280.367713,173.607525 279.668961,174.288808 279.22,175.13 L278.46,176.52 C278.18398,177.008476 278.203645,177.610155 278.510972,178.079565 C278.818299,178.548976 279.361901,178.807629 279.92,178.75 L296.42,177 C296.894091,176.926008 297.303536,176.628229 297.52,176.2 Z" id="Shape"></path>
31
+ <path d="M52.52,192.65 L70.1,190.78 C71.221138,190.66402 72.0359796,189.661138 71.9199998,188.54 C71.80402,187.418862 70.801138,186.60402 69.68,186.72 L52.1,188.59 C50.978862,188.70598 50.1640204,189.708862 50.2800002,190.83 C50.39598,191.951138 51.398862,192.76598 52.52,192.65 L52.52,192.65 Z" id="Shape"></path>
32
+ <path d="M361.63,233.46 L384.93,217 C385.210403,216.800232 385.537626,216.676232 385.88,216.64 L392.36,215.95 C393.481138,215.83402 394.29598,214.831138 394.18,213.71 C394.06402,212.588862 393.061138,211.77402 391.94,211.89 L391.62,211.89 C390.85859,211.997431 390.103014,211.658822 389.676476,211.019016 C389.249939,210.37921 389.227983,209.55152 389.62,208.89 L404,182.81 C404.324905,182.241353 404.907635,181.867808 405.56,181.81 L411.56,181.18 C412.681138,181.06402 413.49598,180.061138 413.38,178.94 C413.26402,177.818862 412.261138,177.00402 411.14,177.12 L410.82,177.12 C410.05859,177.227431 409.303014,176.888822 408.876476,176.249016 C408.449939,175.60921 408.427983,174.78152 408.82,174.12 L417.2,158.87 C417.524905,158.301353 418.107635,157.927808 418.76,157.87 L424.76,157.24 C425.412365,157.182192 425.995095,156.808647 426.32,156.24 L428.71,151.88 C429.102017,151.21848 429.080061,150.39079 428.653524,149.750984 C428.226986,149.111178 427.47141,148.772569 426.71,148.88 L403.45,151.35 C402.797635,151.407808 402.214905,151.781353 401.89,152.35 L358.7,230.8 C358.147284,231.623806 358.28198,232.728271 359.016486,233.395092 C359.750993,234.061914 360.863298,234.089539 361.63,233.46 Z" id="Shape"></path>
33
+ <path d="M388,230.83 L382,231.46 C380.878862,231.57598 380.06402,232.578862 380.18,233.7 C380.29598,234.821138 381.298862,235.63598 382.42,235.52 L397.63,233.9 C398.282365,233.842192 398.865095,233.468647 399.19,232.9 L414.72,204.62 C415.112017,203.95848 415.090061,203.13079 414.663524,202.490984 C414.236986,201.851178 413.48141,201.512569 412.72,201.62 L405.56,202.38 C404.907635,202.437808 404.324905,202.811353 404,203.38 L389.49,229.8 C389.186182,230.361456 388.632587,230.744142 388,230.83 Z" id="Shape"></path>
34
+ <path d="M9.31,279.27 L2.38,280.01 C1.25886204,280.12598 0.444020402,281.128862 0.560000191,282.25 C0.675979981,283.371138 1.67886202,284.18598 2.8,284.07 L9.73,283.33 C10.4552491,283.254974 11.0853812,282.798732 11.3830316,282.133135 C11.6806819,281.467538 11.6006304,280.693706 11.1730316,280.103135 C10.7454328,279.512563 10.0352491,279.194974 9.31,279.27 Z" id="Shape"></path>
35
+ <path d="M515,139.36 L499.6,141 C498.965932,141.073282 498.404924,141.44481 498.09,142 L495.62,146.5 C495.284254,147.143269 495.323257,147.917927 495.721915,148.52422 C496.120574,149.130513 496.816345,149.473323 497.54,149.42 L512.91,147.79 C513.544068,147.716718 514.105076,147.34519 514.42,146.79 L516.89,142.29 C517.227381,141.650898 517.193737,140.879497 516.801996,140.272194 C516.410254,139.664891 515.721357,139.316163 515,139.36 Z" id="Shape"></path>
36
+ <path d="M416.62,236 L353.12,242.75 C351.998862,242.86598 351.18402,243.868862 351.3,244.99 C351.41598,246.111138 352.418862,246.92598 353.54,246.81 L417,240 C418.121138,239.88402 418.93598,238.881138 418.82,237.76 C418.70402,236.638862 417.701138,235.82402 416.58,235.94 L416.62,236 Z" id="Shape"></path>
37
+ <path d="M96.83,216.62 L96.88,216.53 L115.88,214.53 C116.998376,214.411259 117.808741,213.408377 117.69,212.29 C117.571259,211.171624 116.568377,210.361259 115.45,210.48 L61,216.33 C60.3512865,216.390949 59.7729283,216.764084 59.45,217.33 L59.45,217.33 C59.0579826,217.99152 59.0799386,218.81921 59.5064761,219.459016 C59.9330136,220.098822 60.6885904,220.437431 61.45,220.33 L72.89,219.11 C73.6514096,219.002569 74.4069864,219.341178 74.8335239,219.980984 C75.2600614,220.62079 75.2820174,221.44848 74.89,222.11 L71.27,228.7 C70.9450954,229.268647 70.3623655,229.642192 69.71,229.7 L28.17,234.12 C27.5176345,234.177808 26.9349046,234.551353 26.61,235.12 L26.61,235.12 C26.2179826,235.78152 26.2399386,236.60921 26.6664761,237.249016 C27.0930136,237.888822 27.8485904,238.227431 28.61,238.12 L68.38,233.89 L68.3,234.04 L46.1,274.49 C45.7750954,275.058647 45.1923655,275.432192 44.54,275.49 L17.27,278.39 C16.6176345,278.447808 16.0349046,278.821353 15.71,279.39 L15.71,279.39 C15.3179826,280.05152 15.3399386,280.87921 15.7664761,281.519016 C16.1930136,282.158822 16.9485904,282.497431 17.71,282.39 L62.28,277.65 C62.9323655,277.592192 63.5150954,277.218647 63.84,276.65 L96.84,216.57 L96.83,216.62 Z" id="Shape"></path>
38
+ <path d="M510.38,168.44 L478.21,171.86 L485.13,159.27 C485.454905,158.701353 486.037635,158.327808 486.69,158.27 L508.74,155.92 C509.465249,155.844974 510.095381,155.388732 510.393032,154.723135 C510.690682,154.057538 510.61063,153.283706 510.183032,152.693135 C509.755433,152.102563 509.045249,151.784974 508.32,151.86 L491.91,153.61 C491.14859,153.717431 490.393014,153.378822 489.966476,152.739016 C489.539939,152.09921 489.517983,151.27152 489.91,150.61 L493,144.98 C493.392017,144.31848 493.370061,143.49079 492.943524,142.850984 C492.516986,142.211178 491.76141,141.872569 491,141.98 L475.79,143.6 C475.137635,143.657808 474.554905,144.031353 474.23,144.6 L468.39,155.23 C468.065095,155.798647 467.482365,156.172192 466.83,156.23 L444.78,158.58 C443.658862,158.69598 442.84402,159.698862 442.96,160.82 C443.07598,161.941138 444.078862,162.75598 445.2,162.64 L461.61,160.89 C462.37141,160.782569 463.126986,161.121178 463.553524,161.760984 C463.980061,162.40079 464.002017,163.22848 463.61,163.89 L450.12,188.44 C449.795095,189.008647 449.212365,189.382192 448.56,189.44 L446.13,189.7 L454.13,175.19 C454.443425,174.629356 454.418353,173.940787 454.064983,173.404423 C453.711614,172.868058 453.088831,172.573275 452.45,172.64 L436.45,174.34 C435.892319,174.399134 435.399078,174.727961 435.13,175.22 L426,191.9 L425.29,191.97 C424.52859,192.077431 423.773014,191.738822 423.346476,191.099016 C422.919939,190.45921 422.897983,189.63152 423.29,188.97 L444.65,150.07 C445.042017,149.40848 445.020061,148.58079 444.593524,147.940984 C444.166986,147.301178 443.41141,146.962569 442.65,147.07 L435.49,147.83 C434.837635,147.887808 434.254905,148.261353 433.93,148.83 L409.82,192.73 C409.495095,193.298647 408.912365,193.672192 408.26,193.73 L402.26,194.36 C401.138862,194.47598 400.32402,195.478862 400.44,196.6 C400.55598,197.721138 401.558862,198.53598 402.68,198.42 L423.51,196.21 L408.14,224.21 C407.753648,224.940285 407.94111,225.842103 408.586492,226.35792 C409.231874,226.873736 410.152832,226.857815 410.78,226.32 L440.03,199.66 C440.739186,199.015767 441.337218,198.258936 441.8,197.42 L443.61,194.12 C444.302622,194.161621 444.924181,194.559261 445.252294,195.170652 C445.580407,195.782043 445.568185,196.519813 445.22,197.12 L424,236.08 C423.607983,236.74152 423.629939,237.56921 424.056476,238.209016 C424.483014,238.848822 425.23859,239.187431 426,239.08 L441.21,237.46 C441.862365,237.402192 442.445095,237.028647 442.77,236.46 L475.84,176.24 L510.84,172.52 C511.961138,172.40402 512.77598,171.401138 512.66,170.28 C512.54402,169.158862 511.541138,168.34402 510.42,168.46 L510.38,168.44 Z" id="Shape"></path>
39
+ <path d="M507.07,200 L500.14,200.74 C499.018862,200.85598 498.20402,201.858862 498.32,202.98 C498.43598,204.101138 499.438862,204.91598 500.56,204.8 L507.49,204.06 C508.611138,203.94402 509.42598,202.941138 509.31,201.82 C509.19402,200.698862 508.191138,199.88402 507.07,200 L507.07,200 Z" id="Shape"></path>
40
+ <path d="M491.78,201.59 L484.19,202.4 L492.75,186.81 C492.973687,186.401574 492.953871,185.903073 492.69847,185.513692 C492.443069,185.12431 491.993729,184.90754 491.53,184.95 L474.44,186.77 C474.020158,186.801317 473.644286,187.041876 473.44,187.41 L447.44,234.84 C447.216313,235.248426 447.236129,235.746927 447.49153,236.136308 C447.746931,236.52569 448.196271,236.74246 448.66,236.7 L459.47,235.55 C459.939766,235.50251 460.396658,235.721644 460.653684,236.117716 C460.910709,236.513788 460.924727,237.020319 460.69,237.43 L448.32,259.37 C447.964976,259.922582 448.098161,260.655674 448.624864,261.048068 C449.151567,261.440462 449.892116,261.358301 450.32,260.86 L489.12,219.27 C489.474178,218.892935 489.561891,218.337696 489.341193,217.869815 C489.120494,217.401934 488.636234,217.116494 488.12,217.15 L477.84,218.15 C477.378003,218.188406 476.932233,217.970015 476.679435,217.581416 C476.426637,217.192817 476.407649,216.696787 476.63,216.29 L481.84,206.8 L492.25,205.69 C493.371138,205.57402 494.18598,204.571138 494.07,203.45 C493.95402,202.328862 492.951138,201.51402 491.83,201.63 L491.78,201.59 Z" id="Shape"></path>
41
+ <path d="M209.29,232.28 L200.96,233.07 C200.334535,233.128098 199.728452,232.834497 199.386335,232.307679 C199.044218,231.78086 199.022521,231.107758 199.33,230.56 L218.92,194.83 C219.279509,194.184574 219.178106,193.380433 218.669621,192.844462 C218.161135,192.308491 217.363442,192.164935 216.7,192.49 L196,202.78 C195.690915,202.933344 195.436172,203.177619 195.27,203.48 L187.69,217.26 L187.53,217.36 L144.19,221.88 C143.641855,221.936131 143.15608,222.25749 142.89,222.74 L118.19,267.74 L101.34,269.53 C100.218862,269.64598 99.4040204,270.648862 99.5200002,271.77 C99.63598,272.891138 100.638862,273.70598 101.76,273.59 L137.09,269.83 C137.181277,269.816255 137.271492,269.796207 137.36,269.77 L171.55,266.08 C172.094476,266.020745 172.575889,265.699803 172.84,265.22 L173.24,264.48 C173.55035,263.928971 173.527078,263.250777 173.179685,262.722319 C172.832292,262.19386 172.218919,261.903581 171.59,261.97 L141.59,265.16 C140.961081,265.226419 140.347708,264.93614 140.000315,264.407681 C139.652922,263.879223 139.62965,263.201029 139.94,262.65 L149.09,246 C149.354111,245.520197 149.835524,245.199255 150.38,245.14 L168.76,243.14 C169.304476,243.080745 169.785889,242.759803 170.05,242.28 L170.45,241.54 C170.76035,240.988971 170.737078,240.310777 170.389685,239.782319 C170.042292,239.25386 169.428919,238.963581 168.8,239.03 L155.1,240.49 C154.471081,240.556419 153.857708,240.26614 153.510315,239.737681 C153.162922,239.209223 153.13965,238.531029 153.45,237.98 L160.57,224.98 C160.834111,224.500197 161.315524,224.179255 161.86,224.12 L185.13,221.64 L185.35,221.43 L170.16,249.06 C169.84965,249.611029 169.872922,250.289223 170.220315,250.817681 C170.567708,251.34614 171.181081,251.636419 171.81,251.57 L180.96,250.57 C181.590229,250.505185 182.203774,250.798306 182.549349,251.329312 C182.894925,251.860319 182.914478,252.540006 182.6,253.09 L172.43,271.09 C172.014867,271.83114 172.214399,272.765259 172.89611,273.272107 C173.577821,273.778955 174.529826,273.700998 175.12,273.09 L210.65,235 C211.036347,234.48487 211.098493,233.79567 210.810526,233.219737 C210.52256,232.643804 209.933912,232.28 209.29,232.28 Z" id="Shape"></path>
42
+ <path d="M133.15,226.28 C133.542017,225.61848 133.520061,224.79079 133.093524,224.150984 C132.666986,223.511178 131.91141,223.172569 131.15,223.28 L96.54,226.96 C95.4243849,227.087026 94.6229747,228.094385 94.7500002,229.21 C94.8770256,230.325615 95.8843849,231.127025 97,231 L131.61,227.32 C132.262998,227.247334 132.838657,226.858578 133.15,226.28 Z" id="Shape"></path>
43
+ <path d="M249.33,210.7 L212.41,214.7 C211.962506,214.75096 211.56744,215.01558 211.35,215.41 L210.6,216.78 C210.349029,217.234757 210.370458,217.791085 210.655667,218.22519 C210.940875,218.659295 211.442981,218.899816 211.96,218.85 L226.78,217.27 C227.297019,217.220184 227.799125,217.460705 228.084333,217.89481 C228.369542,218.328915 228.390971,218.885243 228.14,219.34 L220.67,233 C220.450579,233.397108 220.051165,233.66214 219.6,233.71 L216.32,234.06 C215.991055,234.095603 215.685849,234.248205 215.46,234.49 L214.12,235.92 C213.721517,236.345633 213.628545,236.97367 213.886621,237.496498 C214.144698,238.019325 214.699785,238.327469 215.28,238.27 C215.797019,238.220184 216.299125,238.460705 216.584333,238.89481 C216.869542,239.328915 216.890971,239.885243 216.64,240.34 L207.15,257.63 C206.930579,258.027108 206.531165,258.29214 206.08,258.34 L191.6,259.88 C191.271055,259.915603 190.965849,260.068205 190.74,260.31 L189.36,261.79 C188.963507,262.214375 188.870199,262.839485 189.125481,263.361148 C189.380763,263.882811 189.931619,264.192691 190.51,264.14 L223.75,260.65 C224.201165,260.60214 224.600579,260.337108 224.82,259.94 L250.7,212.82 C250.981152,212.360871 250.974121,211.781196 250.681914,211.329023 C250.389707,210.876849 249.864099,210.632292 249.33,210.7 Z" id="Shape"></path>
44
+ <path d="M274.22,208.05 L261.94,209.36 C260.88827,209.472266 259.958142,210.092351 259.45,211.02 L235.75,254.18 C235.158926,255.237096 235.204677,256.535166 235.868709,257.548025 C236.532741,258.560883 237.704884,259.120489 238.91,259 L251.19,257.69 C252.24173,257.577734 253.171858,256.957649 253.68,256.03 L277.38,212.87 C277.971074,211.812904 277.925323,210.514834 277.261291,209.501975 C276.597259,208.489117 275.425116,207.929511 274.22,208.05 L274.22,208.05 Z" id="Shape"></path>
45
+ <path d="M332.19,111.75 C332.138699,112.440496 332.448191,113.108406 333.008159,113.515656 C333.568128,113.922905 334.298902,114.011553 334.94,113.75 L341.04,111.51 C341.563572,111.308347 341.9742,110.889897 342.16594,110.362614 C342.357679,109.835332 342.311749,109.25086 342.04,108.76 C340.05778,105.131482 338.967739,101.083247 338.86,96.95 C338.862075,96.3450545 338.569821,95.7768901 338.07648,95.4267777 C337.58314,95.0766652 336.95035,94.9883467 336.38,95.19 L331.13,97.12 C330.268309,97.4406164 329.764915,98.3374196 329.94,99.24 C330.267411,101.079818 330.835627,102.868521 331.63,104.56 C332.480661,106.24572 332.74796,108.166047 332.39,110.02 C332.274614,110.589987 332.207708,111.168721 332.19,111.75 Z" id="Shape"></path>
46
+ <path d="M345.38,103 C348.967393,111.848576 357.400701,117.779327 366.941117,118.162927 C376.481533,118.546526 385.363772,113.311995 389.65,104.78 C390.389652,103.343472 390.508902,101.666749 389.98,100.14 L389.1,97.59 C388.959223,97.1570603 388.648772,96.7997887 388.239714,96.5999725 C387.830656,96.4001563 387.358019,96.3749053 386.93,96.53 L369.47,102.95 C368.334878,103.366062 367.062911,103.123966 366.16,102.32 L360.5,97.32 C359.580067,96.5008356 359.152093,95.262363 359.37,94.05 L360.71,86.5 C360.916042,85.2951976 361.745919,84.2902092 362.89,83.86 L379.8,77.64 C380.995697,77.1775755 381.610271,75.8511564 381.19,74.64 L380.44,72.47 C379.964428,71.0817508 378.931561,69.9546576 377.59,69.36 C371.919959,66.8514715 365.495682,66.6506008 359.68,68.8 C346.3,73.72 339.6,89.33 345.38,103 Z" id="Shape"></path>
47
+ <path d="M385.65,170.47 C390.65,157.02 383.57,141.99 370.11,137.83 C358.18,134.13 345.3,140.67 340.83,152.67 C340.411713,153.824334 340.077507,155.007423 339.83,156.21 C339.600197,157.282621 338.710165,158.088079 337.62,158.21 L336.29,158.35 C335.900856,158.388126 335.517539,158.234267 335.262747,157.937674 C335.007955,157.64108 334.913643,157.238949 335.01,156.86 C335.42,155.25 335.94,152.86 336.34,151.75 C336.968005,149.926981 337.803489,148.182196 338.83,146.55 C339.198455,145.955581 339.283018,145.227941 339.060704,144.564866 C338.83839,143.901791 338.332301,143.372183 337.68,143.12 L320.36,136.75 C318.455264,136.041189 316.379771,135.929565 314.41,136.43 C313.6,136.64 312.8,136.87 312.03,137.1 C310.910952,137.466951 310.298698,138.669116 310.66,139.79 L311.18,141.49 C311.346441,142.041922 311.292682,142.636854 311.03,143.15 C310.13,144.92 309.35,146.58 308.68,148.15 C308.452477,148.677597 308.45219,149.275591 308.679207,149.803406 C308.906224,150.33122 309.34052,150.742297 309.88,150.94 L327,157.26 C327.472809,157.440156 327.761743,157.919605 327.700152,158.421811 C327.63856,158.924017 327.242331,159.319436 326.74,159.38 L310.6,161.1 C309.947635,161.157808 309.364905,161.531353 309.04,162.1 L288.7,199.1 C288.307983,199.76152 288.329939,200.58921 288.756476,201.229016 C289.183014,201.868822 289.93859,202.207431 290.7,202.1 L305.91,200.48 C306.562365,200.422192 307.145095,200.048647 307.47,199.48 L319.93,176.78 C320.254905,176.211353 320.837635,175.837808 321.49,175.78 L341.41,173.66 C341.934299,173.610436 342.439019,173.872577 342.7,174.33 C343.046667,174.923333 343.416667,175.5 343.81,176.06 C344.083904,176.454819 344.125431,176.966075 343.918837,177.399922 C343.712243,177.83377 343.289159,178.123783 342.81,178.16 L322.7,180.3 C322.069752,180.369794 321.513392,180.743191 321.21,181.3 L321.11,181.48 C320.791814,182.117596 320.836901,182.876328 321.228358,183.471755 C321.619814,184.067181 322.298507,184.409355 323.01,184.37 L328.39,183.8 C329.101493,183.760645 329.780186,184.102819 330.171642,184.698245 C330.563099,185.293672 330.608186,186.052404 330.29,186.69 L325.53,195.36 C325.211814,195.997596 325.256901,196.756328 325.648358,197.351755 C326.039814,197.947181 326.718507,198.289355 327.43,198.25 C328.141493,198.210645 328.820186,198.552819 329.211642,199.148245 C329.603099,199.743672 329.648186,200.502404 329.33,201.14 L329.23,201.32 C328.926608,201.876809 328.370248,202.250206 327.74,202.32 L285.4,206.82 C284.769752,206.889794 284.213392,207.263191 283.91,207.82 L267.9,237 C267.589655,237.817269 267.846074,238.7414 268.533163,239.281911 C269.220253,239.822421 270.178777,239.854046 270.9,239.36 L301.62,209.61 C301.930198,209.311052 302.331498,209.124483 302.76,209.08 L315.21,207.76 C315.921493,207.720645 316.600186,208.062819 316.991642,208.658245 C317.383099,209.253672 317.428186,210.012404 317.11,210.65 L301.46,239.15 C301.156608,239.706809 300.600248,240.080206 299.97,240.15 L289.19,241.3 C288.559752,241.369794 288.003392,241.743191 287.7,242.3 L287.6,242.48 C287.281814,243.117596 287.326901,243.876328 287.718358,244.471755 C288.109814,245.067181 288.788507,245.409355 289.5,245.37 L329.05,241.16 C329.680248,241.090206 330.236608,240.716809 330.54,240.16 L330.64,239.98 C330.958186,239.342404 330.913099,238.583672 330.521642,237.988245 C330.130186,237.392819 329.451493,237.050645 328.74,237.09 L324.08,237.59 C323.368507,237.629355 322.689814,237.287181 322.298358,236.691755 C321.906901,236.096328 321.861814,235.337596 322.18,234.7 L337.83,206.2 C338.133392,205.643191 338.689752,205.269794 339.32,205.2 L349.38,204.13 C350.010248,204.060206 350.566608,203.686809 350.87,203.13 L350.97,202.95 C351.288186,202.312404 351.243099,201.553672 350.851642,200.958245 C350.460186,200.362819 349.781493,200.020645 349.07,200.06 L344.41,200.56 C343.698507,200.599355 343.019814,200.257181 342.628358,199.661755 C342.236901,199.066328 342.191814,198.307596 342.51,197.67 L350.06,183.92 C350.227079,183.612341 350.509536,183.383659 350.845229,183.284264 C351.180922,183.184869 351.542351,183.222903 351.85,183.39 C353.271277,184.174175 354.769081,184.810825 356.32,185.29 C358.079772,185.840511 359.899639,186.17628 361.74,186.29 C362.194352,186.332554 362.597078,186.600144 362.812348,187.002519 C363.027619,187.404893 363.026737,187.888413 362.81,188.29 L332.26,244 C331.956608,244.556809 331.400248,244.930206 330.77,245 L260.34,252.49 C259.709752,252.559794 259.153392,252.933191 258.85,253.49 L258.75,253.67 C258.431814,254.307596 258.476901,255.066328 258.868358,255.661755 C259.259814,256.257181 259.938507,256.599355 260.65,256.56 L340.45,248.07 C341.080248,248.000206 341.636608,247.626809 341.94,247.07 L343.84,243.6 L377.26,182.76 C377.964164,181.508823 378.846756,180.366844 379.88,179.37 C382.429132,176.859429 384.39846,173.821818 385.65,170.47 L385.65,170.47 Z M326.65,171.15 C325.88859,171.257431 325.133014,170.918822 324.706476,170.279016 C324.279939,169.63921 324.257983,168.81152 324.65,168.15 L326.72,164.38 C327.044905,163.811353 327.627635,163.437808 328.28,163.38 L337.8,162.38 C338.157893,162.34104 338.516292,162.44883 338.793321,162.678745 C339.070349,162.908659 339.242339,163.241057 339.27,163.6 C339.390108,165.164378 339.654566,166.714306 340.06,168.23 C340.165031,168.60943 340.097889,169.015851 339.876403,169.341339 C339.654917,169.666827 339.301499,169.878446 338.91,169.92 L326.65,171.15 Z M363,174.2 L355.71,171.52 C354.201245,170.949159 353.108703,169.620597 352.84,168.03 L351.34,159.61 C351.051757,158.011852 351.616279,156.378907 352.83,155.3 L359.15,149.75 C360.340262,148.692896 362.01459,148.37416 363.51,148.92 L370.8,151.6 C372.308755,152.170841 373.401297,153.499403 373.67,155.09 L375.17,163.51 C375.458243,165.108148 374.893721,166.741093 373.68,167.82 L367.36,173.37 C366.169738,174.427104 364.49541,174.74584 363,174.2 Z" id="Shape"></path>
48
+ <path d="M164.52,115.5 C173.662569,119.411165 184.268357,117.310655 191.23,110.21 C192.459947,108.935467 194.323153,108.50098 195.99,109.1 L212.58,115.2 C213.171639,115.42008 213.647441,115.872691 213.896784,116.452604 C214.146128,117.032517 214.14729,117.689208 213.9,118.27 C211.67,123.53 209.38,128.62 217.2,133.14 C217.695132,133.413483 218.280935,133.47134 218.82,133.3 C222.165408,132.349982 225.680131,132.155289 229.11,132.73 C229.484663,132.856125 229.749857,133.19113 229.786623,133.584739 C229.823389,133.978348 229.624824,134.35667 229.28,134.55 L201.51,144.76 C199.943284,145.331925 198.187033,144.941647 197.01,143.76 C190.864789,137.587618 181.816537,135.307289 173.48,137.83 C159.78,142.07 152.68,157.58 158.23,171.21 C160.617297,177.076032 165.198709,181.779423 171,184.32 C171.41364,184.498653 171.65672,184.931867 171.593653,185.378003 C171.530587,185.82414 171.176952,186.173002 170.73,186.23 L163.53,187 C162.877635,187.057808 162.294905,187.431353 161.97,188 L147.61,214.15 C147.217983,214.81152 147.239939,215.63921 147.666476,216.279016 C148.093014,216.918822 148.84859,217.257431 149.61,217.15 L164.82,215.53 C165.472365,215.472192 166.055095,215.098647 166.38,214.53 L179.72,190.24 C180.044905,189.671353 180.627635,189.297808 181.28,189.24 L200.51,187.24 C201.27141,187.132569 202.026986,187.471178 202.453524,188.110984 C202.880061,188.75079 202.902017,189.57848 202.51,190.24 L201.51,191.99 C201.012982,192.764161 201.108184,193.777521 201.740695,194.445566 C202.373205,195.11361 203.379855,195.264005 204.18,194.81 L224.18,184.81 C224.396043,184.702233 224.629814,184.634474 224.87,184.61 L244.79,182.49 C245.55141,182.382569 246.306986,182.721178 246.733524,183.360984 C247.160061,184.00079 247.182017,184.82848 246.79,185.49 L237.22,202.92 C236.895095,203.488647 236.312365,203.862192 235.66,203.92 L230.76,204.44 C230.082414,204.492424 229.470011,204.863577 229.11,205.44 C228.717983,206.10152 228.739939,206.92921 229.166476,207.569016 C229.593014,208.208822 230.34859,208.547431 231.11,208.44 L234.34,208.1 L249,206.64 L253.38,206.17 C254.032365,206.112192 254.615095,205.738647 254.94,205.17 L269.25,179 C269.642017,178.33848 269.620061,177.51079 269.193524,176.870984 C268.766986,176.231178 268.01141,175.892569 267.25,176 L230.71,179.89 C229.94859,179.997431 229.193014,179.658822 228.766476,179.019016 C228.339939,178.37921 228.317983,177.55152 228.71,176.89 L230.93,172.89 C231.322017,172.22848 231.300061,171.40079 230.873524,170.760984 C230.446986,170.121178 229.69141,169.782569 228.93,169.89 L204.43,172.5 C203.886056,172.556391 203.351302,172.329293 203.014159,171.898725 C202.677015,171.468156 202.584798,170.894544 202.77,170.38 C203.449644,168.519971 203.909434,166.586841 204.14,164.62 C204.310825,162.923313 205.420003,161.46631 207.01,160.85 L238.33,149.34 C238.917883,149.114818 239.57254,149.141582 240.14008,149.414001 C240.707619,149.68642 241.137981,150.180465 241.33,150.78 C242.48,154.22 243.17,157.11 244.05,159.78 C244.555991,161.523716 245.357638,163.167601 246.42,164.64 C246.994678,165.376342 248.002504,165.616852 248.847761,165.219366 C249.693018,164.82188 250.150586,163.892261 249.95,162.98 C248.85,157.21 248.95,150.06 252.18,150.14 C252.772983,150.185299 253.315048,150.492145 253.65907,150.977253 C254.003091,151.462362 254.113379,152.075408 253.96,152.65 C253.14,156.76 255.8,157.92 259.07,162.98 C259.65,163.88 260.82,166.49 262.2,168.98 C262.672813,169.796644 263.652105,170.171699 264.549469,169.879814 C265.446834,169.58793 266.01809,168.70853 265.92,167.77 C265.124592,160.727365 266.090141,153.597426 268.73,147.02 C269.142716,145.945978 270.17441,145.237184 271.325,145.237184 C272.47559,145.237184 273.507284,145.945978 273.92,147.02 C276.559859,153.597426 277.525408,160.727365 276.73,167.77 C276.63191,168.70853 277.203166,169.58793 278.100531,169.879814 C278.997895,170.171699 279.977187,169.796644 280.45,168.98 C281.83,166.53 283,163.91 283.58,162.98 C286.85,157.92 289.51,156.76 288.69,152.65 C288.536621,152.075408 288.646909,151.462362 288.99093,150.977253 C289.334952,150.492145 289.877017,150.185299 290.47,150.14 C293.73,150.06 293.8,157.21 292.7,162.98 C292.499414,163.892261 292.956982,164.82188 293.802239,165.219366 C294.647496,165.616852 295.655322,165.376342 296.23,164.64 C297.292362,163.167601 298.094009,161.523716 298.6,159.78 C300.04,155.37 300.98,150.39 304.31,143.33 C304.661949,142.672697 304.619049,141.874189 304.1987,141.258379 C303.778351,140.642568 303.050351,140.311706 302.31,140.4 C301.619306,140.485557 300.920694,140.485557 300.23,140.4 C299.235142,140.236612 298.498725,139.386297 298.479105,138.378302 C298.459485,137.370307 299.162254,136.491979 300.15,136.29 C306.01,135.19 314.52,130.62 323.91,133.43 C324.444998,133.59681 325.025438,133.53151 325.51,133.25 C337.85,126.11 324.94,117.54 326.97,109.13 C327.306401,107.713499 327.038313,106.220897 326.23,105.01 C324.82847,102.731821 323.912667,100.18868 323.54,97.54 C323.515281,97.3895874 323.475067,97.2421358 323.42,97.1 C317.14,81.15 283,69.32 256,70.59 C255.231053,70.6368425 254.554763,70.0859717 254.445085,69.3234467 C254.335406,68.5609218 254.829023,67.8417767 255.58,67.67 C282.25,61.42 314.67,71.58 323.5,83.78 C323.908612,84.3388027 324.57714,84.646566 325.267373,84.5936277 C325.957606,84.5406895 326.571382,84.1345784 326.89,83.52 C336.37,63.86 364.3,60 346.22,30.12 C345.775725,29.3952905 344.921891,29.0305929 344.091141,29.2107013 C343.260391,29.3908097 342.634256,30.0763678 342.53,30.92 C339.65,50.64 311.74,36.69 303,12.65 C302.733241,11.86382 302.145487,11.2277115 301.382804,10.8997578 C300.620121,10.571804 299.754114,10.5827953 299,10.93 C294.146553,13.1394615 289.521145,15.8189156 285.19,18.93 C284.37,19.53 284.99,20.58 286.19,20.76 C290.496667,21.3933333 294.766667,22.2033333 299,23.19 C300.42,23.53 300.66,24.77 299.41,25.11 C278.92,30.72 264.34,43 258.11,58.26 C257.64,59.46 256.11,58.46 256.27,57.08 C257.517679,49.3566221 260.284359,41.9572821 264.41,35.31 C264.614445,34.8923696 264.565904,34.3951481 264.284549,34.0249431 C264.003193,33.6547381 263.537122,33.4748397 263.08,33.56 C259.253333,33.8666667 255.443333,34.3466667 251.65,35 C250.6,35.18 249.65,34.2 249.97,33.29 C254.7,21.58 262.97,11.13 274.39,2.83 C274.785397,2.53733312 274.941,2.01933158 274.772331,1.55722437 C274.603661,1.09511715 274.150959,0.799147205 273.66,0.83 C229.84,5.52 207.76,62.01 192.89,55.72 C192.220935,55.4552812 191.461242,55.5703618 190.900597,56.0213608 C190.339951,56.4723598 190.064777,57.1897556 190.18,57.9 C193.74,86.78 218.48,81.77 219.03,98.97 C219.044169,99.1664115 219.044169,99.3635885 219.03,99.56 L201.51,93.12 C199.829408,92.4673599 198.665969,90.9161071 198.51,89.12 C197.631084,80.6035945 192.543409,73.0941109 184.96,69.12 C178.996121,66.0727451 172.027595,65.6664593 165.75,68 C164.239135,68.5594951 163.036285,69.7332734 162.44,71.23 L161.44,73.74 C161.081842,74.6265347 161.488056,75.6376547 162.36,76.03 L179.5,83.38 C180.605006,83.8850491 181.364148,84.9326657 181.5,86.14 L182.5,93.76 C182.659725,94.9818111 182.170781,96.1984855 181.21,96.97 L175.29,101.65 C174.345009,102.397017 173.066583,102.565938 171.96,102.09 L155.36,95 C154.793364,94.7615941 154.154263,94.7632 153.588832,95.0044505 C153.023401,95.245701 152.579995,95.705965 152.36,96.28 L151.51,98.38 C150.947245,99.8049102 150.990589,101.397802 151.63,102.79 C154.183196,108.491517 158.783144,113.02723 164.52,115.5 Z M168.41,163.66 L169.96,154.91 C170.211203,153.419122 171.235528,152.173939 172.65,151.64 L180.25,148.85 C181.651218,148.335245 183.221895,148.630947 184.34,149.62 L190.9,155.38 C192.02155,156.384797 192.546774,157.896235 192.29,159.38 L190.74,168.13 C190.488797,169.620878 189.464472,170.866061 188.05,171.4 L180.45,174.19 C179.048973,174.707031 177.4771,174.411104 176.36,173.42 L169.8,167.66 C168.67845,166.655203 168.153226,165.143765 168.41,163.66 L168.41,163.66 Z M206.47,176.28 C207.23141,176.172569 207.986986,176.511178 208.413524,177.150984 C208.840061,177.79079 208.862017,178.61848 208.47,179.28 L207.27,181.46 C206.945095,182.028647 206.362365,182.402192 205.71,182.46 L193.63,183.74 C193.294983,183.78064 192.977652,183.579843 192.870934,183.259689 C192.764216,182.939534 192.897603,182.588498 193.19,182.42 C194.802568,181.371179 196.283192,180.13229 197.6,178.73 C198.610925,177.618676 199.988328,176.908675 201.48,176.73 L206.47,176.28 Z M280.07,112.58 C287.33,109.13 296.07,99.18 308.6,97.29 C309.66956,97.1455131 310.660842,97.8756986 310.84,98.94 C312.07,105.29 316.84,109.39 315.96,115.17 C314.39,125.17 301.63,126.5 298.01,126.67 C285.01,127.27 282.17,119.67 279.3,115.67 C278.946785,115.167809 278.829826,114.536674 278.979639,113.941264 C279.129452,113.345854 279.531176,112.845227 280.08,112.57 L280.07,112.58 Z M264.8,127.19 C266.09,125.54 267.64,124.26 269.56,122.19 C270.170352,121.51712 271.036542,121.133371 271.945,121.133371 C272.853458,121.133371 273.719648,121.51712 274.33,122.19 C276.26,124.31 277.81,125.58 279.09,127.19 C280.37,128.8 279.58,133.13 276.09,132.12 C274.46,131.64 273.34,129.87 271.92,129.87 C270.5,129.87 269.39,131.64 267.75,132.12 C264.32,133.13 263.4,129 264.8,127.19 Z M231.36,98.52 C231.680285,97.6385022 232.570092,97.0979651 233.5,97.22 C246.21,98.96 255.07,109.07 262.4,112.56 C262.960944,112.828077 263.374271,113.330929 263.528688,113.933157 C263.683106,114.535385 263.56274,115.175081 263.2,115.68 C260.32,119.68 257.51,127.26 244.47,126.68 C240.85,126.51 228.09,125.18 226.52,115.18 C225.61,109.28 228.92,104.87 231.36,98.52 L231.36,98.52 Z" id="Shape"></path>
49
+ </g>
50
+ </g>
51
+ </svg>
@@ -0,0 +1,1013 @@
1
+ = Technical Background of\nInteractive CLI of Ruby 2.7
2
+
3
+ :author
4
+ ITOYANAGI Sakura
5
+ :theme
6
+ .
7
+ : content-source
8
+ RubyConf 2019
9
+ :allotted-time
10
+ 40m
11
+ : start-time
12
+ 2019-11-20T13:50:00-06:00
13
+ : end-time
14
+ 2019-11-20T14:30:00-06:00
15
+
16
+ = Greeting
17
+
18
+ Hello, everyone.
19
+
20
+ = Let me introduce myself
21
+
22
+ I'm
23
+
24
+ * a Ruby committer
25
+ * the current RDoc maintainer
26
+ * a member of Ruby core team
27
+
28
+ = Community: Asakusa.rb
29
+
30
+ # image
31
+ # src = asakusarb.jpg
32
+ # relative-height = 70
33
+ # caption = Asakusa.rb every Ruby Tuesday
34
+ # relative-padding-top = 0
35
+ # relative-padding-bottom = 0
36
+ # relative-padding-right = 0
37
+ # relative-padding-left = 0
38
+
39
+ = Company: Space Pirates, LLC.
40
+
41
+ # image
42
+ # src = space-pirates-logo.svg
43
+ # relative-height = 70
44
+ # caption = Space Pirates, LLC.
45
+ # relative-padding-top = 0
46
+ # relative-padding-bottom = 0
47
+ # relative-padding-right = 0
48
+ # relative-padding-left = 0
49
+
50
+ = Company: Space Pirates, LLC.
51
+
52
+ Our business: We steal money via bank from venture companies that commission software development to us.
53
+
54
+ = Company: Space Pirates, LLC.
55
+
56
+ This company is founded by my friend 2 years ago. Only 5 employees.
57
+
58
+ = Company: Space Pirates, LLC.
59
+
60
+ ...But it supported me as a semi-full time OSS engineer as a Ruby committer.
61
+
62
+ = Hobby: Climbing
63
+
64
+ And my hobby is climbing.
65
+
66
+ = Hobby: Climbing
67
+
68
+ Usually, I go to climbing area before international conference.
69
+
70
+ = Hobby: Climbing
71
+
72
+ But this time, I couldn't go to climbing before RubyConf.
73
+
74
+ = Hobby: Climbing
75
+
76
+ Because I went to Matsue where Matz is living to attend the RubyWorld Conference as a speaker.
77
+
78
+ = Hobby: Climbing
79
+
80
+ And I told about "adventure".
81
+
82
+ = Hobby: Climbing
83
+
84
+ Adventure is to go somewhere that nobody hasn't known the world.
85
+
86
+ = Hobby: Climbing
87
+
88
+ Nobody understands the value, nobody knows how can we go there.
89
+
90
+ = Hobby: Climbing
91
+
92
+ And everyone is living in ((*well-known*)) comfort zones, but adventure is not.
93
+
94
+ = Hobby: Climbing
95
+
96
+ Only one week later after the presentation of the RubyWorld Conference, I came here. So I couldn't climb around Nashville.
97
+
98
+ = Hobby: Climbing
99
+
100
+ But I found a good place to climb near here.
101
+
102
+ = Hobby: Climbing
103
+
104
+ It's Puerto Rico.
105
+
106
+ = Hobby: Climbing
107
+
108
+ # image
109
+ # src = worldmap.png
110
+ # relative-height = 70
111
+ # caption = world map
112
+ # relative-padding-top = 0
113
+ # relative-padding-bottom = 0
114
+ # relative-padding-right = 0
115
+ # relative-padding-left = 0
116
+
117
+ = Hobby: Climbing
118
+
119
+ # image
120
+ # src = worldmap_japan.png
121
+ # relative-height = 70
122
+ # caption = I'm from Japan.
123
+ # relative-padding-top = 0
124
+ # relative-padding-bottom = 0
125
+ # relative-padding-right = 0
126
+ # relative-padding-left = 0
127
+
128
+ = Hobby: Climbing
129
+
130
+ # image
131
+ # src = worldmap_nashville.png
132
+ # relative-height = 70
133
+ # caption = And it's Nashville. So far.
134
+ # relative-padding-top = 0
135
+ # relative-padding-bottom = 0
136
+ # relative-padding-right = 0
137
+ # relative-padding-left = 0
138
+
139
+ = Hobby: Climbing
140
+
141
+ # image
142
+ # src = worldmap_puertorico.png
143
+ # relative-height = 70
144
+ # caption = Puerto Rico is almost there.
145
+ # relative-padding-top = 0
146
+ # relative-padding-bottom = 0
147
+ # relative-padding-right = 0
148
+ # relative-padding-left = 0
149
+
150
+ = Hobby: Climbing
151
+
152
+ I'll try to climb ((*unknown*)) and unexplored area of a jungle of Puerto Rico.
153
+
154
+ = Hobby: Climbing
155
+
156
+ The word, unknown is important for adventure.
157
+
158
+ = Hobby: Climbing
159
+
160
+ I think that adventure means going into the unknown.
161
+
162
+ = My Adventure In Ruby
163
+
164
+ Today, I'll talk about my adventure in Ruby.
165
+
166
+ = My Adventure In Ruby
167
+
168
+ I'm the current maintainer of RDoc which is the standard documentation tool of Ruby.
169
+
170
+ = My Adventure In Ruby
171
+
172
+ And I'm trying to improve IRB with documentation.
173
+
174
+ = My Adventure In Ruby
175
+
176
+ The brand-new IRB has multi-line editings that is powered by Reline.
177
+
178
+ = My Adventure In Ruby
179
+
180
+ The multi-line editing feature of IRB was advocated by keiju-san who is the author of the original IRB.
181
+
182
+ = My Adventure In Ruby
183
+
184
+ It's the great vision but it's too hard to implement because the original IRB is implemented by GNU Readline.
185
+
186
+ = My Adventure In Ruby
187
+
188
+ GNU Readline has over 30 years of histrical background.
189
+
190
+ = My Adventure In Ruby
191
+
192
+ So Reline needs to be compatible with so many features of GNU Readline.
193
+
194
+ = My Adventure In Ruby
195
+
196
+ * the history of terminal
197
+ * GNU Readline compatible features
198
+ * I18n support
199
+
200
+ = My Adventure In Ruby
201
+
202
+ * ((*the history of terminal*))
203
+ * GNU Readline compatible features
204
+ * I18n support
205
+
206
+ = The History of Terminal
207
+
208
+ * the history of terminal
209
+ * the Morse code
210
+ * typewriter
211
+ * teletype
212
+ * escape sequence
213
+ * escape sequence on Unix like OS
214
+ * Windows support
215
+
216
+ = The History of Terminal
217
+
218
+ When do you think the terminal's historical background started?
219
+
220
+ * 30 years ago?
221
+ * 60 years ago?
222
+ * (('wait'))120 years ago?
223
+ * (('wait'))240 years ago?
224
+
225
+ = The History of Terminal
226
+
227
+ Most communication technologies are invented by market of new businesses.
228
+
229
+ = The History of Terminal
230
+
231
+ Japanese people continues to eat rice over 10,000 years. It's our soul. Old Japanese kings treat rice stockpiles as assets.
232
+
233
+ = The History of Terminal
234
+
235
+ Back then, rice is a practical currency in Japan.
236
+
237
+ = The History of Terminal
238
+
239
+ About 200 years ago, merchant of those days was in trouble.
240
+
241
+ = The History of Terminal
242
+
243
+ Rice market has different between east side and west side.
244
+
245
+ = The History of Terminal
246
+
247
+ So they needed the soonest communication technology.
248
+
249
+ = The History of Terminal
250
+
251
+ # image
252
+ # src = norosi_on.png
253
+ # relative-height = 90
254
+ # align = center
255
+ # vertical-align = top
256
+ # relative-padding-top = 0
257
+ # relative-padding-bottom = 0
258
+ # relative-padding-right = 0
259
+ # relative-padding-left = 0
260
+ # caption = Illustration purpose by ©︎ 2019 Doom Kobayashi
261
+
262
+ = It's
263
+
264
+ = just
265
+
266
+ = smoke
267
+
268
+ = fullimage
269
+
270
+ # image
271
+ # src = norosi_on.png
272
+ # relative-height = 90
273
+ # align = center
274
+ # vertical-align = top
275
+ # relative-padding-top = 0
276
+ # relative-padding-bottom = 0
277
+ # relative-padding-right = 0
278
+ # relative-padding-left = 0
279
+ # caption = Illustration purpose by ©︎ 2019 Doom Kobayashi
280
+
281
+ = fullimage
282
+
283
+ # image
284
+ # src = norosi_off.png
285
+ # relative-height = 90
286
+ # align = center
287
+ # vertical-align = top
288
+ # relative-padding-top = 0
289
+ # relative-padding-bottom = 0
290
+ # relative-padding-right = 0
291
+ # relative-padding-left = 0
292
+ # caption = Illustration purpose by ©︎ 2019 Doom Kobayashi
293
+
294
+ = The History of Terminal
295
+
296
+ It's a kind of bit encoded data.
297
+
298
+ = The History of Terminal
299
+
300
+ Merchants could send rice market information within 2 hours over 500km.
301
+
302
+ = The History of Terminal
303
+
304
+ In the same age, telegraph is invented by William F. Cooke and Charles Wheatstone.
305
+
306
+ = The History of Terminal
307
+
308
+ It sends code from typed primitive keys via railway track as a line to a printing system.
309
+
310
+ = The History of Terminal
311
+
312
+ # image
313
+ # src = electric_telegraph.jpg
314
+ # relative-height = 70
315
+ # caption = Cooke and Wheatstone's five-needle, six-wire telegraph
316
+ # relative-padding-top = 0
317
+ # relative-padding-bottom = 0
318
+ # relative-padding-right = 0
319
+ # relative-padding-left = 0
320
+
321
+ = The History of Terminal
322
+
323
+ It's just experimental so it has only several keys. It's not enough to type alphabet, so "shift key" is added.
324
+
325
+ = The History of Terminal
326
+
327
+ It's the "shift key" in early times. It was 1837.
328
+
329
+ = The History of Terminal
330
+
331
+ After that, Samuel Morse who is famous Morse code invents telegraph on Morse code.
332
+
333
+ = The History of Terminal
334
+
335
+ The system is just Morse code so can receive generated code from a typed key or hand inputted code, and can output to auto printing system or writing characters via ear.
336
+
337
+ = The History of Terminal
338
+
339
+ The system continues to be improved, it's called "teletype".
340
+
341
+ = The History of Terminal
342
+
343
+ Royal Earl House invented brand new teletype and it's used for money transfer. It was 1855. A few years later, The Western Union Company is founded.
344
+
345
+ = The History of Terminal
346
+
347
+ But the typing system and printing system is not convenient.
348
+
349
+ = The History of Terminal
350
+
351
+ Human beings know more convenient typing and printing system.
352
+
353
+ = The History of Terminal
354
+
355
+ It's...
356
+
357
+ = The History of Terminal
358
+
359
+ # image
360
+ # src = Ernest_Hemingway_typewriter.jpg
361
+ # relative-height = 80
362
+ # align = center
363
+ # vertical-align = top
364
+ # relative-padding-top = 0
365
+ # relative-padding-bottom = 0
366
+ # relative-padding-right = 0
367
+ # relative-padding-left = 0
368
+ # caption = Typewriter
369
+
370
+ = The History of Terminal
371
+
372
+ But typewriter needs "operations of a roll paper".
373
+
374
+ = The History of Terminal
375
+
376
+ Typewriters print characters to the same point but move a roll paper. The protocol that ups to here doesn't contain operations of a roll paper.
377
+
378
+ = The History of Terminal
379
+
380
+ * Move left
381
+ * Move right
382
+ * Roll a paper(move to next line)
383
+ * Move to head of line
384
+ * ...
385
+
386
+ = The History of Terminal
387
+
388
+ Those operations are added to the protocol.
389
+
390
+ = The History of Terminal
391
+
392
+ * Move left
393
+ * Move right
394
+ * Roll a paper(move to next line)
395
+ * Move to head of line
396
+
397
+ = The History of Terminal
398
+
399
+ * Move cursor left
400
+ * Move cursor right
401
+ * Line feed
402
+ * Carriage return
403
+
404
+ = The History of Terminal
405
+
406
+ These are "control codes".
407
+
408
+ = The History of Terminal
409
+
410
+ The reason of those two operations are separated is those need too many time to finish.
411
+
412
+ * Line feed
413
+ * Carriage return
414
+
415
+ = The History of Terminal
416
+
417
+ Aside, "Line break" character code is...
418
+
419
+ * Carriage return + Line feed on Windows
420
+ * Carriage return on macOS
421
+ * Line feed on Unix like OSes
422
+
423
+ = The History of Terminal
424
+
425
+ The difference is based on early times operations set of printing systems for each OSes.
426
+
427
+ = The History of Terminal
428
+
429
+ Now, other some operations are added to the protocol. It's the base of modern "terminal". It was 1901.
430
+
431
+ = The History of Terminal
432
+
433
+ The early "terminal" was that separated "keyboard" and "printing system" from typewriter.
434
+
435
+ = The History of Terminal
436
+
437
+ The "printing system" is the base of "line printer".
438
+
439
+ = The History of Terminal
440
+
441
+ And, some terminals need "extended features". So, a new character, "following characters are not printable, just control code" is added to the protocol.
442
+
443
+ = The History of Terminal
444
+
445
+ These are called "escape key" and "escape sequence".
446
+
447
+ = The History of Terminal
448
+
449
+ But many companies develop new "terminal" machines. They specify non-compatible escape sequences each other.
450
+
451
+ = The History of Terminal
452
+
453
+ It's a flood of terminals. Users are confused hardly.
454
+
455
+ = The History of Terminal
456
+
457
+ In those times, a new technology comes.
458
+
459
+ = The History of Terminal
460
+
461
+ It's...
462
+
463
+ = computer
464
+
465
+ = The History of Terminal
466
+
467
+ Teletype terminals and line printers come to be connected to computers, eventually, line printers are replaced with visual monitors.
468
+
469
+ = The History of Terminal
470
+
471
+ # image
472
+ # src = deskset.jpg
473
+ # relative-height = 80
474
+ # align = center
475
+ # vertical-align = top
476
+ # relative-padding-top = 0
477
+ # relative-padding-bottom = 0
478
+ # relative-padding-right = 0
479
+ # relative-padding-left = 0
480
+ # caption = "Desk Set"(1957), sponsored by IBM
481
+
482
+ = The History of Terminal
483
+
484
+ Many escape sequences for terminals are different so computers support them by hardware because softwares is still immature.
485
+
486
+ = The History of Terminal
487
+
488
+ Dozens of years later, primitive softwares come to be OSes. Unix comes up. User space on OS changes "settings" of software.
489
+
490
+ = The History of Terminal
491
+
492
+ Unix like OSes changed the situation of escape sequences.
493
+
494
+ = The History of Terminal
495
+
496
+ Termcap what is encapsulated software for incompatible escape sequences named each escape sequence, and has a dictionary from name to real escape sequence.
497
+
498
+ = The History of Terminal
499
+
500
+ It's a revolution. Users can use any terminals for own computer. It's developed at 1978.
501
+
502
+ = The History of Terminal
503
+
504
+ And Terminfo what is improved Termcap is developed at 1982.
505
+
506
+ = The History of Terminal
507
+
508
+ # blockquote
509
+ # title = ANSI escape code - Wikipedia
510
+ ANSI sequences were introduced in the 1970s to replace vendor-specific sequences and became widespread in the computer equipment market by the early 1980s.
511
+
512
+ = The History of Terminal
513
+
514
+ Especially, SGR parameters is famous to set character decoration.
515
+
516
+ = The History of Terminal
517
+
518
+ # enscript ruby
519
+ print "\e[31m" # red
520
+ print "red"
521
+ print "\e[32m" # green
522
+ print "green"
523
+ print "\e[34m" # blue
524
+ print "blue"
525
+ print "\e[0m" # reset
526
+ print "\n"
527
+
528
+ result:
529
+
530
+ # image
531
+ # src = char_deco.png
532
+ # relative-height = 100
533
+ # align = center
534
+ # vertical-align = top
535
+ # relative-padding-top = 0
536
+ # relative-padding-bottom = 0
537
+ # relative-padding-right = 0
538
+ # relative-padding-left = 0
539
+
540
+ = The History of Terminal
541
+
542
+ This is the very sad history of terminals, but Windows introduced another way.
543
+
544
+ = The History of Terminal
545
+
546
+ Windows has Console API for control terminal as known as command prompt.
547
+
548
+ = The History of Terminal
549
+
550
+ Console API of Windows controls a console via "console handle".
551
+
552
+ = The History of Terminal
553
+
554
+ Escape sequences need using I/O to control console.
555
+
556
+ = The History of Terminal
557
+
558
+ Console API of Windows is smarter API for console, it's very practical!
559
+
560
+ = The History of Terminal
561
+
562
+ And it means Console API is a newcomer of the terminal's sad history.
563
+
564
+ = The History of Terminal
565
+
566
+ It's complex insanely.
567
+
568
+ = The History of Terminal
569
+
570
+ Humans are stupid.
571
+
572
+ = The History of Terminal
573
+
574
+ I asked a question at the start of this section.
575
+
576
+ "When do you think the terminal's historical background started?"
577
+
578
+ = The History of Terminal
579
+
580
+ An answer is "unclear".
581
+
582
+ = The History of Terminal
583
+
584
+ What is "terminal"?
585
+
586
+ What is "the protocol"?
587
+
588
+ What is "encoded data"?
589
+
590
+ = The History of Terminal
591
+
592
+ # image
593
+ # src = norosi_on.png
594
+ # relative-height = 90
595
+ # align = center
596
+ # vertical-align = top
597
+ # relative-padding-top = 0
598
+ # relative-padding-bottom = 0
599
+ # relative-padding-right = 0
600
+ # relative-padding-left = 0
601
+
602
+ = The History of Terminal
603
+
604
+ Maybe, fire's smoke is the earliest long distance communication technology.
605
+
606
+ = My Adventure In Ruby
607
+
608
+ * the history of terminal
609
+ * GNU Readline compatible features
610
+ * I18n support
611
+
612
+ = My Adventure In Ruby
613
+
614
+ * the history of terminal
615
+ * ((*GNU Readline compatible features*))
616
+ * I18n support
617
+
618
+ = GNU Readline Compatible Features
619
+
620
+ Ruby needs GNU Readline as a native library.
621
+
622
+ = GNU Readline Compatible Features
623
+
624
+ GNU Readline is powerful line editor for taking user input.
625
+
626
+ = GNU Readline Compatible Features
627
+
628
+ # enscript ruby
629
+ require 'readline'
630
+
631
+ Readline.readline('prompt>')
632
+
633
+ Shows the prompt and reads the inputted line with line editing.
634
+
635
+ = GNU Readline Compatible Features
636
+
637
+ Line editing is...:
638
+
639
+ * Move cursor
640
+ * Delete characters
641
+ * Use history
642
+ * ...
643
+
644
+ = GNU Readline Compatible Features
645
+
646
+ # enscript ruby
647
+ # small IRB sample
648
+ require 'readline'
649
+
650
+ while (line = Readline.readline('echo>'))
651
+ break if line == 'exit'
652
+ print eval(line) # evaluate!
653
+ end
654
+
655
+ = GNU Readline Compatible Features
656
+
657
+ GNU Readline is used by...:
658
+
659
+ * shell(tcsh, Bash, and others)
660
+ * MySQL command-line tool
661
+ * The GNU Debugger(GDB)
662
+
663
+ = GNU Readline Compatible Features
664
+
665
+ Ruby's standard library "readline" is used by...:
666
+
667
+ * IRB
668
+ * Pry
669
+ * Thor(famous simple framework for command line utilities)
670
+
671
+ = GNU Readline Compatible Features
672
+
673
+ The "readline" library is very important for Ruby. But "readline" can be used only when GNU Readline is installed before Ruby builds.
674
+
675
+ = GNU Readline Compatible Features
676
+
677
+ # enscript bash
678
+ # Ubuntu/GNU Linux case
679
+ $ sudo apt install libreadline-dev
680
+ $ rbenv install 2.6.5
681
+
682
+ If you forget installing "libreadline-dev" first, Ruby doesn't have "readline" library.
683
+
684
+ = GNU Readline Compatible Features
685
+
686
+ # enscript bash
687
+ $ pry # tried to launch Pry without readline lib
688
+ Sorry, you can't use Pry without Readline or a compatible library.
689
+ Possible solutions:
690
+ * Rebuild Ruby with Readline support using `--with-readline`
691
+ * Use the rb-readline gem, which is a pure-Ruby port of Readline
692
+ * Use the pry-coolline gem, a pure-ruby alternative to Readline
693
+
694
+ Pry fails to launch when Ruby doesn't have "readline" library.
695
+
696
+ = GNU Readline Compatible Features
697
+
698
+ It's must be a trap to beginners. So I decided to re-implement "readline" library by pure Ruby. It's Reline.
699
+
700
+ = GNU Readline Compatible Features
701
+
702
+ Ruby 2.7 uses GNU Readline by default, and uses Reline inside if doesn't have GNU Readline.
703
+
704
+ = GNU Readline Compatible Features
705
+
706
+ Reline has 3 layers:
707
+
708
+ * Keyboard input
709
+ * Line editing
710
+ * Build string as default encoding of the environment
711
+
712
+ = GNU Readline Compatible Features
713
+
714
+ * ((*Keyboard input*))
715
+ * Line editing
716
+ * Build string by default encoding of the environment
717
+
718
+ Reline uses select(2) system call in Unix like OSes, kbhit() and getwch() in Windows Console API, to take keyboard input.
719
+
720
+ = GNU Readline Compatible Features
721
+
722
+ * Keyboard input
723
+ * ((*Line editing*))
724
+ * Build string by default encoding of the environment
725
+
726
+ And I ported Emacs bindings and Vi bindings from GNU Readline for line editing.
727
+
728
+ = GNU Readline Compatible Features
729
+
730
+ * Keyboard input
731
+ * Line editing
732
+ * ((*Build string by default encoding of the environment*))
733
+
734
+ Finally, I implemented building string as the default encoding of the environment.
735
+
736
+ = GNU Readline Compatible Features
737
+
738
+ * Keyboard input
739
+ * Line editing
740
+ * ((*Build string by default encoding of the environment*))
741
+
742
+ I got off from work! I did it!
743
+
744
+ = 😫😫\n😫😫
745
+
746
+ = GNU Readline Compatible Features
747
+
748
+ * Keyboard input
749
+ * ((*Line editing*))
750
+ * Build string by default encoding of the environment
751
+
752
+ But the implementation is broken in non-Unicode encodings, so I re-implement whole line editting code.
753
+
754
+ = 😫😫😫\n😫😫😫\n😫😫😫
755
+
756
+ = GNU Readline Compatible Features
757
+
758
+ * ((*Keyboard input*))
759
+ * Line editing
760
+ * Build string by default encoding of the environment
761
+
762
+ Unicode characters are broken at the time of first input...I fixed it...
763
+
764
+ = GNU Readline Compatible Features
765
+
766
+ * Keyboard input
767
+ * ((*Line editing*))
768
+ * Build string by default encoding of the environment
769
+
770
+ Combining Unicode charasters are sometimes broken in line editing...
771
+
772
+ = 😫😫😫😫\n😫😫😫😫\n😫😫😫😫\n😫😫😫😫
773
+
774
+ = GNU Readline Compatible Features
775
+
776
+ * Keyboard input
777
+ * Line editing
778
+ * ((*Build string by default encoding of the environment*))
779
+
780
+ I fixed the whole implementation the layer due to lower layer...
781
+
782
+ = GNU Readline Compatible Features
783
+
784
+ * ((*Keyboard input*))
785
+ * ((*Line editing*))
786
+ * ((*Build string by default encoding of the environment*))
787
+
788
+ All tests fail so I remake whole tests.
789
+
790
+ = GNU Readline Compatible Features
791
+
792
+ * ((*Keyboard input*))
793
+ * ((*Line editing*))
794
+ * ((*Build string by default encoding of the environment*))
795
+
796
+ I worked out over 2 years but I'm still fixing source code and tests.
797
+
798
+ = 😫😫😫😫😫😫\n😫😫😫😫😫😫\n😫😫😫😫😫😫\n😫😫😫😫😫😫\n😫😫😫😫😫😫\n😫😫😫😫😫😫
799
+
800
+ = GNU Readline Compatible Features
801
+
802
+ I consult Ruby core team about the implementation problems, and almost finished.
803
+
804
+ = GNU Readline Compatible Features
805
+
806
+ It will be adopted at Ruby 2.7.
807
+
808
+ = GNU Readline Compatible Features
809
+
810
+ But there is still some work to be done.
811
+
812
+ = GNU Readline Compatible Features
813
+
814
+ It's Reidline.
815
+
816
+ = GNU Readline Compatible Features
817
+
818
+ The original author of IRB, keiju-san, he's developing new IRB, it's Reirb.
819
+
820
+ = GNU Readline Compatible Features
821
+
822
+ Reirb uses an original line editor "Reidline" inside.
823
+
824
+ = GNU Readline Compatible Features
825
+
826
+ Reidline is a ((*multiline*)) editor, like JavaScript console in browser.
827
+
828
+ = GNU Readline Compatible Features
829
+
830
+ But the implementation is too hard, so I added Reidline mode to Reline. It's just for Reirb but Ruby 2.7's IRB contains the Reidline mode as a transition period.
831
+
832
+ = My Adventure In Ruby
833
+
834
+ * the history of terminal
835
+ * GNU Readline compatible features
836
+ * ((*I18n support*))
837
+
838
+ = I18n Support
839
+
840
+ There are so many character encoding in the world, especially CJK(Chinese, Japanese, Korean) have so complex characters and history. More than 10,000 Kanji characters, Kana, Hangul...
841
+
842
+ = I18n Support
843
+
844
+ But it's very confused for non CJK people. So I'll try explain by emoji's specifications.
845
+
846
+ = I18n Support
847
+
848
+ We always use the word "character" primitively. But it's a very difficult thing.
849
+
850
+ = I18n Support
851
+
852
+ It's important to understand the difference between codepoint and grapheme in Unicode but it confuses you.
853
+
854
+ = I18n Support
855
+
856
+ Some codepoints are invisible because these are just "combining character" for "base character".
857
+
858
+ = I18n Support
859
+
860
+ For example, "☎"(U+260E BLACK TELEPHONE) is changed with following invisible "variation selector" if you use a font that has the "variation".
861
+
862
+ = I18n Support
863
+
864
+ For example, the "variation" is\n"textual fashion"(U+FE0E VARIATION SELECTOR-15) or\n"emoji fashion"((U+FE0F VARIATION SELECTOR-16)).
865
+
866
+ = I18n Support
867
+
868
+ # image
869
+ # src = telephone.png
870
+ # relative-width = 90
871
+ # align = center
872
+ # vertical-align = top
873
+ # relative-padding-top = 0
874
+ # relative-padding-bottom = 0
875
+ # relative-padding-right = 0
876
+ # relative-padding-left = 0
877
+
878
+ = I18n Support
879
+
880
+ And some combining characters has a glue codepoint(U+200D ZERO WIDTH JOINER) to join different characters.
881
+
882
+ = I18n Support
883
+
884
+ For example, "👁️‍🗨️"(EYE IN SPEECH BUBBLE U+1F441 U+FE0F U+200D U+1F5E8 U+FE0F) is composed of "eye"(U+1F441 EYE) and "🗨️"(U+1F5E8 LEFT SPEECH BUBBLE) with a glue codepoint(U+200D ZERO WIDTH JOINER).
885
+
886
+ = I18n Support
887
+
888
+ # image
889
+ # src = eyes.png
890
+ # relative-width = 90
891
+ # align = center
892
+ # vertical-align = top
893
+ # relative-padding-top = 0
894
+ # relative-padding-bottom = 0
895
+ # relative-padding-right = 0
896
+ # relative-padding-left = 0
897
+
898
+ = I18n Support
899
+
900
+ Besides, national flags are constructed by alphabets.
901
+
902
+ = I18n Support
903
+
904
+ "🇺🇸"(U+1F1FA U+1F1F8 flag for United States) is composed of "🇺"(U+1F1FA REGIONAL INDICATOR SYMBOL LETTER U) and "🇸"(U+1F1F8 REGIONAL INDICATOR SYMBOL LETTER S) ((*without joiner*)).
905
+
906
+ = I18n Support
907
+
908
+ DEMO
909
+
910
+ = I18n Support
911
+
912
+ Unicode has contains human's confused history.
913
+
914
+ = I18n Support
915
+
916
+ So, the "codepoint" is an unit that should be coded.
917
+
918
+ = I18n Support
919
+
920
+ And the "grapheme" is an unit that human beings understand as a character.
921
+
922
+ = I18n Support
923
+
924
+ * 🇺🇸 - 2 codepoints, 1 grapheme
925
+ * (('wait'))🇺 - 1 codepoint, 1 grapheme
926
+ * (('wait'))🇸 - 1 codepoint, 1 grapheme
927
+ * (('wait'))US(ASCII) - 2 codepoints, 2 graphemes
928
+ * (('wait'))U+200D(ZWJ) - 1 codepoint, 0 grapheme
929
+ * (('wait'))👁️‍🗨️ - 5 codepoints, 1 grapheme
930
+
931
+ = I18n Support
932
+
933
+ String#chars method returns codepoints.
934
+
935
+ String#grapheme_clusters method returns graphemes.
936
+
937
+ # enscript ruby
938
+ "🇺🇸".chars # => ["🇺", "🇸"]
939
+ "🇺🇸".grapheme_clusters # => ["🇺🇸"]
940
+
941
+ = I18n Support
942
+
943
+ Do you understand?
944
+
945
+ = I18n Support
946
+
947
+ I have no confidence.
948
+
949
+ = I18n Support
950
+
951
+ If Reline remove only 1 codepoint from 1 grapheme that is constructed by plural codepoints, the editor break easily.
952
+
953
+ = My Adventure In Ruby
954
+
955
+ ...It's an outline of technical background of interactive CLI of Ruby.
956
+
957
+ = My Adventure In Ruby
958
+
959
+ The brand-new IRB will be adopted at Ruby 2.7.
960
+
961
+ = My Adventure In Ruby
962
+
963
+ And, I'll release the brand-new IRB before Ruby 2.7.
964
+
965
+ = My Adventure In Ruby
966
+
967
+ # enscript bash
968
+ $ gem install irb
969
+ $ irb # brand-new IRB!
970
+
971
+ After that, you can install and use the brand-new IRB.
972
+
973
+ = My Adventure In Ruby
974
+
975
+ When will I release the brand-new IRB?
976
+
977
+ = Right\nNow
978
+
979
+ = My Adventure In Ruby
980
+
981
+ # enscript bash
982
+ $ gem install irb
983
+
984
+ Install the brand-new IRB.
985
+
986
+ = DEMO of\nthe brand-new\nIRB
987
+
988
+ = My Adventure In Ruby
989
+
990
+ # enscript bash
991
+ $ gem install irb
992
+
993
+ Install the brand-new IRB.
994
+
995
+ Right Now.
996
+
997
+ = My Adventure In Ruby
998
+
999
+ Please file some issues if you find bugs.
1000
+
1001
+ * https://github.com/ruby/irb
1002
+ * https://github.com/ruby/reline
1003
+
1004
+ Take it easy. It's a great contribution for us.
1005
+
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+