diff --git a/Gemfile.lock b/Gemfile.lock index 80c10df..2410ca8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -188,7 +188,7 @@ GEM ast (~> 2.2) public_suffix (3.0.3) puma (3.12.2) - rack (2.0.6) + rack (2.0.8) rack-test (1.1.0) rack (>= 1.0, < 3) rails (5.2.2) diff --git a/app/assets/images/slides/blue_book.png b/app/assets/images/slides/blue_book.png new file mode 100644 index 0000000..0ab7eca Binary files /dev/null and b/app/assets/images/slides/blue_book.png differ diff --git a/app/assets/stylesheets/slides.scss b/app/assets/stylesheets/slides.scss new file mode 100644 index 0000000..3f5e2fe --- /dev/null +++ b/app/assets/stylesheets/slides.scss @@ -0,0 +1,19 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's + * vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS + * files in this directory. Styles in this file should be added after the last require_* statement. + * It is generally better to create a new file per style scope. + * + *= require_self + *= require reveal/reveal + */ + + .red{ + color: red; + } diff --git a/app/views/pages/index.html.haml b/app/views/pages/index.html.haml index b22e8db..56efd2e 100644 --- a/app/views/pages/index.html.haml +++ b/app/views/pages/index.html.haml @@ -1,9 +1,9 @@ .row - %h2.center Compiling Ruby to Binary. + %h2.center The community's ruby implementation %div %p.center %span - Putting wings on ruby to let you fly (may take X years). + Ruby imiplemented in 100% ruby, for everyone. .row .tripple %h2.center What @@ -31,6 +31,17 @@ =succeed "," do =link_to "empower you" , "/project/motivation.html" to make your ruby shine as much as you like. + %p + Since rubyX is written in ruby, anyone can easily join, and + the project is very open to newcomers. In time the idea is to implement + a democratic version of open source, as an alternative the current + "benevolent dictator" model. + %p + Contrary to what many newcomers think, ruby-x is also technically easy to join. + In the end it is just ruby, and only a very small percent of code is low level. + We have a list + =ext_link "of issues" , "https://github.com/ruby-x/rubyx/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+newbie%22" + in github for beginners. .tripple %h2.center Status %p diff --git a/app/views/slides/minsk/_how.haml b/app/views/slides/minsk/_how.haml new file mode 100644 index 0000000..fe5f5ce --- /dev/null +++ b/app/views/slides/minsk/_how.haml @@ -0,0 +1,163 @@ +%section#how + %h2 That was what + %br + %h4 next + %br + %h1 How + %p.fragment With rails analogy + +%section#app + %h2 Rails app + %p many views + %br + %h2.fragment RubyX + %p.fragment many methods + %br + %h4.fragment method = view + +%section#controller + %h3 controller renders view + %br + %h3.fragment compiler compiles methods + %br + %h4.fragment controller = compiler part + +%section#http + %h3 rack handles http + %br + %h3.fragment assembler and elf handles binary creation + %br + %h4.fragment lower levels don't matter to most + +%section#layers + %h3 request processed by layers + %br + %h3.fragment Compiler processes in layers + %br + %h4.fragment same same, but different :-) + +%section#compiler_layers + %h2 Compiler layers + %p Ruby source (parser gem) + %p.fragment Virtual oo language (vool) + %p.fragment Minimal oo Machine (mom) + %p.fragment Risc abstraction + %p.fragment Target (arm) + %p.fragment Elf / binary + +%section#vool + %h2 Vool, virtual oo language + %p virtual == no syntax + %p.fragment oo == object model like ruby + %p.fragment ruby without the fluff ( splats / unless ..) + %p.fragment Statements + Expression + %p.fragment nothing implicit + +%section#machines + %h2 Language vs Machine + %p next level is (abtract) machine + %p.fragment statement tree vs instruction list + %p.fragment variables vs memory + %p.fragment control structures vs jumps + %p.fragment abstract vs basic + +%section#mom + %section#mom1 + %h2 Mom, minimal object machine + %p 16 instructions + %p.fragment Works only on memory + %p.fragment higher level than next + %p.fragment ease transition to next level + %p.fragment 1 vool → 2-8 mom + + %section#mom2 + %h2 MOM instructions + %p simple call , argument transfer , return sequence + %p.fragment dynamic call , method resolve + %p.fragment checks with implicit jumps + %p.fragment ruby truth check , identity check + %p.fragment yield . . . +%section + %section#risc1 + %h2 Risc abstraction + %p arm without the fluff + %p.fragment arm like registers + %p.fragment 20 instructions + %p.fragment extensible (for builtin + more) + %p.fragment last virtual layer + %p.fragment interpreter + visual debugger + + %section#risc2 + %h2 Risc instructions + %p mem/reg + reg/reg + %p.fragment arithmetic operators + %p.fragment tests on operation result + %p.fragment jump , call , return + %p.fragment syscall + +%section#code + %h2 Code generation + %br + %br + %h2.fragment object generation + +%section#model + %h2 Object Model + %p Everything is Object + %p.fragment Fixed sizes + %p.fragment opaque data, ruby has no access + %p.fragment mom instructions to process data + +%section#types + %h2 Object has Type + %p.fragment Types are immutable + %p.fragment Types store callable methods + %p.fragment maps names to indexes + %p.fragment does not define types recursively + %p.fragment type reference may change + +%section#classes + %h2 Type implements Class + %p Class has instance Type + %p.fragment new object has instance type + %p.fragment instance type may change + %p.fragment many types implement one class + %p.fragment class stores method definition + +%section#dynamics + %h3 Types are static + %h3 Ruby is dynamic + %h3.fragment.fade-out ? + %p.fragment objects type reference may change + %p.fragment class instance type may change + +%section#parfait + %h2 Basic Objects: Parfait + %p minimal runtime for compiling + %p.fragment Basic oo: Class , Type , Method , Code + %p.fragment Utils: String, Integer , Array , Hash + %p.fragment also, additional builtin methods + +%section#calling + %h2 Calling convention + %p linked list (not stack) + %p.fragment object oriented + %p.fragment easy to understand + %p.fragment exceptions easier + %p.fragment binding easier + +%section#message + %h2 Message Object + %p next / caller message + %p.fragment frame (locals) + args + %p.fragment return address + value + %p.fragment method + %p.fragment receiver (self) + +%section#project + %h2 Project + %p 5 years + %p 3k commits , 1600 tests + %p multi arch ready, arm working + %p basic executables (mini rt) + %p stable architecture diff --git a/app/views/slides/minsk/_intro.haml b/app/views/slides/minsk/_intro.haml new file mode 100644 index 0000000..2621c72 --- /dev/null +++ b/app/views/slides/minsk/_intro.haml @@ -0,0 +1,139 @@ +%section#intro + %h1 RubyX + %h2 community's ruby + %p in 100% Ruby (compiler) + %p No external dependencies + %p Easy to understand + %p Easy to join +%section#torsten + %h2 Torsten + %h3 rubydesign + %p github, twitter, medium , .fi + %p 30+ years coding + %p Now coding as hobby +%section#method + %h2 Method + %h3 Chronological + %p not top down / technical + %p answer questions +%section#style + %h2 Style + %p ruby "happiness" + %p programmers fulfillment +%section#study + %h2 Why + %p Studied physics + %p Theoretical physics + %h3 Bottomm Up thinking +%section#happiness + %h2 Road to happiness + %table + %tr + %td 1994 + %td Fortran + %td ★☆☆☆☆ + %tr.fragment + %td 1994 + %td C++ + %td ★★★☆☆☆ + %tr.fragment + %td 1996 + %td java + %td ★★★★☆ + %tr.fragment + %td 2001 + %td ruby + %td ★★★★★ + %h4.fragment but real happiness . . . + +%section#finland + %h2 1999 move to Finland + %p + %img{:alt => "Finland", "data-src" => image_url("slides/grillrb/finland.jpg")}/ +%section#raisa + %h2 + Raisa + %small (2004 my wife) + %p + %img{:alt => "Raisa", "data-src" => image_url("slides/grillrb/raisa.jpg") , height: 400}/ +%section#work + %h2 + Woodwork + %small (2010 ecoframe) + %p + %img{:alt => "Villa Taika", "data-src" => image_url("slides/grillrb/villataika.jpg") , height: 400}/ + +%section#smallalk + %h2 1995: Smalltalk + %p Popular 80’s , "Blue Book" published + %p + %img{:alt => "Blue book", "data-src" => image_url("slides/blue_book.png") , height: 200}/ + %p Read and tried, but failed + +%section#db + %h2 2008: Purple + %p In memory db + %p core judy (C), rest ruby + %p super performance, until used from rails + %h3 Ruby has performance issues + +%section#pi + %h2 2013: PI + %p pi becomes an arduino + %p.fragment laptop becomes a pi + %p.fragment + Speed problem + %b 10x + possibly + %b 30x + sometimes + %b 100x +%section#start + %h2 2013: PI + %p pi becomes an arduino + %p.fragment laptop becomes a pi + %p.fragment + Speed problem + %b 10x + possibly + %b 30x + sometimes + %b 100x +%section#start2 + %p Start 2014 at Frozen ruby + %p.fragment started vm mindset + %p.fragment main descisions + %p.fragment good progress +%section#no_vm + %h2 Beginning + %p learn arm + %p check llvm and others + %p 6 classes assembler + %p 3 classes binary creation + %p binaries easy, 1 month +%section#calling + %h2 Calling convention + %p + C or + %span.red no C + %p object oriented + %p named fields + %p simple, not too slow + +%section#sending + %h2 Dynamic calling + %p very difficult + %p many failed ideas + %p "years" of trying + %h3 decent layers + +%section#demo + %h2 + Demo of + =link_to "cli" , "https://github.com/ruby-x/rubyx/blob/master/lib/rubyx/rubyxc.rb" + %p + %br + =link_to "www.ruby-x.org" , "http://www.ruby-x.org" + %p + %br + =link_to "github.com/ruby-x" , "https://github.com/ruby-x/rubyx" diff --git a/app/views/slides/minsk/_next.haml b/app/views/slides/minsk/_next.haml new file mode 100644 index 0000000..1aec9f4 --- /dev/null +++ b/app/views/slides/minsk/_next.haml @@ -0,0 +1,73 @@ +%section#next + %h2 Plans for RubyX + %h2 What can you do + %h2 Impact on community + +%section#next + %h2 My next Plans + %p Benchmarks + %p Bootstrapping + %p Parfait + +%section#bench + %h2 Benchmarks + %p Micro with mixed results + %p.fragment Integer ops slightly slower + %p.fragment Calling 2x faster + %p.fragment Puts faster than c + +%section#bench_conclusion + %h2 Conclusion from Benchmarks + %p Bigger benchmarks, more functionality + %p.fragment Profiling + %p.fragment Macros + %p.fragment Inlining + +%section#better_parf + %h2 Better Parfait + %p Integrate existing tests + %p.fragment Complement existing classes + %p.fragment More classes + %p.fragment Optimize + +%section#better_parf + %h2 Bootstrap + %p Compile ruby-x with rubyxc + %p.fragment Improving compiler + %p.fragment Figure out metacode + %p.fragment Integrate ruby spec + +%section#you + %h2 Things you can do + %p Spread the word + %p Learn + %p Participate + +%section#participate + %h2 Participate + %p Many topics, small and large + %p.fragment Functionality or research + %p.fragment no pressure + +%section#topics + %h2 Topics + %p.fragment assemblers (architectures) + %p.fragment Register allocation + %p.fragment digital trees (judy) + %p.fragment lock free synchronisation (Dr Cliff) + %p.fragment stdlib , pi project , gc , . . . . . + +%section#community + %h2 Impact on community + %p assuming bootstrapped + working + %p.fragment new applications + %p.fragment desktops, native mobile, server, ai + %p.fragment Broaden base, more tools, positive spiral + +%section#evolution + %h2 Evolution + %p small core , gems + bundler + %p.fragment democracy of gems + %p.fragment better gc, better hash + %p.fragment good thrive etc + %p.fragment best results when not controlled diff --git a/app/views/slides/minsk/_what.haml b/app/views/slides/minsk/_what.haml new file mode 100644 index 0000000..de75dd9 --- /dev/null +++ b/app/views/slides/minsk/_what.haml @@ -0,0 +1,53 @@ +%section#working1 + %h2 + Currenty working + %small (overview) + %p basic oo (classes/ objects) + %p.fragment memory layout + %p.fragment calling convention + %p.fragment binary creation + +%section#vars + %h3 variables + + %h3 assignment + %ul + %li local /arg + %li ivar + %li implicit return + +%section#static + %h2 static calling + %p argument passing + %p constants + %p local / ivar + %p calls + +%section#dynamic + %h2 dynamic sending + %p as static, plus + %p.fragment method resolution + %p.fragment caching + +%section#lambdas + %h3 Lambdas + %p implicit capture and compilation + %p block passing as argument + %p yield with arguments + %p return (lambda style) + +%section#control + %h3 control structures + %p if / else / until + %p while + %p complex conditions + %p no break / continue (easy) + +%section#not + %h2 Not working + %p eval + %p procs / binding + %p exceptions + %p class variables / globals + %p multi - assignment + %p stdlib + %p . . . . . . diff --git a/app/views/slides/minsk/index.haml b/app/views/slides/minsk/index.haml new file mode 100644 index 0000000..e00bc42 --- /dev/null +++ b/app/views/slides/minsk/index.haml @@ -0,0 +1,47 @@ +!!! +%html{:lang => "en"} + %head + %meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/ + %meta{:charset => "utf-8"}/ + %title Minsk 2020 + %meta{:content => "RubyX, community's ruby implementation", :name => "description"}/ + %meta{:content => "Torsten Ruger", :name => "author"}/ + %meta{:content => "yes", :name => "apple-mobile-web-app-capable"}/ + %meta{:content => "black-translucent", :name => "apple-mobile-web-app-status-bar-style"}/ + %meta{:content => "width=device-width, initial-scale=1.0", :name => "viewport"}/ + = stylesheet_link_tag 'slides', media: 'all' + %body + .reveal + .slides + = render partial: "slides/minsk/intro" + = render partial: "slides/minsk/what" + = render partial: "slides/minsk/how" + = render partial: "slides/minsk/next" + + %section#end{:style => "text-align: left;"} + %h1 RubyX + %p + Read up + =link_to "ruby-x.org", "https://ruby-x.org" + %br/ + Start coding + = link_to "github.com/ruby-x/" , "http://github.com/ruby-x" + %br + Make contact + =link_to "google group ruby-x" , "https://groups.google.com/forum/#!forum/ruby-x" + + = javascript_include_tag "reveal" + = javascript_include_tag "highlight" + :javascript + // More info https://github.com/hakimel/reveal.js#configuration + Reveal.initialize({ + controls: true, + progress: true, + center: true, + hash: true, + + transition: 'slide', // none/fade/slide/convex/concave/zoom + + width: 950, + height: 600, + }); diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index 163b5a1..829617d 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -13,7 +13,7 @@ Rails.application.config.opal.dynamic_require_severity = :ignore # application.js, application.css, and all non-JS/CSS in the app/assets # folder are already added. Rails.application.config.assets.precompile += %w( debug.js debug.css - reveal/reveal.css reveal.js highlight.js) + slides.css reveal.js highlight.js) Rails.application.config.assets.paths << "#{Gem.loaded_specs["rubyx-debugger"].gem_dir}/assets/" Rails.application.config.assets.paths << "#{Gem.loaded_specs["rubyx-debugger"].gem_dir}/lib/"