SlideShare a Scribd company logo
1 of 67
Download to read offline
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

More Related Content

What's hot

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
 

What's hot (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
 

Viewers also liked

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
 

Viewers also liked (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
 

Similar to 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
 

Similar to 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
 

Recently uploaded

Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 

Recently uploaded (20)

Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 

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