rabbit-slide-hasumikin-ToyamaRubyKaigi01 2019.11.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a702c4fda6262d6f6919a4414ccd016723f6f6a0ea7d0f5cbb60affb2b923de0
4
+ data.tar.gz: 3cfe649c53337323d2f8df4dee75af7103d5a3dafcd3a008d3f0d0c4f2b4d9f3
5
+ SHA512:
6
+ metadata.gz: '088c4286ce162971fd229dc8f4e8c91104724a0566a76291a1a49d07ee4bc1cf20e14eeee5556f3786f3840e7130287a96ec6212b699ef0f890e7945089574e4'
7
+ data.tar.gz: 4883ca504e33e8e8d79aac6589acb8f31c6a9bfbf5059f430471887ef7a6f775c8b6aaaf5628da2e2ba135f3ca96b8d5f9c9aee8890b9400c24b29c852bdb67b
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ mruby-de-Hello-World.rab
data/README.rd ADDED
@@ -0,0 +1,24 @@
1
+ = mruby de Hello World!
2
+
3
+ The Presentation for RubyKaigiToyama01 by hasumikin
4
+
5
+ == For author
6
+
7
+ === Show
8
+
9
+ rake
10
+
11
+ === Publish
12
+
13
+ rake publish
14
+
15
+ == For viewers
16
+
17
+ === Install
18
+
19
+ gem install rabbit-slide-hasumikin-ToyamaRubyKaigi01
20
+
21
+ === Show
22
+
23
+ rabbit rabbit-slide-hasumikin-ToyamaRubyKaigi01.gem
24
+
data/Rakefile ADDED
@@ -0,0 +1,17 @@
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
+ # spec.add_runtime_dependency("rabbit-theme-YOUR-THEME")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
data/config.yaml ADDED
@@ -0,0 +1,25 @@
1
+ ---
2
+ id: ToyamaRubyKaigi01
3
+ base_name: mruby-de-Hello-World
4
+ tags:
5
+ - mruby
6
+ - compiler
7
+ - parser
8
+ - lemon
9
+ presentation_date: '2019-11-03'
10
+ presentation_start_time:
11
+ presentation_end_time:
12
+ version: 2019.11.3.0
13
+ licenses: []
14
+ slideshare_id:
15
+ speaker_deck_id:
16
+ ustream_id:
17
+ vimeo_id:
18
+ youtube_id:
19
+ author:
20
+ markup_language: :rd
21
+ name: HASUMI Hitoshi
22
+ email: hasumikin@gmail.com
23
+ rubygems_user: hasumikin
24
+ slideshare_user:
25
+ speaker_deck_user:
Binary file
Binary file
data/images/borges.jpg ADDED
Binary file
data/images/hasumi.jpg ADDED
Binary file
data/images/himi.jpg ADDED
Binary file
Binary file
data/images/mark32.png ADDED
Binary file
data/images/mark48.png ADDED
Binary file
data/images/mark64.png ADDED
Binary file
data/images/matz.jpg ADDED
Binary file
Binary file
Binary file
Binary file
data/images/rwc.png ADDED
Binary file
data/images/rwc4.png ADDED
Binary file
Binary file
@@ -0,0 +1,482 @@
1
+ = mruby de Hello World!
2
+
3
+ # : subtitle
4
+ # SUBTITLE
5
+ : author
6
+ HASUMI Hitoshi @hasumikin
7
+ : institution
8
+ Monstar Lab, Shimane office
9
+ : content-source
10
+ 富山Ruby会議01
11
+ : date
12
+ 2019-11-03
13
+ : start-time
14
+ 2019-11-03T15:40:00+0900
15
+ : end-time
16
+ 2019-11-03T16:04:59+0900
17
+ : theme
18
+ theme
19
+
20
+ = Matsue
21
+ # image
22
+ # src = images/松江城_Matsue.rb.16x9.jpg
23
+ # relative_height = 100
24
+ == プロパティ
25
+ : hide-title
26
+ true
27
+
28
+ = Today is
29
+
30
+ = Today is
31
+ (('tag:center'))
32
+ \n\n\n\n
33
+ (('tag:x-large:My birthday 🎂'))
34
+
35
+ = me
36
+ * HASUMI Hitoshi
37
+ * @hasumikin
38
+ * Microcontroller\ndetective
39
+ * RubyKaigi 2018, 2019
40
+ * RubyWorld 2018
41
+ * KRKRB 2019 (Poland)
42
+ * RubyConf 2019 (the US)
43
+ # image
44
+ # src = images/hasumi.jpg
45
+ # align = right
46
+ # relative-height = 80
47
+
48
+ = RubyWorld Conference 2019
49
+ # image
50
+ # src = images/rwc.png
51
+ # relative-height = 80
52
+
53
+ (('tag:center'))
54
+ Nov. 7-8, 2019 / Matz江, the Holy City of Ruby + 🍶
55
+
56
+ = RubyWorld Conference 2019
57
+ (('tag:center'))
58
+ \n\n
59
+ (('tag:x-large:🍶熱燗 sponsored'))
60
+ \n\n
61
+ (('tag:x-large:by Monstar Lab'))
62
+
63
+ = Monstar Lab
64
+ # image
65
+ # src = images/monstarlab.png
66
+ # relative_height = 110
67
+
68
+ = Monstar Lab
69
+ (('tag:center'))
70
+ \n\n\n\n
71
+ We don't have Toyama office, though
72
+
73
+ = Monstar Lab
74
+ # image
75
+ # src = images/noboru_i.jpg
76
+ # relative_height = 80
77
+
78
+ (('tag:center'))
79
+ @noboru_i
80
+
81
+ = Monstar Lab
82
+ (('tag:center'))
83
+ \n\n\n\n
84
+ 石倉神
85
+
86
+ = Monstar Lab
87
+ (('tag:center'))
88
+ \n\n\n\n
89
+ いわゆるゴッド
90
+
91
+ = Monstar Lab
92
+ # image
93
+ # src = images/ishikura.jpg
94
+ # relative_height = 80
95
+
96
+ (('tag:center'))
97
+ この人です
98
+
99
+ = Monstar Lab
100
+ (('tag:center'))
101
+ \n\n\n\n
102
+ WE ARE HIRING!
103
+
104
+ = Monstar Lab
105
+ # image
106
+ # src = images/ishikura.jpg
107
+ # relative_height = 80
108
+
109
+ (('tag:center'))
110
+ 採用してます
111
+
112
+ = mruby de Hello World!
113
+ (('tag:center'))
114
+ \n\n\n\n
115
+ How to code
116
+
117
+ = mruby de Hello World!
118
+ # enscript C
119
+ 5249 5445 3030 3036 9a78 0000 0062 4d41
120
+ 545a 3030 3030 4952 4550 0000 0044 3030
121
+ 3032 0000 0060 0001 0004 0000 0000 000c
122
+ 1001 4f02 002e 0100 0137 0167 0000 0001
123
+ 0000 0c48 656c 6c6f 2057 6f72 6c64 2100
124
+ 0000 0100 0470 7574 7300 454e 4400 0000
125
+ 0008
126
+
127
+ = puts "Hello World!"
128
+ # enscript C
129
+ 5249 5445 3030 3036 9a78 0000 0062 4d41 RITE0006.x...bMA
130
+ 545a 3030 3030 4952 4550 0000 0044 3030 TZ0000IREP...D00
131
+ 3032 0000 0060 0001 0004 0000 0000 000c 02...`..........
132
+ 1001 4f02 002e 0100 0137 0167 0000 0001 ..O......7.g....
133
+ 0000 0c48 656c 6c6f 2057 6f72 6c64 2100 ...Hello World!.
134
+ 0000 0100 0470 7574 7300 454e 4400 0000 .....puts.END...
135
+ 0008 ..
136
+
137
+ (('tag:center'))
138
+ \n\n
139
+ VM code
140
+
141
+ = CRuby, mruby and mruby/c
142
+ # image
143
+ # src = images/VM_code.png
144
+ # relative_height = 105
145
+
146
+ = CRuby(2.6.4) + Ruby code
147
+ # enscript ruby
148
+ puts "Hello World!"
149
+ rss = `ps -o rss= -p #{Process.pid}`.to_f / 1024
150
+ vsz = `ps -o vsz= -p #{Process.pid}`.to_f / 1024
151
+ puts "RSS: #{rss} MB"
152
+ puts "VSZ: #{vsz} MB"
153
+
154
+ # $ ruby hello.rb
155
+ # Hello World!
156
+ # RSS: 13.63671875 MB
157
+ # VSZ: 78.6328125 MB
158
+
159
+ = mruby(2.0.1) + Ruby code
160
+ # enscript C
161
+ #include <mruby.h>
162
+ #include <mruby/compile.h> // compile at runtime
163
+ int main(void) {
164
+ mrb_state *mrb = mrb_open();
165
+ char code[] = "puts 'Hello World!'";
166
+ mrb_load_string(mrb, code);
167
+ mrb_close(mrb);
168
+ return 0;
169
+ }
170
+ // $ valgrind ./hello_ruby
171
+ // (...)
172
+ // Hello World!
173
+ // ==18802==
174
+ // ==18802== HEAP SUMMARY:
175
+ // ==18802== in use at exit: 0 bytes in 0 blocks
176
+ // ==18802== total heap usage: 3,067 allocs, 3,067 frees,
177
+ // 379,851 bytes allocated
178
+
179
+ = mruby(2.0.1) + VM code
180
+ # enscript C
181
+ #include <mruby.h>
182
+ #include <mruby/irep.h>
183
+ #include "hello.c" // compiled by mrbc
184
+ int main(void) {
185
+ mrb_state *mrb = mrb_open();
186
+ mrb_load_irep(mrb, hello);
187
+ mrb_close(mrb);
188
+ return 0;
189
+ }
190
+ // $ valgrind ./hello_vm
191
+ // (...)
192
+ // Hello World!
193
+ // ==18858==
194
+ // ==18858== HEAP SUMMARY:
195
+ // ==18858== in use at exit: 0 bytes in 0 blocks
196
+ // ==18858== total heap usage: 3,057 allocs, 3,057 frees,
197
+ // 329,083 bytes allocated
198
+
199
+
200
+ = mruby/c(2.0) + VM code
201
+ # enscript C
202
+ #include "mrubyc/src/mrubyc.h"
203
+ #include "hello.c"
204
+ #define MEMORY_SIZE (1024 * 12) // RAM:12KB
205
+ static uint8_t my_memory_pool[MEMORY_SIZE];
206
+ int main(void) {
207
+ mrbc_init(my_memory_pool, MEMORY_SIZE);
208
+ mrbc_create_task(hello, 0);
209
+ mrbc_run();
210
+ return 0;
211
+ }
212
+
213
+ = Hello memory usage
214
+ # RT
215
+
216
+ , CRuby + Ruby code, mruby + Ruby code, mruby + VM code, mruby/c + VM code
217
+
218
+ ROM, 18MB(*), 3561KB, 2736KB, 148KB
219
+ RAM, 13MB, 370KB, 321KB, 12KB
220
+ ROM\n / RAM, 1.3, 9.6, 8.5, 12.3
221
+
222
+ (('tag:center'))
223
+ (*)...binary size of `bin/ruby` itself
224
+
225
+ = CRuby, mruby and mruby/c
226
+ # image
227
+ # src = images/VM_code.png
228
+ # relative_height = 105
229
+
230
+ = mruby compiler
231
+ (('tag:center'))
232
+ \n\n\n\n
233
+ How to code?
234
+
235
+ = Steps of coding a compiler
236
+ * Tokenize (Scan, Lexical analyze)
237
+ * Parse
238
+ * Generate Code
239
+
240
+ (('tag:center'))
241
+ \n\n
242
+ Not detailed enough 😵
243
+
244
+ = Steps of coding a compiler
245
+ * Tokenize (Scan, Lexical analyze)
246
+ * Find keywords
247
+ * Classify tokens
248
+ * Parse
249
+ * Make syntax tree
250
+ * Make symbol table
251
+ * Make literal pool
252
+ * Count local variables and registers
253
+ * Make each scopes (文字数
254
+ * Make header and footer
255
+
256
+ = Steps of coding a compiler
257
+ * Tokenize (Scan, Lexical analyze)
258
+ * Parse
259
+ * Generate Code
260
+
261
+ (('tag:center'))
262
+ \n\n
263
+ Just outlines for today
264
+
265
+ = mruby compiler written in CRuby
266
+ (('tag:center'))
267
+ \n
268
+ github.com/hasumikin/mmrbc.gem
269
+
270
+ = mruby compiler written in CRuby
271
+ (('tag:center'))
272
+ \n
273
+ github.com/hasumikin/mmrbc.gem
274
+ \n\n\n
275
+ for only `puts "Hello World!"` 😂\n
276
+ `[identifier] "[string literal]"`
277
+
278
+ = mruby compiler written in CRuby
279
+ (('tag:center'))
280
+ \n
281
+ github.com/hasumikin/mmrbc.gem
282
+ \n\n\n
283
+ for only `puts "Hello World!"` 😂\n
284
+ `[identifier] "[string literal]"`
285
+ \n\n\n
286
+ but no cheat 😤
287
+
288
+ = Tokenizer
289
+ * FLEX is a tokenizer generator
290
+ * You can write tokenizer from scratch w/o FLEX
291
+ * CRuby, mruby and mmrbc.gem, too
292
+
293
+ # enscript Ruby
294
+ puts("Hello World!")
295
+ ....................
296
+ p
297
+ pu
298
+ put
299
+ puts
300
+ puts( # look ahead
301
+ puts # detemine a token
302
+
303
+ = Tokenizer of Ruby
304
+ * It has state
305
+
306
+ # enscript sh
307
+ $ irb
308
+ irb(main):001:0> [1, 2, 3].each do |n|
309
+ irb(main):002:1*
310
+
311
+ * `do` keyword sets tokenizer_state as EXPR_BEG
312
+ * irb can delay parsing until it becomes EXPR_END with `end` keyword
313
+
314
+ = Parser and Parser generator
315
+ * Parser
316
+ * Syntactic analysis of token list
317
+ * Parser generator
318
+ * Generates C code of parser by syntactic definition (and "reduction" code)
319
+ * Parse algorithms
320
+ * LL(n), LR(n), etc.
321
+
322
+ = Parse algorithm - LL(1)/LR(1)
323
+ * LL(k) = Left to right, Leftmost derivation
324
+ * You can write LL parser from scratch
325
+ * LR(k) = Left to right, Rightmost derivation
326
+ * You can hardly write LR parser from scratch
327
+ * You should use parser generator
328
+ * LALR(k) is a variation of LR
329
+ * (k) = length of lookahead symbols
330
+
331
+ = Parser generator
332
+ (('tag:center'))
333
+ \n\n\n\n
334
+ YACC/BISON
335
+
336
+ = YACC/BISON
337
+ * Most popular parser genarator
338
+ * Used in CRuby, mruby, bash, Blawn, etc.
339
+ * BISON is a GNU version of YACC
340
+ * Thread safe (Reentrant)
341
+ * Genarates LALR(1) parser
342
+
343
+ = However
344
+
345
+ = However
346
+ (('tag:center'))
347
+ \n\n\n\n
348
+ (('tag:x-large:I don't use YACC/BISON'))
349
+
350
+ = So?
351
+
352
+ = So?
353
+ (('tag:center'))
354
+ \n\n\n\n
355
+ (('tag:x-large:LEMON, instead'))
356
+
357
+ = LEMON?
358
+ * Parser generator of SQLite
359
+ * A part of SQLite project
360
+ * Generates LALR(1) parser code
361
+ * as well as YACC/BISON does
362
+ * Doesn't use global variable to pass information between parser and tokenizer
363
+ * YACC/BISON does
364
+ * Tokenizer calls parser in LEMON
365
+ * Parser calls tokenizer in YACC/BISON
366
+
367
+ = Parser calls tokenizer in YACC/BISON
368
+ # enscript C
369
+ int yyparse(parser_state *p) {
370
+ ...
371
+ yynewstate:
372
+ ...
373
+ yychar = yylex (&yylval, p); // calls tokenizer
374
+ ...
375
+ goto yynewstate;
376
+ ...
377
+ }
378
+
379
+ = Tokenizer calls parser in LEMON
380
+ # enscript C
381
+ void Tokenize(char *code) {
382
+ ...
383
+ while (token == get_token(code)) {
384
+ ...
385
+ Parse(parser, token, value); // calls parser
386
+ ...
387
+ }
388
+ Parse(parser, 0, NULL);
389
+ }
390
+
391
+ = Parsing "Hello World!" in YACC
392
+ #enscript sh
393
+ # an excerpt from mruby/mrbgems/mruby-compiler/core/parse.y
394
+ primary : literal
395
+ | string
396
+ (...)
397
+ ;
398
+ literal : numeric
399
+ (...)
400
+ ;
401
+ string : string_fragment;
402
+ | string string_fragment
403
+ { $$ = concat_string(p, $1, $2); }
404
+ ;
405
+ string_fragment : tSTRING_BEG string_rep tSTRING
406
+ { $$ = new_dstr(p, push($2, $3)); };
407
+ string_rep : string_interp
408
+ | string_rep string_interp
409
+ { $$ = append($1, $2); };
410
+ string_interp : tSTRING_MID
411
+ { $$ = list1($1); };
412
+
413
+ = Parsing "Hello World!" in LEMON
414
+ #enscript sh
415
+ # an excerpt from mmrbc.gem/ext/mmrbc/parse.y
416
+ primary ::= literal.
417
+ primary ::= string.
418
+ literal ::= numeric.
419
+ string ::= string_fragment.
420
+ string_fragment(A) ::= STRING_BEG string_rep(C) STRING.
421
+ { A = new_dstr(p, list3(atom(ATOM_string_add),
422
+ list1(atom(ATOM_string_content)), C)); }
423
+ string_rep ::= string_interp.
424
+ string_rep(A) ::= string_rep(B) string_interp(C).
425
+ { A = append(B, C); }
426
+ string_interp(A) ::= STRING_MID(B).
427
+ { A = list2(atom(ATOM_at_tstring_content),
428
+ literal(B)); }
429
+
430
+ = ((* *))
431
+ (('tag:center'))
432
+ \n\n
433
+ \n\n
434
+ (('tag:xx-large:DEMO?'))
435
+ == prop
436
+ : hide-title
437
+ true
438
+
439
+ = Future work
440
+
441
+ = Future work ->{mmrbc + mruby/c}
442
+ * More syntax than `puts "Hello World!"`
443
+ * Rewrite mmrbc.gem into C
444
+ * And embed it with mruby/c in one-chip microcontroller which has less than 512KB ROM and 128KB RAM
445
+
446
+ = Future work ->{mmrbc + mruby/c}
447
+ # image
448
+ # src = images/VM_code.png
449
+ # relative_height = 105
450
+
451
+ = Future work ->{mmrbc + mruby/c}
452
+ # image
453
+ # src = images/VM_code_2.png
454
+ # relative_height = 105
455
+
456
+ = Future work ->{mmrbc + mruby/c}
457
+ (('tag:center'))
458
+ \n\n
459
+ "LEMON would generate smaller binary than YACC."
460
+ \n\n
461
+
462
+ # image
463
+ # src = images/matz.jpg
464
+ # align = center
465
+ # relative_height = 70
466
+
467
+ = Future work ->{mmrbc + mruby/c}
468
+ (('tag:center'))
469
+ \n\n
470
+ (('tag:large:Possibly and hopefully,'))\n
471
+ (('tag:large:I will see you on'))\n
472
+ (('tag:large:RubyKaigi2020 at Matsumoto'))
473
+
474
+ = ((* *))
475
+ (('tag:center'))
476
+ \n\n
477
+ \n\n
478
+ (('tag:xx-large:Thank you!'))
479
+ == prop
480
+ : hide-title
481
+ true
482
+
data/theme.rb ADDED
@@ -0,0 +1,104 @@
1
+ # puts font_families.sort
2
+ @xx_large_font_size = screen_size(11 * Pango::SCALE)
3
+ @x_large_font_size = screen_size(9 * Pango::SCALE)
4
+ @large_font_size = screen_size(7 * Pango::SCALE)
5
+ @normal_font_size = screen_size(4.5 * Pango::SCALE)
6
+ @small_font_size = screen_size(4 * Pango::SCALE)
7
+ @x_small_font_size = screen_size(3.5 * Pango::SCALE)
8
+ @xx_small_font_size = screen_size(3 * Pango::SCALE)
9
+
10
+ @default_headline_line_color = '#888888'
11
+ @font_family = find_font_family('Rockwell')
12
+ #@foreground = "yellow"
13
+ @foreground = "#d9333f" # タイトルスライドの文字色
14
+
15
+ @table_frame_color = "#ffffff"
16
+ @table_fill_color = "#0f0428"
17
+ @table_body_frame_color = "#ffffff"
18
+ @table_body_fill_color = "#3f3468"
19
+ @table_head_frame_color = "#ffffff"
20
+ @table_head_fill_color = "#rf0428"
21
+
22
+ @monospace_font_family = 'Ricty Discord'
23
+ @preformatted_fill_color = '#000000'
24
+ # @preformatted_centering = true
25
+ @space = screen_y(1)
26
+
27
+ include_theme('default')
28
+
29
+ match(Slide, HeadLine) do |heads|
30
+ heads.prop_set("size", @large_font_size)
31
+ heads.prop_set("weight", "normal")
32
+ set_font_family(heads)
33
+ end
34
+
35
+ match Slide do |slides|
36
+ slides.each do |slide|
37
+ # スライドの文字色
38
+ slide.prop_set("foreground", "#fef263")
39
+ end
40
+ end
41
+
42
+ @slide_headline_hide = true
43
+ #match Slide do |slides|
44
+ # slides.each do |slide|
45
+ # slide.prop_set("hide_title", true)
46
+ # end
47
+ #end
48
+
49
+ @title_slide_background_image = 'images/himi.jpg'
50
+ include_theme("title-slide-background-image")
51
+
52
+ @slide_background_image = 'images/slide-background.png'
53
+ include_theme("slide-background-image")
54
+
55
+ @slide_logo_image = 'images/mark48.png'
56
+ include_theme('slide-logo')
57
+
58
+ @item_image = 'images/mark48.png'
59
+
60
+ include_theme("default-item-mark")
61
+
62
+ add_image_path("rabbit-images")
63
+
64
+ slide_body = [Slide, Body]
65
+ item_list_item = [ItemList, ItemListItem]
66
+
67
+ indent = 70
68
+
69
+ match(*(slide_body + (item_list_item * 1))) do |items|
70
+ name = "item1"
71
+ items.delete_pre_draw_proc_by_name(name)
72
+ items.delete_post_draw_proc_by_name(name)
73
+ draw_image_mark(items, @item_image, name, indent: indent)
74
+ end
75
+
76
+ match(*(slide_body + (item_list_item * 2))) do |items|
77
+ name = "item2"
78
+ items.delete_pre_draw_proc_by_name(name)
79
+ items.delete_post_draw_proc_by_name(name)
80
+ draw_image_mark(items, @item_image, name, indent: indent)
81
+ end
82
+
83
+ match(*(slide_body + (item_list_item * 3))) do |items|
84
+ name = "item3"
85
+ items.delete_pre_draw_proc_by_name(name)
86
+ items.delete_post_draw_proc_by_name(name)
87
+ draw_image_mark(items, @item_image, name, indent: indent)
88
+ end
89
+
90
+ enum_list_item = [EnumList, EnumListItem]
91
+
92
+ match(*(slide_body + enum_list_item + item_list_item)) do |items|
93
+ name = "enum-item1"
94
+ items.delete_pre_draw_proc_by_name(name)
95
+ items.delete_post_draw_proc_by_name(name)
96
+ draw_image_mark(items, @item_image, name, indent: indent)
97
+ end
98
+
99
+ match(*(slide_body + enum_list_item + (item_list_item * 2))) do |items|
100
+ name = "enum-item2"
101
+ items.delete_pre_draw_proc_by_name(name)
102
+ items.delete_post_draw_proc_by_name(name)
103
+ draw_image_mark(items, @item_image, name, indent: indent)
104
+ end
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-hasumikin-ToyamaRubyKaigi01
3
+ version: !ruby/object:Gem::Version
4
+ version: 2019.11.3.0
5
+ platform: ruby
6
+ authors:
7
+ - HASUMI Hitoshi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-11-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ description: The Presentation for RubyKaigiToyama01 by hasumikin
28
+ email:
29
+ - hasumikin@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rabbit"
35
+ - README.rd
36
+ - Rakefile
37
+ - config.yaml
38
+ - images/VM_code.png
39
+ - images/VM_code_2.png
40
+ - images/borges.jpg
41
+ - images/hasumi.jpg
42
+ - images/himi.jpg
43
+ - images/ishikura.jpg
44
+ - images/mark32.png
45
+ - images/mark48.png
46
+ - images/mark64.png
47
+ - images/matz.jpg
48
+ - images/monstarlab.png
49
+ - images/mrubycKaigi02.png
50
+ - images/noboru_i.jpg
51
+ - images/rwc.png
52
+ - images/rwc4.png
53
+ - images/slide-background.png
54
+ - images/松江城_Matsue.rb.16x9.jpg
55
+ - images/松江城_Matsue.rb.jpg
56
+ - mruby-de-Hello-World.rab
57
+ - pdf/ToyamaRubyKaigi01-mruby-de-Hello-World.pdf
58
+ - theme.rb
59
+ homepage: https://slide.rabbit-shocker.org/authors/hasumikin/ToyamaRubyKaigi01/
60
+ licenses: []
61
+ metadata: {}
62
+ post_install_message:
63
+ rdoc_options: []
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubygems_version: 3.0.3
78
+ signing_key:
79
+ specification_version: 4
80
+ summary: mruby de Hello World!
81
+ test_files: []