Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Recent Updates (近況報告)
Search
yhara
September 21, 2014
Programming
700
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Recent Updates (近況報告)
2014/09/21 RubyHiroba2014
yhara
September 21, 2014
More Decks by yhara
See All by yhara
静的型付けプログラミング言語Shiika
yhara
0
20k
それは残像だ
yhara
4
4.7k
スモートーク
yhara
0
3.1k
Ovto: Frontend web framework for Rubyists
yhara
0
7.8k
Ruby, Opal and WebAssembly
yhara
2
2.8k
Competitive Programming in Ruby (101)
yhara
0
780
Rubyで競技プログラミング(入門編)
yhara
0
2k
良いデバッグログはプロジェクトの資産である
yhara
55
19k
Let's make a functional language!
yhara
0
6.5k
Other Decks in Programming
See All in Programming
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
150
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
500
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
650
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
330
act2-costs.pdf
sumedhbala
0
110
初めてのKubernetes 本番運用でハマった話
oku053
0
130
Performance Engineering for Everyone
elenatanasoiu
0
270
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
3.8k
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
500
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
330
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
220
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
3
440
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
320
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
500
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
220
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
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.