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
Volt: Ruby Web Development Recharged
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Bozhidar Batsov
April 18, 2015
Programming
2
420
Volt: Ruby Web Development Recharged
Slide deck from my talk at the BulgariaWebSummit 2015.
Bozhidar Batsov
April 18, 2015
Tweet
Share
More Decks by Bozhidar Batsov
See All by Bozhidar Batsov
Clojure: The Bad Parts
bbatsov
0
82
Weird Ruby (RubyDay 2024, Verona)
bbatsov
0
170
Sustainable OSS (Balkan Ruby 2024, Sofia)
bbatsov
0
170
Ruby's Creed (RubyDay 2023, Verona)
bbatsov
0
39
Victims of Complexity
bbatsov
0
330
Ruby 3.0 Redux (Spark Academy, Jan 2021)
bbatsov
1
280
Ruby 3.0 Redux (Pivorak 4.0)
bbatsov
0
490
The Elements of Programming Style (HackConf 2019)
bbatsov
0
210
The Groundhog Day Development Method (HackConf 2019)
bbatsov
0
300
Other Decks in Programming
See All in Programming
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.1k
The Ralph Wiggum Loop: First Principles of Autonomous Development
sembayui
0
3.7k
How to stabilize UI tests using XCTest
akkeylab
0
120
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
260
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
500
AI主導でFastAPIのWebサービスを作るときに 人間が構造化すべき境界線
okajun35
0
720
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
210
AI時代でも変わらない技術コミュニティの力~10年続く“ゆるい”つながりが生み出す価値
n_takehata
2
720
RubyとGoでゼロから作る証券システム: 高信頼性が求められるシステムのコードの外側にある設計と運用のリアル
free_world21
0
270
Vuetify 3 → 4 何が変わった?差分と移行ポイント10分まとめ
koukimiura
0
130
社内規程RAGの精度を73.3% → 100%に改善した話
oharu121
13
8k
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
180
Featured
See All Featured
Done Done
chrislema
186
16k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
100
Navigating Weather and Climate Data
rabernat
0
140
Designing for humans not robots
tammielis
254
26k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
79
The Cult of Friendly URLs
andyhume
79
6.8k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
170
Git: the NoSQL Database
bkeepers
PRO
432
66k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
190
The Mindset for Success: Future Career Progression
greggifford
PRO
0
270
Transcript
Volt: Ruby Web Development Recharged by Bozhidar Batsov
@bbatsov
Joan
None
Few important things you need to know about me
None
None
I’m an Emacs fanatic
I still have nightmares about PHP4
I love Ruby
I tolerate Rails
I don’t like JavaScript
None
Why am I here?
Welcome to Rubylandia!
Ruby (2005)
None
None
None
Ruby (2006)
OMG, Rails is amazing!
Ruby (2008)
OMG, Rails is amazing & useful!
Ruby (today)
Rails is somewhat boring…
Rails is the new JEE!
Aren’t all the cool devs doing Clojure now?
Hell, yeah!!!
Rails innovation (2005-2008) Convention over configuration Interactive development Scaffolding ActiveRecord
REST
Rails innovation (today) Turbolinks foreign keys background jobs
None
None
10% 90% Rails Other
4% 96% Web Development Other
Fuck this shit!!!
Rails, Rails, Rails
Development Complexity
0 25 50 75 100 1999 2000 2001 2002 2003
2004 2005 2006 2007 2009 2011 2015
Web development (2005) Model View Controller Routing Server Client
Web development (2006) Model View Controller Routing Server Client AJAX
RandomJS
Web development (2010) Model View Controller Routing Server Client AJAX
REST Assets RandomJS
Web development (2013) Model View Controller Routing Server Client AJAX
REST Model View Controller Routing Assets Assets
None
What’s the solution?
VBScript!
Isomorphic Development
Isomorphic?
Isomorphic being of identical or similar form, shape, or structure
Same code runs on the client & the server
Web development (2015) Model View Controller Routing Server Client AJAX
REST Model View Controller Routing Assets Assets Shared Auto Sync
None
Meet Volt
Volt is isomorphic
Models, views, controllers & routing are shared between the client
and the server
WOW!!!
Meteor.js
Ruby on the server-side, Ruby on the client-side
Ruby on the server- side, Ruby on the client- side
Ruby on the server-side
Ruby on the client-side
Fuck this shit!!!
Ruby > JavaScript
None
None
Ruby’s advantages Does’t have this Sane nil semantics No need
for a book called “Ruby: The Good Parts” Standard library Do you really need more?
Fuck this shit!!!
Opal.rb http://opalrb.org/
Does this shit work?
Yes!
def hello(name) puts "Hello, #{name.capitalize}!" end hello("bruce")
/* Generated by Opal 0.7.0 */ (function(Opal) { Opal.dynamic_require_severity =
"error"; var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice; Opal.add_stubs(['$puts', '$capitalize', '$hello']); Opal.Object.$$proto.$hello = function(name) { var self = this; return self.$puts("Hello, " + (name.$capitalize()) + "!"); }; return self.$hello("bruce"); })(Opal);
Is this shit any good?
Debatable
Opal features Source maps ruby-spec compatibility Small footprint Little performance
overhead
Ruby compatibility Mostly compatible with Ruby 2.0 Implements most of
the Ruby stdlib Has immutable strings (unlike Ruby)
Fuck this shit!!!
Volt Architecture
MVC Controller View Model
MVVM Controller/ ViewModel View Model
Volt is reactive
Web Sockets FTW
<:Body> <h1>Todo List</h1> <form e-submit="add_todo" role="form"> <div class="form-group"> <label>Todo</label> <input
class="form-control" type="text" value="{{ page._new_todo }}" /> </div> </form>
def add_todo page._todos << { name: page._new_todo } page._new_todo =
'' end
<:Body> <h1>Todo List</h1> <table class="todo-table"> {{ page._todos.each do |todo| }}
<tr> <td>{{ todo._name }}</td> </tr> {{ end }} </table>
None
Demo
Interesting bits Components User management is built-in Tasks
Volt’s not perfect Opal isn’t quite there yet MongoDB is
the only supported datastore Many features are work in progress The documentation is kind of lacking
Contribute to Volt!
https://github.com/voltrb
0 25 50 75 100 1998 1999 2000 2001 2002
2003 2004 2005 2006 2009 2011 2015
0 25 50 75 100 1998 1999 2000 2001 2002
2003 2004 2005 2006 2009 2011 2015 2016
Hell, yeah!!!
Getting Started with Volt Official docs (http://voltframework.com/docs) gitter office hours
video tutorials
Felina
@bbatsov http://batsov.com http://emacsredux.com
[email protected]