rabbit-slide-kou-fukuoka-ruby-award-7 2015.01.23.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,189 @@
1
+ = 全文検索エンジン\nGroongaへの\nmrubyの組み込み
2
+
3
+ : author
4
+ 須藤功平
5
+ : institution
6
+ Groongaプロジェクト
7
+ : content-source
8
+ 第7回フクオカRuby大賞
9
+ : date
10
+ 2015-01-23
11
+ : allotted-time
12
+ 10m
13
+ : theme
14
+ .
15
+
16
+ = 説明すること
17
+
18
+ (1) 特徴
19
+ (2) Rubyを適用した箇所
20
+ (3) Rubyを活用したことによる\n
21
+ 効果、社会に及ぼす影響
22
+
23
+ = (1) 特徴
24
+
25
+ mrubyの使い方が\n
26
+ 少し違う
27
+
28
+ = 使い方の分類
29
+
30
+ # RT
31
+
32
+  主体\n対象者, mruby, C
33
+
34
+ ユーザー向け, (('1')), (('2'))
35
+ 開発者\n向け, (('3')), (('4'))
36
+
37
+ = 分類の補足
38
+
39
+ * 主体
40
+ * メインの処理を実装する言語
41
+ * (('note:あるいは'))
42
+ * プログラムのエントリーポイントを実装する言語
43
+ * 対象者
44
+ * Rubyを書く人はだれか
45
+
46
+ = よくある使い方
47
+
48
+ # RT
49
+
50
+  主体\n対象者, mruby, C
51
+
52
+ ユーザー向け, ((*1*)), ((*2*))
53
+ 開発者\n向け, ((*3*)), (('4'))
54
+
55
+ = Groongaの使い方
56
+
57
+ # RT
58
+
59
+  主体\n対象者, mruby, C
60
+
61
+ ユーザー向け, (('1')), (('2'))
62
+ 開発者\n向け, (('3')), ((*4*))
63
+
64
+ = よくある使い方(1)
65
+
66
+ * ユーザー向け・mruby主体\n
67
+ (('note:ユーザーがRubyを書く・mrubyでメインの処理を実装'))
68
+ * 拡張性が高いアプリ
69
+ * PCで動かすならCRubyでもよい\n
70
+ (('note:CRuby + バインディング'))
71
+ * 単体で配布可能なバイナリーを\n
72
+ 作れることが便利
73
+
74
+ = よくある使い方(2)
75
+
76
+ * ユーザー向け・C主体\n
77
+ (('note:ユーザーがRubyを書く・Cでメインの処理を実装'))
78
+ * プラグイン・設定
79
+ * C側がマルチスレッドや\n
80
+ マルチプロセスでも組み込みやすい
81
+ * CRubyだと難しい・面倒\n
82
+ (('note:シグナル・RUBY_INIT_STACK…'))
83
+
84
+ = よくある使い方(3)
85
+
86
+ * 開発者向け・mruby主体\n
87
+ (('note:開発者がRubyを書く・mrubyでメインの処理を実装'))
88
+ * 組み込み環境向けアプリケーション
89
+ * 消費リソースが少なくてうれしい
90
+ * 開発速度があがる
91
+ * CRuby感覚で使うと機能が少なくてツライ
92
+
93
+ = Groongaの使い方
94
+
95
+ # RT
96
+
97
+  主体\n対象者, mruby, C
98
+
99
+ ユーザー向け, (('1')), (('2'))
100
+ 開発者\n向け, (('3')), ((*4*))
101
+
102
+ = Groongaの使い方
103
+
104
+ * 開発者向け・C主体\n
105
+ (('note:開発者がRubyを書く・Cでメインの処理を実装'))
106
+ * アプリ内のコア機能の一部を実装
107
+ * 開発速度があがる
108
+ * mruby対応がそこそこ大変\n
109
+ (('note:バインディングの開発・ビルドシステムへの統合・'))\n
110
+ (('note:テストの仕組み…'))
111
+
112
+ = 開発者向け・C主体の使い方
113
+
114
+ * 使い所は難しい
115
+ * 仕組み作りを乗り越えられれば有用
116
+ * 仕組みできる→((*開発速度はあがる*))
117
+ * 難易度も高い
118
+ * プロジェクト依存部分が大きい
119
+ * (('note:Groongaの事例から一般化できるといいなぁ'))
120
+
121
+ = (2) Rubyを適用した箇所
122
+
123
+ (1) 特徴
124
+ (2) ((*Rubyを適用した箇所*))
125
+ (3) Rubyを活用したことによる\n
126
+ 効果、社会に及ぼす影響
127
+
128
+ = コア機能の実装
129
+
130
+ * クエリーオプティマイザー
131
+ * 予定:式のJIT化
132
+
133
+ = クエリーオプティマイザー
134
+
135
+ # image
136
+ # src = images/query-optimizer.svg
137
+ # relative_width = 100
138
+
139
+ = 例
140
+
141
+ # image
142
+ # src = images/query-optimizer-example.svg
143
+ # relative_width = 100
144
+
145
+ = mrubyは割にあうか
146
+
147
+ * 最適化→10倍以上高速化も可
148
+ * C→mrubyの速度低下は影響小
149
+ * C→mrubyで開発速度向上
150
+ * 課題:GDBが使えない
151
+ * →ppをmrubyに移植してなんとか…
152
+
153
+ = 予定:式のJIT化
154
+
155
+ # image
156
+ # src = images/jit-evaluator.svg
157
+ # relative_width = 100
158
+
159
+ = (3) 影響
160
+
161
+ (1) 特徴
162
+ (2) Rubyを適用した箇所
163
+ (3) ((*Rubyを活用したことによる*))\n
164
+ ((*効果、社会に及ぼす影響*))
165
+
166
+ = 影響(1)
167
+
168
+ * 「コア機能をRubyで実装」\n
169
+ という使い方の実例を示した
170
+ * フリーソフトウェアなので\n
171
+ 他のプロダクトは参考にできる
172
+ * 仕組み作りをできれば割にあう
173
+ * →「技術支援」という仕事をしたい
174
+
175
+ = 影響(2)
176
+
177
+ * mrubyがよくなる
178
+ * 開発中に見つけた問題は\n
179
+ 直してパッチを送っている
180
+
181
+ = まとめ
182
+
183
+ (1) 特徴
184
+ * 類をみないmrubyの使い方
185
+ (2) Rubyを適用した箇所
186
+ * クエリーオプティマイザー
187
+ (3) Rubyを活用したことによる\n
188
+ 効果、社会に及ぼす影響
189
+ * 参考にできる・mrubyがよくなる
@@ -0,0 +1,627 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ width="210mm"
13
+ height="297mm"
14
+ id="svg2985"
15
+ version="1.1"
16
+ inkscape:version="0.48.5 r10040"
17
+ sodipodi:docname="poster.svg">
18
+ <defs
19
+ id="defs3">
20
+ <marker
21
+ inkscape:stockid="Arrow1Lend"
22
+ orient="auto"
23
+ refY="0.0"
24
+ refX="0.0"
25
+ id="Arrow1Lend"
26
+ style="overflow:visible;">
27
+ <path
28
+ id="path4345"
29
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
30
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;"
31
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
32
+ </marker>
33
+ </defs>
34
+ <sodipodi:namedview
35
+ inkscape:document-units="mm"
36
+ id="base"
37
+ pagecolor="#ffffff"
38
+ bordercolor="#666666"
39
+ borderopacity="1.0"
40
+ inkscape:pageopacity="0.0"
41
+ inkscape:pageshadow="2"
42
+ inkscape:zoom="0.6271605"
43
+ inkscape:cx="554.76505"
44
+ inkscape:cy="491.13452"
45
+ inkscape:current-layer="layer1"
46
+ showgrid="false"
47
+ inkscape:window-width="1337"
48
+ inkscape:window-height="844"
49
+ inkscape:window-x="1970"
50
+ inkscape:window-y="151"
51
+ inkscape:window-maximized="0" />
52
+ <metadata
53
+ id="metadata4">
54
+ <rdf:RDF>
55
+ <cc:Work
56
+ rdf:about="">
57
+ <dc:format>image/svg+xml</dc:format>
58
+ <dc:type
59
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
60
+ <dc:title />
61
+ </cc:Work>
62
+ </rdf:RDF>
63
+ </metadata>
64
+ <g
65
+ inkscape:label="Layer 1"
66
+ inkscape:groupmode="layer"
67
+ id="layer1">
68
+ <text
69
+ xml:space="preserve"
70
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
71
+ x="15.057564"
72
+ y="106.84586"
73
+ id="text2991"
74
+ sodipodi:linespacing="125%"><tspan
75
+ sodipodi:role="line"
76
+ id="tspan3042"
77
+ x="15.057564"
78
+ y="106.84586">(1) 特徴</tspan></text>
79
+ <text
80
+ xml:space="preserve"
81
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
82
+ x="16.776314"
83
+ y="465.36002"
84
+ id="text3016"
85
+ sodipodi:linespacing="125%"><tspan
86
+ sodipodi:role="line"
87
+ id="tspan3024"
88
+ x="16.776314"
89
+ y="465.36002">(2) Rubyを適用した箇所</tspan></text>
90
+ <text
91
+ xml:space="preserve"
92
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
93
+ x="20.776314"
94
+ y="869.0733"
95
+ id="text3026"
96
+ sodipodi:linespacing="125%"><tspan
97
+ sodipodi:role="line"
98
+ id="tspan3032"
99
+ x="20.776314"
100
+ y="869.0733">(3) Rubyを活用したことによる効果、</tspan><tspan
101
+ sodipodi:role="line"
102
+ id="tspan3034"
103
+ x="20.776314"
104
+ y="912.77258"> 社会に及ぼす影響</tspan></text>
105
+ <rect
106
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#a40000;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
107
+ id="rect3453"
108
+ width="681.8891"
109
+ height="247.84843"
110
+ x="21.428572"
111
+ y="170.36218" />
112
+ <text
113
+ xml:space="preserve"
114
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
115
+ x="68.355461"
116
+ y="218.75642"
117
+ id="text3036"
118
+ sodipodi:linespacing="125%"><tspan
119
+ sodipodi:role="line"
120
+ id="tspan3040"
121
+ x="68.355461"
122
+ y="218.75642">対象者</tspan></text>
123
+ <text
124
+ xml:space="preserve"
125
+ style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
126
+ x="19.307564"
127
+ y="150.93361"
128
+ id="text3044"
129
+ sodipodi:linespacing="125%"><tspan
130
+ sodipodi:role="line"
131
+ id="tspan3048"
132
+ x="19.307564"
133
+ y="150.93361">「開発者向け」で「C主体」なmrubyの活用方法</tspan></text>
134
+ <text
135
+ sodipodi:linespacing="125%"
136
+ id="text3050"
137
+ y="195.48087"
138
+ x="160.78333"
139
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
140
+ xml:space="preserve"><tspan
141
+ sodipodi:role="line"
142
+ id="tspan3054"
143
+ x="160.78333"
144
+ y="195.48087">主体</tspan></text>
145
+ <text
146
+ sodipodi:linespacing="125%"
147
+ id="text3056"
148
+ y="289.10306"
149
+ x="105.33546"
150
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
151
+ xml:space="preserve"><tspan
152
+ sodipodi:role="line"
153
+ id="tspan3060"
154
+ x="105.33546"
155
+ y="289.10306">ユーザー向け</tspan></text>
156
+ <text
157
+ xml:space="preserve"
158
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
159
+ x="100.0175"
160
+ y="373.78693"
161
+ id="text3062"
162
+ sodipodi:linespacing="125%"><tspan
163
+ sodipodi:role="line"
164
+ id="tspan3066"
165
+ x="100.0175"
166
+ y="373.78693">開発者向け</tspan></text>
167
+ <text
168
+ xml:space="preserve"
169
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
170
+ x="341.86838"
171
+ y="204.81734"
172
+ id="text3068"
173
+ sodipodi:linespacing="125%"><tspan
174
+ sodipodi:role="line"
175
+ id="tspan3072"
176
+ x="341.86838"
177
+ y="204.81734">mruby</tspan></text>
178
+ <text
179
+ sodipodi:linespacing="125%"
180
+ id="text3074"
181
+ y="204.81734"
182
+ x="598.38269"
183
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
184
+ xml:space="preserve"><tspan
185
+ sodipodi:role="line"
186
+ id="tspan3078"
187
+ x="598.38269"
188
+ y="204.81734">C</tspan></text>
189
+ <text
190
+ xml:space="preserve"
191
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
192
+ x="338.93439"
193
+ y="266.25684"
194
+ id="text3084"
195
+ sodipodi:linespacing="125%"><tspan
196
+ sodipodi:role="line"
197
+ id="tspan3088">拡張性が高いアプリ</tspan><tspan
198
+ sodipodi:role="line"
199
+ id="tspan3090">(Trusterd・rumin)</tspan></text>
200
+ <text
201
+ sodipodi:linespacing="125%"
202
+ id="text3096"
203
+ y="269.41998"
204
+ x="594.04089"
205
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
206
+ xml:space="preserve"><tspan
207
+ sodipodi:role="line"
208
+ id="tspan3106"
209
+ x="594.04089"
210
+ y="269.41998">プラグイン・設定</tspan><tspan
211
+ sodipodi:role="line"
212
+ id="tspan3108"
213
+ x="594.04089"
214
+ y="296.64554">(mod_mruby)</tspan></text>
215
+ <text
216
+ xml:space="preserve"
217
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
218
+ x="595.16046"
219
+ y="366.83765"
220
+ id="text3118"
221
+ sodipodi:linespacing="125%"><tspan
222
+ sodipodi:role="line"
223
+ id="tspan3134"
224
+ x="595.16046"
225
+ y="366.83765">アプリのコア機能</tspan><tspan
226
+ sodipodi:role="line"
227
+ id="tspan3136"
228
+ x="595.16046"
229
+ y="394.0632">(Groonga)</tspan></text>
230
+ <text
231
+ sodipodi:linespacing="125%"
232
+ id="text3128"
233
+ y="368.68463"
234
+ x="343.41638"
235
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
236
+ xml:space="preserve"><tspan
237
+ sodipodi:role="line"
238
+ id="tspan4257"
239
+ x="343.41638"
240
+ y="368.68463">組み込み環境向けアプリ</tspan><tspan
241
+ sodipodi:role="line"
242
+ id="tspan4259"
243
+ x="343.41638"
244
+ y="395.91019">(SEIL)</tspan></text>
245
+ <text
246
+ sodipodi:linespacing="125%"
247
+ id="text3192"
248
+ y="955.6745"
249
+ x="38.776314"
250
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
251
+ xml:space="preserve"><tspan
252
+ sodipodi:role="line"
253
+ id="tspan4784"
254
+ x="38.776314"
255
+ y="955.6745">・「開発者向け」で「C主体」なmrubyの活用方法の普及</tspan></text>
256
+ <text
257
+ xml:space="preserve"
258
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
259
+ x="38.776314"
260
+ y="1004.449"
261
+ id="text3200"
262
+ sodipodi:linespacing="125%"><tspan
263
+ sodipodi:role="line"
264
+ id="tspan4800"
265
+ x="38.776314"
266
+ y="1004.449">・mrubyがよくなる</tspan></text>
267
+ <text
268
+ xml:space="preserve"
269
+ style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
270
+ x="34.557564"
271
+ y="509.83838"
272
+ id="text3214"
273
+ sodipodi:linespacing="125%"><tspan
274
+ sodipodi:role="line"
275
+ id="tspan3220"
276
+ x="34.557564"
277
+ y="509.83838">クエリーオプティマイザー</tspan></text>
278
+ <text
279
+ xml:space="preserve"
280
+ style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
281
+ x="346.89612"
282
+ y="691.57727"
283
+ id="text3228"
284
+ sodipodi:linespacing="125%"><tspan
285
+ sodipodi:role="line"
286
+ id="tspan3232"
287
+ x="346.89612"
288
+ y="691.57727">最適化</tspan></text>
289
+ <text
290
+ xml:space="preserve"
291
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
292
+ x="100.50764"
293
+ y="631.53162"
294
+ id="text3236"
295
+ sodipodi:linespacing="125%"><tspan
296
+ sodipodi:role="line"
297
+ id="tspan3268"
298
+ x="100.50764"
299
+ y="631.53162">10 &lt;= x &amp;&amp; x &lt;= 20</tspan></text>
300
+ <text
301
+ sodipodi:linespacing="125%"
302
+ id="text3242"
303
+ y="662.6015"
304
+ x="521.95959"
305
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
306
+ xml:space="preserve"><tspan
307
+ sodipodi:role="line"
308
+ id="tspan3270"
309
+ x="521.95959"
310
+ y="662.6015">10 &lt;= x &lt;= 20</tspan></text>
311
+ <text
312
+ xml:space="preserve"
313
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
314
+ x="42.847301"
315
+ y="807.28284"
316
+ id="text3248"
317
+ sodipodi:linespacing="125%"><tspan
318
+ sodipodi:role="line"
319
+ id="tspan3252"
320
+ x="42.847301"
321
+ y="807.28284">上限・下限を別に評価してAND</tspan></text>
322
+ <text
323
+ sodipodi:linespacing="125%"
324
+ id="text3254"
325
+ y="757.70245"
326
+ x="484.76984"
327
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
328
+ xml:space="preserve"><tspan
329
+ sodipodi:role="line"
330
+ id="tspan3258"
331
+ x="484.76984"
332
+ y="757.70245">上限・下限を一度に評価</tspan></text>
333
+ <text
334
+ sodipodi:linespacing="125%"
335
+ id="text3260"
336
+ y="594.59521"
337
+ x="26.63233"
338
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
339
+ xml:space="preserve"><tspan
340
+ sodipodi:role="line"
341
+ id="tspan3264"
342
+ x="26.63233"
343
+ y="594.59521">例</tspan></text>
344
+ <path
345
+ style="fill:none;stroke:#000000;stroke-width:0.58196551px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
346
+ d="m 48.846191,666.17185 198.701369,0"
347
+ id="path3266"
348
+ inkscape:connector-curvature="0" />
349
+ <text
350
+ xml:space="preserve"
351
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
352
+ x="88.568497"
353
+ y="657.70618"
354
+ id="text3276"
355
+ sodipodi:linespacing="125%"><tspan
356
+ sodipodi:role="line"
357
+ id="tspan3278"
358
+ x="88.568497"
359
+ y="657.70618">10</tspan></text>
360
+ <text
361
+ xml:space="preserve"
362
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
363
+ x="160.12202"
364
+ y="657.71997"
365
+ id="text3280"
366
+ sodipodi:linespacing="125%"><tspan
367
+ sodipodi:role="line"
368
+ id="tspan3282"
369
+ x="160.12202"
370
+ y="657.71997">20</tspan></text>
371
+ <path
372
+ style="fill:none;stroke:#000000;stroke-width:0.58196551px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
373
+ d="m 47.308761,653.48213 0,21.16346"
374
+ id="path3327"
375
+ inkscape:connector-curvature="0" />
376
+ <path
377
+ inkscape:connector-curvature="0"
378
+ id="path3329"
379
+ d="m 248.66883,653.48213 0,21.16346"
380
+ style="fill:none;stroke:#000000;stroke-width:0.58196551px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
381
+ <path
382
+ inkscape:connector-curvature="0"
383
+ id="path3331"
384
+ d="m 98.22759,695.96414 149.31997,0"
385
+ style="fill:none;stroke:#000000;stroke-width:0.58196551px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
386
+ sodipodi:nodetypes="cc" />
387
+ <path
388
+ inkscape:connector-curvature="0"
389
+ id="path3341"
390
+ d="m 97.35779,683.27442 0,21.16345"
391
+ style="fill:none;stroke:#000000;stroke-width:0.58196551px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
392
+ <path
393
+ style="fill:none;stroke:#000000;stroke-width:0.58196551px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
394
+ d="m 248.66883,683.27442 0,21.16345"
395
+ id="path3343"
396
+ inkscape:connector-curvature="0" />
397
+ <path
398
+ inkscape:connector-curvature="0"
399
+ id="path3369"
400
+ d="m 48.846191,730.88206 115.223279,0"
401
+ style="fill:none;stroke:#000000;stroke-width:0.58196551px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
402
+ sodipodi:nodetypes="cc" />
403
+ <path
404
+ inkscape:connector-curvature="0"
405
+ id="path3379"
406
+ d="m 47.308761,718.19235 0,21.16346"
407
+ style="fill:none;stroke:#000000;stroke-width:0.58196551px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
408
+ <path
409
+ style="fill:none;stroke:#000000;stroke-width:0.58196551px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
410
+ d="m 164.86579,718.19235 0,21.16346"
411
+ id="path3381"
412
+ inkscape:connector-curvature="0" />
413
+ <path
414
+ sodipodi:nodetypes="cc"
415
+ style="fill:none;stroke:#000000;stroke-width:0.58196551px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
416
+ d="m 97.89755,765.79999 66.17192,0"
417
+ id="path3409"
418
+ inkscape:connector-curvature="0" />
419
+ <path
420
+ style="fill:none;stroke:#000000;stroke-width:0.58196551px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
421
+ d="m 97.35779,753.11028 0,21.16346"
422
+ id="path3411"
423
+ inkscape:connector-curvature="0" />
424
+ <path
425
+ inkscape:connector-curvature="0"
426
+ id="path3413"
427
+ d="m 164.86579,753.11028 0,21.16346"
428
+ style="fill:none;stroke:#000000;stroke-width:0.58196551px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
429
+ <text
430
+ sodipodi:linespacing="125%"
431
+ id="text3415"
432
+ y="701.23846"
433
+ x="256.51059"
434
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
435
+ xml:space="preserve"><tspan
436
+ sodipodi:role="line"
437
+ id="tspan3419"
438
+ x="256.51059"
439
+ y="701.23846">10 &lt;= x</tspan></text>
440
+ <text
441
+ sodipodi:linespacing="125%"
442
+ id="text3421"
443
+ y="735.92303"
444
+ x="256.8179"
445
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
446
+ xml:space="preserve"><tspan
447
+ sodipodi:role="line"
448
+ id="tspan3425"
449
+ x="256.8179"
450
+ y="735.92303">x &lt;= 20</tspan></text>
451
+ <text
452
+ sodipodi:linespacing="125%"
453
+ id="text3427"
454
+ y="771.19543"
455
+ x="280.04086"
456
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
457
+ xml:space="preserve"><tspan
458
+ sodipodi:role="line"
459
+ id="tspan3431"
460
+ x="280.04086"
461
+ y="771.19543">&amp;&amp;</tspan></text>
462
+ <path
463
+ inkscape:connector-curvature="0"
464
+ id="path3433"
465
+ d="m 475.23039,699.92476 210.06874,0"
466
+ style="fill:none;stroke:#000000;stroke-width:0.61525869px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
467
+ <text
468
+ sodipodi:linespacing="125%"
469
+ id="text3435"
470
+ y="693.3858"
471
+ x="521.01764"
472
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
473
+ xml:space="preserve"><tspan
474
+ y="693.3858"
475
+ x="521.01764"
476
+ id="tspan3437"
477
+ sodipodi:role="line">10</tspan></text>
478
+ <text
479
+ sodipodi:linespacing="125%"
480
+ id="text3439"
481
+ y="693.91107"
482
+ x="594.67584"
483
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
484
+ xml:space="preserve"><tspan
485
+ y="693.91107"
486
+ x="594.67584"
487
+ id="tspan3441"
488
+ sodipodi:role="line">20</tspan></text>
489
+ <path
490
+ inkscape:connector-curvature="0"
491
+ id="path3443"
492
+ d="m 473.60502,686.50906 0,22.3742"
493
+ style="fill:none;stroke:#000000;stroke-width:0.61525869px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
494
+ <path
495
+ style="fill:none;stroke:#000000;stroke-width:0.61525869px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
496
+ d="m 686.48453,686.50906 0,22.3742"
497
+ id="path3445"
498
+ inkscape:connector-curvature="0" />
499
+ <path
500
+ inkscape:connector-curvature="0"
501
+ id="path3447"
502
+ d="m 529.47964,720.77146 69.95749,0"
503
+ style="fill:none;stroke:#000000;stroke-width:0.61525869px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
504
+ sodipodi:nodetypes="cc" />
505
+ <path
506
+ inkscape:connector-curvature="0"
507
+ id="path3449"
508
+ d="m 528.909,707.35576 0,22.3742"
509
+ style="fill:none;stroke:#000000;stroke-width:0.61525869px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
510
+ <path
511
+ style="fill:none;stroke:#000000;stroke-width:0.61525869px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
512
+ d="m 600.27901,707.35576 0,22.3742"
513
+ id="path3451"
514
+ inkscape:connector-curvature="0" />
515
+ <path
516
+ style="fill:none;stroke:#a40000;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
517
+ d="m 197.9899,175.06245 0,241.42646"
518
+ id="path4225"
519
+ inkscape:connector-curvature="0"
520
+ sodipodi:nodetypes="cc" />
521
+ <path
522
+ inkscape:connector-curvature="0"
523
+ id="path4227"
524
+ d="m 483.9899,175.06245 0,237.38585"
525
+ style="fill:none;stroke:#a40000;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
526
+ sodipodi:nodetypes="cc" />
527
+ <path
528
+ inkscape:connector-curvature="0"
529
+ id="path4229"
530
+ d="m 698.01541,326.38228 -667.710832,0"
531
+ style="fill:none;stroke:#a40000;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
532
+ sodipodi:nodetypes="cc" />
533
+ <path
534
+ sodipodi:nodetypes="cc"
535
+ style="fill:none;stroke:#a40000;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
536
+ d="m 698.01541,230.38228 -667.710832,0"
537
+ id="path4231"
538
+ inkscape:connector-curvature="0" />
539
+ <rect
540
+ y="325.92569"
541
+ x="483.0683"
542
+ height="92.284958"
543
+ width="220.24934"
544
+ id="rect4233"
545
+ style="color:#000000;fill:none;stroke:#a40000;stroke-width:5.31496048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
546
+ <text
547
+ sodipodi:linespacing="125%"
548
+ id="text4289"
549
+ y="316.25684"
550
+ x="338.93439"
551
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
552
+ xml:space="preserve"><tspan
553
+ sodipodi:role="line"
554
+ id="tspan4295"
555
+ x="338.93439"
556
+ y="316.25684">(PCで動かすならCRubyでもよい)</tspan></text>
557
+ <text
558
+ sodipodi:linespacing="125%"
559
+ id="text4305"
560
+ y="538.35632"
561
+ x="65.406586"
562
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
563
+ xml:space="preserve"><tspan
564
+ sodipodi:role="line"
565
+ id="tspan4808">検索クエリーをより高速に実行するための実行計画を立てるモジュール。</tspan><tspan
566
+ sodipodi:role="line"
567
+ id="tspan4810">高速な検索機能を提供するために重要な機能。</tspan><tspan
568
+ sodipodi:role="line"
569
+ id="tspan4812">クエリーのASTを解析するため煩雑な処理になる。よってRubyで書けると便利。</tspan></text>
570
+ <text
571
+ sodipodi:linespacing="125%"
572
+ id="text4309"
573
+ y="46.866158"
574
+ x="29.260616"
575
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
576
+ xml:space="preserve"><tspan
577
+ sodipodi:role="line"
578
+ id="tspan4313"
579
+ x="29.260616"
580
+ y="46.866158">全文検索エンジンGroongaへのmrubyの組み込み</tspan></text>
581
+ <rect
582
+ style="color:#000000;fill:none;stroke:#a40000;stroke-width:1.77165353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
583
+ id="rect4329"
584
+ width="303.90585"
585
+ height="216.85225"
586
+ x="28.377209"
587
+ y="604.93878"
588
+ ry="14.850846"
589
+ rx="14.850846" />
590
+ <rect
591
+ rx="14.850846"
592
+ ry="14.850846"
593
+ y="627.89789"
594
+ x="453.49103"
595
+ height="155.96872"
596
+ width="254.29686"
597
+ id="rect4334"
598
+ style="color:#000000;fill:none;stroke:#a40000;stroke-width:5.31496048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
599
+ <path
600
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
601
+ d="m 342.53654,716.02352 92.45282,0"
602
+ id="path4336"
603
+ inkscape:connector-curvature="0" />
604
+ <text
605
+ sodipodi:linespacing="125%"
606
+ id="text4788"
607
+ y="982.05725"
608
+ x="491.30475"
609
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
610
+ xml:space="preserve"><tspan
611
+ sodipodi:role="line"
612
+ id="tspan4792"
613
+ x="491.30475"
614
+ y="982.05725">(事例ができるため)</tspan></text>
615
+ <text
616
+ xml:space="preserve"
617
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
618
+ x="251.30475"
619
+ y="1029.8918"
620
+ id="text4794"
621
+ sodipodi:linespacing="125%"><tspan
622
+ sodipodi:role="line"
623
+ id="tspan4798"
624
+ x="251.30475"
625
+ y="1029.8918">(バグを見つけたらパッチを書いて報告しているため)</tspan></text>
626
+ </g>
627
+ </svg>