SlideShare a Scribd company logo
1 of 205
Download to read offline
Hello!
Божидар
Ruby 4.0:
To INFINITY
and Beyound
by Bozhidar Batsov
Not on Ruby’s Core
Team
–Matz
“We’ll aim to release Ruby 3 for the Olympic
Games in Tokyo in 2020.”
Ruby is now mature
Build the things your
users need, instead of
the things they want.
The track record
of
recent Ruby innovation
Ruby != MRI
3.times do
puts "Ruby Rocks!"
end
Ruby 2.0
• keyword arguments
• %i
• UTF-8 is now the default source file encoding
• Refinements (experimental feature)
Ruby 2.1
• Rational/Complex Literal
• defs return value
• Refinements are no longer experimental
feature
Ruby 2.2
Nada
Ruby 2.3
• frozen string literals pragma
• safe navigation operator (&.)
• squiggly heredocs (<<~)
Ruby 2.4
• Unify Fixnum and Bignum into Integer
• Support Unicode case mappings
Ruby 2.5?
Java innovates
more!
Ruby 2.2 includes many new features and
improvements for the increasingly diverse and
expanding demands for Ruby.
For example, Ruby’s Garbage Collector is now able to
collect Symbol type objects. This reduces memory
usage of Symbols; because GC was previously unable
to collect them before 2.2. Since Rails 5.0 will require
Symbol GC, it will support only Ruby 2.2 or later.
(See Rails 4.2 release post for details.)
Also, a reduced pause time thanks to the new
Incremental Garbage Collector will be helpful for
running Rails applications. Recent developments
mentioned on the Rails blog suggest that Rails 5.0
will take advantage of Incremental GC as well as
Symbol GC.
Ruby 2.2 includes many new features and
improvements for the increasingly diverse and
expanding demands for Ruby.
For example, Ruby’s Garbage Collector is now able to
collect Symbol type objects. This reduces memory
usage of Symbols; because GC was previously unable
to collect them before 2.2. Since Rails 5.0 will require
Symbol GC, it will support only Ruby 2.2 or later.
(See Rails 4.2 release post for details.)
Also, a reduced pause time thanks to the new
Incremental Garbage Collector will be helpful for
running Rails applications. Recent developments
mentioned on the Rails blog suggest that Rails 5.0
will take advantage of Incremental GC as well as
Symbol GC.
Ruby 2.2 includes many new features and
improvements for the increasingly diverse and
expanding demands for Ruby.
For example, Ruby’s Garbage Collector is now able to
collect Symbol type objects. This reduces memory
usage of Symbols; because GC was previously unable
to collect them before 2.2. Since Rails 5.0 will require
Symbol GC, it will support only Ruby 2.2 or later.
(See Rails 4.2 release post for details.)
Also, a reduced pause time thanks to the new
Incremental Garbage Collector will be helpful for
running Rails applications. Recent developments
mentioned on the Rails blog suggest that Rails 5.0
will take advantage of Incremental GC as well as
Symbol GC.
Ruby 2.2 includes many new features and
improvements for the increasingly diverse and
expanding demands for Ruby.
For example, Ruby’s Garbage Collector is now able to
collect Symbol type objects. This reduces memory
usage of Symbols; because GC was previously unable
to collect them before 2.2. Since Rails 5.0 will require
Symbol GC, it will support only Ruby 2.2 or later.
(See Rails 4.2 release post for details.)
Also, a reduced pause time thanks to the new
Incremental Garbage Collector will be helpful for
running Rails applications. Recent developments
mentioned on the Rails blog suggest that Rails 5.0
will take advantage of Incremental GC as well as
Symbol GC.
Ruby 2.2 includes many new features and
improvements for the increasingly diverse and
expanding demands for Ruby.
For example, Ruby’s Garbage Collector is now able to
collect Symbol type objects. This reduces memory
usage of Symbols; because GC was previously unable
to collect them before 2.2. Since Rails 5.0 will require
Symbol GC, it will support only Ruby 2.2 or later.
(See Rails 4.2 release post for details.)
Also, a reduced pause time thanks to the new
Incremental Garbage Collector will be helpful for
running Rails applications. Recent developments
mentioned on the Rails blog suggest that Rails 5.0
will take advantage of Incremental GC as well as
Symbol GC.
Ruby 2.2 includes many new features and
improvements for the increasingly diverse and
expanding demands for Ruby.
For example, Ruby’s Garbage Collector is now able to
collect Symbol type objects. This reduces memory
usage of Symbols; because GC was previously unable
to collect them before 2.2. Since Rails 5.0 will require
Symbol GC, it will support only Ruby 2.2 or later.
(See Rails 4.2 release post for details.)
Also, a reduced pause time thanks to the new
Incremental Garbage Collector will be helpful for
running Rails applications. Recent developments
mentioned on the Rails blog suggest that Rails 5.0
will take advantage of Incremental GC as well as
Symbol GC.
What about Ruby 3.0?
Little is known about
it…
Optional static
typing?
rejected
Duck inference?
Better support for
concurrent & parallel
programming
3 times faster
performance?
Getting rid of some
quirky features?
We’re not going to
repeat the Python 3
mistakes!
— Matz
And what about the
Perl 6 mistakes?
— Bozhidar
Ruby 4.0
Codename Buzz
Ruby 4x4
Ruby 4 is going to be 4
times faster than Ruby
3
Ruby 4 is going to be
12 times faster than
Ruby 2
Ruby 4 is finally going
to be fast enough!
Ruby 4.0,
the language
Ruby 4.0,
the language
(and maybe the Standard Library)
Design principle #1
Continue to optimize
for happiness
Add some useful new
features
Immutable data
structures
vector
v = @[1, 2, 3]
immutable hash
m = @{one: 1, two: 2}
immutable set
s = @${1, 2, 3}
s = ${1, 2, 3}
Static typing and
runtime contracts
Inspired by RDL
type '(Fixnum, Fixnum) -> String'
def m(x, y) ... end
pre { |x| x > 0 }
post { |r,x| r > 0 }
def sqrt(x)
# return the square root of x
end
type '(Float x {{ x>=0 }}) -> Float y
{{ y>=0 }}'
def sqrt(x)
# return the square root of x
end
Better concurrency
APIs
Inspired by
concurrent-ruby
CSP
messages = Concurrent::Channel.new
Concurrent::Channel.go do
messages.put 'ping'
end
msg = messages.take
puts msg
def sum(a, c)
sum = a.reduce(0, &:+)
c << sum # `<<` is an alias for `put` or `send`
end
a = [7, 2, 8, -9, 4, 0]
l = a.length / 2
c = Concurrent::Channel.new
Concurrent::Channel.go { sum(a[-l, l], c) }
Concurrent::Channel.go { sum(a[0, l], c) }
x, y = ~c, ~c # `~` is an alias for `take` or `receive`
puts [x, y, x+y].join(' ')
Design principle #2
Simplicity
Simplicity is the
ultimate
sophistication.
Less is more
Simplicity
leads to
happiness.
Let’s drop some stuff
Let’s drop some
useless
stuff
for loops
for name in names
puts name
end
names.each do |name|
puts name
end
BEGIN & END
END {
puts 'Bye!'
}
puts 'Processing...'
BEGIN {
puts 'Starting...'
}
puts 'Bye!'
puts 'Starting...'
puts 'Processing...'
Kernel#at_exit,
anyone?
flip-flops
DATA.each_line do |line|
print(line) if (line =~ /begin/)..(line =~ /end/)
end
block comments
=begin
comment line
another comment line
=end
Must be placed at the
very beginning of a line
class SomeClass
=begin
This is a top comment.
Or is it?
=end
def some_method
end
end
class SomeClass
=begin
This is a top comment.
Or is it?
=end
def some_method
end
end
Character literals
pry(main)> ?a
=> "a"
$SAFE
Let’s drop some
redundant
stuff
There’s more than
one way to do it
(There are way too
many ways to do it)
core library method
aliases
collect => map
inject => reduce
detect => find
select => find_all
sprintf => format
length => size
raise => fail
Where is filter?
map
reduce
find
filter
format
length
raise
procs
No arity check
Non-local return
Do we really need
them?
So many languages are
getting by just fine
with only lambdas…
Single-quoted string
literals
A ton of obscure %-
something literals
%s, %x, %w, %W, %,
%i
%r, %q, %Q
So excited to be here!
puts "Hello, Nairobi!"
puts "Hello, Nairobi!"
puts "Hello, Nairobi!"
for i in 1..3
puts "Hello, Nairobi!"
end
3.times do
puts "Hello, Nairobi!"
end
3.times do
puts %(Hello, Nairobi!)
end
3.times do
puts %Q(Hello, Nairobi!)
end
3.times do
puts 'Hello, Nairobi!'
end
3.times do
puts %q(Hello, Nairobi!)
end
Are all those options
worth our while?
Let’s fix some stuff!
and & or have the
same precedence
So many nils floating
around
pry(main)> "TOP".upcase
=> "TOP"
pry(main)> "TOP".upcase!
=> nil
Mutable strings
Even JavaScript got
this right…
Reassignable
constants
pry(main)> A = 5
=> 5
pry(main)> A = 6
(pry):39: warning: already initialized constant A
(pry):38: warning: previous definition of A was here
=> 6
pry(main)> Class = 3
(pry):40: warning: already initialized constant Class
=> 3
pry(main)> Class
=> 3
Class variables
class Parent
@@class_var = 'parent'
def self.print_class_var
puts @@class_var
end
end
class Child < Parent
@@class_var = 'child'
end
Parent.print_class_var # => will print "child"
Poorly named
methods
Kernel#puts
Kernel#println,
anyone?
Kernel#print
defined?
[1] pry(main)> defined? 10
=> "expression"
[2] pry(main)> defined? Test
=> nil
[3] pry(main)> defined? TrueClass
=> "constant"
Enumerable#include?
Enumerable#includes?
Kernel#%
'%d %d' % [20, 10]
sprintf('%d %d', 20, 10)
sprintf(
'%{first} %{second}',
first: 20, second: 10
)
format('%{first} %{second}',
first: 20, second: 10)
In what universe would
you prefer Kernel#%
over Kernel#format???
Perl-style global
variables
$:
$LOAD_PATH
$;
$FIELD_SEPARATOR
$*
$ARGV
JRuby defines the
English aliases by
default
Ruby 4.0 will do this
as well!
WTF? Global
variables?
Even Java doesn’t
have globals…
The future of the
standard library
The Ruby Stdlib is a
Ghetto
http://www.mikeperham.com/2010/11/22/the-ruby-stdlib-
is-a-ghetto/
A ton of legacy code
(often last updated
2000-2003)
Horrible APIs
net/http anyone?
The Kill List
• Net::*
• DRb
• REXML
• RSS
• Rinda
• WEBrick
• XML
What are the parts of the
standard library you
dislike the most? Why so?
1. Move the important
bits to the Core Library
2. Remove everything
outdated/obscure
3. Leverage modern
Ruby features in the
Standard Library
Wait, there’s more!
Formal language
specification and
compatibility test suite
Roadmaps for future
Ruby releases
We’ll adopt the Rubinius
VM and make it 100%
compatible with MRI
Epilogue
When will Ruby 4 be
released?
Ruby 4.0 will likely
never happen
Ruby 4.0 is already
here!
Crystal
Clojure
Elixir
Scala
–William Gibson
“Тhe future is already here it's just not
evenly distributed.”
Felina
One more thing…
Stewardship:
The Sobering Parts
https://www.youtube.com/watch?v=2y5Pv4yN0b0
–Zach Tellman
There has been a consistent migratory
pattern from Ruby to node.js to Go, Rust,
and Elixir. At first, each community is
defined by its potential. But as that potential
is realized, the community begins to be
defined by its compromises. That change is
felt most keenly by the people who were
there first, who remember what it was like
when anything seemed possible. They feel
fenced in and so they move on, in search of
their golden city..”
File tickets
Send patches
Blog about the issues
Speak about the
issues
Let’s make Ruby
better together!
Ruby
Ruby
Epilogue
twitter: @bbatsov
github: @bbatsov
http//batsov.com
http://emacsredux.com
RubyConf Kenya
Nairobi,
Kenya
09.06.2017

More Related Content

What's hot

Introduction to Ruby
Introduction to RubyIntroduction to Ruby
Introduction to Rubykim.mens
 
tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02Hiroshi SHIBATA
 
20140626 red dotrubyconf2014
20140626 red dotrubyconf201420140626 red dotrubyconf2014
20140626 red dotrubyconf2014Hiroshi SHIBATA
 
Ruby Programming Introduction
Ruby Programming IntroductionRuby Programming Introduction
Ruby Programming IntroductionAnthony Brown
 
Ruby Presentation
Ruby Presentation Ruby Presentation
Ruby Presentation platico_dev
 
High Performance Ruby - Golden Gate RubyConf 2012
High Performance Ruby - Golden Gate RubyConf 2012High Performance Ruby - Golden Gate RubyConf 2012
High Performance Ruby - Golden Gate RubyConf 2012Charles Nutter
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivationjistr
 
Extending Ruby using C++
Extending Ruby using C++Extending Ruby using C++
Extending Ruby using C++Tristan Penman
 
A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and UnderstandingA Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understandingmametter
 
How to distribute Ruby to the world
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the worldHiroshi SHIBATA
 
Enjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProfEnjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProfmametter
 
MacRuby & HotCocoa
MacRuby & HotCocoaMacRuby & HotCocoa
MacRuby & HotCocoaThilo Utke
 
Ruby formatters
Ruby formattersRuby formatters
Ruby formattersVisuality
 
Type Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesType Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesmametter
 
How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?Hiroshi SHIBATA
 
IronRuby for the .NET Developer
IronRuby for the .NET DeveloperIronRuby for the .NET Developer
IronRuby for the .NET DeveloperCory Foy
 
Ruby Programming Language - Introduction
Ruby Programming Language - IntroductionRuby Programming Language - Introduction
Ruby Programming Language - IntroductionKwangshin Oh
 

What's hot (20)

Introduction to Ruby
Introduction to RubyIntroduction to Ruby
Introduction to Ruby
 
tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02
 
Ruby Presentation - Beamer
Ruby Presentation - BeamerRuby Presentation - Beamer
Ruby Presentation - Beamer
 
20140626 red dotrubyconf2014
20140626 red dotrubyconf201420140626 red dotrubyconf2014
20140626 red dotrubyconf2014
 
Ruby Programming Introduction
Ruby Programming IntroductionRuby Programming Introduction
Ruby Programming Introduction
 
Ruby Presentation
Ruby Presentation Ruby Presentation
Ruby Presentation
 
High Performance Ruby - Golden Gate RubyConf 2012
High Performance Ruby - Golden Gate RubyConf 2012High Performance Ruby - Golden Gate RubyConf 2012
High Performance Ruby - Golden Gate RubyConf 2012
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivation
 
Extending Ruby using C++
Extending Ruby using C++Extending Ruby using C++
Extending Ruby using C++
 
A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and UnderstandingA Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understanding
 
How to distribute Ruby to the world
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the world
 
Enjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProfEnjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProf
 
MacRuby & HotCocoa
MacRuby & HotCocoaMacRuby & HotCocoa
MacRuby & HotCocoa
 
Ruby
RubyRuby
Ruby
 
Ruby formatters
Ruby formattersRuby formatters
Ruby formatters
 
Type Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesType Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signatures
 
How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?
 
Jaoo irony
Jaoo ironyJaoo irony
Jaoo irony
 
IronRuby for the .NET Developer
IronRuby for the .NET DeveloperIronRuby for the .NET Developer
IronRuby for the .NET Developer
 
Ruby Programming Language - Introduction
Ruby Programming Language - IntroductionRuby Programming Language - Introduction
Ruby Programming Language - Introduction
 

Similar to Ruby 4.0 To Infinity and Beyond at Ruby Conference Kenya 2017 by Bozhidar Batsov

Opal,The Journey from Javascript to Ruby at Ruby Conf Kenya 2017 by Bozhidar ...
Opal,The Journey from Javascript to Ruby at Ruby Conf Kenya 2017 by Bozhidar ...Opal,The Journey from Javascript to Ruby at Ruby Conf Kenya 2017 by Bozhidar ...
Opal,The Journey from Javascript to Ruby at Ruby Conf Kenya 2017 by Bozhidar ...Michael Kimathi
 
The story of language development
The story of language developmentThe story of language development
The story of language developmentHiroshi SHIBATA
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on RailsManoj Kumar
 
Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2Henry S
 
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...Matt Gauger
 
The details of CI/CD environment for Ruby
The details of CI/CD environment for RubyThe details of CI/CD environment for Ruby
The details of CI/CD environment for RubyHiroshi SHIBATA
 
20140425 ruby conftaiwan2014
20140425 ruby conftaiwan201420140425 ruby conftaiwan2014
20140425 ruby conftaiwan2014Hiroshi SHIBATA
 
TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011Lance Ball
 
How to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHow to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHiroshi SHIBATA
 
Christmas present for you
Christmas present for youChristmas present for you
Christmas present for youKazuki Tanaka
 
Fukuoka Ruby Award 2023 - Opal
Fukuoka Ruby Award 2023 - OpalFukuoka Ruby Award 2023 - Opal
Fukuoka Ruby Award 2023 - OpalAndy Maleh
 
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009Harshal Hayatnagarkar
 
The secret of programming language development and future
The secret of programming  language development and futureThe secret of programming  language development and future
The secret of programming language development and futureHiroshi SHIBATA
 
The Future of library dependency manageement of Ruby
The Future of library dependency manageement of RubyThe Future of library dependency manageement of Ruby
The Future of library dependency manageement of RubyHiroshi SHIBATA
 
Exploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLExploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLBarry Jones
 
What's new in Ruby 2.0
What's new in Ruby 2.0What's new in Ruby 2.0
What's new in Ruby 2.0Kartik Sahoo
 

Similar to Ruby 4.0 To Infinity and Beyond at Ruby Conference Kenya 2017 by Bozhidar Batsov (20)

Opal,The Journey from Javascript to Ruby at Ruby Conf Kenya 2017 by Bozhidar ...
Opal,The Journey from Javascript to Ruby at Ruby Conf Kenya 2017 by Bozhidar ...Opal,The Journey from Javascript to Ruby at Ruby Conf Kenya 2017 by Bozhidar ...
Opal,The Journey from Javascript to Ruby at Ruby Conf Kenya 2017 by Bozhidar ...
 
The story of language development
The story of language developmentThe story of language development
The story of language development
 
How DSL works on Ruby
How DSL works on RubyHow DSL works on Ruby
How DSL works on Ruby
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 
Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2
 
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
 
The details of CI/CD environment for Ruby
The details of CI/CD environment for RubyThe details of CI/CD environment for Ruby
The details of CI/CD environment for Ruby
 
Wider than rails
Wider than railsWider than rails
Wider than rails
 
20140425 ruby conftaiwan2014
20140425 ruby conftaiwan201420140425 ruby conftaiwan2014
20140425 ruby conftaiwan2014
 
TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011
 
How to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHow to Begin to Develop Ruby Core
How to Begin to Develop Ruby Core
 
Christmas present for you
Christmas present for youChristmas present for you
Christmas present for you
 
Fukuoka Ruby Award 2023 - Opal
Fukuoka Ruby Award 2023 - OpalFukuoka Ruby Award 2023 - Opal
Fukuoka Ruby Award 2023 - Opal
 
Preparing for Scala 3
Preparing for Scala 3Preparing for Scala 3
Preparing for Scala 3
 
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
 
The secret of programming language development and future
The secret of programming  language development and futureThe secret of programming  language development and future
The secret of programming language development and future
 
Concurrency in ruby
Concurrency in rubyConcurrency in ruby
Concurrency in ruby
 
The Future of library dependency manageement of Ruby
The Future of library dependency manageement of RubyThe Future of library dependency manageement of Ruby
The Future of library dependency manageement of Ruby
 
Exploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLExploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQL
 
What's new in Ruby 2.0
What's new in Ruby 2.0What's new in Ruby 2.0
What's new in Ruby 2.0
 

More from Michael Kimathi

Soni pi at rubycongkenya2017 by rishi jain
Soni pi at rubycongkenya2017 by rishi jainSoni pi at rubycongkenya2017 by rishi jain
Soni pi at rubycongkenya2017 by rishi jainMichael Kimathi
 
Coopetition slides at ruby conference kenya 2017 by james corey
Coopetition slides at ruby conference kenya 2017 by james coreyCoopetition slides at ruby conference kenya 2017 by james corey
Coopetition slides at ruby conference kenya 2017 by james coreyMichael Kimathi
 
Gis and Ruby 101 at Ruby Conf Kenya 2017 by Kamal Ogudah
Gis and Ruby 101 at Ruby Conf Kenya 2017 by Kamal OgudahGis and Ruby 101 at Ruby Conf Kenya 2017 by Kamal Ogudah
Gis and Ruby 101 at Ruby Conf Kenya 2017 by Kamal OgudahMichael Kimathi
 
How GitHub Builds Software at Ruby Conference Kenya 2017 by Mike McQuaid
How GitHub Builds Software at Ruby Conference Kenya 2017 by Mike McQuaidHow GitHub Builds Software at Ruby Conference Kenya 2017 by Mike McQuaid
How GitHub Builds Software at Ruby Conference Kenya 2017 by Mike McQuaidMichael Kimathi
 
Helping Yourself With_Open_Source_Software at Ruby Conference Kenya 2017 by M...
Helping Yourself With_Open_Source_Software at Ruby Conference Kenya 2017 by M...Helping Yourself With_Open_Source_Software at Ruby Conference Kenya 2017 by M...
Helping Yourself With_Open_Source_Software at Ruby Conference Kenya 2017 by M...Michael Kimathi
 
Metaprogamming the Ruby Way by Joannah Nanjekye at Ruby ConfKE2017
Metaprogamming the Ruby Way by Joannah Nanjekye at  Ruby ConfKE2017Metaprogamming the Ruby Way by Joannah Nanjekye at  Ruby ConfKE2017
Metaprogamming the Ruby Way by Joannah Nanjekye at Ruby ConfKE2017Michael Kimathi
 
Scaling Rails with Ruby-prof -- Ruby Conf Kenya 2017 by Ben Hughes
Scaling Rails with Ruby-prof -- Ruby Conf Kenya 2017 by Ben Hughes Scaling Rails with Ruby-prof -- Ruby Conf Kenya 2017 by Ben Hughes
Scaling Rails with Ruby-prof -- Ruby Conf Kenya 2017 by Ben Hughes Michael Kimathi
 
Techpreneurship Triathon at Ruby Conference Kenya 2017 by Bernard Banta
Techpreneurship Triathon at Ruby Conference Kenya 2017 by Bernard BantaTechpreneurship Triathon at Ruby Conference Kenya 2017 by Bernard Banta
Techpreneurship Triathon at Ruby Conference Kenya 2017 by Bernard BantaMichael Kimathi
 
The Curious Case of Wikipedia Parsing at Ruby Conference Kenya 2017 by victor...
The Curious Case of Wikipedia Parsing at Ruby Conference Kenya 2017 by victor...The Curious Case of Wikipedia Parsing at Ruby Conference Kenya 2017 by victor...
The Curious Case of Wikipedia Parsing at Ruby Conference Kenya 2017 by victor...Michael Kimathi
 
When The Whole World is Your Database at Ruby Conference Kenya by Victor Shep...
When The Whole World is Your Database at Ruby Conference Kenya by Victor Shep...When The Whole World is Your Database at Ruby Conference Kenya by Victor Shep...
When The Whole World is Your Database at Ruby Conference Kenya by Victor Shep...Michael Kimathi
 
Building Communities by Michael Kimathi Ruby Conference Kenya 2017
Building Communities by Michael Kimathi Ruby Conference Kenya 2017Building Communities by Michael Kimathi Ruby Conference Kenya 2017
Building Communities by Michael Kimathi Ruby Conference Kenya 2017Michael Kimathi
 
Leveling Up Through OSS by William Wanyama Ruby ConfKKE 2017
Leveling Up Through OSS by William Wanyama Ruby ConfKKE 2017Leveling Up Through OSS by William Wanyama Ruby ConfKKE 2017
Leveling Up Through OSS by William Wanyama Ruby ConfKKE 2017Michael Kimathi
 
Education shaping innovation ecosystem by prof. felix musau
Education shaping innovation ecosystem by prof. felix musauEducation shaping innovation ecosystem by prof. felix musau
Education shaping innovation ecosystem by prof. felix musauMichael Kimathi
 

More from Michael Kimathi (13)

Soni pi at rubycongkenya2017 by rishi jain
Soni pi at rubycongkenya2017 by rishi jainSoni pi at rubycongkenya2017 by rishi jain
Soni pi at rubycongkenya2017 by rishi jain
 
Coopetition slides at ruby conference kenya 2017 by james corey
Coopetition slides at ruby conference kenya 2017 by james coreyCoopetition slides at ruby conference kenya 2017 by james corey
Coopetition slides at ruby conference kenya 2017 by james corey
 
Gis and Ruby 101 at Ruby Conf Kenya 2017 by Kamal Ogudah
Gis and Ruby 101 at Ruby Conf Kenya 2017 by Kamal OgudahGis and Ruby 101 at Ruby Conf Kenya 2017 by Kamal Ogudah
Gis and Ruby 101 at Ruby Conf Kenya 2017 by Kamal Ogudah
 
How GitHub Builds Software at Ruby Conference Kenya 2017 by Mike McQuaid
How GitHub Builds Software at Ruby Conference Kenya 2017 by Mike McQuaidHow GitHub Builds Software at Ruby Conference Kenya 2017 by Mike McQuaid
How GitHub Builds Software at Ruby Conference Kenya 2017 by Mike McQuaid
 
Helping Yourself With_Open_Source_Software at Ruby Conference Kenya 2017 by M...
Helping Yourself With_Open_Source_Software at Ruby Conference Kenya 2017 by M...Helping Yourself With_Open_Source_Software at Ruby Conference Kenya 2017 by M...
Helping Yourself With_Open_Source_Software at Ruby Conference Kenya 2017 by M...
 
Metaprogamming the Ruby Way by Joannah Nanjekye at Ruby ConfKE2017
Metaprogamming the Ruby Way by Joannah Nanjekye at  Ruby ConfKE2017Metaprogamming the Ruby Way by Joannah Nanjekye at  Ruby ConfKE2017
Metaprogamming the Ruby Way by Joannah Nanjekye at Ruby ConfKE2017
 
Scaling Rails with Ruby-prof -- Ruby Conf Kenya 2017 by Ben Hughes
Scaling Rails with Ruby-prof -- Ruby Conf Kenya 2017 by Ben Hughes Scaling Rails with Ruby-prof -- Ruby Conf Kenya 2017 by Ben Hughes
Scaling Rails with Ruby-prof -- Ruby Conf Kenya 2017 by Ben Hughes
 
Techpreneurship Triathon at Ruby Conference Kenya 2017 by Bernard Banta
Techpreneurship Triathon at Ruby Conference Kenya 2017 by Bernard BantaTechpreneurship Triathon at Ruby Conference Kenya 2017 by Bernard Banta
Techpreneurship Triathon at Ruby Conference Kenya 2017 by Bernard Banta
 
The Curious Case of Wikipedia Parsing at Ruby Conference Kenya 2017 by victor...
The Curious Case of Wikipedia Parsing at Ruby Conference Kenya 2017 by victor...The Curious Case of Wikipedia Parsing at Ruby Conference Kenya 2017 by victor...
The Curious Case of Wikipedia Parsing at Ruby Conference Kenya 2017 by victor...
 
When The Whole World is Your Database at Ruby Conference Kenya by Victor Shep...
When The Whole World is Your Database at Ruby Conference Kenya by Victor Shep...When The Whole World is Your Database at Ruby Conference Kenya by Victor Shep...
When The Whole World is Your Database at Ruby Conference Kenya by Victor Shep...
 
Building Communities by Michael Kimathi Ruby Conference Kenya 2017
Building Communities by Michael Kimathi Ruby Conference Kenya 2017Building Communities by Michael Kimathi Ruby Conference Kenya 2017
Building Communities by Michael Kimathi Ruby Conference Kenya 2017
 
Leveling Up Through OSS by William Wanyama Ruby ConfKKE 2017
Leveling Up Through OSS by William Wanyama Ruby ConfKKE 2017Leveling Up Through OSS by William Wanyama Ruby ConfKKE 2017
Leveling Up Through OSS by William Wanyama Ruby ConfKKE 2017
 
Education shaping innovation ecosystem by prof. felix musau
Education shaping innovation ecosystem by prof. felix musauEducation shaping innovation ecosystem by prof. felix musau
Education shaping innovation ecosystem by prof. felix musau
 

Recently uploaded

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 

Recently uploaded (20)

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 

Ruby 4.0 To Infinity and Beyond at Ruby Conference Kenya 2017 by Bozhidar Batsov