Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Recent Updates (近況報告)
yhara
September 21, 2014
Programming
0
390
Recent Updates (近況報告)
2014/09/21 RubyHiroba2014
yhara
September 21, 2014
Tweet
Share
More Decks by yhara
See All by yhara
静的型付けプログラミング言語Shiika
yhara
0
8.5k
それは残像だ
yhara
4
3.6k
スモートーク
yhara
0
2.6k
Ovto: Frontend web framework for Rubyists
yhara
0
5.9k
Ruby, Opal and WebAssembly
yhara
2
1.9k
Competitive Programming in Ruby (101)
yhara
0
420
Rubyで競技プログラミング(入門編)
yhara
0
1.6k
良いデバッグログはプロジェクトの資産である
yhara
54
17k
Let's make a functional language!
yhara
0
5.9k
Other Decks in Programming
See All in Programming
競プロへの誘 -いざな-
u76ner
0
380
NieR Re[in]carnationにおけるUnityアニメーション活用術
applibot
1
940
WindowsコンテナDojo:第2回 Windowsコンテナアプリのビルド、公開、デプロイ
oniak3ibm
PRO
0
160
熊でもわかるCI/CD/モダンインフラVol1:用語を覚えよう編
srockstyle
0
110
Licences open source : entre guerre de clochers et radicalité
pylapp
2
380
UI State Modeling 어떤게 좋을까?
laco2951
1
250
Architectural practices for greater scalability and innovation
otaviojava
0
130
あなたの会社の古いシステム、なんとかしませんか?~システム刷新から考えるDX化への道筋とバリエーション~/webinar20220420-systems
grapecity_dev
0
130
よりUXに近いSLI・SLOの運用による可用性の再設計
kazumanagano
3
1k
不具合に立ち向かう テスト戦略 ~ NestJSで作るCI環境 ~
naoki_haba
0
130
あなたの会社の古いシステム、なんとかしませんか?~システム刷新から考えるDX化への道筋とバリエーション~/webinar20220420-grapecity
grapecity_dev
0
140
LOWYAの信頼性向上とNew Relic
kazumax55
4
370
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
350
21k
Teambox: Starting and Learning
jrom
121
7.6k
Done Done
chrislema
174
14k
It's Worth the Effort
3n
172
25k
Imperfection Machines: The Place of Print at Facebook
scottboms
253
11k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
237
19k
How To Stay Up To Date on Web Technology
chriscoyier
780
250k
Statistics for Hackers
jakevdp
781
210k
KATA
mclloyd
7
8.6k
Fontdeck: Realign not Redesign
paulrobertlloyd
73
4.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
337
17k
10 Git Anti Patterns You Should be Aware of
lemiorhan
638
52k
Transcript
ۙگใࠂ (Latest News) ɹ Yutaka HARA ωοτϫʔΫ Ԡ༻௨৴ݚڀॴ 2014/09/21 RubyHiroba2014
Attendees from Matsue office — @nacl — @yukihiro_matz — @shugomaeda
— @takaokouji — @nobyuki — @nari3 — @yhara (me)
http://www.netlab.jp/recruit
My current project — github:yhara/boom — Toy language with type
inference — Will resume it as soon as I quit Ingress
Recent interests 1. "Ruby and Patten Match" 2. "Ideal way
to map a hash" 3. "Opal the Ruby to JS compiler"
1. Ruby and Patten Match
Ruby HAS pattern match (via gem) — pattern-match gem (@k_tsj)
— patm gem (@todesking, limited but faster) — egison gem (@__Egi, RubyKaigi Day 1)
ɹ Pattern Match is like Regexp for Objects
Match regexp against string ʮIf the string is like thisʯ
str = "add 1 2" if str =~ /add (\d+) (\d+)/ puts "Add #{$1} and #{$2}" end
Match pattern against array ʮIf the array is like thisʯ
require 'pattern-match' ary = [:add, 1, 2] match(ary){ with(_[:add, x, y]){ puts "Add #{x} and #{y}" } }
Match pattern against your class class Book # has :title,
:price ... def self.deconstruct(val) accept_self_instance_only(val) return [val.title, val.price] end end book = Book.new("Programming Ruby", 3400) match(book){ with(Book.(/Ruby/, 0..5000)) { p book } }
Try it now. $ gem install pattern-match require 'pattern-match' match(1){
with(x){ p x } } github:k-tsj/pattern-match
2. Ideal way to map a hash
My proposals accepted — #1961 __dir__ — #4890 Enumerable#lazy —
#6670 String#lines should return array and one more challenge:
Current hash.map — How to convert {:a => 1, :b
=> 2} into {"a" => 1, "b" => 2} h = {:a => 1, :b => 2} pairs = h.map{|k, v| [k.to_s, v] } #=> [["a", 1], ["b", 2]]
Hash#[] h = {a: 1, b: 2} pairs = h.map{|k,
v| [k.to_s, v] } #=> [["a", 1], ["b", 2]] Hash[pairs] #=> {"a" => 1, "b" => 2}
Enumerable#to_h (Ruby >= 2.1) h = {a: 1, b: 2}
pairs = h.map{|k, v| [k.to_s, v] } #=> [["a", 1], ["b", 2]] pairs.to_h #=> {"a" => 1, "b" => 2}
Ideal way h = {a: 1, b: 2} h.xxxxxx{|k, v|
[k.to_s, v] } #=> {"a" => 1, "b" => 2} xxxxxx == hash_map, map_hash, hash_by, morph, apply, map_kv, ...???
Join bugs.ruby-lang.org — Feature #10208: Passing block to Enumerable#to_h —
Feature #6669: A method like Hash#map but returns hash We need a good name :-( Any ideas?
3. Opal the Ruby to JS compiler
http://opalrb.org/
http://opalrb.org/ — Compiler from Ruby to JavaScript — Some difference,
but mostly Ruby — String is immutable, etc.
Why Opal matters #1 JavaScript x HTML5 JavaScript x WebSocket
JavaScript x WebRTC JavaScript x Mobile ...
Why Opal matters #1 Ruby(Opal) x HTML5 Ruby(Opal) x WebSocket
Ruby(Opal) x WebRTC Ruby(Opal) x Mobile ...
Why Opal matters #2 — Two languages [Client] [Server] JavaScript
---> Rails(Ruby) <---
Why Opal matters #2 — One language! [Client] [Server] Opal(Ruby)
---> Rails(Ruby) <---
One language for C/S — No context switch — Share
logic among C/S (validation, etc.) — Pre-render view on the server side cf. Rendr, Meteor (Node.js)
Related products Check it out! — For #1: github:yeahrb/yeah "Practical
Ruby video game framework" — For #2: github:voltrb/volt "A ruby web framework where your ruby runs on both server and client"
None
Yeahrb Demo $ gem i yeah $ yeah new hello
$ cd hello $ yeah serve $ open http://localhost:1234 $ vi code/game.rb
Yeahrb Demo code/game.rb: class Hello1 < Game def setup end
def update(elapsed) display.fill_color = C[255,255,255] display.fill_rectangle(V[0,0], display.size) end end
Yeahrb Demo Feels like so Ruby that you never want
to go back to JavaScript :-)
ۙگใࠂ: I'm enjoying programming.