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 +7 -0
- data/.rabbit +1 -0
- data/PicoRuby_ep3.png +0 -0
- data/PicoRuby_ep3.rab +629 -0
- data/README.rd +24 -0
- data/Rakefile +17 -0
- data/config.yaml +24 -0
- data/images/Monstarlab_Logo_Grey_CMYK.png +0 -0
- data/images/Monstarlab_Logo_Yellow_CMYK.png +0 -0
- data/images/QR_R2P2.png +0 -0
- data/images/QR_picoruby.png +0 -0
- data/images/QR_prk_firmware.png +0 -0
- data/images/R2D2.jpg +0 -0
- data/images/R2D2_mosaic.png +0 -0
- data/images/architecture_1.png +0 -0
- data/images/architecture_2.png +0 -0
- data/images/architecture_3.png +0 -0
- data/images/c3p0_icon-icons.com_76936.png +0 -0
- data/images/ewok_icon-icons.com_76943.png +0 -0
- data/images/hasumi.jpg +0 -0
- data/images/mark_g.png +0 -0
- data/images/mark_y.png +0 -0
- data/images/matz.jpg +0 -0
- data/images/picoruby-t-shirt.jpg +0 -0
- data/images/r2d2_icon-icons.com_76952.png +0 -0
- data/images/rp2.jpg +0 -0
- data/images/rubyconf_1.png +0 -0
- data/images/rubyconf_2.png +0 -0
- data/images/rubykaigi_1.png +0 -0
- data/images/rubykaigi_2.png +0 -0
- data/images/star-background.jpg +0 -0
- data/images/title-background.png +0 -0
- data/memo_/345/220/214/346/231/202/351/200/232/350/250/263/347/224/250/350/252/236/351/233/206.md +127 -0
- data/pdf/RubyWorldConference2022-PicoRuby_ep3.pdf +0 -0
- data/tanoshiimiconruby.rab +13 -0
- data/theme.rb +176 -0
- metadata +92 -0
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
|
data/images/QR_R2P2.png
ADDED
Binary file
|
Binary file
|
Binary file
|
data/images/R2D2.jpg
ADDED
Binary file
|
Binary file
|
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
|
Binary file
|
data/images/rp2.jpg
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/memo_/345/220/214/346/231/202/351/200/232/350/250/263/347/224/250/350/252/236/351/233/206.md
ADDED
@@ -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
|
Binary file
|
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: []
|