rabbit-slide-hasumikin-RubyWorldConference2022 2022.11.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ee2ad31b6425367bfd8e0beb0755bfc0d6fc1d6f70e93e81db8824b1ff768217
4
+ data.tar.gz: 16ad4618b185dbf7f39591687f888a84ffcfa09895c53b4e4fd255cb57991cb3
5
+ SHA512:
6
+ metadata.gz: 20e248bdfb9b05b168b511719faa4cd11084ee7e95cebfd146460025b40f77153f4b9735e1222f2fc3fb85047ae9d8e7f0b748e923c27383e885aa1af31fca8e
7
+ data.tar.gz: 8ca0edddbb3a38da8ab160b017aa427e375569f038263680b822cf8816b1ba49831939a6382af60b75222987a5a0a120dde45c155a6a1e2a5a474cc09690c4c0
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ PicoRuby_ep3.rab
data/PicoRuby_ep3.png ADDED
Binary file
data/PicoRuby_ep3.rab ADDED
@@ -0,0 +1,629 @@
1
+ = pico
2
+
3
+ : subtitle
4
+ ruby
5
+ : author
6
+ Episode Ⅲ\nREVENGE OF THE STDIN
7
+ : content-source
8
+ RubyWorld Conference 2022
9
+ : institution
10
+ hasumikin>&Monstarlab
11
+ : date
12
+ Nov. 10, 2022
13
+ : allotted-time
14
+ 24m
15
+ : theme
16
+ theme
17
+
18
+ = sub_chapter
19
+ Episode Ⅱ
20
+ \n
21
+ (('tag:large:ATTACK OF THE RAKE'))
22
+ \n
23
+ find on the internet
24
+ \n
25
+ == prop
26
+ : hide-title
27
+ true
28
+
29
+ = This slot has Q&A time
30
+ # image
31
+ # src = images/picoruby-t-shirt.jpg
32
+ # relative_height = 80
33
+
34
+ (('tag:center'))PicoRuby@SUZURI
35
+
36
+ = sub_chapter
37
+ (('tag:xx-large:📱'))
38
+ == prop
39
+ : hide-title
40
+ true
41
+
42
+ = PicoRuby: An alternative mruby
43
+ puts "Hello World"
44
+
45
+ * mruby = mruby VM + mruby compiler\n=> ((*136 KB*))
46
+ * MicroRuby = mruby VM + PicoRuby compiler\n=> ((*88 KB*))
47
+ * PicoRuby = mruby/c VM + PicoRuby compiler\n=> ((*11 KB*))
48
+ (('tag:center'))
49
+ (('tag:small:\\nAll measurement on 64-bit Ubuntu'))
50
+
51
+ = PicoRuby: An alternative mruby
52
+ # image
53
+ # src = images/QR_picoruby.png
54
+ # relative_height = 80
55
+
56
+ (('tag:center'))github.com/picoruby/picoruby
57
+
58
+ = PRK Firmware: Keyboard firmware
59
+ # image
60
+ # src = images/rubykaigi_2.png
61
+ # relative_height = 80
62
+
63
+ (('tag:center'))Displayed in Large exhibition hall (1F)
64
+
65
+ = PRK Firmware: Keyboard firmware
66
+ # image
67
+ # src = images/QR_prk_firmware.png
68
+ # relative_height = 80
69
+
70
+ (('tag:center'))github.com/picoruby/prk_firmware
71
+
72
+ = Raspberry Pi Pico
73
+ * RP2040
74
+ * Arm Cortex-M0+ (dual)
75
+ * 264 KB RAM
76
+ * 2 MB ROM
77
+ * (RP2040 supports upto 16 MB)
78
+ * $4~ (¥600~)
79
+ * "Pi Pico W" supports WiFi
80
+ * Got 技適 (new!)
81
+ # image
82
+ # align = right
83
+ # src = images/rp2.jpg
84
+ # relative_height = 100
85
+
86
+ = chapter
87
+ (('tag:x-large:demo'))
88
+ == prop
89
+ : hide-title
90
+ true
91
+
92
+ = Serial port terminal emulator
93
+ * Traditional CUI/TUI tools have fallen to\nthe dark side (apparently CR/LF issue)
94
+ * cu🙅
95
+ * screen😖
96
+ * minicom🤦
97
+ * Linux -> ((*GTKTerm*))😍
98
+ * Windows -> Tera Term? (not sure)
99
+ * macOS -> PuTTY? 🤷
100
+
101
+ = Summary: It's still a PoC, though...
102
+ * An integrated Micon programming environment
103
+ * Ruby compiler inside
104
+ * Shell ready
105
+ * Text editor equipped
106
+ * Your own commands available
107
+ * Accelerates developing an IoT system with Ruby
108
+
109
+ = chapter
110
+ (('tag:x-large:implementation'))
111
+ == prop
112
+ : hide-title
113
+ true
114
+
115
+ = Command: builtin and executable
116
+ * Builtin commands are implemented in shell
117
+ * cd, echo, export, pwd, type, etc.
118
+ * Executable commands are located in storage
119
+ * cat, ls, rm, vim, etc.
120
+
121
+
122
+ = Command: builtin
123
+ # enscript ruby
124
+ # picoruby/mrbgems/picoruby-shell/mrblib/command.rb
125
+ def exec(params)
126
+ args = params[1, params.length - 1]
127
+ case params[0]
128
+ when "echo"
129
+ _echo(*args)
130
+ when "type"
131
+ _type(*args)
132
+ when "pwd"
133
+ puts Dir.pwd
134
+ when "cd"
135
+ puts if Dir.chdir(args[0] || ENV['HOME']) != 0
136
+ when "free"
137
+ Object.memory_statistics.each do |k, v|
138
+ print "#{k.to_s.ljust(5)}: #{v.to_s.rjust(8)}", @feed
139
+ end
140
+
141
+ = Command: executable
142
+ # enscript sh
143
+ picoruby/mrbgems/picoruby-shell/
144
+ ├─ mrbgem.rake
145
+ ├─ mrblib
146
+ │ ├─ command.rb
147
+ │ └─ shell.rb
148
+ ├─ shell_executables 👈
149
+ │ ├─ cat.rb
150
+ │ ├─ hello.rb
151
+ │ ├─ ls.rb
152
+ │ ├─ rm.rb
153
+ │ └─ vim.rb
154
+ └─ src
155
+ └─ shell.c
156
+
157
+ # Search path
158
+ ENV["PATH"] => ["/bin"]
159
+
160
+ = Command: executable
161
+ * You can write your own executable in PicoRuby
162
+
163
+ # enscript sh
164
+ $ vim hello_ruby.rb
165
+ ```
166
+ puts "Hello RubyWorld"
167
+ ```
168
+ $ install hello_ruby.rb /bin/hello_ruby
169
+ $ hello_ruby
170
+ Hello RubyWorld
171
+
172
+
173
+ = Filesystem
174
+ * Computer has filesystem(s)
175
+ * MS-DOS: ((*M*))icro((*s*))oft ((*D*))isk ((*O*))perating ((*S*))ystem
176
+ * NTFS, ext{2,3,4}, etc.
177
+ * Micon generally doesn't have a filesystem
178
+
179
+ = FAT filesystem
180
+ * File Allocation Table (FAT)
181
+ * Developed by Microsoft along with MS-DOS
182
+ * 8-bit FAT, FAT12, FAT16, FAT32, exFAT
183
+ * Under construction for Flash ROM 😅
184
+ * Today's demo is working on RAM disk
185
+
186
+ = VFS (Virtual File System)
187
+ * VFS-like system written in PicoRuby
188
+ * Different devices and even different filesystems can mount under the root
189
+
190
+ # enscript ruby
191
+
192
+ VFS.mount(FAT.new(:flash), "/")
193
+ VFS.mount(FAT.new(:ram), "/ram")
194
+ VFS.mount(FAT.new(:sdcard), "/sdcard")
195
+
196
+ /
197
+ ├─ bin/
198
+ ├─ home/
199
+ ├─ ram/
200
+ │ └─ tmp/
201
+ ├─ sdcard/ # SPI not impemented yet
202
+ │ └─ data.sqlite
203
+
204
+ = mruby's build system
205
+ * mrbgems is a library management system for mruby
206
+ * You can freely host your own gem
207
+ * Matz says it's an advanced one (('tag:xx-small:(than MicroPython?)'))
208
+ * Bundled mgems are automatically loaded
209
+
210
+ = mruby's build system
211
+ # enscript sh
212
+ mruby
213
+ ├─ Rakefile
214
+ ├─ bin/
215
+ ├─ build/
216
+ ├─ build_config/
217
+ ├─ include/
218
+ ├─ lib/
219
+ │ └─ mruby/ # MRuby module
220
+ ├─ mrbgems/
221
+ ├─ mrblib/
222
+ ├─ src/
223
+ ├─ tasks/
224
+ │ ├─
225
+ │ ├─ mrbgems.rake
226
+ │ ├─
227
+
228
+ = PicoRuby's build system
229
+ # enscript sh
230
+ picoruby
231
+ ├─ Rakefile 👈 modified
232
+ ├─ bin/
233
+ ├─ build/
234
+ ├─ build_config/
235
+ ├─ include/
236
+ ├─ lib/
237
+ │ ├─ mruby/ # `module MRuby`
238
+ │ └─ picoruby/
239
+ │ └─ build.rb 👈 MRuby overridden
240
+ ├─ mrbgems/
241
+ ├─ mrblib/
242
+ ├─ src/
243
+ ├─ tasks/
244
+ │ ├─
245
+ │ ├─ mrbgems.rake
246
+ │ ├─
247
+ │ ├─ picogems.rake 👈 MRuby.each_target overridden
248
+ │ ├─
249
+
250
+ = PicoRuby's build system
251
+ # enscript sh
252
+ picoruby
253
+ ├─ build/repos/host/
254
+ │ ├─ mruby-bin-picorbc/ # picorbc
255
+ │ └─ mruby-pico-compiler/
256
+ ├─
257
+ ├─ mrbgems/
258
+ ├─ default.gembox
259
+ ├─ picoruby-bin-picoirb/ # picoirb
260
+ ├─ picoruby-bin-picoruby/ # picoruby
261
+ ├─ picoruby-bin-prsh/ # prsh [pəːrʃ]
262
+ ├─ picoruby-filesystem-fat/ # FAT filesystem
263
+ ├─ picoruby-io/ # io gem
264
+ ├─ picoruby-mrubyc/ # mruby/c VM
265
+ ├─ picoruby-sandbox/
266
+ ├─ picoruby-shell/
267
+ ├─ picoruby-terminal/
268
+ ├─ picoruby-vfs/
269
+ └─ picoruby-vim/
270
+
271
+ = PicoRuby's build system
272
+ # enscript ruby
273
+ # picoruby/mrbgems/default.gembox
274
+ MRuby::GemBox.new do |conf|
275
+ conf.gem github: 'picoruby/mruby-pico-compiler'
276
+ conf.gem github: 'picoruby/mruby-bin-picorbc'
277
+ conf.gem core: 'picoruby-bin-picoruby'
278
+ conf.gem core: 'picoruby-bin-picoirb'
279
+ conf.gem core: 'picoruby-mrubyc'
280
+ end
281
+
282
+ (('tag:center'))
283
+ `mruby-pico-compiler` and `mruby-bin-picorbc`
284
+ \n
285
+ can be bundled in mruby (MicroRuby)
286
+
287
+ = A typical picogem
288
+ picoruby/
289
+ └─ mrbgems/picoruby-io/
290
+ ├─ mrbgem.rake
291
+ ├─ mrblib
292
+ │ └─ io.rb
293
+ └─ src/
294
+ ├─ hal/
295
+ │ ├─ hal.h
296
+ │ └─ posix
297
+ │ └─ hal.c
298
+ └─ io.c
299
+
300
+ = `require`
301
+ * mruby doesn't have `require` out of the box
302
+ * Neither does mruby/c
303
+ * PicoRuby has introduced `require`
304
+ * Bundled Picogem code already consumed ROM, but
305
+ * It isn't loaded onto RAM automatically
306
+ * Consumes RAM only after `require`
307
+
308
+ = Making a PicoRuby app elegantly
309
+ * CRuby code compatible with PicoRuby
310
+ * PicoRuby for PC (MRBC_USE_HAL_POSIX)
311
+ * Write minimum HAL for POSIX
312
+ * Extend PicoRuby's builtin class if necessary
313
+ * Keep the app code independent from Picoruby
314
+ * ((*Do not copy and paste files any longer*))
315
+
316
+ = Keep the app code independent
317
+ # enscript sh
318
+ example-IoT-app
319
+ ├─ CMakeLists.txt # Just link src/*.c and libmruby.a
320
+ ├─ Rakefile
321
+ ├─ build
322
+ │ ├─ ...
323
+ ├─ include
324
+ │ ├─ ...
325
+ ├─ lib
326
+ │ └─ picoruby # libmruby.a created by `rake`
327
+ ├─ mrblib
328
+ │ ├─ main_task.rb
329
+ │ └─ temperature_sensor_task.rb
330
+ ├─ pico_sdk_import.cmake
331
+ └─ src
332
+ ├─ hal.c # Micon dependent hal
333
+ ├─ temperature_sensor.c
334
+ ├─ main.c
335
+ ├─ ...
336
+
337
+ = Compatible CRuby with PicoRuby
338
+ # enscript ruby
339
+ # picoruby-vim/mrblib/vim.rb
340
+ case RUBY_ENGINE
341
+ when "ruby", "jruby"
342
+ require_relative "../../picoruby-terminal/mrblib/terminal"
343
+ when "mruby/c"
344
+ require "terminal"
345
+ else
346
+ raise "Unknown RUBY_ENGINE: #{RUBY_ENGINE}"
347
+ end
348
+
349
+ class Vim
350
+ (...)
351
+ end
352
+
353
+ = Compatible CRuby with PicoRuby
354
+ (('tag:center'))
355
+ Run with CRuby on your PC, then
356
+
357
+ # enscript sh
358
+ $ ruby -r./mrbgems/picoruby-vim/mrblib/vim.rb \
359
+ -e 'Vim.new("myfile.txt").start'
360
+
361
+ (('tag:center'))
362
+ You can easily implement and debug\na "Pure" PicoRuby app with CRuby
363
+
364
+ = chapter
365
+ (('tag:x-large:demo'))
366
+ == prop
367
+ : hide-title
368
+ true
369
+
370
+ = chapter
371
+ (('tag:x-large:back to'))
372
+ \n
373
+ (('tag:x-large:implementation'))
374
+ == prop
375
+ : hide-title
376
+ true
377
+
378
+ = Shell and text editor
379
+ * Without Curses and Readline
380
+ * Pure Ruby just like Reline (irb of CRuby3.0+)
381
+
382
+ = Shell and text editor
383
+ * Without Curses and Readline
384
+ * Pure Ruby just like Reline (irb of CRuby3.0+)
385
+
386
+ (('tag:center'))
387
+ (('tag:large'))
388
+ \n
389
+ \n
390
+ ((*STDIN confuses you*))😈
391
+
392
+ = Standard INPUT
393
+ * Cooked mode ((*(by default on Unix-like OS)*))
394
+ * Blocked until submit (recall Kernel#gets)
395
+ * "a" "b" "c" "[BSPACE]" "d" "[ENTER]" => "abd"
396
+ * Raw mode ((*(obviously by default on bare metals)*))
397
+ * Immediately receives any input
398
+ * "a" "b" "c" "[BSPACE]" "d" => "abc[BSPACE]d"
399
+
400
+ (('tag:center'))
401
+ \n
402
+ Really confusing in making compatible code
403
+
404
+ = Standard INPUT
405
+ # enscript c
406
+ static struct termios save_settings;
407
+ static int save_flags;
408
+
409
+ /* Turn into raw mode on Linux (Windows has another solution) */
410
+ struct termios settings;
411
+ tcgetattr(fileno(stdin), &save_settings);
412
+ settings = save_settings;
413
+ settings.c_iflag = ~(BRKINT | ISTRIP | IXON);
414
+ settings.c_lflag = ~(ICANON | IEXTEN | ECHO | ECHOE | ECHOK | ECHONL);
415
+ settings.c_cc[VMIN] = 1;
416
+ settings.c_cc[VTIME] = 0;
417
+ tcsetattr(fileno(stdin), TCSANOW, &settings);
418
+ save_flags = fcntl(fileno(stdin), F_GETFL, 0);
419
+ fcntl(fileno(stdin), F_SETFL, save_flags | O_NONBLOCK);
420
+
421
+ /* Turn back to cooked mode */
422
+ fcntl(fileno(stdin), F_SETFL, save_flags);
423
+ tcsetattr(fileno(stdin), TCSANOW, &save_settings);
424
+
425
+ = Standard INPUT
426
+ # enscript ruby
427
+ # picoruby/mrbgems/picoruby-terminal/mrblib/terminal.rb
428
+ case RUBY_ENGINE
429
+ when "ruby", "jruby"
430
+ require "io/console"
431
+
432
+ def IO.get_nonblock(max)
433
+ STDIN.noecho{ |input| input.read_nonblock(max) }
434
+ rescue IO::EAGAINWaitReadable => e
435
+ nil
436
+ end
437
+
438
+ when "mruby/c"
439
+ require "io"
440
+
441
+ def IO.get_nonblock(max)
442
+ str = read_nonblock(max) # calls C implementation
443
+ str&.length == 0 ? nil : str
444
+ end
445
+
446
+ end
447
+
448
+ = C object in RVALUE: mruby
449
+ # enscript c
450
+
451
+ #define MRB_VTYPE_FOREACH(f) \
452
+ /* mrb_vtype */ /* c type */ /* ruby class */ \
453
+ f(MRB_TT_FALSE, void, "false") \
454
+ ...
455
+ f(MRB_TT_OBJECT, struct RObject, "Object") \
456
+ ...
457
+ f(MRB_TT_DATA, struct RData, "Data") \ // 👈
458
+ ...
459
+
460
+ struct RData {
461
+ MRB_OBJECT_HEADER;
462
+ struct iv_tbl *iv;
463
+ const mrb_data_type *type;
464
+ void *data; // 👈 You can pin any object here
465
+ };
466
+
467
+ = C object in RVALUE: mruby((*/c*))
468
+ # enscript c
469
+
470
+ typedef struct RInstance {
471
+ MRBC_OBJECT_HEADER;
472
+ struct RClass *cls;
473
+ struct RKeyValueHandle ivar;
474
+ uint8_t data[]; // 👈 The last member can extend
475
+ } mrbc_instance;
476
+ // File.new
477
+ mrbc_value obj = mrbc_instance_new(vm, v->cls, sizeof(FIL));
478
+ // ^^^^^^^^^^^
479
+ // extend RVALUE
480
+ FIL *file_stream_ptr = (FIL *)obj.instance->data;
481
+ SET_RETURN(obj); // File.new => #<File:200098a0>
482
+
483
+ (('tag:center'))No need to `free(file_stream_ptr);`
484
+
485
+ = sub_chapter
486
+ (('tag:large'))
487
+ Finally, the shell works🎉
488
+ == prop
489
+ : hide-title
490
+ true
491
+
492
+ = sub_chapter
493
+ (('tag:large:By the way,'))
494
+ == prop
495
+ : hide-title
496
+ true
497
+
498
+ = sub_chapter
499
+ (('tag:large:How should I name\\nthis product'))🤔
500
+ == prop
501
+ : hide-title
502
+ true
503
+
504
+ = sub_chapter
505
+ (('tag:large:Ruby on Raspberry Pi Pico'))
506
+ == prop
507
+ : hide-title
508
+ true
509
+
510
+ = sub_chapter
511
+ (('tag:large:((*R*))uby on ((*R*))aspberry ((*P*))i ((*P*))ico'))
512
+ == prop
513
+ : hide-title
514
+ true
515
+
516
+ = chapter
517
+ (('tag:xx-large:r2-p2'))
518
+ == prop
519
+ : hide-title
520
+ true
521
+
522
+ = chapter
523
+ # image
524
+ # src = images/R2D2_mosaic.png
525
+ # relative_height = 100
526
+ == prop
527
+ : hide-title
528
+ true
529
+
530
+ = chapter
531
+ (('tag:xx-large:r2((*-*))p2'))
532
+ == prop
533
+ : hide-title
534
+ true
535
+
536
+ = cite
537
+ # blockquote
538
+ # title = @kakutani
539
+ \n
540
+ “It is said that (account) names
541
+ \n
542
+ should not contain
543
+ \n
544
+ hyphens or underscores.”
545
+ \n\n
546
+ == prop
547
+ : hide-title
548
+ true
549
+
550
+ = chapter
551
+ (('tag:xx-large:r2((*-*))p2'))
552
+ == prop
553
+ : hide-title
554
+ true
555
+
556
+ = chapter
557
+ (('tag:xx-large:r2p2'))
558
+ == prop
559
+ : hide-title
560
+ true
561
+
562
+ = sub_chapter
563
+ Be one the first stargazers of
564
+ \n
565
+ (('tag:large:github.com/picoruby/R2P2'))
566
+ \n
567
+ (turned public repo today!)
568
+ == prop
569
+ : hide-title
570
+ true
571
+
572
+ = Wrap-up
573
+ * R2P2 is an all-in-one programming Micon
574
+
575
+ = Wrap-up
576
+ * R2P2 is an all-in-one programming Micon
577
+ * Runs on Raspi Pico which has 264 KB RAM and 2 MB ROM
578
+
579
+ = Wrap-up
580
+ * R2P2 is an all-in-one programming Micon
581
+ * Runs on Raspi Pico which has 264 KB RAM and 2 MB ROM
582
+ * Picogem ecosystem easily builds your app
583
+
584
+ = Wrap-up
585
+ * R2P2 is an all-in-one programming Micon
586
+ * Runs on Raspi Pico which has 264 KB RAM and 2 MB ROM
587
+ * Picogem ecosystem easily builds your app
588
+ * Filesystem ly makes you happy
589
+ * Filesystem will make you happy
590
+
591
+ = Wrap-up
592
+ * R2P2 is an all-in-one programming Micon
593
+ * Runs on Raspi Pico which has 264 KB RAM and 2 MB ROM
594
+ * Picogem ecosystem easily builds your app
595
+ * Filesystem will make you happy
596
+ * STDIN is evil
597
+
598
+ = Future work
599
+ * PicoRuby and Shell
600
+ * More functionality of vim and the name
601
+ * UTF-8 support
602
+ * Multi-task controll on the fly
603
+ * Redirect and pipeline
604
+ * Peripherals
605
+ * FAT filesystem with SD card (SPI)
606
+ * Real-time clock (RTC)
607
+ * WiFi and TCP/IP on Raspberry Pi Pico W
608
+
609
+ = chapter
610
+ (('tag:xx-large:q'))
611
+ (('tag:x-large:and'))
612
+ (('tag:xx-large:a'))
613
+ # image
614
+ # src = images/QR_R2P2.png
615
+ # relative_height = 80
616
+ (('tag:center'))github.com/picoruby/r2p2
617
+ == prop
618
+ : hide-title
619
+ true
620
+
621
+ = chapter
622
+ (('tag:x-large:may the'))
623
+ \n
624
+ (('tag:xx-large:source'))
625
+ \n
626
+ (('tag:x-large:be with you'))
627
+ == prop
628
+ : hide-title
629
+ true
data/README.rd ADDED
@@ -0,0 +1,24 @@
1
+ = PicoRuby epsode 3
2
+
3
+ Presentation slide for RubyWorld Conference 2022
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-RubyWorldConference2022
20
+
21
+ === Show
22
+
23
+ rabbit rabbit-slide-hasumikin-RubyWorldConference2022.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: RubyWorldConference2022
3
+ base_name: PicoRuby_ep3
4
+ tags:
5
+ - PicoRuby
6
+ - Shell
7
+ - Filesystem
8
+ presentation_date: '2022-11-10'
9
+ presentation_start_time:
10
+ presentation_end_time:
11
+ version: 2022.11.10.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/R2D2.jpg ADDED
Binary file
Binary file
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
data/images/rp2.jpg ADDED
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,127 @@
1
+ 以下すべて、スライドに書かれるとは限りませんが、発表の中で言う可能性があります
2
+
3
+ ## 一見すると一般名詞だが、ソフトウェア用語(固有名詞)であるもの
4
+
5
+ - Lemon
6
+ - Bison
7
+ - Rails
8
+ - gem
9
+ - library
10
+ - steep
11
+ - terminal
12
+ - shell
13
+ - fish(shellの一種)
14
+ - thread
15
+ - fiber
16
+ - task
17
+ - builtin
18
+ - executable(実行ファイルのこと)
19
+ - null
20
+ - nil
21
+ - true
22
+ - false
23
+ - array
24
+ - string
25
+ - hash
26
+
27
+ ちなみにこれらは他のセッションでも頻出すると思います。
28
+ 英語セッションを日本語へ通訳するときは、すべてそのまま発声すればよいです。
29
+ たとえばgemを宝石と訳すとNGで、たんにジェムと言えばよいです
30
+
31
+ ## そのほか登場する可能性のある専門用語
32
+
33
+ カッコ内は発音。書いていない場合は単にアルファベット読みすればOK
34
+
35
+ ### ハードウェア用語
36
+
37
+ - MCU
38
+ - CPU
39
+ - Cortex m0+ (コーテクスエムゼロプラス)
40
+ - Cortex m4などのバリエーションあり
41
+ - LED
42
+ - 以下をまとめてperipheralと言うことがあります。マイコン用語です
43
+ - GPIO
44
+ - ADC(アナログ→デジタルコンバータのこと)
45
+ - DAC(↑の逆)
46
+ - SPI
47
+ - I2C(アイスクエアドスィー)
48
+
49
+ ### ソフトウェア用語
50
+
51
+ - RBS
52
+ - GUI(ジーユーアイ。グイでも通じます)
53
+ - CUI
54
+ - TUI
55
+ - IREP(アイレップ。internal representation = 内部表現)
56
+ - VM(たんにヴィーエムと言っても通じますが、virtual machineと言い換える方がいいかもしれません)
57
+ - VM code
58
+ - RVALUE(アールヴァリュー。Rubyにおける値の内部表現)
59
+ - Rake(レイク。ビルドシステムの一種)
60
+ - Make(メイク。ビルドシステムの一種)
61
+ - CMake(シーメイク。ビルドシステムの一種)
62
+ - mrbgem(エムアールビージェム。mgemエムジェムと言うこともあり、同じ意味)
63
+ - picogem(ピコジェム)
64
+ - 以上の3つは単数形で言ったり複数形で言ったりします。単数形は特定のgemを指し、複数形はその仕組み全体を指します
65
+ - POSIX(パズィクス。OSの仕様の一種)
66
+ - FAT(ファットまたはエフエーティー。ファイルシステムの一種。FAT12、FAT16、FAT32という3種類のバリエーションあり)
67
+
68
+ ### 個別のソフトウェア名称
69
+
70
+ - Rubygem(ルビージェム)
71
+ - Ruby on Rails(ルビーオンレイルズ。これが単数形になることは決してありません)
72
+ - IRB(バリエーションにMIRB、PicoIRBがあります)
73
+ - vim(ヴィム)
74
+ - emacs(イーマクス)
75
+ - textbringer(テクストブリンガ)
76
+ - SQLite(エスキューライト)
77
+ - YACC(ヤック。Lemonの仲間)
78
+ - sh(シェル。shellとおなじ)
79
+ - bash(バッシュ。shellの一種)
80
+ - zsh(ズィーシェル。shellの一種)
81
+ - Curses(カースィズ)
82
+ - Readline(リードライン)
83
+ - Git(ギット)
84
+ - libc(リブシー)
85
+
86
+ ### OS
87
+
88
+ - Android
89
+ - iOS
90
+ - macOS
91
+ - MS-DOS
92
+ - Linux(リーヌクス)
93
+ - Ubuntu(ウブントゥ)
94
+
95
+ ### Webサービス
96
+
97
+ - GitHub(ギットハブ)
98
+ - GitLab(ギットラブ)
99
+
100
+ ## シェルコマンド
101
+
102
+ 基本的にそのままアルファベット読みすればよいです。
103
+ カッコ内に意味を書きます
104
+
105
+ - cd (change directory。ワーキングディレクトリを変更する)
106
+ - pwd (print working directory。現在のワーキングディレクトリのパスを表示する)
107
+ - ls (list。ファイルのリストを表示する)
108
+ - mv (moveファイルの場所や名前を変更する)
109
+ - cat(concatenate = 連結。「キャット」と発音することが多い)
110
+
111
+ ## 適切な翻訳がある日本語
112
+
113
+ - 規約 -> convention
114
+ - 構造体 -> Struct(ストラクト)。IREP構造体、mrb構造体のように使う
115
+ - (キーボードが)「割れてる」やつ -> Split type keyboard
116
+ - ラズパイ -> Raspberry Pi(ラズベリーパイ)
117
+ - ラズパイピコまたはラズピコ -> Raspberry Pi Pico(ラズベリーパイピコ)
118
+ - ラズパイ財団 -> Raspberry Pi Foundation
119
+ - マイコン -> Microcontroller(Microcomputerではないので注意)
120
+ - RP2040 -> RP-twenty-forty
121
+ - ウブンツ -> Ubuntu(ウブントゥ)
122
+ - 標準入力 -> Standard input
123
+ - 標準出力 -> Standard output
124
+ - 標準入出力 -> Standard IO(アイオー)。STDIO(エスティーディーアイオーとも)
125
+ - GCされる -> being garbage collected
126
+ - 静的型 -> Static typing
127
+ - 型チェック -> Type check
@@ -0,0 +1,13 @@
1
+ = たのしいマイコンRuby
2
+
3
+ : author
4
+ 羽角 均
5
+ : content-source
6
+ RubyWorld Conference 2022
7
+ : institution
8
+ Monstarlab
9
+ : date
10
+ Nov. 10, 2022
11
+ : theme
12
+ tanoshiimiconruby_theme
13
+
data/theme.rb ADDED
@@ -0,0 +1,176 @@
1
+ # puts font_families.sort
2
+ @xxx_large_font_size = screen_size(22 * Pango::SCALE)
3
+ @xx_large_font_size = screen_size(18 * Pango::SCALE)
4
+ @x_large_font_size = screen_size(11 * Pango::SCALE)
5
+ @large_font_size = screen_size(7.5 * Pango::SCALE)
6
+ @normal_font_size = screen_size(5 * Pango::SCALE)
7
+ @small_font_size = screen_size(4.5 * 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 = -120
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 = -290
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 = -70
77
+ end
78
+ match TitleSlide, ContentSource do |cs|
79
+ cs.margin_top = 0
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 = 50
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?(/sub_chapter/)
163
+ slide.horizontal_centering = true
164
+ elsif slide.match?(/chapter/)
165
+ set_font_family slide, @title_font_family
166
+ slide.horizontal_centering = true
167
+ elsif slide.match?(/cite/)
168
+ slide.prop_set "foreground", "#222222"
169
+ slide.horizontal_centering = true
170
+ end
171
+ end
172
+ end
173
+
174
+ match("**", PreformattedBlock) do |blocks|
175
+ blocks.prop_set("foreground", "#00FFAF")
176
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-hasumikin-RubyWorldConference2022
3
+ version: !ruby/object:Gem::Version
4
+ version: 2022.11.10.0
5
+ platform: ruby
6
+ authors:
7
+ - HASUMI Hitoshi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-11-11 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 RubyWorld Conference 2022
28
+ email:
29
+ - hasumikin@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rabbit"
35
+ - PicoRuby_ep3.png
36
+ - PicoRuby_ep3.rab
37
+ - README.rd
38
+ - Rakefile
39
+ - config.yaml
40
+ - images/Monstarlab_Logo_Grey_CMYK.png
41
+ - images/Monstarlab_Logo_Yellow_CMYK.png
42
+ - images/QR_R2P2.png
43
+ - images/QR_picoruby.png
44
+ - images/QR_prk_firmware.png
45
+ - images/R2D2.jpg
46
+ - images/R2D2_mosaic.png
47
+ - images/architecture_1.png
48
+ - images/architecture_2.png
49
+ - images/architecture_3.png
50
+ - images/c3p0_icon-icons.com_76936.png
51
+ - images/ewok_icon-icons.com_76943.png
52
+ - images/hasumi.jpg
53
+ - images/mark_g.png
54
+ - images/mark_y.png
55
+ - images/matz.jpg
56
+ - images/picoruby-t-shirt.jpg
57
+ - images/r2d2_icon-icons.com_76952.png
58
+ - images/rp2.jpg
59
+ - images/rubyconf_1.png
60
+ - images/rubyconf_2.png
61
+ - images/rubykaigi_1.png
62
+ - images/rubykaigi_2.png
63
+ - images/star-background.jpg
64
+ - images/title-background.png
65
+ - memo_同時通訳用語集.md
66
+ - pdf/RubyWorldConference2022-PicoRuby_ep3.pdf
67
+ - tanoshiimiconruby.rab
68
+ - theme.rb
69
+ homepage: https://slide.rabbit-shocker.org/authors/hasumikin/RubyWorldConference2022/
70
+ licenses:
71
+ - MIT License
72
+ metadata: {}
73
+ post_install_message:
74
+ rdoc_options: []
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ requirements: []
88
+ rubygems_version: 3.3.7
89
+ signing_key:
90
+ specification_version: 4
91
+ summary: PicoRuby epsode 3
92
+ test_files: []