rabbit-slide-hasumikin-making-iot-device-with-ruby 1.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ec724f1ff3eb18b5a37892cf83bc43d9efb4a3227a5de5649fe5afc2a425ad7e
4
+ data.tar.gz: da920fa000b16d3fe9b813c4e123786eaef2e347774b8c0e8f5d04c321a0d87b
5
+ SHA512:
6
+ metadata.gz: f7eaeb57008ece62107ad5079f1df5442f57ee7127dd03d8d4b049aec0b8fa6426de0426a135a125f638d1464a6dc579259cfb99113dff4607a500b5a81462e4
7
+ data.tar.gz: 8f327b5e2e3d865738afd972a8519ab4f2d403ab91676c4c9acdbd97d5b1217c0b7c57dd43d4999a1a352e3122ace4f02ba6b40255e5ee92a065ab38ddef8981
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ making-iot-device-with-ruby.rab
@@ -0,0 +1,372 @@
1
+ = Making IoT device\nwith Ruby
2
+
3
+ :author
4
+ HASUMI Hitoshi
5
+ :institution
6
+ Monstar Lab, Matsue office
7
+ :allotted-time
8
+ 25m
9
+ :date
10
+ Nov. 2, 2018 (day 2)
11
+ :place
12
+ RubyWorld Conference 2018\nKunibiki Messe, Shimane
13
+ :theme
14
+ ./theme
15
+
16
+ = Information
17
+
18
+ = Information
19
+ * mrubycKaigi#1 on Oct. 31, 2018 (the day before yesterday)
20
+ # image
21
+ # src = mrubycKaigi.jpg
22
+ # align = center
23
+ # relative-height = 100
24
+
25
+ = Information
26
+ # image
27
+ # src = poland.gif
28
+ # align = center
29
+ # relative-height = 100
30
+
31
+ = Information
32
+ * Polish Ruby users group sent me an invitation
33
+ * they want me to talk about ((*mruby/c*))
34
+ * I'm going to have several talks and workshops in May 2019
35
+
36
+ = Information
37
+ * Polish Ruby users group sent me an invitation
38
+ * they want me to talk about ((*mruby/c*))
39
+ * I'm going to have several talks and workshops in May 2019
40
+ \n\n
41
+ (('tag:center'))((*RubyWorld!!!*))
42
+
43
+ = Making IoT device with Ruby
44
+ * PoC product for a Sake brewery, 旭日酒造
45
+ # image
46
+ # src = nigouki.jpg
47
+ # align = center
48
+ # relative-height = 100
49
+
50
+ = Making IoT device with Ruby
51
+ * prototype for mass production
52
+ * you can see the device at Monstar-lab's booth downstairs today (Nov. 1-2)
53
+ # image
54
+ # src = collage02.jpg
55
+ # align = center
56
+ # relative-height = 100
57
+
58
+ = Making IoT device with Ruby
59
+ * what does ((*`with Ruby`*)) mean?
60
+ * not only CRuby
61
+ * not only mruby/c, too
62
+
63
+ = Making IoT device with Ruby
64
+ * what does ((*`with Ruby`*)) mean?
65
+ * not only CRuby
66
+ * not only mruby/c, too
67
+ * but also ((*RubyWorld*))
68
+
69
+ = About me
70
+
71
+ = About me
72
+ # image
73
+ # src = 松江城_Matsue.rb.jpg
74
+ # align = center
75
+ # relative-height = 110
76
+
77
+ = About me
78
+ * Monstar Lab / Matsue office (now hiring!)
79
+ # image
80
+ # src = monstar-lab_shimane.jpg
81
+ # align = center
82
+ # relative-height = 100
83
+
84
+ = About me
85
+ * HASUMI Hitoshi(羽角 均) @hasumikin
86
+ * finished master's degree in architecture department
87
+ * majored in the history of Italian architecture
88
+ * became a programmer at 35 years old
89
+ * neither a computer specialist nor an electricity expert
90
+
91
+ = Technology stack of IoT
92
+ # image
93
+ # src = unsoldered-2.png
94
+ # align = center
95
+ # relative-height = 100
96
+
97
+ = Technology stack of IoT (1/2)
98
+ * TCP/IP
99
+ * cloud service
100
+ * RDB and KVS
101
+ * server programming
102
+ * mobile programming
103
+ * security
104
+ * test
105
+
106
+ = Technology stack of IoT (2/2)
107
+ * high school physics electricity and transistor
108
+ * microcontroller and peripherals like UART, I2C, ADC, etc.
109
+ * circuit and PCB artwork
110
+ * soldering and wiring
111
+ * 3D CAD for housing
112
+ * suppliers
113
+ * firmware programming
114
+
115
+ = Understanding the business
116
+ * Sake brewing process and Sake itself
117
+ # image
118
+ # src = chad.jpg
119
+ # align = center
120
+ # relative-height = 100
121
+
122
+ = Sake itself
123
+ # image
124
+ # src = juji-asahi.jpg
125
+ # align = center
126
+ # relative-height = 100
127
+
128
+ = The most thing you should know is
129
+
130
+ = The most thing you should know is
131
+ \n\n\n\n
132
+ (('tag:center'))(('tag:x-large:Ruby on Rails'))
133
+
134
+ = Ruby on Rails
135
+ * tells you what a good API is
136
+ * tells you what a reinventing the wheel is
137
+ * tells you what an ecosystem is
138
+ * tells you what a web service is
139
+
140
+ = Technology stack of IoT (1/2) again
141
+ * ((*✓*))TCP/IP
142
+ * ((*✓*))cloud service
143
+ * ((*✓*))RDB and KVS
144
+ * ((*✓*))server programming
145
+ * ((*✓*))mobile programming
146
+ * ((*✓*))security
147
+ * ((*✓*))test
148
+
149
+ = Ruby on Rails
150
+ * gives you time on digging into technologies other than the server app
151
+ * gives you wings
152
+
153
+ = Technology stack of IoT (2/2) again
154
+ * ((*✓*))high school physics electricity and transistor
155
+ * ((*✓*))microcontroller and peripheral interfaces like UART, I2C, ADC, etc.
156
+ * ((*✓*))circuit and PCB artwork
157
+ * ((*✓*))soldering and wiring
158
+ * ((*✓*))3D CAD
159
+ * ((*✓*))suppliers
160
+ * ((*✓*))firmware programming
161
+
162
+ = Microcontroller
163
+ * I use microcontrollers instead of single board computers like Raspberry Pi
164
+ # image
165
+ # src = psoc5lp_chip.jpg
166
+ # align = center
167
+ # relative-height = 100
168
+
169
+ = Microcontroller, upside
170
+ * starts immediately right after plugged in
171
+ * end users, brewery workers in my case, can use it simply
172
+ * you can narrow security issue list
173
+ * many a malware aims at linux or windows platform as a target
174
+ * you don't need to consider unnecessary deamon
175
+ * neither need to do `apt upgrade` nor `yum update`
176
+
177
+ = Microcontroller, upside
178
+ * low energy
179
+ * rarely overheated
180
+ * many choices of power supply
181
+ * mass production
182
+ * you can choose appropriate chipset(number of GPIOs, memory size, etc.) for your application
183
+ * cost advantage for parts supply and subcontractor manufacturing
184
+
185
+ = Microcontroller, downside
186
+ * less resource
187
+ * CPU, memory
188
+ * hard to be soldered
189
+
190
+ = Sake IoT project
191
+
192
+ = Sake IoT project
193
+ * IoT system for Asahi-shuzo(旭日酒造)
194
+ * delivered to actual brew work in January 2018
195
+ * devices post temperature of Sake materials in brewing, surrounding temperature and humidity to the cloud
196
+ * then, those data are displayed on the smartphone app
197
+ * the firmware written in ((*mruby/c*))
198
+
199
+ = what does mruby((*/c*)) mean?
200
+
201
+ = what does mruby((*/c*)) mean?
202
+ * compact
203
+ * concurrent
204
+ * capability
205
+
206
+ = Sake IoT project
207
+ # image
208
+ # src = kamosu.png
209
+ # align = center
210
+ # relative-height = 110
211
+
212
+ = So many factors to be troubled in IoT
213
+ * circuit design, soldering, wiring, peripheral equipments, network...
214
+ * hard to find why the application doesn't work well
215
+ * in addition to above, I introduced a new layer of mruby/c
216
+ * one year ago, mruby/c was yet young, had bugs and insufficiency
217
+ * (now it is enough good)
218
+
219
+ = So many factors to be troubled in IoT
220
+ : then, was mruby/c bad?
221
+
222
+ = So many factors to be troubled in IoT
223
+ : then, was mruby/c bad? - NO
224
+ * IoT at work makes you hurry, imagine
225
+ * you have to go alternately to dark 10℃ storage cellar and humid 35℃ manufacturing room
226
+ * brewery workers run around
227
+ * you have to amend your firmware with your small laptop in 10 minutes
228
+ * you will thank Ruby's descriptiveness and agility
229
+
230
+ = Does IoT at work make you hurry?
231
+
232
+ = Does IoT at work make you hurry?
233
+ # image
234
+ # src = tranquilo.jpg
235
+ # relative-height = 100
236
+
237
+ = Pre-prototyping
238
+ * preparation is the most important thing
239
+ * you have to confirm if a part works as same as the datasheet
240
+ * sometimes it is different
241
+ * you can prepare with Ruby
242
+
243
+ = Pre-prototyping
244
+ # image
245
+ # src = raspberrypi.jpg
246
+ # relative-height = 55
247
+
248
+ * Raspberry Pi & CRuby are great for pre-prototyping
249
+ * use breadboard or make PCB for test like this photo
250
+
251
+ = Pre-prototyping
252
+ ex) CRuby for serial communication test
253
+ # enscript ruby
254
+ # notice this is CRuby for RasPi
255
+ require 'rubyserial'
256
+ require 'timeout'
257
+ sp = Serial.new '/dev/serial0', BAUDRATE, 8 # match with your instrument
258
+ loop do
259
+ puts '[command]'
260
+ command = gets
261
+ sp.write command.sub("\n", "\r") # replace LF if needed
262
+ sleep 0.1
263
+ result = ''
264
+ begin
265
+ Timeout.timeout(10) do
266
+ loop do
267
+ line = sp.read(128)
268
+ break if line == '' && result != ''
269
+ result << line
270
+ sleep 0.1
271
+ puts '=> ' + result
272
+ rescue Timeout::Error
273
+ puts 'timeout!'
274
+ ennnnd
275
+
276
+ = Pre-prototyping
277
+ ex) CRuby for serial communication test
278
+ # enscript bash
279
+ $ serial_communication_test.rb
280
+ [command]
281
+ AT # command
282
+ => OK # response
283
+ [command]
284
+ AT+CIMI # command
285
+ => 123456789012 # response
286
+ [command]
287
+ AT+XXX # command
288
+ => error # response
289
+
290
+ = Pre-prototyping
291
+ * then, you can copy and paste CRuby snippet to mruby/c source
292
+
293
+ = Firmware programming with mruby/c
294
+
295
+ = Firmware programming with mruby/c
296
+ * Ruby power
297
+ * string operations
298
+ * encapsulation (object oriented)
299
+
300
+ = Firmware programming with mruby/c
301
+ # enscript ruby
302
+ # ex) string operations
303
+ #
304
+ # concatenation
305
+ parameter = 'name=' + name + '&age=' + age.to_s
306
+ # => name=hasumikin&age=43
307
+
308
+ # substitution
309
+ 'what_a_wonderful_world'.tr('_', '-')
310
+ # => what-a-wonderful-world
311
+
312
+ = Firmware programming with mruby/c
313
+ # enscript ruby
314
+ # ex) encapsulation (object oriented)
315
+ class LoggerBase
316
+ def info(line)
317
+ write(:info, line)
318
+ ennd
319
+ class LoggerBLE < LoggerBase
320
+ def initialize(*args)
321
+ @ble = BluetoothLowEnergy.bind_characteristic(args[0])
322
+ end
323
+ def write(log_level, line)
324
+ @ble.notify(line)
325
+ ennd
326
+ class LoggerFlashROM < LoggerBase
327
+ def initialize(*args)
328
+ @rom_io = RomFileStream.open('/log.txt', 'w')
329
+ end
330
+ def write(log_level, line)
331
+ @rom_io.write_ln(line)
332
+ ennd
333
+ logger = LoggerBLE.new(:log) /* or */ logger = LoggerFlashROM.new
334
+ logger.info('this is log')
335
+
336
+ = Firmware programming with mruby/c
337
+ * you must write both mruby and C
338
+ * C for microcontroller I/O
339
+ * mruby for business logic
340
+ * mruby/c seems like a thin wrapper for C
341
+ * two sides of the same coin:
342
+ * you have to write C that directly communicate with peripherals
343
+ * you can fall back to C anytime you get stuck
344
+
345
+ = Find more information on
346
+ * rubykaigi.org/2018/presentations/hasumon.html
347
+ * shimane.monstar-lab.com/hasumin
348
+ * follow twitter.com/mrubyc_jp
349
+ * ITOC and I are planning to make workshops of mruby/c
350
+
351
+ = Conclusion
352
+
353
+ = Conclusion
354
+ * Thank Ruby
355
+ * from pre-prototyping to production
356
+
357
+ = Conclusion
358
+ * Thank Ruby
359
+ * from pre-prototyping to production
360
+ * Thank Rails
361
+ * full of really important things
362
+
363
+ = Conclusion
364
+ * Thank Ruby
365
+ * from pre-prototyping to production
366
+ * Thank Rails
367
+ * full of really important things
368
+ * Thank Sake
369
+
370
+ = ((' '))
371
+ \n\n\n\n
372
+ (('tag:center'))(('tag:x-large:Thank you all!'))
@@ -0,0 +1,24 @@
1
+ = Making IoT device with Ruby
2
+
3
+ I made an IoT system to manage the brewing temperature for Asahi Shuzo (Izumo city) with Ruby. I will talk about the value of Ruby on-the-spot of IoT, and about the way how a very ordinary Rubyist got to be able to handle microcontroller.
4
+
5
+ == 作者向け
6
+
7
+ === 表示
8
+
9
+ rake
10
+
11
+ === 公開
12
+
13
+ rake publish
14
+
15
+ == 閲覧者向け
16
+
17
+ === インストール
18
+
19
+ gem install rabbit-slide-hasumikin-making-iot-device-with-ruby
20
+
21
+ === 表示
22
+
23
+ rabbit rabbit-slide-hasumikin-making-iot-device-with-ruby.gem
24
+
@@ -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("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
Binary file
Binary file
Binary file
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: making-iot-device-with-ruby
3
+ base_name: making-iot-device-with-ruby
4
+ tags:
5
+ - mrubyc
6
+ presentation_date:
7
+ version: 1.0.0
8
+ licenses: []
9
+ slideshare_id:
10
+ speaker_deck_id:
11
+ ustream_id:
12
+ vimeo_id:
13
+ youtube_id:
14
+ author:
15
+ markup_language: :rd
16
+ name: HASUMI Hitoshi
17
+ email: hasumikin@gmail.com
18
+ rubygems_user: hasumikin
19
+ slideshare_user:
20
+ speaker_deck_user:
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,85 @@
1
+
2
+ # puts font_families.sort
3
+ @xx_large_font_size = screen_size(10 * Pango::SCALE)
4
+ @x_large_font_size = screen_size(6.5 * Pango::SCALE)
5
+ @large_font_size = screen_size(5 * Pango::SCALE)
6
+ @normal_font_size = screen_size(4 * Pango::SCALE)
7
+ @small_font_size = screen_size(3.5 * Pango::SCALE)
8
+ @x_small_font_size = screen_size(3 * Pango::SCALE)
9
+ @xx_small_font_size = screen_size(2.5 * Pango::SCALE)
10
+
11
+ @default_headline_line_color = '#ffffff'
12
+ @font_family = find_font_family('Rockwell')
13
+ @monospace_font_family = 'Ricty Discord'
14
+ @preformatted_fill_color = '#ffffff'
15
+ # @preformatted_centering = false
16
+ @space = screen_y(1)
17
+
18
+ # うさぎの代わり
19
+ #@image_slide_number_image = "mo.png"
20
+
21
+
22
+ include_theme('default')
23
+
24
+
25
+ match(Slide, HeadLine) do |heads|
26
+ heads.prop_set("size", @large_font_size)
27
+ heads.prop_set("weight", "normal")
28
+ heads.margin_left = @space * 2
29
+ set_font_family(heads)
30
+ end
31
+
32
+ #@title_slide_background_image = 'background-487.png'
33
+ #include_theme("title-slide-background-image")
34
+ #
35
+ #@slide_background_image = 'keynote-base2-482.png'
36
+ #include_theme("slide-background-image")
37
+ #
38
+ @title_logo_image = 'logo_10th@2x.png'
39
+ include_theme('title-logo')
40
+
41
+ @item_image = 'mark.png'
42
+
43
+ include_theme("default-item-mark")
44
+
45
+ add_image_path("rabbit-images")
46
+
47
+ slide_body = [Slide, Body]
48
+ item_list_item = [ItemList, ItemListItem]
49
+
50
+ match(*(slide_body + (item_list_item * 1))) do |items|
51
+ name = "item1"
52
+ items.delete_pre_draw_proc_by_name(name)
53
+ items.delete_post_draw_proc_by_name(name)
54
+ draw_image_mark(items, @item_image, name)
55
+ end
56
+
57
+ match(*(slide_body + (item_list_item * 2))) do |items|
58
+ name = "item2"
59
+ items.delete_pre_draw_proc_by_name(name)
60
+ items.delete_post_draw_proc_by_name(name)
61
+ draw_image_mark(items, @item_image, name)
62
+ end
63
+
64
+ match(*(slide_body + (item_list_item * 3))) do |items|
65
+ name = "item3"
66
+ items.delete_pre_draw_proc_by_name(name)
67
+ items.delete_post_draw_proc_by_name(name)
68
+ draw_image_mark(items, @item_image, name)
69
+ end
70
+
71
+ enum_list_item = [EnumList, EnumListItem]
72
+
73
+ match(*(slide_body + enum_list_item + item_list_item)) do |items|
74
+ name = "enum-item1"
75
+ items.delete_pre_draw_proc_by_name(name)
76
+ items.delete_post_draw_proc_by_name(name)
77
+ draw_image_mark(items, @item_image, name)
78
+ end
79
+
80
+ match(*(slide_body + enum_list_item + (item_list_item * 2))) do |items|
81
+ name = "enum-item2"
82
+ items.delete_pre_draw_proc_by_name(name)
83
+ items.delete_post_draw_proc_by_name(name)
84
+ draw_image_mark(items, @item_image, name)
85
+ end
Binary file
Binary file
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-hasumikin-making-iot-device-with-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - HASUMI Hitoshi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-11-02 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: I made an IoT system to manage the brewing temperature for Asahi Shuzo
28
+ (Izumo city) with Ruby. I will talk about the value of Ruby on-the-spot of IoT,
29
+ and about the way how a very ordinary Rubyist got to be able to handle microcontroller.
30
+ email:
31
+ - hasumikin@gmail.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - ".rabbit"
37
+ - Making-IoT-device-with-Ruby.rab
38
+ - Making-IoT-device-with-Ruby.rab.pdf
39
+ - README.rd
40
+ - Rakefile
41
+ - castle.jpg
42
+ - chad.jpg
43
+ - collage02.jpg
44
+ - config.yaml
45
+ - device04.jpg
46
+ - hasumi.jpg
47
+ - juji-asahi.jpg
48
+ - kamosu.png
49
+ - kishima-san.png
50
+ - logo_10th@2x.png
51
+ - mark.png
52
+ - monstar-lab_shimane.jpg
53
+ - mrubycKaigi.jpg
54
+ - nigouki.jpg
55
+ - pdf/making-iot-device-with-ruby-making-iot-device-with-ruby.pdf
56
+ - poland.gif
57
+ - psoc5lp_chip.jpg
58
+ - raspberrypi.jpg
59
+ - shinjiko.jpg
60
+ - theme.rb
61
+ - tranquilo.jpg
62
+ - unsoldered-2.png
63
+ - 松江城_Matsue.rb.jpg
64
+ homepage: http://slide.rabbit-shocker.org/authors/hasumikin/making-iot-device-with-ruby/
65
+ licenses: []
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.7.6
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Making IoT device with Ruby
87
+ test_files: []