SlideShare une entreprise Scribd logo
1  sur  67
Télécharger pour lire hors ligne
RUBY 2.X
Thursday, October 10, 13
2012
Thursday, October 10, 13
RUBY
+ berljivost
+ površinska enostavnost
+ polno objektni jezik
+ funkcijsko programiranje
+ metaprogramiranje
+ ekosistem
+ RubyGems
- metaprogramiranje
- hitrost vs. Scala, Java, C
- znanost (SciPy)
Thursday, October 10, 13
(0..10).each do |x|
puts "The number is: #{x}"
end
<?php
for ($x=0; $x<=10; $x++)
{
echo "The number is: $x";
}
?>
for x in range(0, 11):
print 'The number is:
%d' % (x)
Ruby PHP Python
Thursday, October 10, 13
(0..10).each do |x|
puts "The number is: #{x}"
end
<?php
for ($x=0; $x<=10; $x++)
{
echo "The number is: $x";
}
?>
for x in range(0, 11):
print 'The number is:
%d' % (x)
Ruby PHP Python
for x in 0..10
puts 'The number is: %d' % [x]
end
Thursday, October 10, 13
(0..10).each do |x|
puts "The number is: #{x}"
end
<?php
for ($x=0; $x<=10; $x++)
{
echo "The number is: $x";
}
?>
for x in range(0, 11):
print 'The number is:
%d' % (x)
Ruby PHP Python
for x in 0..10
puts 'The number is: %d' % [x]
end
0.upto(10).each { |x|
printf('The number is: %d', x)
}
Thursday, October 10, 13
(0..10).each do |x|
puts "The number is: #{x}"
end
<?php
for ($x=0; $x<=10; $x++)
{
echo "The number is: $x";
}
?>
for x in range(0, 11):
print 'The number is:
%d' % (x)
Ruby PHP Python
for x in 0..10
puts 'The number is: %d' % [x]
end
0.upto(10).each { |x|
printf('The number is: %d', x)
}
11.times do |x|
puts "The number is: #{x}"
end
Thursday, October 10, 13
(0..10).each do |x|
puts "The number is: #{x}"
end
<?php
for ($x=0; $x<=10; $x++)
{
echo "The number is: $x";
}
?>
for x in range(0, 11):
print 'The number is:
%d' % (x)
Ruby PHP Python
for x in 0..10
puts 'The number is: %d' % [x]
end
0.upto(10).each { |x|
printf('The number is: %d', x)
}
11.times do |x|
puts "The number is: #{x}"
end
puts (0..10).map{|x| "The number is: #{x}"}
Thursday, October 10, 13
(0..10).each do |x|
puts "The number is: #{x}"
end
<?php
for ($x=0; $x<=10; $x++)
{
echo "The number is: $x";
}
?>
for x in range(0, 11):
print 'The number is:
%d' % (x)
Ruby PHP Python
for x in 0..10
puts 'The number is: %d' % [x]
end
0.upto(10).each { |x|
printf('The number is: %d', x)
}
11.times do |x|
puts "The number is: #{x}"
end
puts (0..10).map{|x| "The number is: #{x}"}
puts ("The number is Nn" * 11).gsub('N').with_index{|_,i| i}
Thursday, October 10, 13
RUBY 2.0
Thursday, October 10, 13
KEYWORD ARGUMENTI
# Ruby < 2
def run(options = {})
options.reverse_merge!(
opt1: "default"
)
raise ArgumentError unless options.keys.in?([:opt1, :opt2])
options[:opt1]
end
# Ruby 2
def run(opt1: "default", opt2: nil)
opt1
end
run(opt2: "x")
run(opt2: "x", opt3: "y") # ArgumentError
def run(opt1: "default", opt2: nil, **options)
opt1
end
run(opt2: "x", opt3: "y")
Thursday, October 10, 13
MODULE#PREPEND
Thursday, October 10, 13
class Bar
def hello
puts 1
end
end
Bar.new.hello
Bar.ancestors
๏ BasicObject
๏ Kernel
๏ Object
๏ Bar
Thursday, October 10, 13
class Foo
def hello
puts 'hello'
end
end
class Bar < Foo
def hello
puts 1
super
end
end
Bar.new.hello
Bar.ancestors
๏ BasicObject
๏ Kernel
๏ Object
๏ Foo
๏ Bar
Thursday, October 10, 13
module FooBar
def hello
puts 2
super
end
end
class Foo
def hello
puts 'hello'
end
end
class Bar < Foo
include FooBar
def hello
puts 1
super
end
end
Bar.new.hello
Bar.ancestors
๏ BasicObject
๏ Kernel
๏ Object
๏ Foo
๏ FooBar
๏ Bar
Thursday, October 10, 13
module FooBar
def hello
puts 2
super
end
end
class Foo
def hello
puts 'hello'
end
end
class Bar < Foo
include FooBar
def hello
puts 1
super
end
end
Bar.new.hello
Bar.ancestors
๏ BasicObject
๏ Kernel
๏ Object
๏ Foo
๏ FooBar
๏ Bar
1
2
hello
Thursday, October 10, 13
module FooBar
def hello
puts 2
super
end
end
class Foo
def hello
puts 'hello'
end
end
class Bar < Foo
prepend FooBar
def hello
puts 1
super
end
end
Bar.new.hello
Bar.ancestors
๏ BasicObject
๏ Kernel
๏ Object
๏ Foo
๏ Bar
๏ FooBar
Thursday, October 10, 13
module FooBar
def hello
puts 2
super
end
end
class Foo
def hello
puts 'hello'
end
end
class Bar < Foo
prepend FooBar
def hello
puts 1
super
end
end
Bar.new.hello
Bar.ancestors
๏ BasicObject
๏ Kernel
๏ Object
๏ Foo
๏ Bar
๏ FooBar
2
1
hello
Thursday, October 10, 13
LAZY ENUMERATIONS
Thursday, October 10, 13
ENUMERATIONS
[1, 2, 3, 4]
.map { |i| i * 2 } # => [2, 4, 6, 8]
.take(2) # => [2, 4]
.reduce(&:+) # => 6
Thursday, October 10, 13
LAZY
[1, 2, 3, 4]
.lazy # => #<Enumerator::Lazy: [1, 2, 3, 4]>
.map { |i| i * 2 } # => #<Enumerator::Lazy: [1, 2, 3,
4]>:map>
.take(2) # => #<Enumerator::Lazy:
#<Enumerator::Lazy: [1, 2, 3, 4]>:map>:take(2)>
.reduce(&:+) # => 6
Thursday, October 10, 13
LAZY
(1..Float::INFINITY)
.lazy
.map { |i| i * 2 }
.take(2)
.reduce(&:+)
Thursday, October 10, 13
GENERATIONAL GARBAGE
COLLECTOR
If you care about GC, just use JRuby.
Thursday, October 10, 13
GENERATIONAL GARBAGE
COLLECTOR
If you care about GC, just use JRuby.
switch to JRuby
Thursday, October 10, 13
RUBY 2.0: REFINEMENTS
Meh.
Thursday, October 10, 13
RUBY 2.1: REFINEMENTS
module BalkanString
refine String do
def debalkanize
ActiveSupport::Inflector.transliterate(self)
end
end
end
class User < ActiveRecord::Base
using BalkanString
def name
@name.debalkanize if @name
end
end
"test".debalkanize # NoMethodError
Thursday, October 10, 13
RUBY ON RAILS
Thursday, October 10, 13
Django
146,869 LOC
Rails
162,084 LOC
CakePHP
147,738 LOC
Lines of code
Thursday, October 10, 13
100% MODULAREN
Thursday, October 10, 13
Rails
‣lepilo
‣Model
‣View
‣Controller
Thursday, October 10, 13
Rails
‣lepilo
‣Model
‣View
‣Controller
Thursday, October 10, 13
Rails
‣railties 16,017 LOC
‣activesupport 25,710 LOC
‣Model
‣View
‣Controller
Thursday, October 10, 13
Rails
‣railties
‣activesupport
‣Model
‣View
‣Controller
Thursday, October 10, 13
Rails
‣railties
‣activesupport
‣activemodel 5,694 LOC
‣activerecord 53,435 LOC
‣View
‣Controller
Thursday, October 10, 13
Rails
‣railties
‣activesupport
‣activemodel
‣activerecord
‣View
‣Controller
Thursday, October 10, 13
Rails
‣railties
‣activesupport
‣activemodel
‣activerecord
‣actionview 22,501 LOC
‣Controller
Thursday, October 10, 13
Rails
‣railties
‣activesupport
‣activemodel
‣activerecord
‣actionview
‣Controller
Thursday, October 10, 13
Rails
‣railties
‣activesupport
‣activemodel
‣activerecord
‣actionview
‣actionpack 35,538 LOC
Thursday, October 10, 13
Rails
‣railties
‣activesupport
‣activemodel
‣activerecord
‣actionview
‣actionpack
Thursday, October 10, 13
DEPLOY
Unicorn
Rainbows!
Thursday, October 10, 13
RAILS 4
Thursday, October 10, 13
TURBOLINKS
Video (57:10)
Rails Conf 2013 Patterns of Basecamp's Application
Architecture by David Heinemeier Hansson
http://www.youtube.com/watch?v=yhseQP52yIY
Thursday, October 10, 13
THREAD SAFE
JBoss, 200 threads, OK
Thursday, October 10, 13
DON’T JUSTTRY,TRY!
# Rails 3
[10].try(:count) # => 1
5.try(:count) # NoMethodError
nil.try(:count) # => nil
# Rails 4
5.try(:count) # => nil
5.try!(:count) # NoMethodError
nil.try(:count) #=> nil
nil.try!(:count) #=> nil
Thursday, October 10, 13
ACTIONCONTROLLER::LIVE
class MyController < ActionController::Base
include ActionController::Live
def stream
response.headers['Content-Type'] = 'text/event-stream'
100.times {
response.stream.write "hello worldn"
sleep 1
}
ensure
response.stream.close
end
end
avtomatsko naredi thread
Thursday, October 10, 13
POSTGRESQL
Array
Thursday, October 10, 13
POSTGRESQL ARRAY
class CreateDocuments < ActiveRecord::Migration
def change
create_table :documents do |t|
t.string :title
t.string :tags, array: true, default: []
t.timestamps
end
end
end
Thursday, October 10, 13
POSTGRESQL ARRAY
Document.create(title: "PostgreSQL", tags: ["pg","rails"])
Document.where("'pg' = ANY (tags)")
Thursday, October 10, 13
POSTGRESQL
hstore (Hash/Dictionary)
Thursday, October 10, 13
POSTGRESQL HSTORE
class AddHstoreExtension < ActiveRecord::Migration
def up
execute 'CREATE EXTENSION hstore'
end
def down
execute 'DROP EXTENSION hstore'
end
end
class AddPropertiesToComics < ActiveRecord::Migration
def change
add_column :comics, :properties, :hstore
end
end
Thursday, October 10, 13
POSTGRESQL HSTORE
class Comic < ActiveRecord::Base
end
Comic.create(properties: { issued: 1.year.ago })
Comic.where("properties -> 'issued' > ?", 2.years.ago)
Thursday, October 10, 13
POSTGRESQL HSTORE
class Comic < ActiveRecord::Base
store_accessor :properties, :issued
end
Comic.create(issued: 1.year.ago)
Comic.where("properties -> 'issued' > ?", 2.years.ago)
Ali sploh rabiš hstore v tem primeru?
Thursday, October 10, 13
ACTIVERECORD
In Rails 4
Thursday, October 10, 13
SCOPES
class User < ActiveRecord::Base
# Rails 3
scope :newest, where("created_at > ?", 1.week.ago)
# Rails 4
scope :newest, -> { where("created_at > ?", 1.week.ago) }
end
Thursday, October 10, 13
WHERE.NOT
# Rails 3
User.where('role != ?', 'admin')
User.where('nickname IS NOT NULL')
# Rails 4
User.where.not(role: 'admin')
User.where.not(nickname: nil)
Thursday, October 10, 13
MIGRACIJE PREJ
class ChangeProductsPrice < ActiveRecord::Migration
def up
change_table :products do |t|
t.change :price, :string
end
end
def down
change_table :products do |t|
t.change :price, :integer
end
end
end
Thursday, October 10, 13
MIGRACIJE
class ChangeProductsPrice < ActiveRecord::Migration
def change
reversible do |dir|
change_table :products do |t|
dir.up { t.change :price, :string }
dir.down { t.change :price, :integer }
end
end
end
end
Thursday, October 10, 13
NONE RELATION
class User < ActiveRecord::Base
scope :with_role, ->(role) {
if User.role_valid? role
where(role: role)
else
none
end
}
end
User.with_role(params[:role]).where.not(nick: nil)
Thursday, October 10, 13
STRONG PARAMETERS
Thursday, October 10, 13
PROBLEM
• User
• name
• is_admin
Thursday, October 10, 13
RAILS 3
class User < ActiveRecord::Base
attr_accessible :name
end
# controller
user.update_attributes(params[:user])
# admin
user.update_attributes(is_admin: true) # :-(
user.is_admin = true
user.save
Thursday, October 10, 13
RAILS 3
class User < ActiveRecord::Base
attr_accessible :name
end
# controller
user.update_attributes(params[:user])
v čem je v resnici problem?
Thursday, October 10, 13
RAILS 3
class User < ActiveRecord::Base
attr_accessible :name
end
# controller
user.update_attributes(params[:user])
user.update_attributes(is_admin: true) # :-(
non-sanitized
user input
Thursday, October 10, 13
STRONG PARAMETERS
class User < ActiveRecord::Base
end
# controller
def user_params
params.require(:user).permit(:name)
end
user.update_attributes(user_params)
user.update_attributes(params[:user])
# error: Unpermitted parameters
user.update_attributes(is_admin: true) # OK :-)
Thursday, October 10, 13
CACHING
• avtomatski expire pri spremembi modela
• avtomatski expire pri spremembi viewa
• russian doll (nested) caching
• Rails Conf 2013 Patterns of Basecamp's Application
Architecture by David Heinemeier Hansson
• http://www.youtube.com/watch?v=yhseQP52yIY
Thursday, October 10, 13
ACTIVESUPPORT::CONCERN
module Commentable
extend ActiveSupport::Concern
included do
has_many :comments
end
def has_comments?
!comments.empty?
end
module ClassMethods
def comments_count
joins(:comments)
.references(:comments)
.pluck("COUNT(comments.id)")
end
end
end
class Post < ActiveRecord::Base
include Commentable
end
User.posts.comment_count
Post.first.comments
Post.first.has_comments?
Rails 4 ima direktorij za concerne.
Whatever.
Thursday, October 10, 13
THE END
Thursday, October 10, 13

Contenu connexe

Tendances

Nosql hands on handout 04
Nosql hands on handout 04Nosql hands on handout 04
Nosql hands on handout 04Krishna Sankar
 
GPars For Beginners
GPars For BeginnersGPars For Beginners
GPars For BeginnersMatt Passell
 
Mastering Kotlin Standard Library
Mastering Kotlin Standard LibraryMastering Kotlin Standard Library
Mastering Kotlin Standard LibraryNelson Glauber Leal
 
Distributed Data Structures
Distributed Data StructuresDistributed Data Structures
Distributed Data StructuresPDX Web & Design
 
The Ring programming language version 1.9 book - Part 48 of 210
The Ring programming language version 1.9 book - Part 48 of 210The Ring programming language version 1.9 book - Part 48 of 210
The Ring programming language version 1.9 book - Part 48 of 210Mahmoud Samir Fayed
 
Herding types with Scala macros
Herding types with Scala macrosHerding types with Scala macros
Herding types with Scala macrosMarina Sigaeva
 
Euro python2011 High Performance Python
Euro python2011 High Performance PythonEuro python2011 High Performance Python
Euro python2011 High Performance PythonIan Ozsvald
 
Psycopg2 - Connect to PostgreSQL using Python Script
Psycopg2 - Connect to PostgreSQL using Python ScriptPsycopg2 - Connect to PostgreSQL using Python Script
Psycopg2 - Connect to PostgreSQL using Python ScriptSurvey Department
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemSages
 
JVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinJVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinAndrey Breslav
 
Kotlin Austin Droids April 14 2016
Kotlin Austin Droids April 14 2016Kotlin Austin Droids April 14 2016
Kotlin Austin Droids April 14 2016DesertJames
 
Cluj Big Data Meetup - Big Data in Practice
Cluj Big Data Meetup - Big Data in PracticeCluj Big Data Meetup - Big Data in Practice
Cluj Big Data Meetup - Big Data in PracticeSteffen Wenz
 
Javascript development done right
Javascript development done rightJavascript development done right
Javascript development done rightPawel Szulc
 
Kotlin: a better Java
Kotlin: a better JavaKotlin: a better Java
Kotlin: a better JavaNils Breunese
 
Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."
Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."
Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."sjabs
 
Mozilla とブラウザゲーム
Mozilla とブラウザゲームMozilla とブラウザゲーム
Mozilla とブラウザゲームNoritada Shimizu
 
ScalaDays Amsterdam - Don't block yourself
ScalaDays Amsterdam - Don't block yourselfScalaDays Amsterdam - Don't block yourself
ScalaDays Amsterdam - Don't block yourselfFlavio W. Brasil
 

Tendances (20)

Nosql hands on handout 04
Nosql hands on handout 04Nosql hands on handout 04
Nosql hands on handout 04
 
GPars For Beginners
GPars For BeginnersGPars For Beginners
GPars For Beginners
 
Mastering Kotlin Standard Library
Mastering Kotlin Standard LibraryMastering Kotlin Standard Library
Mastering Kotlin Standard Library
 
Distributed Data Structures
Distributed Data StructuresDistributed Data Structures
Distributed Data Structures
 
はじめてのGroovy
はじめてのGroovyはじめてのGroovy
はじめてのGroovy
 
The Ring programming language version 1.9 book - Part 48 of 210
The Ring programming language version 1.9 book - Part 48 of 210The Ring programming language version 1.9 book - Part 48 of 210
The Ring programming language version 1.9 book - Part 48 of 210
 
Herding types with Scala macros
Herding types with Scala macrosHerding types with Scala macros
Herding types with Scala macros
 
Euro python2011 High Performance Python
Euro python2011 High Performance PythonEuro python2011 High Performance Python
Euro python2011 High Performance Python
 
Psycopg2 - Connect to PostgreSQL using Python Script
Psycopg2 - Connect to PostgreSQL using Python ScriptPsycopg2 - Connect to PostgreSQL using Python Script
Psycopg2 - Connect to PostgreSQL using Python Script
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
 
JVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinJVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in Kotlin
 
Kotlin Austin Droids April 14 2016
Kotlin Austin Droids April 14 2016Kotlin Austin Droids April 14 2016
Kotlin Austin Droids April 14 2016
 
Cluj Big Data Meetup - Big Data in Practice
Cluj Big Data Meetup - Big Data in PracticeCluj Big Data Meetup - Big Data in Practice
Cluj Big Data Meetup - Big Data in Practice
 
Javascript development done right
Javascript development done rightJavascript development done right
Javascript development done right
 
Kotlin: a better Java
Kotlin: a better JavaKotlin: a better Java
Kotlin: a better Java
 
Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."
Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."
Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."
 
Don't do this
Don't do thisDon't do this
Don't do this
 
Mozilla とブラウザゲーム
Mozilla とブラウザゲームMozilla とブラウザゲーム
Mozilla とブラウザゲーム
 
ScalaDays Amsterdam - Don't block yourself
ScalaDays Amsterdam - Don't block yourselfScalaDays Amsterdam - Don't block yourself
ScalaDays Amsterdam - Don't block yourself
 
Hands on lua
Hands on luaHands on lua
Hands on lua
 

En vedette

The ruby-way
The ruby-wayThe ruby-way
The ruby-wayfangdeng
 
Ruby Programming Introduction
Ruby Programming IntroductionRuby Programming Introduction
Ruby Programming IntroductionAnthony Brown
 
Let's Learn Ruby - Basic
Let's Learn Ruby - BasicLet's Learn Ruby - Basic
Let's Learn Ruby - BasicEddie Kao
 
Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016Charles Nutter
 

En vedette (6)

The ruby-way
The ruby-wayThe ruby-way
The ruby-way
 
Ruby Programming Introduction
Ruby Programming IntroductionRuby Programming Introduction
Ruby Programming Introduction
 
Designing Ruby APIs
Designing Ruby APIsDesigning Ruby APIs
Designing Ruby APIs
 
Let's Learn Ruby - Basic
Let's Learn Ruby - BasicLet's Learn Ruby - Basic
Let's Learn Ruby - Basic
 
Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016
 
Introducing Ruby
Introducing RubyIntroducing Ruby
Introducing Ruby
 

Similaire à D-Talk: What's awesome about Ruby 2.x and Rails 4

Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
Postobjektové programovanie v Ruby
Postobjektové programovanie v RubyPostobjektové programovanie v Ruby
Postobjektové programovanie v RubyJano Suchal
 
Using Templates to Achieve Awesomer Architecture
Using Templates to Achieve Awesomer ArchitectureUsing Templates to Achieve Awesomer Architecture
Using Templates to Achieve Awesomer ArchitectureGarann Means
 
Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosEdgar Suarez
 
Kotlin boost yourproductivity
Kotlin boost yourproductivityKotlin boost yourproductivity
Kotlin boost yourproductivitynklmish
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)Pavlo Baron
 
Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014Baruch Sadogursky
 
ITT 2015 - Saul Mora - Object Oriented Function Programming
ITT 2015 - Saul Mora - Object Oriented Function ProgrammingITT 2015 - Saul Mora - Object Oriented Function Programming
ITT 2015 - Saul Mora - Object Oriented Function ProgrammingIstanbul Tech Talks
 
Metaprogramovanie #1
Metaprogramovanie #1Metaprogramovanie #1
Metaprogramovanie #1Jano Suchal
 

Similaire à D-Talk: What's awesome about Ruby 2.x and Rails 4 (20)

Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Postobjektové programovanie v Ruby
Postobjektové programovanie v RubyPostobjektové programovanie v Ruby
Postobjektové programovanie v Ruby
 
Elm: give it a try
Elm: give it a tryElm: give it a try
Elm: give it a try
 
Using Templates to Achieve Awesomer Architecture
Using Templates to Achieve Awesomer ArchitectureUsing Templates to Achieve Awesomer Architecture
Using Templates to Achieve Awesomer Architecture
 
Mongo db for C# Developers
Mongo db for C# DevelopersMongo db for C# Developers
Mongo db for C# Developers
 
An introduction to Ruby
An introduction to RubyAn introduction to Ruby
An introduction to Ruby
 
Unfiltered Unveiled
Unfiltered UnveiledUnfiltered Unveiled
Unfiltered Unveiled
 
Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutos
 
Introduction to Groovy
Introduction to GroovyIntroduction to Groovy
Introduction to Groovy
 
ES6 is Nigh
ES6 is NighES6 is Nigh
ES6 is Nigh
 
Clojure night
Clojure nightClojure night
Clojure night
 
Kotlin boost yourproductivity
Kotlin boost yourproductivityKotlin boost yourproductivity
Kotlin boost yourproductivity
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
 
Hw09 Hadoop + Clojure
Hw09   Hadoop + ClojureHw09   Hadoop + Clojure
Hw09 Hadoop + Clojure
 
Scala 2 + 2 > 4
Scala 2 + 2 > 4Scala 2 + 2 > 4
Scala 2 + 2 > 4
 
Metarhia KievJS 22-Feb-2018
Metarhia KievJS 22-Feb-2018Metarhia KievJS 22-Feb-2018
Metarhia KievJS 22-Feb-2018
 
Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014
 
ITT 2015 - Saul Mora - Object Oriented Function Programming
ITT 2015 - Saul Mora - Object Oriented Function ProgrammingITT 2015 - Saul Mora - Object Oriented Function Programming
ITT 2015 - Saul Mora - Object Oriented Function Programming
 
Metaprogramovanie #1
Metaprogramovanie #1Metaprogramovanie #1
Metaprogramovanie #1
 

Dernier

Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Mark Simos
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sectoritnewsafrica
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxAna-Maria Mihalceanu
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Jeffrey Haguewood
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialJoão Esperancinha
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 

Dernier (20)

Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance Toolbox
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorial
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 

D-Talk: What's awesome about Ruby 2.x and Rails 4