rabbit-slide-hasumikin-RubyKaigiTakeout2021 2021.9.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rabbit +1 -0
- data/PRK-Firmware--Keyboard-is-Essentially-Ruby.rab +514 -0
- data/README.rd +24 -0
- data/Rakefile +17 -0
- data/config.yaml +24 -0
- data/images/Multitasking.png +0 -0
- data/images/Multitasking_sandbox.png +0 -0
- data/images/Notepad.png +0 -0
- data/images/QR_prk_firmware.png +0 -0
- data/images/QR_raactivityreport.png +0 -0
- data/images/QR_raactivityreport_2.png +0 -0
- data/images/architecture_1.png +0 -0
- data/images/boot_button_1.png +0 -0
- data/images/crkbd.jpg +0 -0
- data/images/crkbd_2.jpg +0 -0
- data/images/drag_and_drop_1.png +0 -0
- data/images/drag_and_drop_2.png +0 -0
- data/images/hamburger.png +0 -0
- data/images/hero_hamburger.png +0 -0
- data/images/kakutani.jpg +0 -0
- data/images/kakutani.png +0 -0
- data/images/kakutani_1.jpg +0 -0
- data/images/kakutani_2.jpg +0 -0
- data/images/matamata.png +0 -0
- data/images/msc.png +0 -0
- data/images/pipi_gherkin.jpg +0 -0
- data/images/promicro.jpg +0 -0
- data/images/promicro_rp2040.jpg +0 -0
- data/images/promicro_rp2040_boot_button.png +0 -0
- data/images/qmk_kmk_prk.png +0 -0
- data/images/qmk_kmk_prk_2.png +0 -0
- data/images/release.png +0 -0
- data/images/remap.png +0 -0
- data/images/rpi_pico.jpg +0 -0
- data/images/shortage.jpg +0 -0
- data/images/shortage.png +0 -0
- data/images/takeout.000.png +0 -0
- data/images/takeout.001.png +0 -0
- data/images/textedit.png +0 -0
- data/memo_/345/220/214/346/231/202/351/200/232/350/250/263/347/224/250_RubyKaigiTakeout2021-PRK-Firmware--Keyboard-is-Essentially-Ruby.md +37 -0
- data/pdf/RubyKaigiTakeout2021-PRK-Firmware--Keyboard-is-Essentially-Ruby.pdf +0 -0
- data/theme.rb +131 -0
- metadata +98 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 73b42ce1898bfc4d60f2e274c314ec538097233870968312bf2d84ad65adb018
|
4
|
+
data.tar.gz: 6d69bb3d6fca75ac60fd79a0034fda8bf3dc27b192cd08990aea180ce1f094ca
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7507a5a607a21a7c0b289dbab5ce00b9850c6cfdda3b8b27c6f66450fc20910e9e02d13949067fc3d57f437cf1cba294d88cc3429ac800981abca1a7dc518716
|
7
|
+
data.tar.gz: 822438d27d8a2e6bdea14c2e9962b97db6fb074fc29edfddb381bd85d3303a4bd23b767063e96712eb6b3f7dfbe64dcfb33f1529afbf0b5dd164d4665ff1907f
|
data/.rabbit
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
PRK-Firmware--Keyboard-is-Essentially-Ruby.rab
|
@@ -0,0 +1,514 @@
|
|
1
|
+
= PRK Firmware
|
2
|
+
|
3
|
+
: subtitle
|
4
|
+
Keyboard is\nEssentially ((*Ruby*))
|
5
|
+
: author
|
6
|
+
Hitoshi HASUMI
|
7
|
+
: place
|
8
|
+
RubyKaigi Takeout 2021 | Sep 10th
|
9
|
+
: allotted-time
|
10
|
+
25m
|
11
|
+
: theme
|
12
|
+
theme
|
13
|
+
|
14
|
+
= Acknowledgement
|
15
|
+
# image
|
16
|
+
# src = images/kakutani.png
|
17
|
+
# relative_height = 103
|
18
|
+
# relative_margin_top = 0
|
19
|
+
|
20
|
+
= Acknowledgement
|
21
|
+
# blockquote
|
22
|
+
# title = YOU COULD SAY DIY-KEYBOARD IS ESSENTIALLY RUBY
|
23
|
+
(('tag:center'))\n\n“You are able to build ((*Ruby*)) by yourself”\n\n\n
|
24
|
+
|
25
|
+
= Acknowledgement
|
26
|
+
# blockquote
|
27
|
+
# title = YOU COULD SAY DIY-KEYBOARD IS ESSENTIALLY RUBY
|
28
|
+
(('tag:center'))\n\n“You are able to build a ((*keyboard*)) by yourself”\n\n\n
|
29
|
+
|
30
|
+
= Acknowledgement
|
31
|
+
# blockquote
|
32
|
+
# title = YOU COULD SAY DIY-KEYBOARD IS ESSENTIALLY RUBY
|
33
|
+
(('tag:center'))\n“YOU COULD SAY\nDIY-KEYBOARD IS\nESSENTIALLY ((*RUBY*))”\n\n
|
34
|
+
|
35
|
+
= Exactly one year ago
|
36
|
+
# image
|
37
|
+
# src = images/kakutani_1.jpg
|
38
|
+
# relative_height = 103
|
39
|
+
# relative_margin_top = 0
|
40
|
+
|
41
|
+
= Exactly one year ago
|
42
|
+
# image
|
43
|
+
# src = images/kakutani_2.jpg
|
44
|
+
# relative_height = 103
|
45
|
+
# relative_margin_top = 0
|
46
|
+
|
47
|
+
= Keyboard firmware ... language
|
48
|
+
* QMK Firmware ... C
|
49
|
+
* KMK Firmware ... Python
|
50
|
+
* PRK Firmware ... ((*Ruby*))
|
51
|
+
|
52
|
+
= Keyboard firmware ... repository
|
53
|
+
# image
|
54
|
+
# src = images/qmk_kmk_prk.png
|
55
|
+
# relative_height = 103
|
56
|
+
# relative_margin_top = 0
|
57
|
+
|
58
|
+
= Keyboard firmware ⭐⭐⭐⭐⭐⭐⭐
|
59
|
+
# image
|
60
|
+
# src = images/qmk_kmk_prk_2.png
|
61
|
+
# relative_height = 103
|
62
|
+
# relative_margin_top = 0
|
63
|
+
|
64
|
+
= PRK Firmware - How to start
|
65
|
+
* Buy a DIY Keyboard kit
|
66
|
+
* Which uses ((*Pro Micro*))
|
67
|
+
* Pro Micro?
|
68
|
+
* Arduino compatible board
|
69
|
+
* PRK Firmware ((*doesn't*)) work on\n"normal" Pro Micro (AVR processor)
|
70
|
+
|
71
|
+
# image
|
72
|
+
# src = images/promicro.jpg
|
73
|
+
# align = right
|
74
|
+
# relative-height = 81
|
75
|
+
# relative_margin_left = 10
|
76
|
+
|
77
|
+
(('tag:right'))
|
78
|
+
(('tag:xx-small:https://www.switch-science.com/catalog/3914/'))
|
79
|
+
|
80
|
+
= PRK Firmware - How to start
|
81
|
+
* Instead, choose\n((*SPARKFUN PRO MICRO - RP2040*))\n((*[model no. DEV-17717]*))
|
82
|
+
|
83
|
+
# image
|
84
|
+
# src = images/promicro_rp2040.jpg
|
85
|
+
# align = right
|
86
|
+
# relative-height = 85
|
87
|
+
# relative_margin_left = 10
|
88
|
+
|
89
|
+
(('tag:right'))\n\n\n
|
90
|
+
(('tag:xx-small:https://www.sparkfun.com/products/17717'))
|
91
|
+
|
92
|
+
= PRK Firmware - How to start
|
93
|
+
* RP2040?
|
94
|
+
* "Raspberry Silicon"
|
95
|
+
* Implemented on Raspberry Pi Pico
|
96
|
+
* The target chip of ((*PRK Firmware*))
|
97
|
+
|
98
|
+
# image
|
99
|
+
# src = images/rpi_pico.jpg
|
100
|
+
# align = right
|
101
|
+
# relative-height = 100
|
102
|
+
# relative_margin_left = 2
|
103
|
+
|
104
|
+
(('tag:right'))\n\n
|
105
|
+
(('tag:xx-small:https://pc.watch.impress.co.jp/docs/news/1301670.html'))
|
106
|
+
|
107
|
+
= Troubleshooting of Pro Micro RP2040
|
108
|
+
* Logic level (depending on PCB)
|
109
|
+
* Pro Micro RP2040 may crash\nif VCC and RAW are connected
|
110
|
+
* Ask keyboard lovers to check it 🤓
|
111
|
+
* Shortage of conthrough's height\nif you build an ((*"upside down"*)) type
|
112
|
+
* Use XB-3-6-6P on akizukidenshi.com
|
113
|
+
|
114
|
+
# image
|
115
|
+
# src = images/shortage.png
|
116
|
+
# align = right
|
117
|
+
# relative-height = 90
|
118
|
+
# relative_margin_left = 9
|
119
|
+
|
120
|
+
= PRK Firmware - How to start
|
121
|
+
* Ask Rubyists on Twitter
|
122
|
+
* @takkanm
|
123
|
+
* @swan_match
|
124
|
+
* @kakutani
|
125
|
+
* @hasumikin (me), etc.
|
126
|
+
* Join #keyboard in ((*ruby-jp*)) Slack
|
127
|
+
|
128
|
+
= e.g.) picoruby/prk_pipigherkin
|
129
|
+
* Gherkin for\nthe Raspberry Pi Pico
|
130
|
+
* PCB available\non talpkeyboard.net
|
131
|
+
* Easy to explain but\n((*hard for newbies*)) to build
|
132
|
+
|
133
|
+
# image
|
134
|
+
# src = images/pipi_gherkin.jpg
|
135
|
+
# align = right
|
136
|
+
# relative-height = 80
|
137
|
+
# relative_margin_top = -3
|
138
|
+
# relative_margin_left = 8
|
139
|
+
|
140
|
+
(('tag:right'))
|
141
|
+
(('tag:xx-small:https://www.40percent.club/2021/02/pipi-gherkin.html'))
|
142
|
+
|
143
|
+
= e.g.) prk_pipigherkin/keymap.rb
|
144
|
+
# enscript ruby
|
145
|
+
# Initialize Keyboard
|
146
|
+
kbd = Keyboard.new
|
147
|
+
# Initialize GPIO pins
|
148
|
+
kbd.init_pins(
|
149
|
+
[ 12, 11, 10, 9, 8 ], # row0, row1,... respectively
|
150
|
+
[ 7, 6, 5, 4, 3, 2 ] # col0, col1,... respectively
|
151
|
+
)
|
152
|
+
# Default keymap
|
153
|
+
kbd.add_layer :default, %i(
|
154
|
+
KC_Q KC_W KC_E KC_R KC_T KC_Y KC_U KC_I KC_O KC_P
|
155
|
+
KC_A KC_S KC_D KC_F KC_G KC_H KC_J KC_K KC_L KC_BSPACE
|
156
|
+
Z_LSFT X_LGUI C_LALT V_LCTL SPC_LOWER ENT_RAISE B_RCTL N_RALT M_RGUI UNDS_RSFT
|
157
|
+
)
|
158
|
+
# Mode keys
|
159
|
+
kbd.define_mode_key :Z_LSFT, [ :KC_Z, :KC_LSFT, 150, 150 ]
|
160
|
+
# ...
|
161
|
+
kbd.define_mode_key :UNDS_RSFT, [ :KC_UNDS, :KC_RSFT, 200, 150 ]
|
162
|
+
kbd.define_mode_key :ENT_RAISE, [ :KC_ENTER, :raise, 150, 150 ]
|
163
|
+
kbd.define_mode_key :SPC_LOWER, [ :KC_SPACE, :lower, 300, 250 ]
|
164
|
+
|
165
|
+
= e.g.) prk_pipigherkin/keymap.rb
|
166
|
+
kbd.add_layer :raise, %i(
|
167
|
+
KC_EXLM KC_AT KC_HASH KC_DLR KC_PERC KC_CIRC KC_AMPR KC_ASTER KC_EQUAL KC_PLUS
|
168
|
+
KC_LABK KC_LCBR KC_LBRACKET KC_LPRN KC_MINUS KC_LEFT KC_DOWN KC_UP KC_RIGHT KC_BSPACE
|
169
|
+
KC_RABK KC_RCBR KC_RBRACKET KC_RPRN ADJUST ENT_RAISE KC_BSLASH KC_COMMA KC_DOT KC_SLASH
|
170
|
+
)
|
171
|
+
kbd.add_layer :lower, %i(
|
172
|
+
KC_1 KC_2 KC_3 KC_4 KC_5 KC_6 KC_7 KC_8 KC_9 KC_0
|
173
|
+
KC_TAB KC_NO KC_QUOTE KC_DQUO KC_MINUS KC_GRAVE KC_TILD KC_PIPE KC_COLON KC_SCOLON
|
174
|
+
KC_ESCAPE KC_LGUI KC_LALT KC_LCTL SPC_LOWER ADJUST KC_RCTL KC_RALT KC_RGUI KC_RSFT
|
175
|
+
)
|
176
|
+
|
177
|
+
= picoruby/prk_firmware/releases
|
178
|
+
# image
|
179
|
+
# src = images/release.png
|
180
|
+
# relative-height = 95
|
181
|
+
|
182
|
+
= Install uf2 into RP2040
|
183
|
+
* Connect USB cable while\npressing "boot button"
|
184
|
+
* RPI-RP2 will be mounted\nas a storage, then
|
185
|
+
|
186
|
+
# image
|
187
|
+
# align = right
|
188
|
+
# src = images/boot_button_1.png
|
189
|
+
# relative-height = 83
|
190
|
+
# relative_margin_left = 5
|
191
|
+
# relative_margin_top = -3
|
192
|
+
|
193
|
+
(('tag:right'))
|
194
|
+
(('tag:xx-small'))\n\n\n
|
195
|
+
https://www.raspberrypi.org/documentation/rp2040/getting-started
|
196
|
+
|
197
|
+
= Install uf2 into RP2040
|
198
|
+
# image
|
199
|
+
# src = images/promicro_rp2040_boot_button.png
|
200
|
+
# relative-height = 90
|
201
|
+
|
202
|
+
= Install uf2 into RP2040
|
203
|
+
# image
|
204
|
+
# src = images/drag_and_drop_1.png
|
205
|
+
# relative-height = 95
|
206
|
+
|
207
|
+
= ((*Automatically mounts!!!!!!!!*))
|
208
|
+
\n
|
209
|
+
(('tag:xx-large')) 🤩
|
210
|
+
|
211
|
+
# image
|
212
|
+
# align = right
|
213
|
+
# src = images/msc.png
|
214
|
+
# relative-height = 95
|
215
|
+
# relative_margin_left = 5
|
216
|
+
|
217
|
+
= ((*Drag & drop -> Automatically reloads!*))
|
218
|
+
# image
|
219
|
+
# src = images/drag_and_drop_2.png
|
220
|
+
# relative-height = 95
|
221
|
+
|
222
|
+
= ((* *))
|
223
|
+
(('tag:x-large'))
|
224
|
+
(('tag:center'))
|
225
|
+
Unlike QMK Firmware,\n
|
226
|
+
You don't need\n
|
227
|
+
to ((*compile*))\n
|
228
|
+
anything!
|
229
|
+
== prop
|
230
|
+
: hide-title
|
231
|
+
true
|
232
|
+
|
233
|
+
= Technology behind PRK Firmware
|
234
|
+
* Compiler and Virtual machine
|
235
|
+
# image
|
236
|
+
# src = images/architecture_1.png
|
237
|
+
# relative_height = 100
|
238
|
+
# relative_margin_top = -4
|
239
|
+
|
240
|
+
= Technology behind PRK Firmware
|
241
|
+
* PicoRuby
|
242
|
+
* PicoRuby compiler + mruby/c VM
|
243
|
+
* Ruby Association Grant\nhttps://www.ruby.or.jp/ja/news/20210715
|
244
|
+
# image
|
245
|
+
# src = images/QR_raactivityreport.png
|
246
|
+
# relative_height = 90
|
247
|
+
|
248
|
+
= e.g.) picoruby/prk_crkbd
|
249
|
+
# image
|
250
|
+
# src = images/crkbd_2.jpg
|
251
|
+
# relative_height = 95
|
252
|
+
|
253
|
+
= e.g.) prk_crkbd/keymap.rb
|
254
|
+
# enscript ruby
|
255
|
+
|
256
|
+
kbd = Keyboard.new
|
257
|
+
# (init_pins, add_layer etc., then)
|
258
|
+
rgb = RGB.new(
|
259
|
+
0, # pin number
|
260
|
+
6, # size of underglow LED
|
261
|
+
21 # size of backlight LED
|
262
|
+
)
|
263
|
+
rgb.effect = :rainbow # or :breathing
|
264
|
+
kbd.append rgb
|
265
|
+
kbd.start!
|
266
|
+
|
267
|
+
= e.g.) prk_crkbd/keymap.rb
|
268
|
+
\n
|
269
|
+
If you wanna input ((*";"*)) with SHIFT and ((*":"*)) without SHIFT,
|
270
|
+
|
271
|
+
# enscript ruby
|
272
|
+
kbd.before_report do
|
273
|
+
kbd.invert_sft if kbd.keys_include?(:KC_SCOLON)
|
274
|
+
end
|
275
|
+
|
276
|
+
(('tag:center'))
|
277
|
+
You no longer need to modify .vimrc
|
278
|
+
|
279
|
+
= You can write invert_ctl in keymap.rb
|
280
|
+
# enscript ruby
|
281
|
+
class Keyboard
|
282
|
+
def invert_ctl
|
283
|
+
# KC_LCTL: 0b00000001 👈
|
284
|
+
# KC_LSFT: 0b00000010
|
285
|
+
# KC_LALT: 0b00000100
|
286
|
+
# KC_LGUI: 0b00001000
|
287
|
+
# KC_RCTL: 0b00010000 👈
|
288
|
+
# KC_RSFT: 0b00100000
|
289
|
+
# KC_RALT: 0b01000000
|
290
|
+
# KC_RGUI: 0b10000000
|
291
|
+
if (@modifier & 0b00010001) > 0
|
292
|
+
@modifier &= 0b11101110
|
293
|
+
else
|
294
|
+
@modifier |= 0b00000001
|
295
|
+
end
|
296
|
+
end
|
297
|
+
end
|
298
|
+
kbd.before_report do
|
299
|
+
kbd.invert_ctl if kbd.keys_include?(:KC_V)
|
300
|
+
end
|
301
|
+
|
302
|
+
= Fibonacci number
|
303
|
+
(('tag:center'))\n\n\n
|
304
|
+
(DEMO)
|
305
|
+
|
306
|
+
= Fibonacci number
|
307
|
+
# enscript c
|
308
|
+
1
|
309
|
+
2
|
310
|
+
3
|
311
|
+
5
|
312
|
+
8
|
313
|
+
13
|
314
|
+
21
|
315
|
+
34
|
316
|
+
55
|
317
|
+
89
|
318
|
+
144
|
319
|
+
233
|
320
|
+
377
|
321
|
+
....
|
322
|
+
|
323
|
+
= Fibonacci in keymap.rb
|
324
|
+
# enscript ruby
|
325
|
+
class Fibonacci
|
326
|
+
def initialize
|
327
|
+
@a = 0 ; @b = 1
|
328
|
+
end
|
329
|
+
# Omits F0 and F1
|
330
|
+
def take
|
331
|
+
result = @a + @b
|
332
|
+
@a = @b
|
333
|
+
@b = result
|
334
|
+
end
|
335
|
+
end
|
336
|
+
fibonacci = Fibonacci.new
|
337
|
+
kbd.define_mode_key :FIBONACCI,
|
338
|
+
[ Proc.new { kbd.macro fibonacci.take },
|
339
|
+
:KC_NO, 300, nil ]
|
340
|
+
|
341
|
+
= Password generator in keymap.rb
|
342
|
+
# enscript ruby
|
343
|
+
class Password
|
344
|
+
def initialize
|
345
|
+
@c = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_!@#$%^&*()=-+/[]{}<>'
|
346
|
+
end
|
347
|
+
def generate
|
348
|
+
unless @srand
|
349
|
+
srand(board_millis) # generate rand()'s seed by board_millis
|
350
|
+
@srand = true
|
351
|
+
end
|
352
|
+
password = ""
|
353
|
+
while true
|
354
|
+
i = rand % 100
|
355
|
+
password << @c[i].to_s
|
356
|
+
break if password.length == 8
|
357
|
+
end
|
358
|
+
return password
|
359
|
+
end
|
360
|
+
end
|
361
|
+
password = Password.new
|
362
|
+
kbd.define_mode_key :PASSWD, [ Proc.new { kbd.macro password.generate, [] }, :KC_NO, 300, nil ]
|
363
|
+
|
364
|
+
= ((* *))
|
365
|
+
(('tag:center'))\n\n\n
|
366
|
+
(('tag:large:By the way,'))
|
367
|
+
== prop
|
368
|
+
: hide-title
|
369
|
+
true
|
370
|
+
|
371
|
+
= ((* *))
|
372
|
+
(('tag:center'))\n\n
|
373
|
+
(('tag:large'))
|
374
|
+
((*What do you think is\n
|
375
|
+
the No.1 text editor?*))
|
376
|
+
== prop
|
377
|
+
: hide-title
|
378
|
+
true
|
379
|
+
|
380
|
+
= ((* *))
|
381
|
+
(('tag:center'))\n\n\n
|
382
|
+
(('tag:large:vim?'))
|
383
|
+
== prop
|
384
|
+
: hide-title
|
385
|
+
true
|
386
|
+
|
387
|
+
= ((* *))
|
388
|
+
(('tag:center'))\n\n\n
|
389
|
+
(('tag:large:emacs?'))
|
390
|
+
== prop
|
391
|
+
: hide-title
|
392
|
+
true
|
393
|
+
|
394
|
+
= ((* *))
|
395
|
+
(('tag:center'))\n\n\n
|
396
|
+
(('tag:large:textbringer?'))
|
397
|
+
== prop
|
398
|
+
: hide-title
|
399
|
+
true
|
400
|
+
|
401
|
+
= ((* *))
|
402
|
+
# image
|
403
|
+
# src = images/matamata.png
|
404
|
+
# relative_height = 80
|
405
|
+
# relative_margin_top = 5
|
406
|
+
# relative_margin_left = -9
|
407
|
+
== prop
|
408
|
+
: hide-title
|
409
|
+
true
|
410
|
+
|
411
|
+
= ((* *))
|
412
|
+
\n\n\n\n
|
413
|
+
Copyright © Microsoft
|
414
|
+
# image
|
415
|
+
# src = images/Notepad.png
|
416
|
+
# align = right
|
417
|
+
# relative-height = 100
|
418
|
+
# relative_margin_left = 10
|
419
|
+
== prop
|
420
|
+
: hide-title
|
421
|
+
true
|
422
|
+
|
423
|
+
= PicoRuby Compiler on Board
|
424
|
+
(('tag:center'))\n\n
|
425
|
+
(DEMO)
|
426
|
+
|
427
|
+
= PicoRuby Compiler on Board
|
428
|
+
* Multitasking of mruby/c
|
429
|
+
# image
|
430
|
+
# src = images/Multitasking.png
|
431
|
+
# relative_height = 110
|
432
|
+
# relative_margin_top = -8
|
433
|
+
|
434
|
+
= PicoRuby Compiler on Board
|
435
|
+
* ((*Sandbox*)) task is never freed!
|
436
|
+
# image
|
437
|
+
# src = images/Multitasking_sandbox.png
|
438
|
+
# relative_height = 110
|
439
|
+
# relative_margin_top = -8
|
440
|
+
|
441
|
+
= ((* *))
|
442
|
+
(('tag:center'))\n
|
443
|
+
(('tag:xx-large'))
|
444
|
+
So,
|
445
|
+
== prop
|
446
|
+
: hide-title
|
447
|
+
true
|
448
|
+
|
449
|
+
= ((* *))
|
450
|
+
(('tag:center'))\n
|
451
|
+
(('tag:xx-large'))
|
452
|
+
You could say
|
453
|
+
== prop
|
454
|
+
: hide-title
|
455
|
+
true
|
456
|
+
|
457
|
+
= ((* *))
|
458
|
+
(('tag:center'))
|
459
|
+
(('tag:xx-large'))
|
460
|
+
Keyboard is\n
|
461
|
+
Essentially\n
|
462
|
+
((*Ruby*))
|
463
|
+
== prop
|
464
|
+
: hide-title
|
465
|
+
true
|
466
|
+
|
467
|
+
= Future work
|
468
|
+
* WebUSB serial\n(like Remap)
|
469
|
+
* IoT, Robot
|
470
|
+
* Smalruby
|
471
|
+
* mruby Girls
|
472
|
+
|
473
|
+
# image
|
474
|
+
# src = images/remap.png
|
475
|
+
# align = right
|
476
|
+
# relative-height = 80
|
477
|
+
# relative_margin_top = -2
|
478
|
+
# relative_margin_left = 15
|
479
|
+
|
480
|
+
(('tag:right'))
|
481
|
+
(('tag:xx-small:https://remap-keys.app/catalog/gE11SshmfVPRGXEQZ6SC/keymap'))
|
482
|
+
|
483
|
+
= Conclusion
|
484
|
+
* PRK Firmware is ((*the world's\nfirst keyboard firmware in Ruby*))
|
485
|
+
* You can not only write your keymap\nbut also make your keyboard\n((*more than a keyboard*))
|
486
|
+
|
487
|
+
= ((* *))
|
488
|
+
(('tag:center'))
|
489
|
+
(('tag:xx-large'))
|
490
|
+
Code ((*Ruby*)) with\n
|
491
|
+
a keyboard that\n
|
492
|
+
runs on ((*Ruby*))
|
493
|
+
== prop
|
494
|
+
: hide-title
|
495
|
+
true
|
496
|
+
|
497
|
+
= ((* *))
|
498
|
+
(('tag:center'))
|
499
|
+
(('tag:xx-large'))
|
500
|
+
\n
|
501
|
+
Happy Coding!
|
502
|
+
== prop
|
503
|
+
: hide-title
|
504
|
+
true
|
505
|
+
|
506
|
+
= ((* *))
|
507
|
+
(('tag:center'))
|
508
|
+
(('tag:xx-large'))
|
509
|
+
\n
|
510
|
+
Thank you!!!q
|
511
|
+
== prop
|
512
|
+
: hide-title
|
513
|
+
true
|
514
|
+
|
data/README.rd
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
= PRK Firmware: Keyboard is Essentially Ruby
|
2
|
+
|
3
|
+
Presentation slide for RubyKaigi Takeout 2021
|
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-RubyKaigiTakeout2021
|
20
|
+
|
21
|
+
=== Show
|
22
|
+
|
23
|
+
rabbit rabbit-slide-hasumikin-RubyKaigiTakeout2021.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: RubyKaigiTakeout2021
|
3
|
+
base_name: PRK-Firmware--Keyboard-is-Essentially-Ruby
|
4
|
+
tags:
|
5
|
+
- PicoRuby
|
6
|
+
- keyboard
|
7
|
+
- Raspberry
|
8
|
+
presentation_date: '2021-09-10'
|
9
|
+
presentation_start_time: 11:00
|
10
|
+
presentation_end_time: 11:25
|
11
|
+
version: 2021.9.10.0
|
12
|
+
licenses: []
|
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/Notepad.png
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/images/crkbd.jpg
ADDED
Binary file
|
data/images/crkbd_2.jpg
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/images/kakutani.jpg
ADDED
Binary file
|
data/images/kakutani.png
ADDED
Binary file
|
Binary file
|
Binary file
|
data/images/matamata.png
ADDED
Binary file
|
data/images/msc.png
ADDED
Binary file
|
Binary file
|
data/images/promicro.jpg
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/images/release.png
ADDED
Binary file
|
data/images/remap.png
ADDED
Binary file
|
data/images/rpi_pico.jpg
ADDED
Binary file
|
data/images/shortage.jpg
ADDED
Binary file
|
data/images/shortage.png
ADDED
Binary file
|
Binary file
|
Binary file
|
data/images/textedit.png
ADDED
Binary file
|
@@ -0,0 +1,37 @@
|
|
1
|
+
## 一件すると一般名詞みたいだが、実は固有名詞なので単語の本来の意味を無視してそのまま発話すればよいものたち
|
2
|
+
|
3
|
+
(例えば「gem」を「宝石」のように解釈する必要はありません)
|
4
|
+
|
5
|
+
Rails
|
6
|
+
gem
|
7
|
+
steep
|
8
|
+
Shell
|
9
|
+
|
10
|
+
##そのまま発話すればOKな固有名詞など
|
11
|
+
|
12
|
+
Rubygems(ルビージェムズ)
|
13
|
+
vim(ヴィム)
|
14
|
+
emacs(イーマクス)
|
15
|
+
textbringer(テクストブリンガ)
|
16
|
+
Git(ギット)
|
17
|
+
GitHub(ギットハブ)
|
18
|
+
HID(エイチアイディ)
|
19
|
+
GUI(ジーユーアイ)
|
20
|
+
CUI(シーユーアイ)
|
21
|
+
IRB(アイアールビー)
|
22
|
+
GPIO(ジーピーアイオー)
|
23
|
+
|
24
|
+
## 適切な翻訳がある言葉たち
|
25
|
+
|
26
|
+
(スライドには書かれていないものもありますが、口頭でしゃべります)
|
27
|
+
|
28
|
+
角谷さん -> Mr. Kakutani
|
29
|
+
(キーボードが)「割れてる」やつ -> Split type
|
30
|
+
ラズパイ -> Raspberry Pi(ラズベリーパイ)
|
31
|
+
ラズパイピコまたはラズピコ -> Raspberry Pi Pico(ラズベリーパイピコ)
|
32
|
+
ラズパイ財団 -> Raspberry Pi Foundation
|
33
|
+
マイコン -> Microcontroller
|
34
|
+
RP2040(あーるぴーにーぜろよんぜろ) -> RP-twenty-forty
|
35
|
+
(Windowsアプリの)メモ帳 -> notepad.exe(ノートパッドエグゼ)
|
36
|
+
疑似乱数発生器 -> Pseudo random number generator
|
37
|
+
|
data/theme.rb
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
# puts font_families.sort
|
2
|
+
@xx_large_font_size = screen_size(12 * Pango::SCALE)
|
3
|
+
@x_large_font_size = screen_size(10 * Pango::SCALE)
|
4
|
+
@large_font_size = screen_size(7 * Pango::SCALE)
|
5
|
+
@normal_font_size = screen_size(5 * Pango::SCALE)
|
6
|
+
@small_font_size = screen_size(4 * Pango::SCALE)
|
7
|
+
@x_small_font_size = screen_size(3.5 * Pango::SCALE)
|
8
|
+
@xx_small_font_size = screen_size(2.5 * Pango::SCALE)
|
9
|
+
|
10
|
+
@font_family = find_font_family('Titillium Web')
|
11
|
+
@monospace_font_family = 'Ricty Discord'
|
12
|
+
|
13
|
+
@default_headline_line_color = '#0B374D'
|
14
|
+
@default_headline_line_width = 8
|
15
|
+
@default_headline_line_expand = false
|
16
|
+
|
17
|
+
set_graffiti_color "blue"
|
18
|
+
set_graffiti_line_width 8
|
19
|
+
|
20
|
+
#@table_frame_color = "#ffffff"
|
21
|
+
#@table_fill_color = "#0f0428"
|
22
|
+
#@table_body_frame_color = "#ffffff"
|
23
|
+
#@table_body_fill_color = "#3f3468"
|
24
|
+
#@table_head_frame_color = "#ffffff"
|
25
|
+
#@table_head_fill_color = "#rf0428"
|
26
|
+
|
27
|
+
|
28
|
+
@preformatted_fill_color = '#ebe0ce'
|
29
|
+
# @preformatted_centering = true
|
30
|
+
@space = screen_y(1)
|
31
|
+
|
32
|
+
@image_slide_number_start_flag_color = "#FFB400"
|
33
|
+
@image_slide_number_goal_flag_color = "#FF2B22"
|
34
|
+
|
35
|
+
include_theme('default')
|
36
|
+
|
37
|
+
match Slide, HeadLine do |heads|
|
38
|
+
heads.prop_set("size", @large_font_size)
|
39
|
+
heads.prop_set("weight", "bold")
|
40
|
+
end
|
41
|
+
match Slide do |slides|
|
42
|
+
slides.prop_set("foreground", "#0B374D")
|
43
|
+
end
|
44
|
+
|
45
|
+
@slide_headline_hide = true
|
46
|
+
match TitleSlide do |slides|
|
47
|
+
slides.margin_left = 900
|
48
|
+
slides.vertical_centering = true
|
49
|
+
slides.prop_set "foreground", "#0B374D"
|
50
|
+
slides.prop_set("weight", "bold")
|
51
|
+
end
|
52
|
+
match TitleSlide, Subtitle do |subtitle|
|
53
|
+
subtitle.margin_top = -20
|
54
|
+
subtitle.prop_set("size", @large_font_size)
|
55
|
+
end
|
56
|
+
match TitleSlide, Author do |author|
|
57
|
+
author.margin_top = 50
|
58
|
+
author.prop_set("weight", "normal")
|
59
|
+
end
|
60
|
+
match TitleSlide, Place do |place|
|
61
|
+
place.prop_set("size", @small_font_size)
|
62
|
+
end
|
63
|
+
match TitleSlide, "*" do |elems|
|
64
|
+
elems.horizontal_centering = false
|
65
|
+
end
|
66
|
+
|
67
|
+
# Cites
|
68
|
+
#match Slide do |slides|
|
69
|
+
# slides.each do |slide|
|
70
|
+
# if slide.match?(/Acknowledgement/)
|
71
|
+
# slide.horizontal_centering = true
|
72
|
+
# end
|
73
|
+
# end
|
74
|
+
#end
|
75
|
+
|
76
|
+
@title_slide_background_image = 'images/takeout.000.png'
|
77
|
+
include_theme("title-slide-background-image")
|
78
|
+
|
79
|
+
@slide_background_image = 'images/takeout.001.png'
|
80
|
+
include_theme("slide-background-image")
|
81
|
+
|
82
|
+
#@slide_logo_image = 'images/mark48.png'
|
83
|
+
#include_theme('slide-logo')
|
84
|
+
|
85
|
+
@item_image = 'images/hamburger.png'
|
86
|
+
|
87
|
+
include_theme("default-item-mark")
|
88
|
+
|
89
|
+
add_image_path("rabbit-images")
|
90
|
+
|
91
|
+
slide_body = [Slide, Body]
|
92
|
+
item_list_item = [ItemList, ItemListItem]
|
93
|
+
|
94
|
+
indent = 70
|
95
|
+
|
96
|
+
match(*(slide_body + (item_list_item * 1))) do |items|
|
97
|
+
name = "item1"
|
98
|
+
items.delete_pre_draw_proc_by_name(name)
|
99
|
+
items.delete_post_draw_proc_by_name(name)
|
100
|
+
draw_image_mark(items, @item_image, name, indent: indent)
|
101
|
+
end
|
102
|
+
|
103
|
+
match(*(slide_body + (item_list_item * 2))) do |items|
|
104
|
+
name = "item2"
|
105
|
+
items.delete_pre_draw_proc_by_name(name)
|
106
|
+
items.delete_post_draw_proc_by_name(name)
|
107
|
+
draw_image_mark(items, @item_image, name, indent: indent)
|
108
|
+
end
|
109
|
+
|
110
|
+
match(*(slide_body + (item_list_item * 3))) do |items|
|
111
|
+
name = "item3"
|
112
|
+
items.delete_pre_draw_proc_by_name(name)
|
113
|
+
items.delete_post_draw_proc_by_name(name)
|
114
|
+
draw_image_mark(items, @item_image, name, indent: indent)
|
115
|
+
end
|
116
|
+
|
117
|
+
enum_list_item = [EnumList, EnumListItem]
|
118
|
+
|
119
|
+
match(*(slide_body + enum_list_item + item_list_item)) do |items|
|
120
|
+
name = "enum-item1"
|
121
|
+
items.delete_pre_draw_proc_by_name(name)
|
122
|
+
items.delete_post_draw_proc_by_name(name)
|
123
|
+
draw_image_mark(items, @item_image, name, indent: indent)
|
124
|
+
end
|
125
|
+
|
126
|
+
match(*(slide_body + enum_list_item + (item_list_item * 2))) do |items|
|
127
|
+
name = "enum-item2"
|
128
|
+
items.delete_pre_draw_proc_by_name(name)
|
129
|
+
items.delete_post_draw_proc_by_name(name)
|
130
|
+
draw_image_mark(items, @item_image, name, indent: indent)
|
131
|
+
end
|
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rabbit-slide-hasumikin-RubyKaigiTakeout2021
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2021.9.10.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- HASUMI Hitoshi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-09-09 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 RubyKaigi Takeout 2021
|
28
|
+
email:
|
29
|
+
- hasumikin@gmail.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- ".rabbit"
|
35
|
+
- PRK-Firmware--Keyboard-is-Essentially-Ruby.rab
|
36
|
+
- README.rd
|
37
|
+
- Rakefile
|
38
|
+
- config.yaml
|
39
|
+
- images/Multitasking.png
|
40
|
+
- images/Multitasking_sandbox.png
|
41
|
+
- images/Notepad.png
|
42
|
+
- images/QR_prk_firmware.png
|
43
|
+
- images/QR_raactivityreport.png
|
44
|
+
- images/QR_raactivityreport_2.png
|
45
|
+
- images/architecture_1.png
|
46
|
+
- images/boot_button_1.png
|
47
|
+
- images/crkbd.jpg
|
48
|
+
- images/crkbd_2.jpg
|
49
|
+
- images/drag_and_drop_1.png
|
50
|
+
- images/drag_and_drop_2.png
|
51
|
+
- images/hamburger.png
|
52
|
+
- images/hero_hamburger.png
|
53
|
+
- images/kakutani.jpg
|
54
|
+
- images/kakutani.png
|
55
|
+
- images/kakutani_1.jpg
|
56
|
+
- images/kakutani_2.jpg
|
57
|
+
- images/matamata.png
|
58
|
+
- images/msc.png
|
59
|
+
- images/pipi_gherkin.jpg
|
60
|
+
- images/promicro.jpg
|
61
|
+
- images/promicro_rp2040.jpg
|
62
|
+
- images/promicro_rp2040_boot_button.png
|
63
|
+
- images/qmk_kmk_prk.png
|
64
|
+
- images/qmk_kmk_prk_2.png
|
65
|
+
- images/release.png
|
66
|
+
- images/remap.png
|
67
|
+
- images/rpi_pico.jpg
|
68
|
+
- images/shortage.jpg
|
69
|
+
- images/shortage.png
|
70
|
+
- images/takeout.000.png
|
71
|
+
- images/takeout.001.png
|
72
|
+
- images/textedit.png
|
73
|
+
- memo_同時通訳用_RubyKaigiTakeout2021-PRK-Firmware--Keyboard-is-Essentially-Ruby.md
|
74
|
+
- pdf/RubyKaigiTakeout2021-PRK-Firmware--Keyboard-is-Essentially-Ruby.pdf
|
75
|
+
- theme.rb
|
76
|
+
homepage: https://slide.rabbit-shocker.org/authors/hasumikin/RubyKaigiTakeout2021/
|
77
|
+
licenses: []
|
78
|
+
metadata: {}
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
requirements: []
|
94
|
+
rubygems_version: 3.2.17
|
95
|
+
signing_key:
|
96
|
+
specification_version: 4
|
97
|
+
summary: 'PRK Firmware: Keyboard is Essentially Ruby'
|
98
|
+
test_files: []
|