rabbit-slide-hasumikin-RubyKaigiTakeout2020 2020.9.4.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: a760cd5b15c040f901585fbb5387ea6ea3abfbb9e645be9537723bf638603068
4
+ data.tar.gz: 831e6b5d33373a05ba866c751c7ce5ed2da46ea568acd402941dfb8940586742
5
+ SHA512:
6
+ metadata.gz: 5d461bff180b8a1819c5a12b352a33eab76db105cece3fd4fae462bdfa57ccdd8128faf93b45b24e1e8c3ce3b0e428af2001ead2ca22eec98d9b32085a66c02b
7
+ data.tar.gz: 6618acc5149555b1009df32e6dde19afed7f1b46581a5d0c3ba609282f5ca0746a011de9b9e8d072fed90302d37a3f9d0ef56a36f475e84e3dced7c9dcdd3ede
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ mruby-machine--An-Operating-System-for-Microcontroller.rab
@@ -0,0 +1,24 @@
1
+ = mruby machine - An Operating System for Microcontroller
2
+
3
+ Presentation slide for RubyKaigi Takeout 2020
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-RubyKaigiTakeout2020
20
+
21
+ === Show
22
+
23
+ rabbit rabbit-slide-hasumikin-RubyKaigiTakeout2020.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("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
@@ -0,0 +1,24 @@
1
+ ---
2
+ id: RubyKaigiTakeout2020
3
+ base_name: mruby-machine--An-Operating-System-for-Microcontroller
4
+ tags:
5
+ - mruby
6
+ - compiler
7
+ - microcontroller
8
+ presentation_date: '2020-09-04'
9
+ presentation_start_time:
10
+ presentation_end_time:
11
+ version: 2020.9.4.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
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 530.27 520.58"><defs><style>.cls-1{fill:url(#名称未設定グラデーション_25);}.cls-2{fill:#e9e9e9;}.cls-3{fill:url(#名称未設定グラデーション_25-2);}.cls-4{fill:#f3d35b;}.cls-5{fill:url(#名称未設定グラデーション_36);}.cls-6{fill:url(#名称未設定グラデーション_13);}.cls-7,.cls-9{fill:#8b0016;}.cls-7{stroke:#f8f8f8;stroke-width:1.79px;}.cls-10,.cls-7{stroke-linecap:round;stroke-linejoin:round;}.cls-8{fill:#fff;}.cls-10{fill:none;stroke:#e5bd3e;stroke-width:8.19px;}.cls-11{fill:#544347;}.cls-12{fill:url(#名称未設定グラデーション_34);}</style><linearGradient id="名称未設定グラデーション_25" x1="127.14" y1="8.22" x2="285.12" y2="8.22" gradientTransform="matrix(0.98, 0.1, -0.1, 0.99, 180, 133.89)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#bfbfbf"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient id="名称未設定グラデーション_25-2" x1="-102.4" y1="187.64" x2="165.24" y2="187.64" gradientTransform="translate(177.35 134.61) rotate(5.86)" xlink:href="#名称未設定グラデーション_25"/><linearGradient id="名称未設定グラデーション_36" x1="-69.61" y1="146.39" x2="-69.61" y2="24.84" gradientTransform="matrix(0.99, 0.1, -0.1, 0.99, 177.37, 134.57)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#dbdbdb"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient id="名称未設定グラデーション_13" x1="-102.4" y1="242.98" x2="82.55" y2="242.98" gradientTransform="translate(177.35 134.61) rotate(5.86)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e6e6e6"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient id="名称未設定グラデーション_34" x1="158.13" y1="146.39" x2="158.13" y2="-44.79" gradientTransform="matrix(0.99, 0.1, -0.1, 0.99, 177.37, 134.57)" xlink:href="#名称未設定グラデーション_13"/></defs><title>アセット 18</title><g id="レイヤー_2" data-name="レイヤー 2"><g id="レイヤー_1-2" data-name="レイヤー 1"><polygon class="cls-1" points="404.24 100.15 446.4 112.54 456.02 200.53 440.74 234.22 301.01 184.05 311.56 156.63 404.24 100.15"/><polygon class="cls-2" points="111.73 61.65 181.84 47.8 289.7 124.98 301.05 184.66 64.59 230.06 50.28 166.02 111.73 61.65"/><polygon class="cls-3" points="64.63 230.04 117.59 468.36 313.99 421.97 301.05 184.66 64.63 230.04"/><ellipse class="cls-4" cx="237.56" cy="238.28" rx="148.6" ry="46.2" transform="translate(-15.3 16.3) rotate(-3.81)"/><polygon class="cls-5" points="0 141.32 6.46 172.15 64.67 230.03 198.73 283.93 147.37 225.62 42.37 155.59 0 141.32"/><polygon class="cls-6" points="64.63 230.04 117.59 468.36 220.74 520.58 198.74 283.94 64.63 230.04"/><path class="cls-7" d="M167.79,372l11-20.34a5.57,5.57,0,0,0-1.73-.91l-25-6.89,15.31,28.05Z"/><polygon class="cls-7" points="167.45 371.87 152.14 343.81 130.02 361.52 167.45 371.87"/><path class="cls-7" d="M130,361.52l22.12-17.7L127.38,337a4.58,4.58,0,0,0-1.74-.1l4,24.56Z"/><path class="cls-7" d="M167.79,372l-.34-.09L130,361.52l-.34-.09.18,1.12,9,54.86c.8,1.62,2.42,2,3.63.95l.23-.21,24.54-45.25Z"/><path class="cls-7" d="M178.83,351.62a8.6,8.6,0,0,1,3.08,4.09l6,19.15a6.21,6.21,0,0,1-.41,2.6L167.77,372Z"/><path class="cls-7" d="M187.52,377.46a1.54,1.54,0,0,1-.16.38l-44.73,40.6s0,0,0,0L167.77,372Z"/><path class="cls-7" d="M125.64,336.87a6.13,6.13,0,0,0-4,2.12l-11.26,14.38a6.3,6.3,0,0,0-.4,2.6l19.75,5.46Z"/><path class="cls-7" d="M109.93,356a2.23,2.23,0,0,0,0,.42l28.89,61,0,.06-9.21-56Z"/><polygon class="cls-7" points="167.79 371.96 167.29 372.9 142.75 418.15 167.79 371.96 167.79 371.96"/><polygon class="cls-7" points="167.79 371.96 178.82 351.62 167.79 371.96 167.79 371.96"/><polygon class="cls-7" points="129.68 361.43 129.68 361.43 138.89 417.41 129.86 362.55 129.68 361.43"/><polygon class="cls-7" points="129.68 361.43 125.64 336.87 129.68 361.43 129.68 361.43"/><polygon class="cls-8" points="198.73 283.93 220.64 520.54 412.02 474.68 440.88 234.28 198.73 283.93"/><path class="cls-9" d="M271.38,316.24c.76,4.28-2.86,7.61-6.19,8.87,2.91.68,3.84,7.64,7,7.08a2.73,2.73,0,0,0,1.79-1.3c.22-.31.34-.45.57-.49a.4.4,0,0,1,.48.34,3.94,3.94,0,0,1-.43,1.71,6.62,6.62,0,0,1-4.88,4.14c-6.71,1.21-4.84-10.64-8.25-10-.17,2.7-.88,8.18-.43,10.7.11.63-.08.82-.64.92-1.11.21-3.33.84-3.92.95s-.75-.1-.86-.74c-.38-2.14,1.15-15,1.55-19.24a6.26,6.26,0,0,1,2-4.54c-4.8,1.18-7.67,5.46-7.22,8,.21,1.2.87,1.67,1.83,1.49a7.32,7.32,0,0,0,1.21-.49c.26,0,.4.08.45.35.18,1.05-1.4,4.2-4.32,4.73a3.83,3.83,0,0,1-4.7-3.41c-1.05-5.9,5.92-11.42,15.41-13.14C266.77,311.22,270.67,312.29,271.38,316.24Zm-5.22.13c-.34-1.92-1.43-2.85-2.87-2.59a7.83,7.83,0,0,0-1.1,3.54c-.38,3-.69,7.26-.66,7.25C265.16,323.45,266.71,319.45,266.16,316.37Z"/><path class="cls-9" d="M283,331.82a8.69,8.69,0,0,1-5.19,3.3,2.83,2.83,0,0,1-3.44-2.36c-.41-2.33.36-5.3.12-6.65-.11-.64-.39-.67-.47-1.16-.15-.82,1.75-1.75,3.9-2.14.82-.15,1.32.11,1.43.75.31,1.73-.61,4.49-.12,7.23a.87.87,0,0,0,1.05.78,2.83,2.83,0,0,0,1.95-1.94,10.8,10.8,0,0,0,.45-5c-.11-.64-.39-.67-.47-1.16-.15-.83,1.75-1.75,3.9-2.14.82-.15,1.32.11,1.43.75.27,1.46-.52,4.59-.16,6.58.17,1,.79,1.45,1.46,1.33s.87-.47,1.26-1.05c.22-.31.35-.45.57-.49a.54.54,0,0,1,.61.44,2.08,2.08,0,0,1-.38,1.3,6.05,6.05,0,0,1-4.23,3.33C283.72,334.05,283,331.82,283,331.82Z"/><path class="cls-9" d="M294.55,321.35a5.31,5.31,0,0,1,3.25-2.14c2.34-.42,4.08.35,4.58,3.13.64,3.64-1.13,8.54-6.28,9.47-3.78.68-5.84-1-6.34-3.85-.65-3.61,1.16-8.32.29-13.2-.22-1.24-1-1.73-1.74-1.59-.37.07-.58,0-.63-.35-.14-.78,1.6-2.38,3.71-2.76s3.34.48,3.67,2.36S294.58,319.56,294.55,321.35Zm1.36,8.71c1.81-.33,2-5.48,1.72-7.09-.17-.94-.76-1.26-1.43-1.14s-1.26.65-1.44,2a19.5,19.5,0,0,0-.12,5.1C294.77,329.69,295.2,330.19,295.91,330.06Z"/><path class="cls-9" d="M303.91,319.54c-.15-.82,1.75-1.75,3.86-2.13.86-.15,1.32.11,1.44.75.29,1.65-.51,4.67-.1,7,.12.64.58,1.1,1.17,1a3.3,3.3,0,0,0,2.06-2,10.47,10.47,0,0,0,.23-4.92c-.11-.64-.39-.67-.47-1.16-.15-.82,1.75-1.75,3.86-2.13.86-.16,1.32.11,1.44.75.16.94-.17,1.42-.11,7.77.06,5.92.35,14.44-6.36,15.65-2.71.49-5.32-.67-5.79-3.3a4.13,4.13,0,0,1,2.47-4.82c.26-.05.43,0,.47.26.06.38-.24.63-.09,1.45.19,1.09,1.17,1.61,2.43,1.38,2.7-.48,2.91-4.9,2.81-8.68a8,8,0,0,1-5.23,3.27,3,3,0,0,1-3.7-2.32c-.45-2.51.32-5.29.08-6.64C304.27,320.06,304,320,303.91,319.54Z"/><path class="cls-9" d="M316.25,319.89c-2.22.4-4.18-.95-4.65-3.58-1.13-6.39,4.87-11.78,10.21-12.74,3.55-.64,5.95.55,6.5,3.63a25.2,25.2,0,0,1-.11,6.07c3.1-2.35,2.68-10.72,6.24-11.37a9.12,9.12,0,0,1,4,.1c.45.15.63.27.68.57s-.1.49-.44.55a3.56,3.56,0,0,0-2.19,1.67c-1.77,2.73-2.53,7.48-6.16,9.41a4.38,4.38,0,0,1,3.36,2.77c1.22,2.57,2.09,5.75,4,5.4a2.88,2.88,0,0,0,1.65-1c.25-.28.38-.42.61-.46a.47.47,0,0,1,.56.4,3.43,3.43,0,0,1-.58,1.85c-.6,1.2-1.81,3.39-4.18,3.82-4,.73-5.29-3.07-6-6.94-.42-2.33-.77-4.09-1.86-4a47.72,47.72,0,0,0-.25,11.52c.11.64-.12.84-.64.93-1.15.21-3.33.84-3.92.95s-.78-.1-.9-.73c-.56-3.2,2-15.88,1-21.55a1.45,1.45,0,0,0-1.91-1.28c-2.49.45-5,5-4.43,8C316.9,313.84,318.26,319.52,316.25,319.89Z"/><path class="cls-9" d="M351.58,323.89a3,3,0,0,1-3.21-1.47,7.36,7.36,0,0,1-4.31,2.83c-2.19.4-4.24-.78-4.75-3.67-.66-3.72.89-7.92,6.19-8.88,2-.35,2.64.26,3.24.16s2.09-1.12,2.95-1.27a.49.49,0,0,1,.65.46c.16.9-.61,4.06-.09,7,.17,1,.87,1.44,1.53,1.32s.87-.47,1.27-1.05c.21-.31.34-.45.56-.49a.55.55,0,0,1,.62.43,2.09,2.09,0,0,1-.38,1.31A6.14,6.14,0,0,1,351.58,323.89Zm-5.46-9.59c-2.11.38-2.33,4.49-2,6.56.18,1,.76,1.68,1.58,1.53s1.33-.9,1.61-2.11a16.19,16.19,0,0,0,.09-5.1A1,1,0,0,0,346.12,314.3Z"/><path class="cls-9" d="M355.21,320c-.42-2.4.36-5.07.12-6.42-.11-.64-.34-.67-.43-1.16-.15-.83,1.72-1.75,3.86-2.13.82-.15,1.33.1,1.44.74.27,1.51-.5,4.09-.06,6.57.18,1,.83,1.44,1.5,1.31s.87-.46,1.27-1c.21-.31.34-.45.56-.49a.54.54,0,0,1,.61.43,2,2,0,0,1-.38,1.31,6.11,6.11,0,0,1-4.26,3.33C357,322.92,355.52,321.75,355.21,320Zm2.11-16.78a1.94,1.94,0,0,1,2.43,1.62,3.26,3.26,0,0,1-2.19,3.61,2.08,2.08,0,0,1-2.44-1.65A3.21,3.21,0,0,1,357.32,303.24Z"/><path class="cls-9" d="M367.78,321a4.11,4.11,0,0,1-5-3.64c-.66-3.68.88-7.92,6.18-8.87,2-.36,2.8.23,3.39.12.78-.14,1.84-1.07,2.88-1.26.37-.06.58.05.65.47a76.11,76.11,0,0,0-.26,8.22c.14,5.91.47,14.42-6.21,15.62-2.7.49-5.32-.66-5.78-3.29a4.14,4.14,0,0,1,2.46-4.83c.26-.05.43,0,.47.27s-.23.62-.08,1.45c.19,1.09,1.16,1.61,2.42,1.38,3.19-.58,2.73-7.24,2.62-8.07A5.75,5.75,0,0,1,367.78,321Zm1.67-11c-1.89.34-2.16,4.62-1.82,6.53.17,1,.8,1.68,1.61,1.53s1.38-.86,1.62-2.11a20.72,20.72,0,0,0,.05-5.09C370.79,310.15,370.27,309.81,369.45,310Z"/><path class="cls-9" d="M384,315.12a1.45,1.45,0,0,0,.9-.55c.22-.23.28-.36.5-.4s.4.12.44.35a1.67,1.67,0,0,1-.28,1A4.92,4.92,0,0,1,382,318.4c-2.44.44-3.77-.75-4.07-2.48-.43-2.4.36-5.07.12-6.42-.12-.64-.35-.67-.44-1.16-.15-.83,1.72-1.74,3.87-2.13.81-.15,1.32.11,1.43.75.27,1.5-.43,4.45,0,6.93C383,314.83,383.49,315.22,384,315.12Zm-4-16a1.93,1.93,0,0,1,2.43,1.62,3.24,3.24,0,0,1-2.19,3.61,2.07,2.07,0,0,1-2.43-1.65A3.21,3.21,0,0,1,380,299.14Z"/><path class="cls-9" d="M258,360.05a9.23,9.23,0,0,1-6.37,5.2c-5,5.09,8.49,43.81-15.43,48.22-7.38,1.36-13.72-2.36-14.91-8.91-1.36-7.47,4.25-12.13,9.44-13.09,2-.36,2.61-.17,2.73.45s-.22,1-.79,1.24a5.51,5.51,0,0,0-2.74,5.47,4.43,4.43,0,0,0,5.4,3.65c10.08-1.86,5.34-22,7.23-31.74a8.57,8.57,0,0,1,2.63-4.81,22.27,22.27,0,0,0-8.63,0c-4.29.79-6.8,4.09-6.29,6.91.41,2.21,1.89,3.12,3.77,2.77,1.2-.22,1.59-1.08,2.19-1.19a.74.74,0,0,1,.91.7c.51,2.82-2.22,8.36-7.48,9.33A8.58,8.58,0,0,1,219.5,377c-1.49-8.23,5.46-14.48,14-16s13.09-.68,16.93-1.39c5-.93,6.18-3.66,7.23-3.85.53-.1.87.07,1,.61A7.74,7.74,0,0,1,258,360.05Z"/><path class="cls-9" d="M279.47,405.1a6.16,6.16,0,0,1-6.52-3s-3.26,4.77-8.75,5.79c-4.44.81-8.6-1.57-9.66-7.44-1.37-7.55,1.75-16.08,12.5-18.06,4-.74,5.38.5,6.59.28s4.25-2.28,6-2.6a1,1,0,0,1,1.33.94c.33,1.83-1.22,8.26-.14,14.21.36,2,1.77,2.9,3.12,2.65s1.77-1,2.57-2.13c.43-.63.69-.91,1.14-1a1.11,1.11,0,0,1,1.25.88,4.17,4.17,0,0,1-.77,2.66A12.46,12.46,0,0,1,279.47,405.1Zm-11.14-19.45c-4.29.79-4.72,9.14-4,13.33.36,2,1.55,3.42,3.21,3.11,1.43-.26,2.7-1.83,3.26-4.3a32.8,32.8,0,0,0,.15-10.35A2,2,0,0,0,268.33,385.65Z"/><path class="cls-9" d="M312.89,390.91c.43-.63.69-.92,1.14-1a1.09,1.09,0,0,1,1.25.87,4.21,4.21,0,0,1-.76,2.66c-1.27,2.44-4,5.93-8.27,6.73-6.54,1.2-8.83-8.85-9.58-8.72,0,0-.59,7.05-.33,8.49s-.16,1.69-1.29,1.9c-2.26.41-5.2,1.35-6.4,1.57-.9.17-1.5-.12-1.73-1.41-1.21-6.64,2.51-23.86.45-35.22-.45-2.52-1.95-3.5-3.53-3.21-.68.12-1.19-.1-1.3-.71-.29-1.6,3.24-4.85,7.53-5.64,4-.74,6.78.95,7.47,4.77.87,4.8-1.44,22.48-.89,25.53,2.26-.42,4-3.43,3.71-5.26-.15-.83-.7-.89-.84-1.65-.29-1.6,3.93-4.9,7.39-5.54,1.51-.28,2.29.21,2.5,1.35.58,3.2-1.91,7.91-6.91,12.07,1.31,2.51,4.44,5.17,7.6,4.59A4.11,4.11,0,0,0,312.89,390.91Z"/><path class="cls-9" d="M337.31,385.38a3,3,0,0,1,1.41-1.21.89.89,0,0,1,1.07.75c.14.77-.13,1.44-1,2.87-2,3.13-5,7.54-12.31,8.89-7.07,1.3-12.61-1-13.94-8.3s3.32-15.11,13.33-17c5.11-.94,7.86.92,8.45,4.2.79,4.34-3.49,9.46-10.9,11.46.48,2.67,2.89,4.35,6.5,3.69C333.73,390.06,335.9,387.06,337.31,385.38Zm-8.6-9.28a1.61,1.61,0,0,0-2.13-1.43c-2.25.42-4.59,4.71-3.77,9.21C327,382.25,329,377.92,328.71,376.1Z"/><path class="cls-9" d="M361.88,373.84c1.55,8.54-2.47,16.84-11.72,18.55-6.62,1.22-11.61-1.88-12.72-8-1.34-7.39,3.11-15.86,13.42-17.76C356.43,365.63,360.93,368.58,361.88,373.84Zm-6.78,2.9c-2.5-.48-3.33-1.19-3.58-2.57-.34-1.9.67-2.72.59-3.18a.59.59,0,0,0-.79-.48,4.17,4.17,0,0,0-1.91,1.45c-1.6,1.87-2.9,5-2.11,9.37.62,3.43,3,5.28,5.91,4.74s4.4-4,3.92-6.71A3,3,0,0,0,355.1,376.74Z"/><path class="cls-9" d="M382.28,381.35a17.69,17.69,0,0,1-10.51,6.74,5.76,5.76,0,0,1-7-4.78c-.86-4.72.69-10.76.19-13.5-.23-1.3-.78-1.35-1-2.34-.31-1.68,3.55-3.57,7.91-4.38,1.65-.3,2.68.22,2.92,1.51.63,3.51-1.23,9.13-.22,14.69a1.8,1.8,0,0,0,2.15,1.58,5.78,5.78,0,0,0,3.95-4,22.18,22.18,0,0,0,.88-10.17c-.24-1.29-.79-1.35-1-2.34-.3-1.68,3.55-3.57,7.91-4.37,1.66-.31,2.69.21,2.92,1.51.54,3-1,9.33-.3,13.37.36,2,1.62,2.93,3,2.68s1.77-1,2.56-2.13c.44-.63.69-.91,1.15-1a1.1,1.1,0,0,1,1.24.88,4.23,4.23,0,0,1-.76,2.66,12.36,12.36,0,0,1-8.57,6.78C383.8,385.87,382.28,381.35,382.28,381.35Z"/><path class="cls-9" d="M407,363.09a39.59,39.59,0,0,0,0,8.91c.41,2.28,1.69,2.91,3.5,2.58,1.5-.28,2.74-2,3.77-3.22.44-.55.76-.92,1.21-1a1,1,0,0,1,1.15.74,2.69,2.69,0,0,1-.33,1.63c-1.48,2.95-5.66,8.21-10.32,9.08-5.42,1-8.35-1.86-9.08-5.9-.88-4.87.76-9.12.07-12.93-.18-1-2.1,0-2.35-1.38-.14-.76.05-2.29.88-2.44,4-.74,6.95-5.38,8.33-8.94.53-1.36,1.05-1.93,1.72-2a1.16,1.16,0,0,1,1.43,1c.3,1.68-.18,5,.05,6.3.18,1,.58,1.47,2.83,1.05.61-.11,1.1,0,1.21.64.28,1.53-.36,2.75-1.26,2.92C407.87,360.4,407.15,361.16,407,363.09Z"/><path class="cls-9" d="M281.34,454.94c-1,.16-2.17-1.83-2.34-2.84-.2-1.25.41-1.82,1.29-3.06,4.13-5.66,8.95-12.28,8.19-17-.37-2.27-1.57-3.06-3.62-2.73a3,3,0,0,0-2.41,3.34c.21,1.29,1.54,1.12,1.83,2.92a2.38,2.38,0,0,1-1.9,2.69c-2,.32-3.47-.9-3.85-3.21-.62-3.83,2.5-7.67,7.33-8.46s8.94.85,9.7,5.56c.93,5.73-6.92,11.81-9.2,16a10.47,10.47,0,0,1,1.17-.29c1.55-.26,3.06-.22,4.33-.43,2.05-.34,2.52-.89,3.29-2.2.33-.58.52-.85.84-.9.5-.08.74.21.82.72.32,1.94-1.13,7.77-5.73,8.53-3.1.51-4-.62-6.95-.14C283,453.61,282.34,454.77,281.34,454.94Z"/><path class="cls-9" d="M316.43,431c1.35,8.31-2,19-9.77,20.24-4.28.71-7.9-1.68-8.93-8.06-1.66-10.2,3.07-19.14,9.77-20.24C311.74,422.24,315.38,424.48,316.43,431Zm-11.77,14.26c.31,1.9,1.38,3.33,2.75,3.11,3.69-.61,3.39-13.13,2.32-19.73-.27-1.71-.83-3.42-2.29-3.18C304.07,426,302.84,434,304.66,445.26Z"/><path class="cls-9" d="M320.76,448.44c-1,.17-2.17-1.82-2.33-2.84-.21-1.24.4-1.82,1.28-3.05,4.14-5.66,9-12.29,8.19-17-.37-2.26-1.57-3.06-3.62-2.72a3,3,0,0,0-2.41,3.33c.21,1.3,1.54,1.13,1.83,2.93a2.36,2.36,0,0,1-1.9,2.68c-2,.32-3.47-.9-3.84-3.21-.63-3.83,2.5-7.66,7.33-8.46s8.93.85,9.7,5.56c.92,5.73-6.93,11.81-9.21,16,.41-.11.81-.23,1.18-.29,1.55-.25,3.05-.22,4.32-.43,2.06-.33,2.53-.88,3.3-2.2.32-.57.52-.84.83-.89.51-.09.74.21.82.71.32,1.95-1.12,7.78-5.73,8.54-3.09.51-4-.63-6.94-.14C322.46,447.12,321.76,448.28,320.76,448.44Z"/><path class="cls-9" d="M355.85,424.5c1.35,8.31-2,19-9.77,20.25-4.28.7-7.9-1.69-8.93-8.06-1.66-10.21,3.07-19.14,9.77-20.25C351.16,415.74,354.8,418,355.85,424.5Zm-11.77,14.27c.31,1.89,1.39,3.33,2.75,3.1,3.7-.61,3.4-13.12,2.32-19.73-.27-1.71-.83-3.42-2.29-3.17C343.49,419.52,342.26,427.55,344.08,438.77Z"/><path class="cls-10" d="M205.83,141.37s33.28,24.45,33,38.37"/><path class="cls-10" d="M243.09,128.52c10,5.84,30,30.83,32.06,37"/><path class="cls-10" d="M223.49,135.9c11.24,2.46,30.86,28.68,32.27,34.61"/><path class="cls-11" d="M517.18,48.63S153.56,191.36,148.39,193.76s-11.09,10.58-10.26,12.72,14,3,22.86.05S524,66.28,524,66.28,541.89,50.61,517.18,48.63Z"/><path class="cls-11" d="M492.12,0S141.51,168.21,136.56,171s-10.18,11.34-9.17,13.41,14.18,2,22.8-1.57S500.43,17.1,500.43,17.1,516.92.21,492.12,0Z"/><path class="cls-10" d="M200.94,135.88c-8.49,4.9-18,83.65-16.91,107"/><path class="cls-10" d="M216.79,128.51c-8.17,4.41-18.87,91.64-17.81,115"/><path class="cls-10" d="M234.73,121.37c-9.43,4-20.3,98.86-19.24,122.19"/><polygon class="cls-12" points="198.73 283.93 205.22 229.13 312.36 125.11 389.03 111.3 454.09 178.16 440.88 234.28 198.73 283.93"/></g></g></svg>
@@ -0,0 +1,581 @@
1
+ = mruby machine
2
+
3
+ : subtitle
4
+ An Operating System for Microcontroller
5
+ : author
6
+ HASUMI Hitoshi @hasumikin
7
+ : date
8
+ September 4-5, 2020
9
+ : allotted-time
10
+ 24m
11
+ : theme
12
+ theme
13
+
14
+ = Me
15
+ * HASUMI Hitoshi(羽角 均)\n@hasumikin(ハスミキン)
16
+ * From Ruby City Matsue,\na holy place of 🍶(熱燗)
17
+ * Developer on Rails\n(レールに乗った開発者)
18
+ * Coffee ☕\nCurry 🍛\nSoba (NoEmojiError)
19
+ # image
20
+ # src = images/hasumi.jpg
21
+ # align = right
22
+ # relative-height = 80
23
+ # relative_margin_left = 0
24
+
25
+ = Me
26
+ # image
27
+ # src = images/monstarlab_webpage.png
28
+ # relative_width = 104
29
+ # relative_margin_top = -2
30
+ == prop
31
+ : hide-title
32
+ true
33
+
34
+ = hide-title
35
+ (('tag:center'))
36
+ \n\n
37
+ (('tag:normal:Chapter 1'))
38
+ \n\n\n\n\n\n
39
+ (('tag:xx-large:Background'))
40
+ == prop
41
+ : hide-title
42
+ true
43
+ : background-image
44
+ images/title-background.png
45
+ : background-image-relative-width
46
+ 100
47
+ : background-image-relative-height
48
+ 100
49
+
50
+ = Motivation 😲 MicroPython
51
+ # blockquote
52
+ # title = https://github.com/micropython/micropython/wiki/FAQ
53
+ Generally, we keep minimal configuration of MicroPython under ((*80K*)) of ARM Thumb2 code (which includes ((*compiler*)) and ((*interactive prompt*)), ...). That means a Cortex-M microcontroller with ((*128KB*)) of ((*flash*)) can host a minimal version together with some hardware drivers.
54
+
55
+ = Motivation 😐 MicroPython
56
+ # blockquote
57
+ # title = https://github.com/micropython/micropython/wiki/FAQ
58
+ Regarding ((*RAM*)) usage, (...) ((*8KB*)) is minimal amount to run simple scripts. As Python is interpreted high-level language, the more memory you have, the more capable applications you can run. The reference MicroPython board, PyBoard, has ((*128KB*)) of RAM.
59
+
60
+ = Motivation 😕 mruby and mruby/c
61
+ * Flashing mruby application into 128KB ROM and running it on 128KB RAM are difficult
62
+ * mruby/c runs on 64KB RAM but it doesn't have mruby compiler
63
+ * You have to compile Ruby script into VM code before embedding
64
+
65
+ = Motivation 😖
66
+ (('tag:center'))\n
67
+ (('tag:xx-large:MicroPython: "Overwhelming, we are!"'))
68
+ \n\n
69
+ 「圧倒的じゃないか、我が軍は」
70
+
71
+ = Motivation 🤔
72
+ (('tag:center'))
73
+ \n\n\n
74
+ (('tag:x-large:Would it be great if we have a smaller mruby compiler?'))
75
+
76
+ = Target Microcontroller
77
+ * PSoC5LP: Reference board of mruby/c
78
+ * Arm Cortex-M3 32bit processor
79
+ * 64KB RAM
80
+ * 256KB ROM
81
+ * It will be comparable to MicroPython if Ruby runs on PSoC5LP with compiler
82
+
83
+ = hide-title
84
+ (('tag:center'))
85
+ \n\n\n\n
86
+ Demo
87
+ == prop
88
+ : hide-title
89
+ true
90
+
91
+ = hide-title
92
+ (('tag:center'))
93
+ \n\n
94
+ (('tag:normal:Chapter 2'))
95
+ \n\n\n\n\n\n
96
+ (('tag:xx-large:Terms and Tools'))
97
+ == prop
98
+ : hide-title
99
+ true
100
+ : background-image
101
+ images/title-background.png
102
+ : background-image-relative-width
103
+ 100
104
+ : background-image-relative-height
105
+ 100
106
+
107
+ = Terms
108
+ * mruby
109
+ * A Ruby implementation for general embedded purpose
110
+ * mrbc
111
+ * The original mruby compiler bundled with mruby
112
+ * mruby/c
113
+ * Another implementation of mruby VM for one-chip microcontroller
114
+ * It doesn't have compiler
115
+
116
+ = Terms
117
+ * mmrbc (mini mruby compiler)
118
+ * Another mruby compiler for one-chip microcontroller
119
+ * mmruby (mini mruby) = mmrbc + mruby/c
120
+ * mruby machine
121
+ * A microcontroller embedded with integration of mmruby, CUI shell and peripheral drivers
122
+
123
+ = mruby machine
124
+ # image
125
+ # src = images/mruby_machine.png
126
+ # relative_height = 100
127
+ # relative_margin_top = 0
128
+
129
+ = Cross compilation tools for bare metal Arm
130
+ * arm-none-eabi-gcc, arm-none-eabi-ar, arm-none-eabi-ld, arm-none-eabi-strip, etc.
131
+ * What is "arm-none-eabi-" ?
132
+ * arm: Arm architecture
133
+ * none: Without OS (Bare metal)
134
+ * eabi: Embedded Application Binary Interface
135
+
136
+ = Three tool-chains in my laptop (Intel 64)
137
+ (1) (x86_64-linux-gnu-)gcc\nUsual compilation in daily development
138
+ (2) arm-linux-gnueabi-gcc\nBinary runs on QEMU (machine emulator)
139
+ (3) arm-none-eabi-gcc (--with-newlib)\nTo make a final library archive (libmmrbc.a) for bare metal Arm
140
+
141
+ = Docker image
142
+ ((‘tag:center’))
143
+ \n\n\n
144
+ https://hub.docker.com/r/\nhasumikin/arm-none-eabi-tools
145
+
146
+ = C Library
147
+ * glibc (GNU C Library)
148
+ * Newlib
149
+ * Another C library especially for embedded system
150
+ * Some implementation is missed. eg) regex.c
151
+ * Newlib-nano
152
+ * Even smaller version of Newlib for Arm processor
153
+ * Yet other libraries
154
+ * EGLIBC, Clibc, sglibc, etc.
155
+
156
+ = hide-title
157
+ (('tag:center'))
158
+ \n\n
159
+ (('tag:normal:Chapter 3'))
160
+ \n\n\n\n\n\n
161
+ (('tag:xx-large:mmrbc'))
162
+ == prop
163
+ : hide-title
164
+ true
165
+ : background-image
166
+ images/title-background.png
167
+ : background-image-relative-width
168
+ 100
169
+ : background-image-relative-height
170
+ 100
171
+
172
+ = Repo
173
+ (('tag:center'))
174
+ \n\n\n\n
175
+ https://github.com/hasumikin/mmruby
176
+
177
+ = Features of mmrbc
178
+ * Portable and Less dependent
179
+ * Doesn't depend on mruby nor mruby/c
180
+ * (To the contrary, mrbc depends on mruby itself)
181
+ * Depends on only standard C library including Newlib(-nano)
182
+ * Can be integrated with both mruby and mruby/c
183
+
184
+ = Features of mmrbc
185
+ * Small (by linking to Newlib-nano)
186
+ * Fits in less than 256KB ROM (including mruby/c VM and some application code)
187
+ * Runs enough on less than 128KB RAM
188
+
189
+ = Features of mmrbc
190
+ * ((*Lemon*)) as a parser generator instead of Yacc/Bison
191
+ * Originally a parser generator of SQLite
192
+
193
+ = Yacc/Bison
194
+ * LALR(1) parser generator, typical choice of parser generator
195
+ * Yacc (Barkley Yacc)
196
+ * Non-reentrant
197
+ * Parser-Calls-Lexer style (CRuby and mruby use it)
198
+ * Bison (Gnu Bison. Modernized version of Yacc)
199
+ * Reentrant, Thread-Safe and Lexer-Calls-Parser style
200
+ * (You can also select old Yacc style)
201
+
202
+ = Lemon
203
+ * Reentrant
204
+ * Lexer-Calls-Parser style
205
+
206
+ = Parser-Calls-Lexer style (Yacc)
207
+ #enscript c
208
+ yyparse(p);
209
+
210
+ /* in y.tab.c (generated by Yacc) */
211
+ int yyparse(parser_state *p) {
212
+ yytoken = yylex(yylval, p);
213
+ /* makes AST according as you defined */
214
+ ...
215
+ goto yyhogefuga;
216
+ ...
217
+ }
218
+
219
+ /* yylex() is called by parser */
220
+ int yylex(void *lval, parser_state *p) {
221
+ # Find next token and return token type
222
+ return tokenType;
223
+ }
224
+
225
+ GenerateVMCode(p->ast);
226
+
227
+ = Lexer-Calls-Parser style (Lemon)
228
+ #enscript c
229
+ /* in your own Lexer */
230
+ while (hasMoreToken(rubyScript)) {
231
+ token = getToken(rubyScript);
232
+ Parse(parser, tokenType, token);
233
+ }
234
+ Parse(parser, 0, "");
235
+
236
+ /* in parse.c (generated by Lemon) */
237
+ void Parse(void *yyp, int yymajor, ...) {
238
+ /* makes AST according as you defined */
239
+ ...
240
+ }
241
+
242
+ GenerateVMCode(p->ast);
243
+
244
+ = Lemon
245
+ * LALR(1) parser generator as well
246
+ * Reentrant
247
+ * Lexer-Calls-Parser style
248
+ * Generated parser is, I'm still not sure though,
249
+ * Faster than Yacc/Bison (according to its document)
250
+ * Smaller code (according to someone)
251
+ * Grammar syntax of parse.y is different from Yacc/Bison
252
+
253
+ = Lemon
254
+ (('tag:center'))
255
+ \n\n\n\n
256
+ https://sqlite.org/src/doc/trunk/doc/lemon.html
257
+
258
+ = hide-title
259
+ (('tag:center'))
260
+ \n\n
261
+ (('tag:normal:Chapter 4:'))
262
+ \n\n\n\n\n\n
263
+ (('tag:xx-large:How smaller than mrbc?'))
264
+ == prop
265
+ : hide-title
266
+ true
267
+ : background-image
268
+ images/title-background.png
269
+ : background-image-relative-width
270
+ 100
271
+ : background-image-relative-height
272
+ 100
273
+
274
+ = RAM consumption
275
+ * mruby's branch
276
+ * `mruby3` as of August 14th
277
+
278
+ = RAM consumption
279
+ * To make things simple, both mrbc and mmrbc are
280
+ * built for x86_64 architecture
281
+ * using (({malloc()})) and (({free()})) of glibc
282
+ * (mmrbc usually uses (({mrbc_alloc()})) to manage heap area)
283
+ * Linux file system to load Ruby script
284
+ * (microcontroller doesn't have file system)
285
+ * As a result, we can simply compare with ((*valgrind*))
286
+
287
+ = RAM consumption
288
+ * Analysis command looks like:\n(({valgrind \}))\n(({ --tool=massif \}))\n(({ --stacks=yes \}))\n(({ path/to/(mrbc|mmrbc) path/to/script.rb}))
289
+ * Showing the result:\n(({ms_print massif.out.xxxx | less}))
290
+
291
+ = RAM consumption: Case 1
292
+ (('tag:center'))
293
+ Ruby code:
294
+
295
+ # enscript ruby
296
+ # hello_world.rb
297
+ puts "Hello World!"
298
+
299
+ \n
300
+ (('tag:center'))
301
+ Output:
302
+
303
+ # enscript ruby
304
+ Hello World!
305
+
306
+ = RAM consumption: Case 1 / mrbc
307
+ # enscript ruby
308
+ --------------------------------------------------------------------------------
309
+ Command: ../mruby/build/host/bin/mrbc ./hello_world.rb
310
+ Massif arguments: --stacks=yes
311
+ ms_print arguments: massif.out.4087
312
+ --------------------------------------------------------------------------------
313
+ KB
314
+ 157.8^ #
315
+ | #
316
+ | #
317
+ | #
318
+ | #
319
+ | @#
320
+ | @#
321
+ | @#
322
+ | @@@#
323
+ | @@:::::::::::@:::::::@ @#
324
+ | @:::::::@ :::: :: :: @: :: ::@ @#
325
+ | :::::@:::::@: :: ::@ :::: :: :: @: :: ::@ @#
326
+ | ::::::::::::::::::::::: : @:: ::@: :: ::@ :::: :: :: @: :: ::@ @#
327
+ | ::::: ::: ::: ::: : : ::: : @:: ::@: :: ::@ :::: :: :: @: :: ::@ @#
328
+ | : ::: ::: ::: ::: : : ::: : @:: ::@: :: ::@ :::: :: :: @: :: ::@ @#
329
+ | : ::: ::: ::: ::: : : ::: : @:: ::@: :: ::@ :::: :: :: @: :: ::@ @#
330
+ | : ::: ::: ::: ::: : : ::: : @:: ::@: :: ::@ :::: :: :: @: :: ::@ @#
331
+ | : ::: ::: ::: ::: : : ::: : @:: ::@: :: ::@ :::: :: :: @: :: ::@ @#
332
+ | : ::: ::: ::: ::: : : ::: : @:: ::@: :: ::@ :::: :: :: @: :: ::@ @#
333
+ | : ::: ::: ::: ::: : : ::: : @:: ::@: :: ::@ :::: :: :: @: :: ::@ @#
334
+ 0 +----------------------------------------------------------------------->Mi
335
+ 0 3.235
336
+
337
+ = RAM consumption: Case 1 / mmrbc
338
+ # enscript ruby
339
+ --------------------------------------------------------------------------------
340
+ Command: ../mmruby/build/host-production/bin/mmrbc ./hello_world.rb
341
+ Massif arguments: --stacks=yes
342
+ ms_print arguments: massif.out.1652
343
+ --------------------------------------------------------------------------------
344
+ KB
345
+ 11.17^ #
346
+ | @#
347
+ | @@# ::
348
+ | @@#:::::
349
+ | @ @ :@: : :: @@#:::::
350
+ | @ :::@: :@::: :::@@#:::::
351
+ | @ :::@: :@:::@:::@@#:::::
352
+ | @:::::@:::@:::@:::@@#:::::
353
+ | @: :::@:::@:::@:::@@#:::::
354
+ | :: @: :::@:::@:::@:::@@#::::::
355
+ | :: @: :::@:::@:::@:::@@#::::::
356
+ | :: : @: :::@:::@:::@:::@@#::::::
357
+ | :: : @: :::@:::@:::@:::@@#::::::
358
+ | :::: @: :::@:::@:::@:::@@#::::::
359
+ | :::: @: :::@:::@:::@:::@@#::::::
360
+ | :::: @: :::@:::@:::@:::@@#::::::
361
+ | :::: @: :::@:::@:::@:::@@#::::::
362
+ | :::: @: :::@:::@:::@:::@@#::::::
363
+ | :::: ::::::::::::::: @:::::@::: @: :::@:::@:::@:::@@#::::::
364
+ | ::::::::::::: :: : :::::::::@:::::@::: @: :::@:::@:::@:::@@#:::::@
365
+ 0 +----------------------------------------------------------------------->ki
366
+ 0 224.5
367
+
368
+ = RAM consumption: Case 1 / mmrbc 👏8888
369
+ # enscript ruby
370
+ --------------------------------------------------------------------------------
371
+ Command: ../mmruby/build/host-production/bin/mmrbc ./hello_world.rb
372
+ Massif arguments: --stacks=yes
373
+ ms_print arguments: massif.out.1652
374
+ --------------------------------------------------------------------------------
375
+ KB
376
+ 11.17^ #
377
+ | @#
378
+ | @@# ::
379
+ | @@#:::::
380
+ | @ @ :@: : :: @@#:::::
381
+ | @ :::@: :@::: :::@@#:::::
382
+ | @ :::@: :@:::@:::@@#:::::
383
+ | @:::::@:::@:::@:::@@#:::::
384
+ | @: :::@:::@:::@:::@@#:::::
385
+ | :: @: :::@:::@:::@:::@@#::::::
386
+ | :: @: :::@:::@:::@:::@@#::::::
387
+ | :: : @: :::@:::@:::@:::@@#::::::
388
+ | :: : @: :::@:::@:::@:::@@#::::::
389
+ | :::: @: :::@:::@:::@:::@@#::::::
390
+ | :::: @: :::@:::@:::@:::@@#::::::
391
+ | :::: @: :::@:::@:::@:::@@#::::::
392
+ | :::: @: :::@:::@:::@:::@@#::::::
393
+ | :::: @: :::@:::@:::@:::@@#::::::
394
+ | :::: ::::::::::::::: @:::::@::: @: :::@:::@:::@:::@@#::::::
395
+ | ::::::::::::: :: : :::::::::@:::::@::: @: :::@:::@:::@:::@@#:::::@
396
+ 0 +----------------------------------------------------------------------->ki
397
+ 0 224.5
398
+
399
+ = RAM consumption: Case 2
400
+ (('tag:center'))
401
+ Ruby code:
402
+
403
+ # enscript ruby
404
+ # idiotic_script.rb
405
+ ary = Array.new(3)
406
+ ary[0] = {a: 123e2}
407
+ ary[0][:key] = "string"
408
+ ary[1] = %w(abc ABC Hello)
409
+ ary[2] = 0x1f
410
+ ary[3] = !true
411
+ puts "my name is #{self.class}, result is #{ary[2] * ary[0][:a]}"
412
+ p ary
413
+
414
+ = RAM consumption: Case 2
415
+ (('tag:center'))
416
+ Output:
417
+
418
+ # enscript ruby
419
+ my name is Object, result is 381300
420
+ [{:a=>12300, :key=>"string"}, ["abc", "ABC", "Hello"], 31, false]
421
+
422
+ = RAM consumption: Case 2 / mrbc
423
+ # enscript ruby
424
+ --------------------------------------------------------------------------------
425
+ Command: ../mruby/build/host/bin/mrbc ./idiotic_script.rb
426
+ Massif arguments: --stacks=yes
427
+ ms_print arguments: massif.out.4133
428
+ --------------------------------------------------------------------------------
429
+ KB
430
+ 162.9^ ##
431
+ | #
432
+ | @#
433
+ | @#
434
+ | @#
435
+ | @#
436
+ | @:@#
437
+ | @:@#
438
+ | @:@# :
439
+ | :::@@::::::@@@@:@# :
440
+ | :::::::@::::::::::@ :: :::@ @:@# :
441
+ | ::::@@:::::@ :: ::@:: ::: :::@ :: :::@ @:@# :
442
+ | ::::::::::::: :@ :::: @ :: ::@:: ::: :::@ :: :::@ @:@# :
443
+ | ::::::::::::: :: :: ::: :@ :::: @ :: ::@:: ::: :::@ :: :::@ @:@# :
444
+ | :: :::: ::::: :: :: ::: :@ :::: @ :: ::@:: ::: :::@ :: :::@ @:@# :
445
+ | :: :::: ::::: :: :: ::: :@ :::: @ :: ::@:: ::: :::@ :: :::@ @:@# :
446
+ | :: :::: ::::: :: :: ::: :@ :::: @ :: ::@:: ::: :::@ :: :::@ @:@# :
447
+ | :: :::: ::::: :: :: ::: :@ :::: @ :: ::@:: ::: :::@ :: :::@ @:@# :
448
+ | :: :::: ::::: :: :: ::: :@ :::: @ :: ::@:: ::: :::@ :: :::@ @:@# :
449
+ | :: :::: ::::: :: :: ::: :@ :::: @ :: ::@:: ::: :::@ :: :::@ @:@# :
450
+ 0 +----------------------------------------------------------------------->Mi
451
+ 0 3.470
452
+
453
+ = RAM consumption: Case 2 / mmrbc
454
+ # enscript ruby
455
+ --------------------------------------------------------------------------------
456
+ Command: ../mmruby/build/host-production/bin/mmrbc idiotic_script.rb
457
+ Massif arguments: --stacks=yes
458
+ ms_print arguments: massif.out.13414
459
+ --------------------------------------------------------------------------------
460
+ KB
461
+ 53.20^ #
462
+ | #
463
+ | @# :::
464
+ | @# : :
465
+ | @# : :
466
+ | @@# : :
467
+ | @@# :: :
468
+ | @@#::: :
469
+ | @@#::: :
470
+ | @@::@@#::: :
471
+ | @@: @@#::: :
472
+ | @@:@:::@::::@@: @@#::: ::
473
+ | @::@::@ :@:: @:: :@@: @@#::: ::
474
+ | @:::@@@:@::@: @ :@:: @:: :@@: @@#::: ::
475
+ | @@:@::@:: @@ :@::@: @ :@:: @:: :@@: @@#::: ::
476
+ | ::@@@ :@: @:: @@ :@::@: @ :@:: @:: :@@: @@#::: ::
477
+ | :::::: :::::@ @ :@: @:: @@ :@::@: @ :@:: @:: :@@: @@#::: ::
478
+ | :::::@@:: :::::: ::@ @ :@: @:: @@ :@::@: @ :@:: @:: :@@: @@#::: ::
479
+ | : :: @ :: :::::: ::@ @ :@: @:: @@ :@::@: @ :@:: @:: :@@: @@#::: ::
480
+ | : :: @ :: :::::: ::@ @ :@: @:: @@ :@::@: @ :@:: @:: :@@: @@#::: ::
481
+ 0 +----------------------------------------------------------------------->Mi
482
+ 0 1.616
483
+
484
+ = RAM consumption: Summary
485
+ # enscript sh
486
+ ━━━━━━━━━━┳━━━━━┳━━━━━
487
+ Ruby script ┃ mrbc ┃ mmrbc
488
+ ━━━━━━━━━━╋━━━━━╋━━━━━
489
+ hello_world.rb ┃ 157.8KB ┃ 11.17KB
490
+ ━━━━━━━━━━╋━━━━━╋━━━━━
491
+ idiotic_script.rb ┃ 162.9KB ┃ 53.20KB
492
+ ━━━━━━━━━━┻━━━━━┻━━━━━
493
+
494
+ Note: These results are larger than possible results on 32bit architecture because of pointer size
495
+
496
+ = Idiotic script
497
+ # enscript ruby
498
+ # idiotic_script.rb
499
+ ary = Array.new(3)
500
+ ary[0] = {a: 123e2}
501
+ ary[0][:key] = "string"
502
+ ary[1] = %w(abc ABC Hello)
503
+ ary[2] = 0x1f
504
+ ary[3] = !true
505
+ puts "my name is #{self.class}, result is #{ary[2] * ary[0][:a]}"
506
+ p ary
507
+
508
+ =>
509
+ my name is Object, result is 381300
510
+ [{:a=>12300, :key=>"string"}, ["abc", "ABC", "Hello"], 31, false]
511
+
512
+ (('tag:center:Syntax that mmrbc can compile'))
513
+
514
+ = Syntax ✅ implemented
515
+ * lvar, $gvar, @ivar, CONSTANT
516
+ * assignment, fcall, method chain
517
+ * Literals: Array, Hash, String, Fixnum, Float, etc.
518
+ * Keywords: true, false, nil, return, self, etc.
519
+ * +, -, *, /, %, **, +=, -=, *=, /=, %=, &=, |=, ^=, **=, <<=, >>=
520
+ * !, ~, +, -, not, &, |, ^, <<, >>
521
+ * Syntax sugar: (({%w(a b c)}))
522
+ * Interpolation: (({"The answer is #{get_result(@attr)}!"}))
523
+
524
+ = Syntax 🛠 under construction
525
+ * if then elif else end, unless
526
+ * case when else then
527
+ * while, until, break, next, redo, retry, for in
528
+ * [0,1].each do |var| end
529
+ * def method_name(arg); end
530
+ * class MyClass < ParentClass; end
531
+ * rescue, ensure
532
+ * ..., etc.
533
+
534
+ = Roadmap
535
+ (('tag:center'))\n\n\n\n
536
+ https://github.com/hasumikin/mmruby/issues/6
537
+
538
+ = Code size (to estimate ROM consumption)
539
+
540
+ # enscript sh
541
+ % ls -l
542
+ (...)
543
+ .rwxrwxrwx 609k hasumi 17 Aug 7:03 mruby_machine_PSoC5LP.a
544
+ .rwxrwxrwx 903k hasumi 17 Aug 7:03 mruby_machine_PSoC5LP.elf
545
+ .rwxrwxrwx 650k hasumi 17 Aug 7:03 mruby_machine_PSoC5LP.hex
546
+ .rwxrwxrwx 425k hasumi 17 Aug 7:03 mruby_machine_PSoC5LP.map
547
+
548
+ % size mruby_machine_PSoC5LP.elf
549
+ text data bss dec hex filename
550
+ 136080 320 63009 199409 30af1 mruby_machine_PSoC5LP.elf
551
+
552
+ = Code size (to estimate ROM consumption)
553
+
554
+ # enscript sh
555
+ % ls -l
556
+ (...)
557
+ .rwxrwxrwx 609k hasumi 17 Aug 7:03 mruby_machine_PSoC5LP.a
558
+ .rwxrwxrwx 903k hasumi 17 Aug 7:03 mruby_machine_PSoC5LP.elf
559
+ .rwxrwxrwx 650k hasumi 17 Aug 7:03 mruby_machine_PSoC5LP.hex
560
+ .rwxrwxrwx 425k hasumi 17 Aug 7:03 mruby_machine_PSoC5LP.map
561
+
562
+ % size mruby_machine_PSoC5LP.elf
563
+ text data bss dec hex filename
564
+ 136080 320 63009 199409 30af1 mruby_machine_PSoC5LP.elf
565
+
566
+ (('tag:center'))\n
567
+ 136_080 + 320 = 136_400 ≒ ((*133.2KB*)) 👍
568
+
569
+ = Summary
570
+ * mmrbc is a mini mruby compiler
571
+ * VM code runs on both mruby VM and mruby/c VM
572
+ * Still incomplete regarding syntax and memory efficiency
573
+ * mruby machine\n= mmrbc + mruby/c + shell + dirivers
574
+ * Runs on PSoC5LP { RAM: 64KB, ROM: 256KB }
575
+
576
+ = hide-title
577
+ (('tag:center'))\n\n\n
578
+ (('tag:xx-large:Thank you!'))
579
+ == prop
580
+ : hide-title
581
+ true
@@ -0,0 +1,139 @@
1
+ # puts font_families.sort
2
+ @xx_large_font_size = screen_size(10 * Pango::SCALE)
3
+ @x_large_font_size = screen_size(7 * Pango::SCALE)
4
+ @large_font_size = screen_size(6 * Pango::SCALE)
5
+ @normal_font_size = screen_size(4.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(3 * Pango::SCALE)
9
+
10
+ @font_family = find_font_family('Roboto Slab')
11
+ @monospace_font_family = 'Ricty Discord'
12
+
13
+ @default_headline_line_color = '#e5bd3e'
14
+ @default_headline_line_width = 4
15
+ @default_headline_line_expand = false
16
+
17
+ set_graffiti_color "#FF2B22"
18
+ set_graffiti_line_width 10
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
+ #@preformatted_fill_color = '#000000'
28
+ # @preformatted_centering = true
29
+ @space = screen_y(1)
30
+
31
+ # @margin_left = 300
32
+
33
+ @image_slide_number_start_flag_color = "#e5bd3e"
34
+ @image_slide_number_goal_flag_color = "#a81313"
35
+
36
+ include_theme('default')
37
+
38
+ match(Slide, HeadLine) do |heads|
39
+ heads.prop_set("size", @large_font_size)
40
+ heads.prop_set("weight", "normal")
41
+ set_font_family(heads)
42
+ end
43
+ match(Slide) do |slides|
44
+ slides.prop_set("foreground", "#a81313")
45
+ end
46
+
47
+ @slide_headline_hide = true
48
+ match TitleSlide do |slides|
49
+ slides.margin_left = @margin_right
50
+ end
51
+ match TitleSlide, Title do |titles|
52
+ titles.prop_set "foreground", "#e5bd3e"
53
+ titles.margin_top = 0
54
+ end
55
+ match TitleSlide, Subtitle do |subtitle|
56
+ subtitle.prop_set "foreground", "#e5bd3e"
57
+ end
58
+ match TitleSlide, Author do |authors|
59
+ authors.prop_set "foreground", "#e5bd3e"
60
+ authors.margin_top = 440
61
+ end
62
+ match TitleSlide, Date do |date|
63
+ date.prop_set "foreground", "#e5bd3e"
64
+ end
65
+
66
+ @title_slide_background_image = 'images/title-background.png'
67
+ include_theme("title-slide-background-image")
68
+
69
+ #@slide_background_image = 'images/Powerpoint Content Slide.png'
70
+ #include_theme("slide-background-image")
71
+
72
+ #@slide_logo_image = 'images/mark48.png'
73
+ #include_theme('slide-logo')
74
+
75
+ @item_image = 'images/mark48.png'
76
+
77
+ include_theme("default-item-mark")
78
+
79
+ add_image_path("rabbit-images")
80
+
81
+ slide_body = [Slide, Body]
82
+ item_list_item = [ItemList, ItemListItem]
83
+
84
+ indent = 70
85
+
86
+ match(*(slide_body + (item_list_item * 1))) do |items|
87
+ name = "item1"
88
+ items.delete_pre_draw_proc_by_name(name)
89
+ items.delete_post_draw_proc_by_name(name)
90
+ draw_image_mark(items, @item_image, name, indent: indent)
91
+ end
92
+
93
+ match(*(slide_body + (item_list_item * 2))) do |items|
94
+ name = "item2"
95
+ items.delete_pre_draw_proc_by_name(name)
96
+ items.delete_post_draw_proc_by_name(name)
97
+ draw_image_mark(items, @item_image, name, indent: indent)
98
+ end
99
+
100
+ match(*(slide_body + (item_list_item * 3))) do |items|
101
+ name = "item3"
102
+ items.delete_pre_draw_proc_by_name(name)
103
+ items.delete_post_draw_proc_by_name(name)
104
+ draw_image_mark(items, @item_image, name, indent: indent)
105
+ end
106
+
107
+ enum_list_item = [EnumList, EnumListItem]
108
+
109
+ match(*(slide_body + enum_list_item + item_list_item)) do |items|
110
+ name = "enum-item1"
111
+ items.delete_pre_draw_proc_by_name(name)
112
+ items.delete_post_draw_proc_by_name(name)
113
+ draw_image_mark(items, @item_image, name, indent: indent)
114
+ end
115
+
116
+ match(*(slide_body + enum_list_item + (item_list_item * 2))) do |items|
117
+ name = "enum-item2"
118
+ items.delete_pre_draw_proc_by_name(name)
119
+ items.delete_post_draw_proc_by_name(name)
120
+ draw_image_mark(items, @item_image, name, indent: indent)
121
+ end
122
+
123
+ # table
124
+ all_table = ["**", Table]
125
+ match(*(all_table + [TableBody, TableRow, TableCell])) do |cells|
126
+ set_font_family(cells, @monospace_font_family)
127
+ end
128
+ match(*(all_table + [TableHead, TableRow, TableHeader])) do |headers|
129
+ set_font_family(headers, @monospace_font_family)
130
+ end
131
+
132
+ # Chapter
133
+ match Slide do |slides|
134
+ slides.each do |slide|
135
+ if slide.match?(/Chapter \d/)
136
+ slide.prop_set("foreground", "white")
137
+ end
138
+ end
139
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-hasumikin-RubyKaigiTakeout2020
3
+ version: !ruby/object:Gem::Version
4
+ version: 2020.9.4.0
5
+ platform: ruby
6
+ authors:
7
+ - HASUMI Hitoshi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-09-03 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 2020
28
+ email:
29
+ - hasumikin@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rabbit"
35
+ - README.rd
36
+ - Rakefile
37
+ - config.yaml
38
+ - images/hasumi.jpg
39
+ - images/mark32.png
40
+ - images/mark48.png
41
+ - images/mark64.png
42
+ - images/monstarlab_webpage.png
43
+ - images/mruby_machine.png
44
+ - images/takeoutbox.png
45
+ - images/takeoutbox.svg
46
+ - images/title-background.png
47
+ - mruby-machine--An-Operating-System-for-Microcontroller.rab
48
+ - pdf/RubyKaigiTakeout2020-mruby-machine--An-Operating-System-for-Microcontroller.pdf
49
+ - theme.rb
50
+ homepage: https://slide.rabbit-shocker.org/authors/hasumikin/RubyKaigiTakeout2020/
51
+ licenses: []
52
+ metadata: {}
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubygems_version: 3.1.2
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: mruby machine - An Operating System for Microcontroller
72
+ test_files: []