rabbit-slide-hasumikin-RAGrant2021Report 2022.7.12.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: 6ffe035a609cd1155483f71ae7e96a69cfbe1466771e5efbc4bdc0aa1231b021
4
+ data.tar.gz: fdf7b7fe2d59d7b05082e0ca784ff5d06463f272a75faf96275e2c2fd8c330eb
5
+ SHA512:
6
+ metadata.gz: 2a62ba2184750a955219535d31938ca6ed946b335b5049ba5ee679b55369b30f07edccfffa220caf34e30a8179686b7cd76adeda1f5376528833dd69820d7bdd
7
+ data.tar.gz: e3aaf589b1ac46a249391d381ebdd98c30c9516eae43596494089e695c1756fd78f518385c7e1d096684bd5d84a65e9585c7ca1173bf8553b7b92c6965c6678b
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ PicoRubyCompiler.rab
data/PicoRuby_ep2.rab ADDED
@@ -0,0 +1,666 @@
1
+ = pico
2
+
3
+ : subtitle
4
+ ruby
5
+ : author
6
+ Episode Ⅱ\nATTACK OF THE RAKE
7
+ : content-source
8
+ Ruby Association Grant 2021 Report
9
+ : institution
10
+ hasumikin>&Monstarlab
11
+ : date
12
+ July 12, 2022
13
+ : allotted-time
14
+ 28m
15
+ : theme
16
+ theme
17
+
18
+ = Chapter
19
+ (('tag:center'))
20
+ Episode Ⅱ\n
21
+ (('tag:large:ATTACK OF THE RAKE'))
22
+ \n\n
23
+ It is a patient time to the PicoRuby. Although the PRK Firmware has been released and it brought the First Prize of the Fukuoka Ruby Award and a Final nomination to the Ruby Prize, problems are piling up such as a lack of syntax rules and an inconsistent build system with mruby.
24
+ \n
25
+ \n
26
+ Hasumikin, an apprentice to a Rubyist, is strugglingly writing the compiler to compile mrblib of mruby under the coaching of Master MATZ to restore freedom to the micon galaxy....
27
+ == prop
28
+ : hide-title
29
+ true
30
+
31
+ = What happened in Episode Ⅰ
32
+ # image
33
+ # src = images/architecture_1.png
34
+ # relative_width = 100
35
+ # relative_margin_top = 3
36
+
37
+ = What happened in Episode Ⅰ
38
+ # image
39
+ # src = images/architecture_2.png
40
+ # relative_width = 100
41
+ # relative_margin_top = 3
42
+ (('tag:center'))
43
+ PicoRuby compiler for one-chip microcontrollers
44
+
45
+ = What happened between Episode Ⅰ & Ⅱ
46
+
47
+ = What happened between Episode Ⅰ & Ⅱ
48
+ # image
49
+ # src = images/rubykaigi_1.png
50
+ # relative_width = 85
51
+ # relative_margin_top = 0
52
+
53
+ = What happened between Episode Ⅰ & Ⅱ
54
+ # image
55
+ # src = images/rubykaigi_2.png
56
+ # relative_width = 85
57
+ # relative_margin_top = 0
58
+
59
+ = What happened between Episode Ⅰ & Ⅱ
60
+ # image
61
+ # src = images/rubyconf_1.png
62
+ # relative_width = 85
63
+ # relative_margin_top = 0
64
+
65
+ = What happened between Episode Ⅰ & Ⅱ
66
+ # image
67
+ # src = images/rubyconf_2.png
68
+ # relative_width = 85
69
+ # relative_margin_top = 0
70
+
71
+ = What happened between Episode Ⅰ & Ⅱ
72
+ # enscript ruby
73
+
74
+ kbd = Keyboard.new
75
+ kbd.init_pins(
76
+ [ 29, 28, 27, 26, 22, 20, 23 ],
77
+ [ 3, 4, 5, 6, 7, 8, 9]
78
+ )
79
+
80
+ kbd.add_layer :default, %i[
81
+ KC_ESCAPE KC_Q KC_W KC_E KC_R KC_T KC_Y KC_U KC_I KC_O KC_P KC_MINUS
82
+ KC_TAB KC_A KC_S KC_D KC_F KC_G KC_H KC_J KC_K KC_L KC_SCOLON KC_BSPACE
83
+ KC_LSFT KC_Z KC_X KC_C KC_V KC_B KC_NO KC_NO KC_N KC_M KC_COMMA KC_DOT KC_SLASH KC_RSFT
84
+ KC_NO KC_LALT KC_LCTL LOWER_SPC RAISE_ENT SPC_CTL KC_RGUI KC_NO
85
+ ]
86
+ kbd.add_layer :raise, %i[
87
+ KC_GRAVE KC_EXLM KC_AT KC_HASH KC_DLR KC_PERC KC_CIRC KC_AMPR KC_ASTER KC_LPRN KC_RPRN KC_EQUAL
88
+ KC_TAB KC_LABK KC_LCBR KC_LBRACKET KC_LPRN KC_QUOTE KC_LEFT KC_DOWN KC_UP KC_RIGHT KC_UNDS KC_PIPE
89
+ KC_LSFT KC_RABK KC_RCBR KC_RBRACKET KC_RPRN KC_DQUO KC_NO KC_NO KC_TILD KC_BSLASH KC_COMMA KC_DOT KC_SLASH KC_RSFT
90
+ KC_NO KC_LALT KC_LCTL ADJUST RAISE_ENT SPC_CTL KC_RGUI BOOTSEL
91
+ ]
92
+
93
+ kbd.define_composite_key :SPC_CTL, %i[KC_SPACE KC_RCTL]
94
+
95
+ kbd.define_mode_key :RAISE_ENT, [ :KC_ENTER, :raise, 150, 150 ]
96
+
97
+ rgb = RGB.new(0, 9, 0, false)
98
+ rgb.effect = :breath
99
+ kbd.append rgb
100
+
101
+ kbd.output_report_changed do |output|
102
+ rgb.hue = (output & Keyboard::LED_CAPSLOCK > 0) ? 100 : 0
103
+ end
104
+
105
+ kbd.start!
106
+
107
+ = What happened between Episode Ⅰ & Ⅱ
108
+ * PRK Firmware
109
+ * Compiling and applying a `keymap.rb` on a microcontroller without rebooting
110
+
111
+ = What happened between Episode Ⅰ & Ⅱ
112
+ * PRK Firmware
113
+ * Compiling and applying a `keymap.rb` on a microcontroller without rebooting
114
+ * IRB in keyboard
115
+ * Any text editor becomes an IRB
116
+
117
+ = What happened between Episode Ⅰ & Ⅱ
118
+ * PRK Firmware
119
+ * Compiling and applying a `keymap.rb` on a microcontroller without rebooting
120
+ * IRB in keyboard
121
+ * Any text editor becomes an IRB
122
+ * Presentations available on YouTube
123
+ * Japanese -> RubyKaigi Takeout 2021
124
+ * English -> RubyConf 2021
125
+
126
+ = Targets in Episode Ⅱ
127
+
128
+ = Targets in Episode Ⅱ
129
+ * Rake
130
+ * Integrating PicoRuby with mruby's build system
131
+
132
+ = Targets in Episode Ⅱ
133
+ * Rake
134
+ * Integrating PicoRuby with mruby's build system
135
+ * Syntax
136
+ * Improving parser and generator to compile mrblib
137
+
138
+ = Targets in Episode Ⅱ
139
+ * Rake
140
+ * Integrating PicoRuby with mruby's build system
141
+ * Syntax
142
+ * Improving parser and generator to compile mrblib
143
+ * Presym
144
+ * Embedding mrblib in ROM
145
+
146
+ = Targets in Episode Ⅱ
147
+ * Rake
148
+ * Integrating PicoRuby with mruby's build system
149
+ * Syntax
150
+ * Improving parser and generator to compile mrblib
151
+ * Presym
152
+ * Embedding mrblib in ROM
153
+ * MicroRuby
154
+ * PicoRuby compiler + mruby VM
155
+
156
+ = chapter
157
+ rake
158
+ == prop
159
+ : hide-title
160
+ true
161
+
162
+ = Rake
163
+ * mruby takes advandage of Rake to be built
164
+ * Fairly complicated (for me)
165
+ * Too hard to migrate to Make (at least I can't)
166
+
167
+ = Rake
168
+ * mruby takes advandage of Rake to be built
169
+ * Fairly complicated (for me)
170
+ * Too hard to migrate to Make (at least I can't)
171
+ * PicoRuby used to use Make
172
+ * PicoRuby compiler can't be integrated with mruby as it is
173
+ * Should be "Rakenized"
174
+
175
+ = Rake
176
+ * Build process of mruby
177
+ * libmruby_core.a
178
+ * Includes mruby-compiler and murby's core objects implemented in C
179
+
180
+ = Rake
181
+ * Build process of mruby
182
+ * libmruby_core.a
183
+ * Includes mruby-compiler and murby's core objects implemented in C
184
+ * mrbc
185
+ * An executable of mruby-compiler
186
+
187
+ = Rake
188
+ * Build process of mruby
189
+ * libmruby_core.a
190
+ * Includes mruby-compiler and murby's core objects implemented in C
191
+ * mrbc
192
+ * An executable of mruby-compiler
193
+ * mrblib.c
194
+ * From `mrblib/*.rb`
195
+
196
+ = Rake
197
+ * Build process of mruby
198
+ * libmruby_core.a
199
+ * Includes mruby-compiler and murby's core objects implemented in C
200
+ * mrbc
201
+ * An executable of mruby-compiler
202
+ * mrblib.c
203
+ * From `mrblib/*.rb`
204
+ * libmruby.a
205
+ * Core objects, mrblib, mruby-compiler and mrbgems
206
+
207
+ = Rake
208
+ * Build process of mruby
209
+ * libmruby_core.a
210
+ * Includes mruby-compiler and murby's core objects implemented in C
211
+ * mrbc
212
+ * An executable of mruby-compiler
213
+ * mrblib.c
214
+ * From `mrblib/*.rb`
215
+ * libmruby.a
216
+ * Core objects, mrblib, mruby-compiler and mrbgems
217
+ * mruby and mirb
218
+
219
+ = Rakenized PicoRuby
220
+ picoruby/
221
+ ├─Rakefile # modified `mruby/Rakefile`
222
+ ├─bin/
223
+ ├─build/
224
+ ├─build_config/
225
+ ├─include/
226
+ ├─lib/ # cp from `mruby/lib`
227
+ └─mrbgems/
228
+ ├─ mruby-bin-picoirb/
229
+ ├─ mruby-bin-picorbc/
230
+ ├─ mruby-bin-picoruby/
231
+ ├─ mruby-mrubyc/
232
+ └─ mruby-pico-compiler/
233
+
234
+ = chapter
235
+ syntax
236
+ == prop
237
+ : hide-title
238
+ true
239
+
240
+ = Syntax
241
+ * As of Episode Ⅰ, PicoRuby has minimum syntax rules to implement PRK Firmware
242
+
243
+ = Syntax
244
+ * As of Episode Ⅰ, PicoRuby has minimum syntax rules to implement PRK Firmware
245
+ * It's not enough to compile mrblib
246
+
247
+ = Syntax
248
+ * As of Episode Ⅰ, PicoRuby has minimum syntax rules to implement PRK Firmware
249
+ * It's not enough to compile mrblib
250
+ \n\n\n
251
+ (('tag:center'))
252
+ (('tag:x-large:mrblib?'))
253
+
254
+ = Syntax
255
+ mruby/
256
+ └─mrblib/
257
+ ├─ 00class.rb
258
+ ├─ 10error.rb
259
+ ├─ array.rb
260
+ ├─ compar.rb
261
+ ├─ enum.rb
262
+ ├─ hash.rb
263
+ ├─ kernel.rb
264
+ ├─ numeric.rb
265
+ ├─ range.rb
266
+ ├─ string.rb
267
+ └─ symbol.rb
268
+
269
+ = Syntax added
270
+ * Singleton method
271
+ * rescue-else-ensure-retry and rescue modifier
272
+ * Reswords (keyword as an identifier). eg) `next`
273
+ * Mass assignment
274
+ * Splat `*args` `**args`
275
+ * Assignable `p = p; p p #=> nil`
276
+ * `-2 ** 2 #=> -4`
277
+ * etc.
278
+
279
+ = chapter
280
+ presym
281
+ == prop
282
+ : hide-title
283
+ true
284
+
285
+ = Presym
286
+ * mruby 3.0 introduced ((*preallocated symbols*)) to save RAM
287
+ * Presym is created in compilation time and located in ROM
288
+
289
+ = Presym
290
+ * mruby 3.0 introduced ((*preallocated symbols*)) to save RAM
291
+ * Presym is created in compilation time and located in ROM
292
+ * From the compiler's point of view, presym is a described IREP
293
+
294
+ = Presym
295
+ * mruby 3.0 introduced ((*preallocated symbols*)) to save RAM
296
+ * Presym is created in compilation time and located in ROM
297
+ * From the compiler's point of view, presym is a described IREP
298
+ * IREP: Internal representation
299
+ * One IREP corresponds to a "Proc" in Ruby script
300
+
301
+ = Presym
302
+ # enscript ruby
303
+
304
+ class MyClass
305
+ def my_method(ary = [])
306
+ ary.each { |e| do_something }
307
+ end
308
+ end
309
+
310
+ (('tag:center'))
311
+ This Ruby script has four IREPs ("Procs") nested.
312
+
313
+ = Presym
314
+ # enscript c
315
+
316
+ #include <mruby.h>
317
+ #include <mruby/proc.h>
318
+ #include <mruby/presym.h>
319
+
320
+ #define mrb_BRACED(...) {__VA_ARGS__}
321
+ #define mrb_DEFINE_SYMS_VAR(name, len, syms, qualifier) \
322
+ static qualifier mrb_sym name[len] = mrb_BRACED syms
323
+
324
+ static const mrb_code mrblib_proc_iseq_20[24] = {
325
+ 0x35,0x04,0x00,0x00,0x14,0x03,0x01,0x04,0x01,0x43,0x03,0x27,0x03,0x00,0x05,0x16,0x03,0x25,0x00,0x02,0x15,0x03,0x39,0x03,};
326
+ mrb_DEFINE_SYMS_VAR(mrblib_proc_lv_20, 2, (MRB_SYM(other), MRB_OPSYM(and), ), const);
327
+ static const mrb_irep mrblib_proc_irep_20 = {
328
+ 3,6,0,
329
+ MRB_IREP_STATIC,mrblib_proc_iseq_20,
330
+ NULL,NULL,NULL,
331
+ mrblib_proc_lv_20,
332
+ NULL, /* debug_info */
333
+ 24,0,0,0,0
334
+ };
335
+ static const mrb_irep *mrblib_proc_reps_1[1] = {
336
+ &mrblib_proc_irep_20,
337
+ };
338
+ mrb_DEFINE_SYMS_VAR(mrblib_proc_syms_1, 1, (MRB_OPSYM(neq), ), const);
339
+ static const mrb_code mrblib_proc_iseq_1[13] = {
340
+ 0x68,0x01,0x5b,0x02,0x00,0x64,0x01,0x00,0x11,0x01,0x00,0x39,0x01,};
341
+ static const mrb_irep mrblib_proc_irep_1 = {
342
+ 1,3,0,
343
+ MRB_IREP_STATIC,mrblib_proc_iseq_1,
344
+ NULL,mrblib_proc_syms_1,mrblib_proc_reps_1,
345
+ NULL, /* lv */
346
+ NULL, /* debug_info */
347
+ 13,0,1,1,0
348
+ };
349
+ // ... goes on
350
+
351
+ = Presym
352
+ # enscript c
353
+
354
+ /* Program data array struct */
355
+ typedef struct mrb_irep {
356
+ uint16_t nlocals; /* Number of local variables */
357
+ uint16_t nregs; /* Number of register variables */
358
+ uint16_t clen; /* Number of catch handlers */
359
+ uint8_t flags;
360
+
361
+ const mrb_code *iseq;
362
+ /*
363
+ * A catch handler table is placed after the iseq entity.
364
+ * The reason it doesn't add fields to the structure is to keep the mrb_irep structure from bloating.
365
+ * The catch handler table can be obtained with `mrb_irep_catch_handler_table(irep)`.
366
+ */
367
+ const mrb_pool_value *pool;
368
+ const mrb_sym *syms;
369
+ const struct mrb_irep * const *reps;
370
+
371
+ const mrb_sym *lv;
372
+ /* debug info */
373
+ struct mrb_irep_debug_info* debug_info;
374
+
375
+ uint32_t ilen;
376
+ uint16_t plen, slen;
377
+ uint16_t rlen;
378
+ uint16_t refcnt;
379
+ } mrb_irep;
380
+
381
+ = Presym
382
+ # enscript c
383
+ typedef struct scope {
384
+ uint32_t irep_parameters; /* bbb */
385
+ uint32_t nest_stack; /* Initial: 00000000 00000000 00000000 00000001 */
386
+ Scope *upper;
387
+ Scope *first_lower;
388
+ Scope *next;
389
+ bool lvar_top;
390
+ uint16_t next_lower_number;
391
+ uint16_t nlowers; /* irep.rlen in mruby/c (num of child IREP block) */
392
+ CodePool *first_code_pool;
393
+ CodePool *current_code_pool;
394
+ unsigned int nlocals;
395
+ Symbol *symbol;
396
+ Lvar *lvar;
397
+ Literal *literal;
398
+ GenLiteral *gen_literal; /* Exceptional literals in generator */
399
+ unsigned int sp;
400
+ uint32_t ilen; /* irep length */
401
+ uint16_t slen; /* symbol length */
402
+ uint16_t plen; /* pool length */
403
+ uint16_t clen; /* exception handler length */
404
+ uint16_t vm_code_size;
405
+ uint8_t *vm_code;
406
+ BreakStack *break_stack;
407
+ RetryStack *retry_stack;
408
+ AssignSymbol *last_assign_symbol;
409
+ Backpatch *backpatch; /* for backpatching of JMP label */
410
+ int nargs_before_splat;
411
+ uint8_t gen_splat_status;
412
+ uint8_t gen_array_status;
413
+ uint8_t gen_array_count;
414
+ ExcHandler *exc_handler;
415
+ } Scope;
416
+
417
+ = chapter
418
+ microruby
419
+ == prop
420
+ : hide-title
421
+ true
422
+
423
+ = MicroRuby
424
+ # enscript ruby
425
+ # mruby/build_config/microruby.rb
426
+ MRuby::Build.new do |conf|
427
+ conf.toolchain
428
+ conf.mrbcfile = "#{conf.build_dir}/bin/picorbc"
429
+ conf.gem git: "https://github.com/hasumikin/mruby-bin-picorbc.git", branch: "master"
430
+ conf.gem git: "https://github.com/hasumikin/mruby-pico-compiler.git", branch: "master"
431
+ conf.gem git: "https://github.com/hasumikin/mruby-bin-microruby.git", branch: "master"
432
+ conf.gem core: "mruby-print"
433
+ conf.cc.defines << "MICRORUBY"
434
+ conf.cc.defines << "NDEBUG"
435
+ conf.cc.defines << "MRBC_ALLOC_LIBC"
436
+ conf.cc.defines << "REGEX_USE_ALLOC_LIBC"
437
+ end
438
+
439
+ (('tag:center'))
440
+
441
+ cd mruby && git checkout 3.0.0
442
+ MRUBY_CONFIG=microruby rake
443
+
444
+ = MicroRuby
445
+ * Build process of MicroRuby
446
+ * libmruby_core.a
447
+ * Doesn't include an mruby-related object
448
+
449
+ = MicroRuby
450
+ * Build process of MicroRuby
451
+ * libmruby_core.a
452
+ * Doesn't include an mruby-related object
453
+ * picorbc
454
+ * An executable of picoruby-compiler
455
+
456
+ = MicroRuby
457
+ * Build process of MicroRuby
458
+ * libmruby_core.a
459
+ * Doesn't include an mruby-related object
460
+ * picorbc
461
+ * An executable of picoruby-compiler
462
+ * mrblib.c
463
+ * From `mrblib/*.rb` compiled by picorbc
464
+
465
+ = MicroRuby
466
+ * Build process of MicroRuby
467
+ * libmruby_core.a
468
+ * Doesn't include an mruby-related object
469
+ * picorbc
470
+ * An executable of picoruby-compiler
471
+ * mrblib.c
472
+ * From `mrblib/*.rb` compiled by picorbc
473
+ * libmruby.a
474
+ * Core objects of mruby, mrblib and picoruby-compiler
475
+
476
+ = MicroRuby
477
+ * Build process of MicroRuby
478
+ * libmruby_core.a
479
+ * Doesn't include an mruby-related object
480
+ * picorbc
481
+ * An executable of picoruby-compiler
482
+ * mrblib.c
483
+ * From `mrblib/*.rb` compiled by picorbc
484
+ * libmruby.a
485
+ * Core objects of mruby, mrblib and picoruby-compiler
486
+ * microruby executable
487
+ * microirb, not yet
488
+
489
+ = MicroRuby
490
+ # image
491
+ # src = images/architecture_2.png
492
+ # relative_width = 100
493
+ # relative_margin_top = 3
494
+
495
+ = MicroRuby
496
+ # image
497
+ # src = images/architecture_3.png
498
+ # relative_width = 100
499
+ # relative_margin_top = 3
500
+
501
+ = chapter
502
+ massif
503
+ == prop
504
+ : hide-title
505
+ true
506
+
507
+ = massif
508
+ $ valgrind \
509
+ --tool=massif \
510
+ --stacks=yes \
511
+ path/to/(mruby|microrby|picoruby) \
512
+ -e 'puts "Hello World"'
513
+
514
+ $ ms_print massif.out.xxx | less
515
+
516
+ = massif
517
+ mruby -e 'puts "Hello World"'
518
+
519
+ KB
520
+ 136.1^ #
521
+ | #
522
+ | #
523
+ | #
524
+ | #
525
+ | @#
526
+ | @#
527
+ | @#
528
+ | @::::@:::::@#:
529
+ | @@@@:@@::::@:::::@#:
530
+ | ::@:::::@:::::@::@@@@:@@::::@:::::@#:
531
+ | :@:::@:::::::@:@:::::@:::::@::@@@@:@@::::@:::::@#:
532
+ | @@@::::::::@:::@:::::: @:@:::::@:::::@::@@@@:@@::::@:::::@#:
533
+ | @ ::::::::@:::@:::::: @:@:::::@:::::@::@@@@:@@::::@:::::@#:
534
+ | @ ::::::::@:::@:::::: @:@:::::@:::::@::@@@@:@@::::@:::::@#:
535
+ | @ ::::::::@:::@:::::: @:@:::::@:::::@::@@@@:@@::::@:::::@#:
536
+ | @ ::::::::@:::@:::::: @:@:::::@:::::@::@@@@:@@::::@:::::@#:
537
+ | @ ::::::::@:::@:::::: @:@:::::@:::::@::@@@@:@@::::@:::::@#:
538
+ | @ ::::::::@:::@:::::: @:@:::::@:::::@::@@@@:@@::::@:::::@#:
539
+ | @ ::::::::@:::@:::::: @:@:::::@:::::@::@@@@:@@::::@:::::@#:
540
+ 0 +----------------------------------------------------------------------->Mi
541
+ 0 1.160
542
+
543
+ = massif
544
+ microruby -e 'puts "Hello World"'
545
+
546
+ KB
547
+ 88.05^ :
548
+ | @ :::#:::
549
+ | :::::::@:::::#:::
550
+ | ::::: ::: @:::::#:::
551
+ | :@@:@@:@@:@::::: :: ::: @:::::#:::
552
+ | :::::@ :@@:@ :@::::: :: ::: @:::::#:::
553
+ | :@@:@@:::::::: :@ :@@:@ :@::::: :: ::: @:::::#:::
554
+ | @@@:::::::::@ :@ :: : ::: :@ :@@:@ :@::::: :: ::: @:::::#:::
555
+ | @ :: : :: :@ :@ :: : ::: :@ :@@:@ :@::::: :: ::: @:::::#:::
556
+ | @ :: : :: :@ :@ :: : ::: :@ :@@:@ :@::::: :: ::: @:::::#:::
557
+ | @ :: : :: :@ :@ :: : ::: :@ :@@:@ :@::::: :: ::: @:::::#:::
558
+ | @ :: : :: :@ :@ :: : ::: :@ :@@:@ :@::::: :: ::: @:::::#:::
559
+ | @ :: : :: :@ :@ :: : ::: :@ :@@:@ :@::::: :: ::: @:::::#:::
560
+ | @ :: : :: :@ :@ :: : ::: :@ :@@:@ :@::::: :: ::: @:::::#:::
561
+ | @ :: : :: :@ :@ :: : ::: :@ :@@:@ :@::::: :: ::: @:::::#:::
562
+ | @ :: : :: :@ :@ :: : ::: :@ :@@:@ :@::::: :: ::: @:::::#:::
563
+ | @ :: : :: :@ :@ :: : ::: :@ :@@:@ :@::::: :: ::: @:::::#:::
564
+ | @ :: : :: :@ :@ :: : ::: :@ :@@:@ :@::::: :: ::: @:::::#:::
565
+ | @ :: : :: :@ :@ :: : ::: :@ :@@:@ :@::::: :: ::: @:::::#:::
566
+ | @ :: : :: :@ :@ :: : ::: :@ :@@:@ :@::::: :: ::: @:::::#:::
567
+ 0 +----------------------------------------------------------------------->Mi
568
+ 0 1.174
569
+
570
+ = massif
571
+ picoruby -e 'puts "Hello World"'
572
+
573
+ KB
574
+ 10.86^ #
575
+ | #
576
+ | #
577
+ | #
578
+ | @@ #
579
+ | ::@ ::@:#
580
+ | ::@ ::@:#
581
+ | @ ::@ ::@:#
582
+ | @ ::@ ::@:#
583
+ | @ ::@ ::@:#
584
+ | @ ::@ ::@:#
585
+ | @ ::: ::@ ::@:#
586
+ | @ :::: ::@ ::@:#
587
+ | @ :: :: :::@ ::@:#:
588
+ | @:::: ::: :: ::::@ ::@:#:
589
+ | @: :: :::: :: ::::@ ::@:#:
590
+ | @: :: :::: :: ::::@ ::@:#:
591
+ | @: :: : : :: :::: :: ::::@ ::@:#:
592
+ | @: :: ::::::::::::::::@::::::::::@:: :: ::::: :: ::::@ ::@:#:
593
+ | @: :::::::: ::::::: :::: :@: ::: ::: @:: :: ::::: :: ::::@ ::@:#:
594
+ 0 +----------------------------------------------------------------------->ki
595
+ 0 285.0
596
+
597
+ = massif
598
+ # (mruby|microruby|picoruby) \
599
+ # -e 'puts "Hello World"'
600
+ ------------------------------------
601
+ mruby MicroRuby PicoRuby
602
+ ====================================
603
+ 136.1 KB 88.05 KB 10.86 KB
604
+ ------------------------------------
605
+
606
+ (('tag:center'))
607
+ (Note)
608
+ \n
609
+ All the figures on 64-bit architecture with glibc
610
+ \n
611
+ They're probably 25-35% smaller on 32-bit
612
+
613
+ = chapter
614
+ episode iii?
615
+ == prop
616
+ : hide-title
617
+ true
618
+
619
+ = Episode Ⅲ?
620
+ * Struct "mrb_context" now bothers me
621
+ * Holds information like local variables so to IRB work
622
+
623
+ = Episode Ⅲ?
624
+ * Struct "mrb_context" now bothers me
625
+ * Holds information like local variables so to IRB work
626
+ * Hard to handle due to intricate dependency among mrb_state, mrb_context and mrb_irep
627
+
628
+ = Episode Ⅲ?
629
+ * Struct "mrb_context" now bothers me
630
+ * Holds information like local variables so to IRB work
631
+ * Hard to handle due to intricate dependency among mrb_state, mrb_context and mrb_irep
632
+ * PicoRuby compiler doesn't want to include mruby's header files
633
+
634
+ = Episode Ⅲ?
635
+ * Struct "mrb_context" now bothers me
636
+ * Holds information like local variables so to IRB work
637
+ * Hard to handle due to intricate dependency among mrb_state, mrb_context and mrb_irep
638
+ * PicoRuby compiler doesn't want to include mruby's header files
639
+ * Possible solutions:\n
640
+ 1. Fixing mruby\n
641
+ 2. Fixing PicoRuby compiler to make an IREP that can be cast into mrb_irep
642
+
643
+ = Episode Ⅲ?
644
+ (('tag:center'))
645
+ (('tag:large:\\n\\n'))
646
+ (('tag:xx-large'))
647
+ THE IREP STRIKES BACK
648
+ == prop
649
+ : hide-title
650
+ true
651
+
652
+ = chapter
653
+ we're hiring!
654
+ # image
655
+ # src = images/Monstarlab_Logo_Yellow_CMYK.png
656
+ # relative_width = 30
657
+ # relative_margin_top = 1
658
+ == prop
659
+ : hide-title
660
+ true
661
+
662
+ = chapter
663
+ (('tag:x-large:may the source\\nbe with you'))
664
+ == prop
665
+ : hide-title
666
+ true
data/README.rd ADDED
@@ -0,0 +1,24 @@
1
+ = PicoRuby epsode 2
2
+
3
+ Presentation slide for Ruby Association Grant 2021 Report
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-RAGrant2021Report
20
+
21
+ === Show
22
+
23
+ rabbit rabbit-slide-hasumikin-RAGrant2021Report.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,24 @@
1
+ ---
2
+ id: RAGrant2021Report
3
+ base_name: PicoRuby_ep2
4
+ tags:
5
+ - PicoRuby
6
+ - MicroRuby
7
+ - mruby
8
+ presentation_date: '2022-07-12'
9
+ presentation_start_time:
10
+ presentation_end_time:
11
+ version: 2022.7.12.0
12
+ licenses: ["MIT License"]
13
+ slideshare_id:
14
+ speaker_deck_id:
15
+ ustream_id:
16
+ vimeo_id:
17
+ youtube_id:
18
+ author:
19
+ markup_language: :rd
20
+ name: HASUMI Hitoshi
21
+ email: hasumikin@gmail.com
22
+ rubygems_user: hasumikin
23
+ slideshare_user:
24
+ speaker_deck_user:
Binary file
Binary file
Binary file
data/images/hasumi.jpg ADDED
Binary file
data/images/mark_g.png ADDED
Binary file
data/images/mark_y.png ADDED
Binary file
data/images/matz.jpg ADDED
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
data/theme.rb ADDED
@@ -0,0 +1,172 @@
1
+ # puts font_families.sort
2
+ @xxx_large_font_size = screen_size(22 * Pango::SCALE)
3
+ @xx_large_font_size = screen_size(16 * Pango::SCALE)
4
+ @x_large_font_size = screen_size(12 * Pango::SCALE)
5
+ @large_font_size = screen_size(6 * Pango::SCALE)
6
+ @normal_font_size = screen_size(4.5 * Pango::SCALE)
7
+ @small_font_size = screen_size(4 * Pango::SCALE)
8
+ @x_small_font_size = screen_size(3.5 * Pango::SCALE)
9
+ @xx_small_font_size = screen_size(3 * Pango::SCALE)
10
+
11
+ @font_family = find_font_family('Franklin Gothic Medium')
12
+ @monospace_font_family = 'Ricty Discord'
13
+ @title_font_family = find_font_family('Star Jedi Hollow')
14
+
15
+ @default_headline_line_color = '#ffff00'
16
+ @default_headline_line_width = 2
17
+ @default_headline_line_expand = false
18
+
19
+ @default_emphasis_color = "#ff0000"
20
+ @default_emphasis_level2_color = "#ffffff"
21
+
22
+ set_graffiti_color "#FF2B22"
23
+ set_graffiti_line_width 5
24
+
25
+ #@table_frame_color = "#ffffff"
26
+ #@table_fill_color = "#0f0428"
27
+ #@table_body_frame_color = "#ffffff"
28
+ #@table_body_fill_color = "#3f3468"
29
+ #@table_head_frame_color = "#ffffff"
30
+ #@table_head_fill_color = "#rf0428"
31
+
32
+ @preformatted_fill_color = '#000000'
33
+ # @preformatted_centering = true
34
+ @space = screen_y(1)
35
+
36
+ # @margin_left = 300
37
+
38
+ @image_slide_number_start_flag_color = "#53575a"
39
+ @image_slide_number_goal_flag_color = "#a81313"
40
+
41
+ #@slide_headline_hide = true
42
+
43
+ @slide_background_image = 'images/star-background.jpg'
44
+ include_theme("slide-background-image")
45
+
46
+ @title_slide_background_image = 'images/star-background.jpg'
47
+ include_theme("title-slide-background-image")
48
+
49
+ include_theme('default')
50
+
51
+ match(Slide, HeadLine) do |heads|
52
+ #heads.prop_set("size", 0)
53
+ heads.prop_set("weight", "normal")
54
+ set_font_family(heads)
55
+ end
56
+ match(Slide) do |slides|
57
+ slides.prop_set("foreground", "#ffff00")
58
+ end
59
+
60
+ match TitleSlide do |slides|
61
+ slides.margin_left = @margin_right
62
+ slides.prop_set("foreground", "#ffff00")
63
+ end
64
+ match TitleSlide, Title do |title|
65
+ title.margin_top = -100
66
+ title.prop_set "size", @xxx_large_font_size
67
+ title.prop_set "font-family", @title_font_family
68
+ title.prop_set "weight", "normal"
69
+ end
70
+ match TitleSlide, Subtitle do |subtitle|
71
+ subtitle.margin_top = -270
72
+ subtitle.prop_set "size", @xxx_large_font_size
73
+ subtitle.prop_set "font-family", @title_font_family
74
+ end
75
+ match TitleSlide, Author do |authors|
76
+ authors.margin_top = -35
77
+ end
78
+ match TitleSlide, ContentSource do |cs|
79
+ cs.margin_top = 30
80
+ cs.prop_set "size", @xx_small_font_size
81
+ cs.prop_set "style", "normal"
82
+ end
83
+ match TitleSlide, Date do |date|
84
+ date.prop_set "size", @xx_small_font_size
85
+ date.prop_set "style", "normal"
86
+ end
87
+ match TitleSlide, Institution do |i|
88
+ i.prop_set "size", @xx_small_font_size
89
+ i.prop_set "style", "normal"
90
+ end
91
+
92
+ #@slide_logo_image = 'images/mark_g.png'
93
+ #include_theme('slide-logo')
94
+
95
+ @item_image_1 = 'images/r2d2_icon-icons.com_76952.png'
96
+ @item_image_2 = 'images/c3p0_icon-icons.com_76936.png'
97
+ @item_image_3 = 'images/ewok_icon-icons.com_76943.png'
98
+
99
+ include_theme("default-item-mark")
100
+
101
+ add_image_path("rabbit-images")
102
+
103
+ slide_body = [Slide, Body]
104
+ item_list_item = [ItemList, ItemListItem]
105
+
106
+ indent = 30
107
+
108
+ match(*(slide_body + (item_list_item * 1))) do |items|
109
+ name = "item1"
110
+ items.delete_pre_draw_proc_by_name(name)
111
+ items.delete_post_draw_proc_by_name(name)
112
+ draw_image_mark(items, @item_image_1, name, indent: indent)
113
+ end
114
+
115
+ match(*(slide_body + (item_list_item * 2))) do |items|
116
+ name = "item2"
117
+ items.delete_pre_draw_proc_by_name(name)
118
+ items.delete_post_draw_proc_by_name(name)
119
+ draw_image_mark(items, @item_image_2, name, indent: indent)
120
+ end
121
+
122
+ match(*(slide_body + (item_list_item * 3))) do |items|
123
+ name = "item3"
124
+ items.delete_pre_draw_proc_by_name(name)
125
+ items.delete_post_draw_proc_by_name(name)
126
+ draw_image_mark(items, @item_image_3, name, indent: indent)
127
+ end
128
+
129
+ enum_list_item = [EnumList, EnumListItem]
130
+
131
+ match(*(slide_body + enum_list_item + item_list_item)) do |items|
132
+ name = "enum-item1"
133
+ items.delete_pre_draw_proc_by_name(name)
134
+ items.delete_post_draw_proc_by_name(name)
135
+ draw_image_mark(items, @item_image_1, name, indent: indent)
136
+ end
137
+
138
+ match(*(slide_body + enum_list_item + (item_list_item * 2))) do |items|
139
+ name = "enum-item2"
140
+ items.delete_pre_draw_proc_by_name(name)
141
+ items.delete_post_draw_proc_by_name(name)
142
+ draw_image_mark(items, @item_image_2, name, indent: indent)
143
+ end
144
+
145
+ # table
146
+ all_table = ["**", Table]
147
+ match(*(all_table + [TableBody, TableRow, TableCell])) do |cells|
148
+ set_font_family(cells, @monospace_font_family)
149
+ end
150
+ match(*(all_table + [TableHead, TableRow, TableHeader])) do |headers|
151
+ set_font_family(headers, @monospace_font_family)
152
+ end
153
+
154
+ match("**", Emphasis, Emphasis) do |texts|
155
+ texts.prop_set("foreground", @default_emphasis_level2_color)
156
+ texts.prop_set("weight", "normal")
157
+ end
158
+
159
+ # Chapter
160
+ match Slide do |slides|
161
+ slides.each do |slide|
162
+ if slide.match?(/chapter/)
163
+ set_font_family slide, @title_font_family
164
+ slide.prop_set "size", @xx_large_font_size
165
+ slide.horizontal_centering = true
166
+ end
167
+ end
168
+ end
169
+
170
+ match("**", PreformattedBlock) do |blocks|
171
+ blocks.prop_set("foreground", "#00FFAF")
172
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-hasumikin-RAGrant2021Report
3
+ version: !ruby/object:Gem::Version
4
+ version: 2022.7.12.0
5
+ platform: ruby
6
+ authors:
7
+ - HASUMI Hitoshi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-11-10 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: Presentation slide for Ruby Association Grant 2021 Report
28
+ email:
29
+ - hasumikin@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rabbit"
35
+ - PicoRuby_ep2.rab
36
+ - README.rd
37
+ - Rakefile
38
+ - config.yaml
39
+ - images/Monstarlab_Logo_Grey_CMYK.png
40
+ - images/Monstarlab_Logo_Yellow_CMYK.png
41
+ - images/architecture_1.png
42
+ - images/architecture_2.png
43
+ - images/architecture_3.png
44
+ - images/c3p0_icon-icons.com_76936.png
45
+ - images/ewok_icon-icons.com_76943.png
46
+ - images/hasumi.jpg
47
+ - images/mark_g.png
48
+ - images/mark_y.png
49
+ - images/matz.jpg
50
+ - images/r2d2_icon-icons.com_76952.png
51
+ - images/rubyconf_1.png
52
+ - images/rubyconf_2.png
53
+ - images/rubykaigi_1.png
54
+ - images/rubykaigi_2.png
55
+ - images/star-background.jpg
56
+ - images/title-background.png
57
+ - pdf/RAGrant2021Report-PicoRuby_ep2.pdf
58
+ - theme.rb
59
+ homepage: https://slide.rabbit-shocker.org/authors/hasumikin/RAGrant2021Report/
60
+ licenses:
61
+ - MIT License
62
+ metadata: {}
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubygems_version: 3.3.7
79
+ signing_key:
80
+ specification_version: 4
81
+ summary: PicoRuby epsode 2
82
+ test_files: []