SlideShare a Scribd company logo
1 of 110
Download to read offline
THINKING
FUNCTIONALLY
 IN
 RUBY.
      @tomstuart
1: Functional
   programming
   is a pretty
   neat idea.
2: Enumerable
   contains
   some useful
   methods.
I hope
these things
are connected.
1.
(Functional programming is a
      pretty neat idea)
What is
  functional
programming?
A programming
style.
Two broad
families of
languages:
• Scheme
  • Common Lisp
  • Dylan
  • Clojure

1. Lisp-like
  • Dynamically typed
  • Homoiconic (code is data)
  • Lists are fundamental
• Standard ML
  • Haskell
  • OCaml
  • Scala (sort of)

2. ML-like
  • Statically typed (+ reconstruction)
  • Code is not data
  • ADTs and pattern matching
Functions
as values
What is
a function?
1               2
7                                       6
    2
                    3       3
    6                   1       7
                5       4           8
        4
Functions
as values
“First-class functions”
      “closures”, “lambdas”,
     “anonymous functions”



Implies: higher-order
      functions
No side
effects
Values are immutable

 All functions do is
 return their result
        No state
         No I/O
(In reality,
 different languages
   accomplish this
to varying degrees.)
Implies: recursion

Implies: persistent
  data structues
So what?
Unfortunately...
Declarative                  T!
                           W HA
 programming
is counterintuitive when
 youʼre accustomed to

  imperative               HOW
                                 !
 programming
Copying is expensive
But!
Referential
            transparency
“an expression can be replaced with its value”

       •   Good for efficiency
           • caching/memoisation/inlining
           • ultimately more efficient
       •   Good for programmer understanding
           • state is incredibly hard to deal with
           • ultimately more intuitive
       •   Good for code reuse and testing
Highly expressive

Strongly compositional

  Deeply satisfying
Future-proof
• Mooreʼs Law is running out of steam
  • similar transistor density, more cores
• The futureʼs concurrent
• Concurrent access to mutable state is hard...
  • but not if you donʼt have mutable state!
• Parallelising an algorithm is hard...
  • but itʼs easier if your code isnʼt overspecified
OK seriously:
 so what?
Ruby can do
 some of this.
 Not really a functional language, but we
can pretend and get some of the benefits.
Use function values
       blocks, procs


lambda { |x| x + 1 }
Consider treating
  your values
 as immutable
   State is rarely worth it.
  It will kill you in the end.
http://clojure.org/state
Use the
functional-flavoured
    parts of the
  standard library
Think functionally.
     Be declarative.
     What, not how.
2.
(Enumerable contains
 some useful methods)
Enumerable#zip
[1, 2, 3, 4].
  zip([5, 6, 7, 8])
1   2   3   4


5   6   7   8
1   5   2   6   3   7   4   8
[                            ]
[1 , 5],[2 , 6],[3 , 7],[4 , 8]
[1, 2, 3, 4].
  zip([5, 6, 7, 8],
      [9, 10, 11, 12])
Enumerable#select
 (a.k.a. #find_all)
{ |x| x.odd? }
1
?
1
!
?
1
1   2
!
?
1   ?
1   2
!
?
1   "
    ?
    2
[1, 2, 3, 4].
 select { |x| x.odd? }
1   2   3   4
?   ?   ?   ?
1   2   3   4
!
?
1   "
    ?
    2   !
        ?
        3   "
            ?
            4
1       3
!
?
1       !
        ?
        3
    1       3
[ 1, 3 ]
Enumerable#partition
[1, 2, 3, 4].
  partition { |x| x.odd? }
1   2   3   4
?   ?   ?   ?
1   2   3   4
!
?
1   "
    ?
    2   !
        ?
        3   "
            ?
            4
1   3   2   4
!
?   !
    ?   "
        ?   "
            ?
1       3       2       4
!
?       !
        ?       "
                ?       "
                        ?
    1       3       2       4
[[ 1 , 3 ] , [ 2 , 4 ]]
Enumerable#map
(a.k.a. #collect)
{ |x| x * 3 }
2
×3
6
2
×3
2
6
[1, 2, 3, 4].
   map { |x| x * 3 }
1    2    3    4
×3
3    ×3
     6    ×3
          9    ×3
               12
1    2    3    4
×3
1    ×3
     2    ×3
          3    ×3
               4
3    6    9    12
[ , , , ]
 3   6   9 12
Enumerable#inject
  (a.k.a. #reduce)
{ |x, y| x + y }
3       5
        8
    +
3   5
3+5     8
[1, 2, 3, 4].
  inject(0) { |x,y| x+y }
0
        1
        1
    +
                2
                3
            +
                        3
                        6
                    +
                                4
                            +
                            10
0 1
0+1
      1   2
      1+2
              3   3
              3+3
                      6   4
                      6 + 4 10
module Enumerable
  def inject(initial)
    result = initial

   for element in self
     result = yield(result, element)
   end

    result
  end
end
a.k.a. “left fold”
(foldl, fold_left)
0 1 2 3 4
10
(((0 + 1) + 2) + 3) + 4
...versus “right fold”
(foldr, fold_right)
1 2 3 4 0
10
1 + (2 + (3 + (4 + 0)))
The initial argument is
      optional...
[1, 2, 3, 4].
  inject { |x,y| x+y }
[2, 3, 4].4].
[1, 2, 3,
  inject(1)|x,y| x+yx+y }
  inject { { |x,y| }
...but only if the
output is the same
type as the input...
>> ['El', 'rug'].
   inject(0) { |l,s| l + s.length }
=> 5

>> ['El', 'rug'].
   inject { |l,s| l + s.length }
TypeError: can't convert Fixnum into String
  from (irb):1:in `+'
  from (irb):1
  from (irb):1:in `inject'
  from (irb):1:in `each'
  from (irb):1:in `inject'
  from (irb):1
...and itʼs meaningful
 to get nil when the
  collection is empty
>> [].inject { |x,y| x+y }
=> nil

>> [].inject(0) { |x,y| x+y }
=> 0

>> [].inject(1) { |x,y| x*y }
=> 1
P O SE !
C O M
[1, 2, 3, 4].
  map { |x| x * 3 }.
  inject(0) { |x| x+y }
1       2       3       4
    ×3
    3       ×3
            6       ×3
                    9       ×3
                            12

0
        3
    +
                9
            +
                    +
                    18

                            +
                            30
1       2        3       4
 ×3
 1        ×3
          2        ×3
                   3      ×3
                          4

0 3
0+3   3   6
      3+6      9   9
               9 + 9 18 12
                        18+12 30
I am so
 excited.
What now?
Review your
Ruby code.
Func it up.
result = ''
for name in names
  unless result.empty?
    result << ', '
  end
  result << name
end
result
!
result = ''
for name in names
  unless result.empty?
    result << ', '
  end
  result << name
end
result



names.join(', ')
def count_mines_near(x, y)
  count = 0
  for i in x-1..x+1
    for j in y-1..y+1
      count += 1 if mine_at?(i, j)
    end
  end
  count
end
!
def count_mines_near(x, y)
  count = 0
  for i in x-1..x+1
    for j in y-1..y+1
      count += 1 if mine_at?(i, j)
    end
  end
  count
end

def count_mines_near(x, y)
  ((x-1..x+1).entries * 3).sort.
    zip((y-1..y+1).entries * 3).
    select { |x, y| mine_at?(x, y) }.
    length
end
[1, 2, 3, 1, 2, 3, 1, 2, 3].sort =
 [1, 1, 1, 2, 2, 2, 3, 3, 3]




def count_mines_near(x, y) # = (2, 8)
  ((x-1..x+1).entries * 3).sort.
    zip((y-1..y+1).entries * 3).
    select { |x, y| mine_at?(x, y) }.
    length
end
[1, 2, 3, 1, 2, 3, 1, 2, 3].sort =
 [1, 1, 1, 2, 2, 2, 3, 3, 3].zip(
 [7, 8, 9, 7, 8, 9, 7, 8, 9]) =
 [[1, 7], [1, 8], [1, 9],
  [2, 7], [2, 8], [2, 9],
  [3, 7], [3, 8], [3, 9]]


def count_mines_near(x, y) # = (2, 8)
  ((x-1..x+1).entries * 3).sort.
    zip((y-1..y+1).entries * 3).
    select { |x, y| mine_at?(x, y) }.
    length
end
[1, 2, 3, 1, 2, 3, 1, 2, 3].sort =
 [1, 1, 1, 2, 2, 2, 3, 3, 3].zip(
 [7, 8, 9, 7, 8, 9, 7, 8, 9]) =
 [[1, 7], [1, 8], [1, 9],
  [2, 7], [2, 8], [2, 9],
  [3, 7], [3, 8], [3, 9]].select {…} =
 [[1, 8], [3, 7]].length = 2
def count_mines_near(x, y) # = (2, 8)
  ((x-1..x+1).entries * 3).sort.
    zip((y-1..y+1).entries * 3).
    select { |x, y| mine_at?(x, y) }.
    length
end
[      [1, 7],    [1, 8],   …,    [1, 1007],
       [2, 7],    [2, 8],   …,    [2, 1007],
            …,              …,            …,
    [1000, 7], [1000, 8],   …, [1000, 1007],
    [1001, 7], [1000, 8],   …, [1001, 1007]]




def count_mines_near(x, y)
  ((x-500..x+500).entries * 1001).sort.
    zip((y-500..y+500).entries * 1001).
    select { |x, y| mine_at?(x, y) }.
    length
end
[      [1, 7],    [1, 8],   …,    [1, 1007],
       [2, 7],    [2, 8],   …,    [2, 1007],
            …,              …,            …,
    [1000, 7], [1000, 8],   …, [1000, 1007],
    [1001, 7], [1000, 8],   …, [1001, 1007]]




      173      96      121       78    237

                       705
def numbers_near(n, radius)
  ((n - radius)..(n + radius)).entries
end

def squares_near(x, y, radius)
  diameter = (radius * 2) + 1
  (numbers_near(x, radius) * diameter).
    sort.
    zip(numbers_near(y, radius) * diameter)
end

def count_mines_near(x, y, radius = 1)
  squares_near(x, y, radius).
    select { |x, y| mine_at?(x, y) }.
    length
end
Learn a
functional language
• OCaml
• Scheme (Google “SICP”)
• Clojure
• Scala
• Haskell? Erlang?
Thanks!
@tomstuart / tom@experthuman.com
http://www.flickr.com/photos/somemixedstuff/2403249501/




  http://en.wikipedia.org/wiki/File:Modified-pc-case.png

More Related Content

What's hot

Adding and subtracting polynomials
Adding and subtracting polynomialsAdding and subtracting polynomials
Adding and subtracting polynomialsewhitener
 
Add/Subtract polynomials
Add/Subtract polynomialsAdd/Subtract polynomials
Add/Subtract polynomialsswartzje
 
Chapter 2.5
Chapter 2.5Chapter 2.5
Chapter 2.5nglaze10
 
Monads and Monoids by Oleksiy Dyagilev
Monads and Monoids by Oleksiy DyagilevMonads and Monoids by Oleksiy Dyagilev
Monads and Monoids by Oleksiy DyagilevJavaDayUA
 
Python data structures
Python data structuresPython data structures
Python data structureskalyanibedekar
 
Notes 12.1 identifying, adding & subtracting polynomials
Notes 12.1   identifying, adding & subtracting polynomialsNotes 12.1   identifying, adding & subtracting polynomials
Notes 12.1 identifying, adding & subtracting polynomialsLori Rapp
 
Addition and subtraction in polynomials
Addition and subtraction in polynomialsAddition and subtraction in polynomials
Addition and subtraction in polynomialssaidyein
 
Cheat sheet python3
Cheat sheet python3Cheat sheet python3
Cheat sheet python3sxw2k
 
Adding Polynomials
Adding PolynomialsAdding Polynomials
Adding Polynomialschulitt
 
Python3 cheatsheet
Python3 cheatsheetPython3 cheatsheet
Python3 cheatsheetGil Cohen
 
Adding and subtracting polynomials
Adding and subtracting polynomialsAdding and subtracting polynomials
Adding and subtracting polynomialsholmsted
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real Worldosfameron
 
สมการเชิงเส้นตัวแปรเดียว
สมการเชิงเส้นตัวแปรเดียวสมการเชิงเส้นตัวแปรเดียว
สมการเชิงเส้นตัวแปรเดียวDestiny Nooppynuchy
 

What's hot (20)

Prashant tiwari ppt.on
Prashant tiwari ppt.on Prashant tiwari ppt.on
Prashant tiwari ppt.on
 
Adding and subtracting polynomials
Adding and subtracting polynomialsAdding and subtracting polynomials
Adding and subtracting polynomials
 
Add/Subtract polynomials
Add/Subtract polynomialsAdd/Subtract polynomials
Add/Subtract polynomials
 
Chapter 2.5
Chapter 2.5Chapter 2.5
Chapter 2.5
 
Monads and Monoids by Oleksiy Dyagilev
Monads and Monoids by Oleksiy DyagilevMonads and Monoids by Oleksiy Dyagilev
Monads and Monoids by Oleksiy Dyagilev
 
Operations on Polynomials
Operations on PolynomialsOperations on Polynomials
Operations on Polynomials
 
Python data structures
Python data structuresPython data structures
Python data structures
 
A tour of Python
A tour of PythonA tour of Python
A tour of Python
 
Notes 12.1 identifying, adding & subtracting polynomials
Notes 12.1   identifying, adding & subtracting polynomialsNotes 12.1   identifying, adding & subtracting polynomials
Notes 12.1 identifying, adding & subtracting polynomials
 
Addition and subtraction in polynomials
Addition and subtraction in polynomialsAddition and subtraction in polynomials
Addition and subtraction in polynomials
 
Cheat sheet python3
Cheat sheet python3Cheat sheet python3
Cheat sheet python3
 
Adding Polynomials
Adding PolynomialsAdding Polynomials
Adding Polynomials
 
Multiplying polynomials
Multiplying polynomialsMultiplying polynomials
Multiplying polynomials
 
Python3 cheatsheet
Python3 cheatsheetPython3 cheatsheet
Python3 cheatsheet
 
Adding and subtracting polynomials
Adding and subtracting polynomialsAdding and subtracting polynomials
Adding and subtracting polynomials
 
Python_ 3 CheatSheet
Python_ 3 CheatSheetPython_ 3 CheatSheet
Python_ 3 CheatSheet
 
0304 ch 3 day 4
0304 ch 3 day 40304 ch 3 day 4
0304 ch 3 day 4
 
Multiplying Polynomials
Multiplying PolynomialsMultiplying Polynomials
Multiplying Polynomials
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real World
 
สมการเชิงเส้นตัวแปรเดียว
สมการเชิงเส้นตัวแปรเดียวสมการเชิงเส้นตัวแปรเดียว
สมการเชิงเส้นตัวแปรเดียว
 

Similar to Thinking Functionally In Ruby

Distributive Property
Distributive PropertyDistributive Property
Distributive PropertyJessca Lundin
 
An overview of Python 2.7
An overview of Python 2.7An overview of Python 2.7
An overview of Python 2.7decoupled
 
Five Languages in a Moment
Five Languages in a MomentFive Languages in a Moment
Five Languages in a MomentSergio Gil
 
Haskellで学ぶ関数型言語
Haskellで学ぶ関数型言語Haskellで学ぶ関数型言語
Haskellで学ぶ関数型言語ikdysfm
 
Python_Cheat_Sheet_Keywords_1664634397.pdf
Python_Cheat_Sheet_Keywords_1664634397.pdfPython_Cheat_Sheet_Keywords_1664634397.pdf
Python_Cheat_Sheet_Keywords_1664634397.pdfsagar414433
 
Python_Cheat_Sheet_Keywords_1664634397.pdf
Python_Cheat_Sheet_Keywords_1664634397.pdfPython_Cheat_Sheet_Keywords_1664634397.pdf
Python_Cheat_Sheet_Keywords_1664634397.pdfsagar414433
 
Python for data science by www.dmdiploma.com
Python for data science by www.dmdiploma.comPython for data science by www.dmdiploma.com
Python for data science by www.dmdiploma.comShwetaAggarwal56
 
Coscup2021-rust-toturial
Coscup2021-rust-toturialCoscup2021-rust-toturial
Coscup2021-rust-toturialWayne Tsai
 
A gentle introduction to functional programming through music and clojure
A gentle introduction to functional programming through music and clojureA gentle introduction to functional programming through music and clojure
A gentle introduction to functional programming through music and clojurePaul Lam
 
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov VyacheslavSeminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov VyacheslavVyacheslav Arbuzov
 
[1062BPY12001] Data analysis with R / week 2
[1062BPY12001] Data analysis with R / week 2[1062BPY12001] Data analysis with R / week 2
[1062BPY12001] Data analysis with R / week 2Kevin Chun-Hsien Hsu
 
Functional programming in ruby
Functional programming in rubyFunctional programming in ruby
Functional programming in rubyKoen Handekyn
 
Datastructure tree
Datastructure treeDatastructure tree
Datastructure treerantd
 
Clojure for Data Science
Clojure for Data ScienceClojure for Data Science
Clojure for Data ScienceMike Anderson
 

Similar to Thinking Functionally In Ruby (20)

Python lecture 05
Python lecture 05Python lecture 05
Python lecture 05
 
Distributive Property
Distributive PropertyDistributive Property
Distributive Property
 
An overview of Python 2.7
An overview of Python 2.7An overview of Python 2.7
An overview of Python 2.7
 
Numpy Talk at SIAM
Numpy Talk at SIAMNumpy Talk at SIAM
Numpy Talk at SIAM
 
Five Languages in a Moment
Five Languages in a MomentFive Languages in a Moment
Five Languages in a Moment
 
Haskellで学ぶ関数型言語
Haskellで学ぶ関数型言語Haskellで学ぶ関数型言語
Haskellで学ぶ関数型言語
 
Python_Cheat_Sheet_Keywords_1664634397.pdf
Python_Cheat_Sheet_Keywords_1664634397.pdfPython_Cheat_Sheet_Keywords_1664634397.pdf
Python_Cheat_Sheet_Keywords_1664634397.pdf
 
Python_Cheat_Sheet_Keywords_1664634397.pdf
Python_Cheat_Sheet_Keywords_1664634397.pdfPython_Cheat_Sheet_Keywords_1664634397.pdf
Python_Cheat_Sheet_Keywords_1664634397.pdf
 
Python for data science by www.dmdiploma.com
Python for data science by www.dmdiploma.comPython for data science by www.dmdiploma.com
Python for data science by www.dmdiploma.com
 
Enter The Matrix
Enter The MatrixEnter The Matrix
Enter The Matrix
 
Coscup2021-rust-toturial
Coscup2021-rust-toturialCoscup2021-rust-toturial
Coscup2021-rust-toturial
 
A gentle introduction to functional programming through music and clojure
A gentle introduction to functional programming through music and clojureA gentle introduction to functional programming through music and clojure
A gentle introduction to functional programming through music and clojure
 
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov VyacheslavSeminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
 
[1062BPY12001] Data analysis with R / week 2
[1062BPY12001] Data analysis with R / week 2[1062BPY12001] Data analysis with R / week 2
[1062BPY12001] Data analysis with R / week 2
 
Functional programming in ruby
Functional programming in rubyFunctional programming in ruby
Functional programming in ruby
 
Ggplot2 v3
Ggplot2 v3Ggplot2 v3
Ggplot2 v3
 
Datastructure tree
Datastructure treeDatastructure tree
Datastructure tree
 
Prolog 7-Languages
Prolog 7-LanguagesProlog 7-Languages
Prolog 7-Languages
 
Introduction to MATLAB
Introduction to MATLABIntroduction to MATLAB
Introduction to MATLAB
 
Clojure for Data Science
Clojure for Data ScienceClojure for Data Science
Clojure for Data Science
 

More from Ross Lawley

Kanban For Software Engineering Apr 242
Kanban For Software Engineering Apr 242Kanban For Software Engineering Apr 242
Kanban For Software Engineering Apr 242Ross Lawley
 
How To Fail With Agile
How To Fail With AgileHow To Fail With Agile
How To Fail With AgileRoss Lawley
 
Evolving From Scrum To Lean
Evolving From Scrum To LeanEvolving From Scrum To Lean
Evolving From Scrum To LeanRoss Lawley
 
Anti Patterns2008
Anti Patterns2008Anti Patterns2008
Anti Patterns2008Ross Lawley
 
Metaprogramming in Ruby
Metaprogramming in RubyMetaprogramming in Ruby
Metaprogramming in RubyRoss Lawley
 
Designing For Web2
Designing For Web2 Designing For Web2
Designing For Web2 Ross Lawley
 
GOF patterns in Ruby
GOF patterns in RubyGOF patterns in Ruby
GOF patterns in RubyRoss Lawley
 
User Experience Pain Free
User Experience Pain FreeUser Experience Pain Free
User Experience Pain FreeRoss Lawley
 
Rails Conf Europe 2007 Notes
Rails Conf  Europe 2007  NotesRails Conf  Europe 2007  Notes
Rails Conf Europe 2007 NotesRoss Lawley
 
Learning To Love Forms Webvisions 07 21033
Learning To Love Forms Webvisions 07 21033Learning To Love Forms Webvisions 07 21033
Learning To Love Forms Webvisions 07 21033Ross Lawley
 
Wiki Design Luke W
Wiki Design  Luke WWiki Design  Luke W
Wiki Design Luke WRoss Lawley
 
When Interface Design Attacks
When Interface Design AttacksWhen Interface Design Attacks
When Interface Design AttacksRoss Lawley
 

More from Ross Lawley (19)

Kanban For Software Engineering Apr 242
Kanban For Software Engineering Apr 242Kanban For Software Engineering Apr 242
Kanban For Software Engineering Apr 242
 
Kanban Vs Scrum
Kanban Vs ScrumKanban Vs Scrum
Kanban Vs Scrum
 
How To Fail With Agile
How To Fail With AgileHow To Fail With Agile
How To Fail With Agile
 
Evolving From Scrum To Lean
Evolving From Scrum To LeanEvolving From Scrum To Lean
Evolving From Scrum To Lean
 
Anti Patterns2008
Anti Patterns2008Anti Patterns2008
Anti Patterns2008
 
Couch Db
Couch DbCouch Db
Couch Db
 
Metaprogramming in Ruby
Metaprogramming in RubyMetaprogramming in Ruby
Metaprogramming in Ruby
 
Designing For Web2
Designing For Web2 Designing For Web2
Designing For Web2
 
Designing Web2
Designing Web2Designing Web2
Designing Web2
 
GOF patterns in Ruby
GOF patterns in RubyGOF patterns in Ruby
GOF patterns in Ruby
 
User Experience Pain Free
User Experience Pain FreeUser Experience Pain Free
User Experience Pain Free
 
L R U G - JRuby
L R U G - JRubyL R U G - JRuby
L R U G - JRuby
 
Juggling
JugglingJuggling
Juggling
 
Rails Conf Europe 2007 Notes
Rails Conf  Europe 2007  NotesRails Conf  Europe 2007  Notes
Rails Conf Europe 2007 Notes
 
Learning To Love Forms Webvisions 07 21033
Learning To Love Forms Webvisions 07 21033Learning To Love Forms Webvisions 07 21033
Learning To Love Forms Webvisions 07 21033
 
Wiki Design Luke W
Wiki Design  Luke WWiki Design  Luke W
Wiki Design Luke W
 
B D D Intro
B D D  IntroB D D  Intro
B D D Intro
 
Thesis Carohorn
Thesis CarohornThesis Carohorn
Thesis Carohorn
 
When Interface Design Attacks
When Interface Design AttacksWhen Interface Design Attacks
When Interface Design Attacks
 

Recently uploaded

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 

Recently uploaded (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 

Thinking Functionally In Ruby