SlideShare a Scribd company logo
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Lecture 6 :

Introduction to Ruby
LSINF 2335
Programming Paradigms
Prof. Kim Mens
UCL / EPL / INGI
Partly inspired on :
• the pickaxe book “Programming Ruby” by Dave Thomas
• slides by Prof. Tom Mens (UMons)
• slides by Prof. Wolfgang De Meuter (VUB)
• an update to the slides made by Benoît Daloze (UCL)
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Lecture Overview
■ History of Ruby
■ Getting started with Ruby
■ The Ruby programming language
■ A worked-out example
■ Conclusion
2
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
What is Ruby?
■ Originally conceived by Yukihiro Matsumoto
– February 24, 1993, Japan
• first public release in 1995
• Feb 24, 2013: Ruby 2.0 release
– motivation:
• “wanted a scripting language [...] more powerful than Perl,
and more object-oriented than Python”
• wanted a natural and very expressive language in which
programmers can easily express themselves
– language named after a precious gemstone
• à la “Perl”
– is an open source project
3
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
What is Ruby?
■ Ruby is an interpreted, object-oriented,
dynamically typed programming language with
strong reflective and scripting facilities
– Compact syntax inspired by Python and Perl
– Semantics akin to dynamically class-based languages like
Smalltalk
– Scripting facilities akin to those of Python and Perl
• manipulation of text files
• file handling
• execution of system tasks
• support for regular expressions
• ... 4
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Ruby’s “killer app”
■ Ruby on Rails (a.k.a. “Rails” or “RoR”)
– Open-source web-application framework
– Implemented in Ruby
– Allows you to quickly create powerful web applications
– Based on model-view-controller pattern
– Web-application =
• Ruby program + database + webserver
5
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Scaffolding
■ “Scaffolding” in RoR is a particular use of meta-progamming to
construct database-backed web-applications
– essentially stub generation
■ [construction] : a temporary framework used to support people
and material in the construction or repair of large buildings
■ [programming] : a meta-programming technique for quickly
building software applications
– in RoR, rather than programming the application, the programmer specifies a
template from which the application code can be generated
• programmer specifies a template describing how the application
database may be used
• compiler uses this specification to generate application code
– to create, read, update and delete database entries
• template is a "scaffold" on which a more powerful application is built 6
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Lecture Overview
■ History of Ruby
■ Getting started with Ruby
■ The Ruby programming language
■ A worked-out example
■ Conclusion
7
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic. Getting started with Ruby
8
RUBY VERSION
Kim:~ kimmens$ ruby -v
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin10.8.0]
Kim:~ kimmens$ irb -v
irb 0.9.6(09/06/30)
SIMPLE COMMAND PROMPT EXAMPLES
Kim:~ kimmens$ irb
>> 3+4
=> 7
>> "Kim"+"Mens"
=> "KimMens"
PRINTING
>> puts "Hello World"
Hello World
=> nil
>> 3.times { puts "Ruby" }
Ruby
Ruby
Ruby
=> 3
irb = Interactive Ruby
puts is a standard Ruby
method that writes its argument(s)
to the console, adding a newline
after each.
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic. Getting started with Ruby
9
METHOD DEFINITIONS
>> def product(n1,n2)
>> n1 * n2
>> end
=> nil
>> product(3,4)
=> 12
>> def fib(n)
>> if n <= 1 then n
>> else fib(n-1) + fib(n-2)
>> end
>> end
=> nil
>> fib(1)
=> 1
>> fib(3)
=> 2
>> fib(5)
=> 5
>> fib(10)
=> 55
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
10
VARIABLES
>> a=1
=> 1
>> b=2
=> 2
>> a+b
=> 3
>> a = ""
=> ""
>> 3.times { a = a + "Ruby" }
=> 3
>> a
=> "RubyRubyRuby"
LOADING FROM FILE
>> require "./SINF2335/Ruby/FactorialProgram.rb"
51090942171709440000
=> true
def factorial(n)

result = 1

(2..n).each do |i|

result *= i

end

result

end



puts factorial(21)

Getting started with Ruby
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic. Making a Ruby script
11
①
1. create .rb file
2. put “shebang” on 1st line
3. make file executable
4. run it
③
④
②
chmod +x FirstRubyProgram.rb

./FirstRubyProgram.rb
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Lecture Overview
■ History of Ruby
■ Getting started with Ruby
■ The Ruby programming language
■ A worked-out example
■ Conclusion
12
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Ruby’s language features
■ Purely object-oriented (everything is an object)
■ Dynamically typed
■ Message passing is only control-structure
■ Single class based inheritance
■ Automatic garbage collection
■ Exception handling
■ First-class closures (blocks)
■ Reflective facilities
■ Features for program evolution (e.g., mixins)
■ Embedded scripting facilities (e.g. regular expressions)
■ In addition, it comes with a large standard library
13
Like Smalltalk
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Everything is an object
# Numbers :
1 77.0 -12 12.5e23
# Symbols :
:a :red
# Strings :
"HellonWorld", 'Hello World'
# Booleans :
true false 1 < 2
# Arrays :
[] [1,2,3] [1,true,"Hello"]
# Hashes (a.k.a. dictionaries):
{ :PGD => 18, :GD => 16, :D => 14, :S => 12 }
# Even nil is an object (that happens to represent nothing)
# Even a class is an object 14
42.class => Fixnum
:foo.class => Symbol
"Ruby".class => String
true.class => TrueClass
[1,2,3].class => Array
{ :a => 1 }.class => Hash
nil.class => NilClass
Fixnum.class => Class
Similar to Smalltalk.
No primitive types as in Java.
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Message passing
# Parameterless messages
"Ruby".reverse()
# Kernel messages with parameters
Kernel.print("Ruby")

Kernel.print("Ruby","Ruby","Ruby")
# Message chaining
"Ruby".reverse().upcase().length()
# Undefined method error
"Ruby".foo()
# Arithmetic operators
-12.abs()

4.+(5)

"Ruby".*(3)
15
Every message send produces a
result (or an error)
receiver.message(arg1,arg2,...,argn)
receiver can be dropped
for Kernel methods
parentheses are optional
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic. The Kernel
16
Kernel#!~
Kernel#<=>
Kernel#===
Kernel#=~
Kernel.Array
Kernel.Complex
Kernel.Float
Kernel.Hash
Kernel.Integer
Kernel.Rational
Kernel.String
Kernel.__callee__
Kernel.__dir__
Kernel.__method__
Kernel.`
Kernel.abort
Kernel.at_exit
Kernel.autoload
Kernel.autoload?
Kernel.binding
Kernel.block_given?
Kernel.caller
Kernel.caller_locations
Kernel.catch
Kernel#class
Kernel#clone
Kernel#define_singleton_method
Kernel#display
Kernel#dup
Kernel#enum_for
Kernel#eql?
Kernel.eval
Kernel.exec
Kernel.exit
Kernel.exit!
Kernel#extend
Kernel.fail
Kernel.fork
Kernel.format
Kernel#freeze
Kernel#frozen?
Kernel.gets
Kernel.global_variables
Kernel#hash
Kernel#inspect
Kernel#instance_of?
Kernel#instance_variable_defined?
Kernel#instance_variable_get
Kernel#instance_variable_set
Kernel#instance_variables
Kernel#is_a?
Kernel.iterator?
Kernel#kind_of?
Kernel.lambda
Kernel.load
Kernel.local_variables
Kernel.loop
Kernel#method
Kernel#methods
Kernel#nil?
Kernel#object_id
Kernel.open
Kernel.p
Kernel.print
Kernel.printf
Kernel#private_methods
Kernel.proc
Kernel#protected_methods
Kernel#public_method
Kernel#public_methods
Kernel#public_send
Kernel.putc
Kernel.puts
Kernel.raise
Kernel.rand
Kernel.readline
Kernel.readlines
Kernel#remove_instance_variable
Kernel.require
Kernel.require_relative
Kernel#respond_to?
Kernel.select
Kernel#send
Kernel.set_trace_func
Kernel#singleton_class
Kernel#singleton_methods
Kernel.sleep
Kernel.spawn
Kernel.sprintf
Kernel.srand
Kernel.syscall
Kernel.system
Kernel#taint
Kernel#tainted?
Kernel#tap
Kernel.test
Kernel.throw
Kernel#to_enum
Kernel#to_s
Kernel.trace_var
Kernel.trap
Kernel#trust
Kernel#untaint
Kernel.untrace_var
Kernel#untrust
Kernel#untrusted?
Kernel.warn
To get these just type
Kernel.methods at the prompt
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Shorthand notation
# Parameterless messages
"Ruby".reverse

"Ruby".foo
# Messages with parameters
print "Ruby"

print "Ruby", "Ruby", "Ruby"

print("Ruby", "Ruby", "Ruby")

Message chaining
"Ruby".reverse.upcase.length
# Arithmetic operators
-12.abs

4 + 5

"Ruby" * 3
17
To avoid the problem of knowing
what argument goes with what
method call, use parentheses...
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Method naming conventions
# Predicate methods end by “?”
0.zero?

[1,2,3].include? 2
# Destructive methods by “!”
a = "Ruby"

a.reverse!
# For many destructive methods there is also a non-destructive variant
# Conversion methods start by to_
40.to_s.reverse

"40".to_i

(1..3).to_a
# Method names (usually) start with a lowercase letter
18
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Control structures
19
postfix notation :
if <cond>
<body>
elsif <cond>
<body>
else
<body>
end
while <cond>
<body>
end
<expression> while <cond>
<expression> if <cond>
<expression> unless <cond>
<expression> until <cond>
until <cond>
<body>
end
In Ruby, only nil and false do not
represent the truth in conditions
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Object creation
■ Ex-nihilo
– literal objects are created by writing them down without
an explicit constructor message
■ Instance creation method
– To create objects from classes
• Array.new, Hash.new, ComplexPolar.new(r,teta)
■ Initialize method
– initializes instance variables upon object creation
– is called by new, passing all parameters that were passed
to new
20
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Class definition
class ComplexCartesian



# Constructor method

def initialize(x,y)

@x = x # Instance variable

@y = y # Instance variable

end



# Method definitions

def r

Math.sqrt(@x**2 + @y**2)

end



def theta

Math.atan2(@y, @x)

end



end

# Instance creation

c = ComplexCartesian.new(1,2)

# Using the instance

puts c.r
21
Attention:
@x is an instance variable

(‘@’ is part of its name)
x is a normal variable
No separators for statements.
Each statement on a separate line.
Indentation is not significant.
No need to explicitly declare
instance variables
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Scoping and naming of Variables
■ Syntax:
– Global variables (globally visible)
$pi
– Class variables (same for all instances)
@@epsilon
– Instance variables (unique for each instance)
@x, @y
– Local (local to a method)
temp = y/x
– Block (parameters of a block)
{ |entry| entry * entry }
■ Rules:
– Variable names start with lowercase
– Constants start with uppercase and so most class and module names!
22
Variables are dynamically typed.
Variables don’t contain values
but pointers to objects (like in
Java or Smalltalk)
Global and class variables are
not often used.
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Accessor methods
class ComplexCartesian



...



# Getter methods

def x

@x

end



def y

@y

end



# Setter methods

def x=(new_x)

@x = new_x

end



def y=(new_y)

@y = new_y

end



end
23
# Constructor method

def initialize(x,y)

@x = x 

@y = y 

end



# Method definitions

def r

Math.sqrt(x**2 + y**2)

end



def theta

Math.atan2(y,x)

end
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Accessor methods shorthand
class ComplexCartesian



...



attr_reader :x, :y

















attr_writer :x, :y

















end
24
attr_accessor :x, :y
or simply:
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Access control
■ Ruby provides 3 levels of access control for methods
– checked at run-time, not statically
1. public
• can be called by anyone
• default when nothing is specified
2. protected
• can be called by any object of the defining class and its
subclasses, very rarely used
3. private
– only on implicit receiver ( meth(arg), not self.meth(arg) )
25
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Accessor methods
class ComplexCartesian



# public by default

# Getter methods

def x

@x

end



def y

@y

end



private

# Setter methods

def x=(new_x)

@x = new_x

end



def y=(new_y)

@y = new_y

end



#everything remains private here until declared otherwise

end
26
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Arrays, variables & side-effects
[12,46,35].max # => 46

[12,46,35].reverse # => [35, 46, 12]


list = [7,4,1] # => [7, 4, 1]

list.sort # => [1, 4, 7]

list # => [7, 4, 1]

list.sort! # => [1, 4, 7]

# has destructively modified list:

list # => [1, 4, 7]

list.reverse! # => [7, 4, 1]

# has destructively modified list


[ 1, 2 ] << "c" << "d" << [ 3, 4 ]

# => [1, 2, "c", "d", [3, 4]]
27
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Blocks
■ Blocks are “chunks of code”
– that can be passed to a method
– not really first-class functions
• but Ruby also has a notion of Procs which are first class objects (see later)
■ Examples
3.times { print "Ruby" } # prints 'Ruby' 3 times

3.times do print "Ruby" end # alternative syntax



['I', 'like', 'Ruby'].each do |entry| # using block to iterate

print entry, ' ' # over a collection

end

[1,2,3,4,5].map { |entry| entry * entry }
# => [1, 4, 9, 16, 25]



fact = 1

1.upto(5) { |i| fact *= i }

fact
Similar in usage to
Smalltalk blocks
(though not exactly the same)
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Yielding blocks
■ Blocks are chunks of code that can be passed to
methods
– for example to implement iterators
■ Those methods can execute that block when needed
– by using the yield keyword
29
def say_something

yield("I", "like")

yield("We all", "love")

end



say_something do |person, verb| 

puts "#{person} #{verb} Ruby"

end
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Blocks and scoping
■ Block parameters are local to the block.
30
a = [1, 2, 3]

a.each { |i| puts i }

i # => NameError: undefined local variable or method `i'
a = [1, 2, 3]

i = 42

a.each { |i| puts i }

i # => 42
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Strings
■ Double quoted strings
– can contain special characters
"RubynRubynRubyn"
– and support expression extrapolation
"Good night, #{name}" 

"Good night, #{name.capitalize}"

"#{$greeting}, #{@name}"
– and find-and-replace primitives
x = "RubynRubynRubyn"

x["Ruby"] = "Dear"

x => "DearnRubynRubyn"
– transform string into array of strings by line breaks
x.lines.to_a
– convert array of strings back in string with line breaks
x.join
31
Substitutes expression
#{expr} in the string by
its value converted by
to_s
Difference between
'...' and "..." is the
amount of processing
Ruby does on the string.
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
String manipulation
■ Break up a single string into an array
"RubynRubynRubyn".split("n")
■ Join an array of strings into a single string
["Ruby", "Ruby", "Ruby"].join("n")
■ Remove extra spaces before and at the end of a string
" Hello there ".strip # => "Hello there"
■ Arithmetic operators on strings
"Ruby" * 3 # => "RubyRubyRuby"
■ And many, many, many more:

upcase, capitalize, center, chars, chomp, end_with?, (g)sub, scan, ...
32
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Regular expressions
■ notation: /pattern/
/this|that/ # matches either 'this' or 'that'

/th(is|at)/ # use of parens in patterns

/ab+c/ # matches 'a', then one or more 'b', then 'c'

/ab*c/ # matches 'a', then zero or more 'b', then 'c'

/sdw./ # for whitespace, digit, character in word,

any character
■ matching
line =~ /this|that/ # matches string with pattern

line.sub(/this|that/, 'foo') # replaces first occurrence

line.gsub(/this|that/, 'foo') # replaces every occurrence
■ regular expressions are objects too
/this|that/.class # => Regexp
33
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Functional side: simplify the loops!
def factorial(n)



# traditional loop

fact = 1

for i in (1..n)

fact *= i

end

return fact



# becomes

(1..n).inject(1) { |fact, i| fact * i }



# or even

(1..n).inject(1, :*)



end



factorial(5) # => 120

34
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Sinatra, a simple web DSL
require 'sinatra'



get '/' do

"Hello, World!"

end
$ curl localhost:4567 # => Hello, World!
35
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Scripting, set mtime from exiftime
■ A simple script to set the modification time of a
JPG picture from its “time of capture”
#!/usr/bin/env ruby

Dir["**/*.{jpg,JPG}"].each do |picture|

times = `exiftime #{picture}`

.scan(/(?:d+:d+:d+ ?){2}/)

.map { |time| Time.new(*time.split(/W/) }



unless times.all? { |time| time == times.first }

raise "Not same times: #{times}"

end

File.utime(File.atime(picture), times.first, picture)

end





36
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Lecture Overview
■ History of Ruby
■ Getting started with Ruby
■ The Ruby programming language
■ A worked-out example
■ Conclusion
37
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic. Complex numbers in Ruby
Cartesian coordinates
38
class ComplexCartesian



EPSILON = 0.00000001



def initialize(x,y)

@x, @y = x, y

end



private

attr_writer :x, :y



public

attr_reader :x, :y



def r

@r ||= Math.hypot(x, y)

end



...
# Class definition
# Constant
# Initialize instance vars
# Use of Math module
# Parallel declaration
# Private methods from here
# Setter methods
# Public methods from here
# Getter method
# Getter method with lazy
initialization
@r ||= expr

is shorthand for

@r = @r || expr

which is shorthand for
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
39
class ComplexCartesian

...



def theta

@theta ||= Math.atan2(y,x)

end



def to_s

"#{x} + #{y}i"

end



def to_cartesian

self # nothing needs to be done

end



def to_polar

ComplexPolar.new(r, theta)

end



...
# Conversion method to string
# self refers to receiving
object
Complex numbers in Ruby (ctd.)
Cartesian coordinates
# Note the use of expression
extrapolation
to_s is called by Ruby
automatically whenever it
wants to print an object
# Instance creation
# More conversion methods
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
40
class ComplexCartesian

...



def ==(c)

same?(x, c.x) and same?(y, c.y)

end



private

def same?(x, y)

(x - y).abs < EPSILON

end 



public

def +(c)

ComplexCartesian.new(self.x + c.x, self.y + c.y)

end



def *(c)

ComplexPolar.new(self.r * c.r, self.theta + c.theta)

end



...

end
# Equality method
# Auxilary method (private)
# Arithmetic operators
Complex numbers in Ruby (ctd.)
Cartesian coordinates
# Public methods again
# Use of constant
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
41
class ComplexPolar < ComplexCartesian



def initialize(r, theta)

@r, @theta = r, theta

end



def x

@x ||= @r * Math.cos(@theta)

end



def y

@y ||= @r * Math.sin(@theta)

end



private

attr_writer :r, :theta



public

attr_reader :r, :theta



...

# Inheritance
Complex numbers in Ruby
Polar coordinates
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
42
class ComplexPolar < ComplexCartesian

...



# to_s

# arithmetic operators

# private def same?(x,y)



def to_cartesian

ComplexCartesian.new(x,y)

end



def to_polar

self

end



def ==(c)

same?(r, c.r) and same?(theta, c.theta)

end



end
# Inherited methods
# Overridden method
Complex numbers in Ruby (ctd.)
Polar coordinates
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
43
require 'test/unit'

class TC_ComplexTest < Test::Unit::TestCase



def setup

@cc = ComplexCartesian.new(1, 1)

@cp = ComplexPolar.new(Math.sqrt(2), Math::PI / 4)

...

end



def test_self_comparison

assert_equal @cc, @cc

assert_equal @cp, @cp

end



def test_comparison_polar

assert_equal @cp, @cc.to_cartesian

assert_equal @cp, @cc.to_polar

end



def test_addition

assert_equal ComplexCartesian.new(2, 2), @cp + @cp

end



...

end
Complex numbers in Ruby
Unit testing
# import Test::Unit module
# define test class
# setup infrastructure
# test methods
# assert equality
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
44
require 'rspec'

describe 'Complex numbers' do

let :cartesian do

ComplexCartesian.new(1, 1)

end

let :polar do

ComplexPolar.new(Math.sqrt(2), Math::PI / 4)

end



it 'is identical to itself' do

cartesian.should == cartesian

polar.should == polar

end



it 'can be converted to the other type and still be equal' do

polar.to_cartesian.should == cartesian

cartesian.to_polar.should == polar

end



it 'supports addition' do

(cartesian + cartesian).should == ComplexCartesian.new(2, 2)

end



...

end
Complex numbers in Ruby
Behavioral testing with RSpec
# import RSpec gem
# define example group
# setup infrastructure
# example
# in natural order
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Lecture Overview
■ History of Ruby
■ Getting started with Ruby
■ The Ruby programming language
■ A worked-out example
■ Conclusion
45
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
■ Ruby has become a popular language
■ Very low-entry cost
– read-eval-print loop (irb, pry)
– plug-and-play
■ Easy digestible and readable syntax
■ Extensive libraries: Rubygems
■ Very powerful (compared to other main-stream applications)
■ “Killer-app”: Ruby-on-Rails
■ Advanced reflective and meta-programming facilities
■ Advanced scripting facilities
Conclusion
46
LSINF2335:Prog.Paradigms:
Theory,Pract.andApplic.
Conclusion
■ Some negative points
– automatic declaration of instance variables
– often things can be done in many different ways
(alternative syntax, shorthand notations)
• can be seen as positive: use the one that works best for you
• can be seen as negative: need to be able to read the one
that doesn’t work best for you as well
– a method in a subclass can override its parent method’s
visibility rules
47
class Base 

def a_method 

puts "Got here" 

end 

private :a_method 

end
class Derived1 < Base 

public :a_method 

end 



class Derived2 < Base 

end

More Related Content

What's hot

Reactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-JavaReactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-Java
Kasun Indrasiri
 
Blazing Performance with Flame Graphs
Blazing Performance with Flame GraphsBlazing Performance with Flame Graphs
Blazing Performance with Flame Graphs
Brendan Gregg
 
Java &amp; advanced java
Java &amp; advanced javaJava &amp; advanced java
Java &amp; advanced java
BASAVARAJ HUNSHAL
 
Jsp ppt
Jsp pptJsp ppt
Jsp ppt
Vikas Jagtap
 
Java Server Pages(jsp)
Java Server Pages(jsp)Java Server Pages(jsp)
Java Server Pages(jsp)
Manisha Keim
 
RedisConf17 - Distributed Java Map Structures and Services with Redisson
RedisConf17 - Distributed Java Map Structures and Services with RedissonRedisConf17 - Distributed Java Map Structures and Services with Redisson
RedisConf17 - Distributed Java Map Structures and Services with Redisson
Redis Labs
 
如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)
Cyril Wang
 
Java servlets
Java servletsJava servlets
Java servlets
yuvarani p
 
Bloom filter
Bloom filterBloom filter
Bloom filter
Hamid Feizabadi
 
Remote Method Invocation (Java RMI)
Remote Method Invocation (Java RMI)Remote Method Invocation (Java RMI)
Remote Method Invocation (Java RMI)
Sonali Parab
 
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
Seomgi Han
 
Servlet.ppt
Servlet.pptServlet.ppt
Servlet.ppt
VMahesh5
 
Unit 4 web technology uptu
Unit 4 web technology uptuUnit 4 web technology uptu
Unit 4 web technology uptu
Abhishek Kesharwani
 
Intro to Node.js (v1)
Intro to Node.js (v1)Intro to Node.js (v1)
Intro to Node.js (v1)
Chris Cowan
 
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxConAnatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Jérôme Petazzoni
 
Java rmi
Java rmiJava rmi
Java rmi
kamal kotecha
 
Secure PHP Coding
Secure PHP CodingSecure PHP Coding
Secure PHP Coding
Narudom Roongsiriwong, CISSP
 
An Attacker's View of Serverless and GraphQL Apps - Abhay Bhargav - AppSec Ca...
An Attacker's View of Serverless and GraphQL Apps - Abhay Bhargav - AppSec Ca...An Attacker's View of Serverless and GraphQL Apps - Abhay Bhargav - AppSec Ca...
An Attacker's View of Serverless and GraphQL Apps - Abhay Bhargav - AppSec Ca...
Abhay Bhargav
 
Java Basics
Java BasicsJava Basics
Java Basics
shivamgarg_nitj
 
nGram full text search (by 이성욱)
nGram full text search (by 이성욱)nGram full text search (by 이성욱)
nGram full text search (by 이성욱)
I Goo Lee.
 

What's hot (20)

Reactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-JavaReactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-Java
 
Blazing Performance with Flame Graphs
Blazing Performance with Flame GraphsBlazing Performance with Flame Graphs
Blazing Performance with Flame Graphs
 
Java &amp; advanced java
Java &amp; advanced javaJava &amp; advanced java
Java &amp; advanced java
 
Jsp ppt
Jsp pptJsp ppt
Jsp ppt
 
Java Server Pages(jsp)
Java Server Pages(jsp)Java Server Pages(jsp)
Java Server Pages(jsp)
 
RedisConf17 - Distributed Java Map Structures and Services with Redisson
RedisConf17 - Distributed Java Map Structures and Services with RedissonRedisConf17 - Distributed Java Map Structures and Services with Redisson
RedisConf17 - Distributed Java Map Structures and Services with Redisson
 
如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)
 
Java servlets
Java servletsJava servlets
Java servlets
 
Bloom filter
Bloom filterBloom filter
Bloom filter
 
Remote Method Invocation (Java RMI)
Remote Method Invocation (Java RMI)Remote Method Invocation (Java RMI)
Remote Method Invocation (Java RMI)
 
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
 
Servlet.ppt
Servlet.pptServlet.ppt
Servlet.ppt
 
Unit 4 web technology uptu
Unit 4 web technology uptuUnit 4 web technology uptu
Unit 4 web technology uptu
 
Intro to Node.js (v1)
Intro to Node.js (v1)Intro to Node.js (v1)
Intro to Node.js (v1)
 
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxConAnatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
 
Java rmi
Java rmiJava rmi
Java rmi
 
Secure PHP Coding
Secure PHP CodingSecure PHP Coding
Secure PHP Coding
 
An Attacker's View of Serverless and GraphQL Apps - Abhay Bhargav - AppSec Ca...
An Attacker's View of Serverless and GraphQL Apps - Abhay Bhargav - AppSec Ca...An Attacker's View of Serverless and GraphQL Apps - Abhay Bhargav - AppSec Ca...
An Attacker's View of Serverless and GraphQL Apps - Abhay Bhargav - AppSec Ca...
 
Java Basics
Java BasicsJava Basics
Java Basics
 
nGram full text search (by 이성욱)
nGram full text search (by 이성욱)nGram full text search (by 이성욱)
nGram full text search (by 이성욱)
 

Similar to Introduction to Ruby

Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Nilesh Panchal
 
Ruby on Rails : First Mile
Ruby on Rails : First MileRuby on Rails : First Mile
Ruby on Rails : First Mile
Gourab Mitra
 
Ruby on Rails (RoR) as a back-end processor for Apex
Ruby on Rails (RoR) as a back-end processor for Apex Ruby on Rails (RoR) as a back-end processor for Apex
Ruby on Rails (RoR) as a back-end processor for Apex
Espen Brækken
 
Experiments in Sharing Java VM Technology with CRuby
Experiments in Sharing Java VM Technology with CRubyExperiments in Sharing Java VM Technology with CRuby
Experiments in Sharing Java VM Technology with CRuby
Matthew Gaudet
 
Exciting JavaScript - Part II
Exciting JavaScript - Part IIExciting JavaScript - Part II
Exciting JavaScript - Part II
Eugene Lazutkin
 
Mac ruby deployment
Mac ruby deploymentMac ruby deployment
Mac ruby deployment
Thilo Utke
 
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
Hiroshi SHIBATA
 
How DSL works on Ruby
How DSL works on RubyHow DSL works on Ruby
How DSL works on Ruby
Hiroshi SHIBATA
 
Roscon2021 Executor
Roscon2021 ExecutorRoscon2021 Executor
Roscon2021 Executor
klepsydratechnologie
 
An introduction to the ruby ecosystem
An introduction to the ruby ecosystemAn introduction to the ruby ecosystem
An introduction to the ruby ecosystem
Geison Goes
 
Algoritmi e Calcolo Parallelo 2012/2013 - OpenMP
Algoritmi e Calcolo Parallelo 2012/2013 - OpenMPAlgoritmi e Calcolo Parallelo 2012/2013 - OpenMP
Algoritmi e Calcolo Parallelo 2012/2013 - OpenMP
Pier Luca Lanzi
 
Ruby on Rails - An overview
Ruby on Rails -  An overviewRuby on Rails -  An overview
Ruby on Rails - An overview
Thomas Asikis
 
Why Ruby?
Why Ruby? Why Ruby?
Why Ruby?
IT Weekend
 
Exciting JavaScript - Part I
Exciting JavaScript - Part IExciting JavaScript - Part I
Exciting JavaScript - Part I
Eugene Lazutkin
 
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
Hiroshi SHIBATA
 
Open arkcompiler
Open arkcompilerOpen arkcompiler
Open arkcompiler
yiwei yang
 
Rake: Not Your Father's Build Tool
Rake: Not Your Father's Build ToolRake: Not Your Father's Build Tool
Rake: Not Your Father's Build Tool
filmprog
 

Similar to Introduction to Ruby (20)

Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
 
Ruby on Rails : First Mile
Ruby on Rails : First MileRuby on Rails : First Mile
Ruby on Rails : First Mile
 
Ruby on Rails (RoR) as a back-end processor for Apex
Ruby on Rails (RoR) as a back-end processor for Apex Ruby on Rails (RoR) as a back-end processor for Apex
Ruby on Rails (RoR) as a back-end processor for Apex
 
Experiments in Sharing Java VM Technology with CRuby
Experiments in Sharing Java VM Technology with CRubyExperiments in Sharing Java VM Technology with CRuby
Experiments in Sharing Java VM Technology with CRuby
 
Exciting JavaScript - Part II
Exciting JavaScript - Part IIExciting JavaScript - Part II
Exciting JavaScript - Part II
 
Mac ruby deployment
Mac ruby deploymentMac ruby deployment
Mac ruby deployment
 
IJTC%202009%20JRuby
IJTC%202009%20JRubyIJTC%202009%20JRuby
IJTC%202009%20JRuby
 
IJTC%202009%20JRuby
IJTC%202009%20JRubyIJTC%202009%20JRuby
IJTC%202009%20JRuby
 
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
 
How DSL works on Ruby
How DSL works on RubyHow DSL works on Ruby
How DSL works on Ruby
 
Roscon2021 Executor
Roscon2021 ExecutorRoscon2021 Executor
Roscon2021 Executor
 
An introduction to the ruby ecosystem
An introduction to the ruby ecosystemAn introduction to the ruby ecosystem
An introduction to the ruby ecosystem
 
Algoritmi e Calcolo Parallelo 2012/2013 - OpenMP
Algoritmi e Calcolo Parallelo 2012/2013 - OpenMPAlgoritmi e Calcolo Parallelo 2012/2013 - OpenMP
Algoritmi e Calcolo Parallelo 2012/2013 - OpenMP
 
Ruby on Rails - An overview
Ruby on Rails -  An overviewRuby on Rails -  An overview
Ruby on Rails - An overview
 
MacRuby
MacRubyMacRuby
MacRuby
 
Why Ruby?
Why Ruby? Why Ruby?
Why Ruby?
 
Exciting JavaScript - Part I
Exciting JavaScript - Part IExciting JavaScript - Part I
Exciting JavaScript - Part I
 
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
 
Open arkcompiler
Open arkcompilerOpen arkcompiler
Open arkcompiler
 
Rake: Not Your Father's Build Tool
Rake: Not Your Father's Build ToolRake: Not Your Father's Build Tool
Rake: Not Your Father's Build Tool
 

More from kim.mens

Software Maintenance and Evolution
Software Maintenance and EvolutionSoftware Maintenance and Evolution
Software Maintenance and Evolution
kim.mens
 
Context-Oriented Programming
Context-Oriented ProgrammingContext-Oriented Programming
Context-Oriented Programming
kim.mens
 
Software Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented ProgrammingSoftware Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented Programming
kim.mens
 
Bad Code Smells
Bad Code SmellsBad Code Smells
Bad Code Smells
kim.mens
 
Object-Oriented Design Heuristics
Object-Oriented Design HeuristicsObject-Oriented Design Heuristics
Object-Oriented Design Heuristics
kim.mens
 
Software Patterns
Software PatternsSoftware Patterns
Software Patterns
kim.mens
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
kim.mens
 
Domain Modelling
Domain ModellingDomain Modelling
Domain Modelling
kim.mens
 
Object-Oriented Application Frameworks
Object-Oriented Application FrameworksObject-Oriented Application Frameworks
Object-Oriented Application Frameworks
kim.mens
 
Towards a Context-Oriented Software Implementation Framework
Towards a Context-Oriented Software Implementation FrameworkTowards a Context-Oriented Software Implementation Framework
Towards a Context-Oriented Software Implementation Framework
kim.mens
 
Towards a Taxonomy of Context-Aware Software Variabilty Approaches
Towards a Taxonomy of Context-Aware Software Variabilty ApproachesTowards a Taxonomy of Context-Aware Software Variabilty Approaches
Towards a Taxonomy of Context-Aware Software Variabilty Approaches
kim.mens
 
Breaking the Walls: A Unified Vision on Context-Oriented Software Engineering
Breaking the Walls: A Unified Vision on Context-Oriented Software EngineeringBreaking the Walls: A Unified Vision on Context-Oriented Software Engineering
Breaking the Walls: A Unified Vision on Context-Oriented Software Engineering
kim.mens
 
Context-oriented programming
Context-oriented programmingContext-oriented programming
Context-oriented programming
kim.mens
 
Basics of reflection
Basics of reflectionBasics of reflection
Basics of reflection
kim.mens
 
Advanced Reflection in Java
Advanced Reflection in JavaAdvanced Reflection in Java
Advanced Reflection in Java
kim.mens
 
Basics of reflection in java
Basics of reflection in javaBasics of reflection in java
Basics of reflection in java
kim.mens
 
Reflection in Ruby
Reflection in RubyReflection in Ruby
Reflection in Ruby
kim.mens
 
Introduction to Smalltalk
Introduction to SmalltalkIntroduction to Smalltalk
Introduction to Smalltalk
kim.mens
 
A gentle introduction to reflection
A gentle introduction to reflectionA gentle introduction to reflection
A gentle introduction to reflection
kim.mens
 
Managing the Evolution of Information Systems with Intensional Views and Rela...
Managing the Evolution of Information Systems with Intensional Views and Rela...Managing the Evolution of Information Systems with Intensional Views and Rela...
Managing the Evolution of Information Systems with Intensional Views and Rela...
kim.mens
 

More from kim.mens (20)

Software Maintenance and Evolution
Software Maintenance and EvolutionSoftware Maintenance and Evolution
Software Maintenance and Evolution
 
Context-Oriented Programming
Context-Oriented ProgrammingContext-Oriented Programming
Context-Oriented Programming
 
Software Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented ProgrammingSoftware Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented Programming
 
Bad Code Smells
Bad Code SmellsBad Code Smells
Bad Code Smells
 
Object-Oriented Design Heuristics
Object-Oriented Design HeuristicsObject-Oriented Design Heuristics
Object-Oriented Design Heuristics
 
Software Patterns
Software PatternsSoftware Patterns
Software Patterns
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
Domain Modelling
Domain ModellingDomain Modelling
Domain Modelling
 
Object-Oriented Application Frameworks
Object-Oriented Application FrameworksObject-Oriented Application Frameworks
Object-Oriented Application Frameworks
 
Towards a Context-Oriented Software Implementation Framework
Towards a Context-Oriented Software Implementation FrameworkTowards a Context-Oriented Software Implementation Framework
Towards a Context-Oriented Software Implementation Framework
 
Towards a Taxonomy of Context-Aware Software Variabilty Approaches
Towards a Taxonomy of Context-Aware Software Variabilty ApproachesTowards a Taxonomy of Context-Aware Software Variabilty Approaches
Towards a Taxonomy of Context-Aware Software Variabilty Approaches
 
Breaking the Walls: A Unified Vision on Context-Oriented Software Engineering
Breaking the Walls: A Unified Vision on Context-Oriented Software EngineeringBreaking the Walls: A Unified Vision on Context-Oriented Software Engineering
Breaking the Walls: A Unified Vision on Context-Oriented Software Engineering
 
Context-oriented programming
Context-oriented programmingContext-oriented programming
Context-oriented programming
 
Basics of reflection
Basics of reflectionBasics of reflection
Basics of reflection
 
Advanced Reflection in Java
Advanced Reflection in JavaAdvanced Reflection in Java
Advanced Reflection in Java
 
Basics of reflection in java
Basics of reflection in javaBasics of reflection in java
Basics of reflection in java
 
Reflection in Ruby
Reflection in RubyReflection in Ruby
Reflection in Ruby
 
Introduction to Smalltalk
Introduction to SmalltalkIntroduction to Smalltalk
Introduction to Smalltalk
 
A gentle introduction to reflection
A gentle introduction to reflectionA gentle introduction to reflection
A gentle introduction to reflection
 
Managing the Evolution of Information Systems with Intensional Views and Rela...
Managing the Evolution of Information Systems with Intensional Views and Rela...Managing the Evolution of Information Systems with Intensional Views and Rela...
Managing the Evolution of Information Systems with Intensional Views and Rela...
 

Recently uploaded

Remote Sensing and Computational, Evolutionary, Supercomputing, and Intellige...
Remote Sensing and Computational, Evolutionary, Supercomputing, and Intellige...Remote Sensing and Computational, Evolutionary, Supercomputing, and Intellige...
Remote Sensing and Computational, Evolutionary, Supercomputing, and Intellige...
University of Maribor
 
Leaf Initiation, Growth and Differentiation.pdf
Leaf Initiation, Growth and Differentiation.pdfLeaf Initiation, Growth and Differentiation.pdf
Leaf Initiation, Growth and Differentiation.pdf
RenuJangid3
 
Observation of Io’s Resurfacing via Plume Deposition Using Ground-based Adapt...
Observation of Io’s Resurfacing via Plume Deposition Using Ground-based Adapt...Observation of Io’s Resurfacing via Plume Deposition Using Ground-based Adapt...
Observation of Io’s Resurfacing via Plume Deposition Using Ground-based Adapt...
Sérgio Sacani
 
The use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptx
The use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptxThe use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptx
The use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptx
MAGOTI ERNEST
 
Introduction to Mean Field Theory(MFT).pptx
Introduction to Mean Field Theory(MFT).pptxIntroduction to Mean Field Theory(MFT).pptx
Introduction to Mean Field Theory(MFT).pptx
zeex60
 
Topic: SICKLE CELL DISEASE IN CHILDREN-3.pdf
Topic: SICKLE CELL DISEASE IN CHILDREN-3.pdfTopic: SICKLE CELL DISEASE IN CHILDREN-3.pdf
Topic: SICKLE CELL DISEASE IN CHILDREN-3.pdf
TinyAnderson
 
Nutraceutical market, scope and growth: Herbal drug technology
Nutraceutical market, scope and growth: Herbal drug technologyNutraceutical market, scope and growth: Herbal drug technology
Nutraceutical market, scope and growth: Herbal drug technology
Lokesh Patil
 
Oedema_types_causes_pathophysiology.pptx
Oedema_types_causes_pathophysiology.pptxOedema_types_causes_pathophysiology.pptx
Oedema_types_causes_pathophysiology.pptx
muralinath2
 
Phenomics assisted breeding in crop improvement
Phenomics assisted breeding in crop improvementPhenomics assisted breeding in crop improvement
Phenomics assisted breeding in crop improvement
IshaGoswami9
 
3D Hybrid PIC simulation of the plasma expansion (ISSS-14)
3D Hybrid PIC simulation of the plasma expansion (ISSS-14)3D Hybrid PIC simulation of the plasma expansion (ISSS-14)
3D Hybrid PIC simulation of the plasma expansion (ISSS-14)
David Osipyan
 
Mudde & Rovira Kaltwasser. - Populism in Europe and the Americas - Threat Or...
Mudde &  Rovira Kaltwasser. - Populism in Europe and the Americas - Threat Or...Mudde &  Rovira Kaltwasser. - Populism in Europe and the Americas - Threat Or...
Mudde & Rovira Kaltwasser. - Populism in Europe and the Americas - Threat Or...
frank0071
 
Unveiling the Energy Potential of Marshmallow Deposits.pdf
Unveiling the Energy Potential of Marshmallow Deposits.pdfUnveiling the Energy Potential of Marshmallow Deposits.pdf
Unveiling the Energy Potential of Marshmallow Deposits.pdf
Erdal Coalmaker
 
What is greenhouse gasses and how many gasses are there to affect the Earth.
What is greenhouse gasses and how many gasses are there to affect the Earth.What is greenhouse gasses and how many gasses are there to affect the Earth.
What is greenhouse gasses and how many gasses are there to affect the Earth.
moosaasad1975
 
SAR of Medicinal Chemistry 1st by dk.pdf
SAR of Medicinal Chemistry 1st by dk.pdfSAR of Medicinal Chemistry 1st by dk.pdf
SAR of Medicinal Chemistry 1st by dk.pdf
KrushnaDarade1
 
Seminar of U.V. Spectroscopy by SAMIR PANDA
 Seminar of U.V. Spectroscopy by SAMIR PANDA Seminar of U.V. Spectroscopy by SAMIR PANDA
Seminar of U.V. Spectroscopy by SAMIR PANDA
SAMIR PANDA
 
Richard's aventures in two entangled wonderlands
Richard's aventures in two entangled wonderlandsRichard's aventures in two entangled wonderlands
Richard's aventures in two entangled wonderlands
Richard Gill
 
ESR spectroscopy in liquid food and beverages.pptx
ESR spectroscopy in liquid food and beverages.pptxESR spectroscopy in liquid food and beverages.pptx
ESR spectroscopy in liquid food and beverages.pptx
PRIYANKA PATEL
 
Shallowest Oil Discovery of Turkiye.pptx
Shallowest Oil Discovery of Turkiye.pptxShallowest Oil Discovery of Turkiye.pptx
Shallowest Oil Discovery of Turkiye.pptx
Gokturk Mehmet Dilci
 
Chapter 12 - climate change and the energy crisis
Chapter 12 - climate change and the energy crisisChapter 12 - climate change and the energy crisis
Chapter 12 - climate change and the energy crisis
tonzsalvador2222
 
Lateral Ventricles.pdf very easy good diagrams comprehensive
Lateral Ventricles.pdf very easy good diagrams comprehensiveLateral Ventricles.pdf very easy good diagrams comprehensive
Lateral Ventricles.pdf very easy good diagrams comprehensive
silvermistyshot
 

Recently uploaded (20)

Remote Sensing and Computational, Evolutionary, Supercomputing, and Intellige...
Remote Sensing and Computational, Evolutionary, Supercomputing, and Intellige...Remote Sensing and Computational, Evolutionary, Supercomputing, and Intellige...
Remote Sensing and Computational, Evolutionary, Supercomputing, and Intellige...
 
Leaf Initiation, Growth and Differentiation.pdf
Leaf Initiation, Growth and Differentiation.pdfLeaf Initiation, Growth and Differentiation.pdf
Leaf Initiation, Growth and Differentiation.pdf
 
Observation of Io’s Resurfacing via Plume Deposition Using Ground-based Adapt...
Observation of Io’s Resurfacing via Plume Deposition Using Ground-based Adapt...Observation of Io’s Resurfacing via Plume Deposition Using Ground-based Adapt...
Observation of Io’s Resurfacing via Plume Deposition Using Ground-based Adapt...
 
The use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptx
The use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptxThe use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptx
The use of Nauplii and metanauplii artemia in aquaculture (brine shrimp).pptx
 
Introduction to Mean Field Theory(MFT).pptx
Introduction to Mean Field Theory(MFT).pptxIntroduction to Mean Field Theory(MFT).pptx
Introduction to Mean Field Theory(MFT).pptx
 
Topic: SICKLE CELL DISEASE IN CHILDREN-3.pdf
Topic: SICKLE CELL DISEASE IN CHILDREN-3.pdfTopic: SICKLE CELL DISEASE IN CHILDREN-3.pdf
Topic: SICKLE CELL DISEASE IN CHILDREN-3.pdf
 
Nutraceutical market, scope and growth: Herbal drug technology
Nutraceutical market, scope and growth: Herbal drug technologyNutraceutical market, scope and growth: Herbal drug technology
Nutraceutical market, scope and growth: Herbal drug technology
 
Oedema_types_causes_pathophysiology.pptx
Oedema_types_causes_pathophysiology.pptxOedema_types_causes_pathophysiology.pptx
Oedema_types_causes_pathophysiology.pptx
 
Phenomics assisted breeding in crop improvement
Phenomics assisted breeding in crop improvementPhenomics assisted breeding in crop improvement
Phenomics assisted breeding in crop improvement
 
3D Hybrid PIC simulation of the plasma expansion (ISSS-14)
3D Hybrid PIC simulation of the plasma expansion (ISSS-14)3D Hybrid PIC simulation of the plasma expansion (ISSS-14)
3D Hybrid PIC simulation of the plasma expansion (ISSS-14)
 
Mudde & Rovira Kaltwasser. - Populism in Europe and the Americas - Threat Or...
Mudde &  Rovira Kaltwasser. - Populism in Europe and the Americas - Threat Or...Mudde &  Rovira Kaltwasser. - Populism in Europe and the Americas - Threat Or...
Mudde & Rovira Kaltwasser. - Populism in Europe and the Americas - Threat Or...
 
Unveiling the Energy Potential of Marshmallow Deposits.pdf
Unveiling the Energy Potential of Marshmallow Deposits.pdfUnveiling the Energy Potential of Marshmallow Deposits.pdf
Unveiling the Energy Potential of Marshmallow Deposits.pdf
 
What is greenhouse gasses and how many gasses are there to affect the Earth.
What is greenhouse gasses and how many gasses are there to affect the Earth.What is greenhouse gasses and how many gasses are there to affect the Earth.
What is greenhouse gasses and how many gasses are there to affect the Earth.
 
SAR of Medicinal Chemistry 1st by dk.pdf
SAR of Medicinal Chemistry 1st by dk.pdfSAR of Medicinal Chemistry 1st by dk.pdf
SAR of Medicinal Chemistry 1st by dk.pdf
 
Seminar of U.V. Spectroscopy by SAMIR PANDA
 Seminar of U.V. Spectroscopy by SAMIR PANDA Seminar of U.V. Spectroscopy by SAMIR PANDA
Seminar of U.V. Spectroscopy by SAMIR PANDA
 
Richard's aventures in two entangled wonderlands
Richard's aventures in two entangled wonderlandsRichard's aventures in two entangled wonderlands
Richard's aventures in two entangled wonderlands
 
ESR spectroscopy in liquid food and beverages.pptx
ESR spectroscopy in liquid food and beverages.pptxESR spectroscopy in liquid food and beverages.pptx
ESR spectroscopy in liquid food and beverages.pptx
 
Shallowest Oil Discovery of Turkiye.pptx
Shallowest Oil Discovery of Turkiye.pptxShallowest Oil Discovery of Turkiye.pptx
Shallowest Oil Discovery of Turkiye.pptx
 
Chapter 12 - climate change and the energy crisis
Chapter 12 - climate change and the energy crisisChapter 12 - climate change and the energy crisis
Chapter 12 - climate change and the energy crisis
 
Lateral Ventricles.pdf very easy good diagrams comprehensive
Lateral Ventricles.pdf very easy good diagrams comprehensiveLateral Ventricles.pdf very easy good diagrams comprehensive
Lateral Ventricles.pdf very easy good diagrams comprehensive
 

Introduction to Ruby