rabbit-slide-hasumikin-making-iot-device-with-ruby 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []