SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
one or two things
    you may not know

      about
  type systems
      phillip calçado
    http://fragmental.tw
myths
myth:type systems
are just syntax
checkers
“The fundamental purpose of a type system is to
prevent the occurrence of execution errors during
the running of a program.”

                    - Luca Cardelli, Type Systems
what kind of
   errors?
package org.apache.commons.lang.time;



public class DateUtils {
    public static boolean isSameDay(Date date1, Date
date2) {
         if (date1 == null || date2 == null) {
             throw new IllegalArgumentException("The date
must not be null");
         }
         return verifySameDay(date1, date2);
    }
}
package org.apache.commons.lang.time;



public class DateUtils {

 but why would it be
    public static boolean isSameDay(Date date1, Date
date2) {
         if (date1 == null || date2 == null) {

allowed to be null in
             throw new IllegalArgumentException("The date
must not be null");
        }

   the first place?
         Calendar cal1 = Calendar.getInstance();
        cal1.setTime(date1);
         Calendar cal2 = Calendar.getInstance();
        cal2.setTime(date2);
         return isSameDay(cal1, cal2);
    }
}
use System;


public class DatePrinter {
    public static void Main(string[] args)
    {
        Print(new DateTime());
    }

    public static void Print(DateTime d)
    {
        Console.WriteLine(d);
    }
}
☑
use System;


public class DatePrinter {
    public static void Main(string[] args)
    {
        Print(new DateTime());
    }

    public static void Print(DateTime d)
    {
        Console.WriteLine(d);
    }
}
use System;


public class DatePrinter {
    public static void Main(string[] args)
    {
        Print(null);
    }

    public static void Print(DateTime d)
    {
        Console.WriteLine(d);
    }
}
☒
use System;


public class DatePrinter {
    public static void Main(string[] args)
    {
        Print(null);
    }

    public static void Print(DateTime d)
    {
        Console.WriteLine(d);
    }
     pcalcado@pcalcado:awayday2009$
gmcs
DatePrinter.cs
}    DatePrinter.cs(7,5):
error
CS1502:
The
best
overloaded
method
match
for

     `DatePrinter.Print(System.DateTime)'
has
some
invalid
arguments
     DatePrinter.cs(10,22):
(Location
of
the
symbol
related
to
previous
error)
     DatePrinter.cs(7,5):
error
CS1503:
Argument
`#1'
cannot
convert
`null'

     expression
to
type
`System.DateTime'
     Compilation
failed:
2
error(s),
0
warnings
use System;


public class DatePrinter {
    public static void Main(string[] args)
    {
        Print(null);
    }

    public static void Print(DateTime? d)
    {
        Console.WriteLine(d);
    }
}
☑
use System;


public class DatePrinter {
    public static void Main(string[] args)
    {
        Print(null);
    }

    public static void Print(DateTime? d)
    {
        Console.WriteLine(d);
    }
}
“I call it my billion-dollar mistake. It was the
invention of the null reference in 1965. At that
time, I was designing the first comprehensive type
system [...] My goal was to ensure that all use of
references should be absolutely safe, with checking
performed automatically by the compiler. But I
couldn’t resist the temptation to put in a null
reference [...] This has led to innumerable errors
[...] which have probably caused a billion dollars of
pain and damage in the last forty years. In recent
years, a number of program analysers [...] in
Microsoft have been used to check references, and
give warnings if there is a risk they may be non-
null. More recent programming languages like Spec#
have introduced declarations for non-null references.
This is the solution, which I rejected in 1965.”

                                       - C.A.R. Hoare
myth:
dynamic
  means
   weak
what is
 weak?
“typeful programming advocates static typing, as much
as possible, and dynamic typing when necessary; the
strict observance of either or both of these
techniques leads to strong typing, intended as the
absence of unchecked run-time type errors.”

                 - Luca Cardelli, Typeful Programming
unchecked run-time type errors
pcalcado@pcalcado:~$
php
‐a
Interactive
mode
enabled
<?php

$i_am_a_string
=
"see?";

$weird_result
=
100
+
$i_am_a_string
+
20;

echo
$weird_result
.
"n";
echo
$i_am_a_string
.
"n";
?>
120
see?
unchecked run-time type errors


   $weird_result
=
100
+
“see”
+
20;

   =>
120
pcalcado@pcalcado:~$
irb
>>
weird_result
=
100
+
"see?"
+
20
TypeError:
String
can't
be
coerced
into

Fixnum

 from
(irb):1:in
`+'

 from
(irb):1
>>

myth:
     static
     means
     safe
“typeful programming advocates static typing, as much
as possible, and dynamic typing when necessary; the
strict observance of either or both of these
techniques leads to strong typing, intended as the
absence of unchecked run-time type errors.”

                 - Luca Cardelli, Typeful Programming
“typeful programming advocates static typing, as much
as possible, and dynamic typing when necessary; the
strict observance of either or both of these
techniques leads to strong typing, intended as the
absence of unchecked run-time type errors.”

                 - Luca Cardelli, Typeful Programming
type error:
$weird_result
=
100
+
“see”
+
20;

=>
120
public class NoError{
    public static void main(String[] args){

      Triangle t = new Triangle();
       t.addVertex(0,0);
       t.addVertex(10,10);
       t.addVertex(20,20);
       t.addVertex(30,30);
        System.out.println("Your triangle has "+
t.getVertices().size() + " vertices");
    }
}

class Triangle{
private List<int[]> vertices = new ArrayList<int[]>();

    public void addVertex(int x, int y){
        vertices.add(new int[]{x, y});
    }
    public List<int[]> getVertices(){

     return vertices;

   }
}
no type error:
=>
Your
triangle
has
4
vertices
myth:
static means




bureaucratic
public class Sum {

    public static int add(int a,
int b) {
        return a + b;
    }

}
add(a, b) {
            return a + b
        }


Is this hypothetical language dynamic or static?
Ruby




def add(a, b)
    a + b
end


      Dynamic
C#




((a, b) => a + b)



      Static
Clojure




(defn add [a b]
  (+ a b))


     Dynamic
Haskell




add a b = a + b



     Static
static can be
    smart
add a b = a + b



Prelude>
:load
add.hs
[1
of
1]
Compiling
Main










(
add.hs,
interpreted
)
Ok,
modules
loaded:
Main.
*Main>
:type
add
add
::
(Num
a)
=>
a
‐>
a
‐>
a
*Main>
:type
(add
1
2)
(add
1
2)
::
(Num
t)
=>
t
*Main>

myth:




only dynamic
 is flexible
>>
my_func()
NoMethodError:
undefined
method

`my_func'
for
main:Object

 from
(irb):1
>>
instance_eval("def
my_func()n
puts

666n
end")
=>
nil
>>
my_func()
666
=>
nil
>>

“we think that people use eval as a poor
   man’s    substitute   for    higher-order
   functions. Instead of passing around
   a function and call it, they pass around
   a string and eval it. [...]
   A final use of eval that we want to
   mention is for partial evaluation,multi-
   stage programming, or meta programming.
   We argue that in that case strings are
   not really the most optimal structure to
   represent programs and it is much better
   to   use programs to represent programs,
   i.e. C++-style templates, quasiquote/
   unquote as in Lisp, or code literals as
   in the various multi-stage programming
   languages.”

- The End of the Cold War Between Programming
     Languages, Erik Meijer and Peter Drayton
main =    runBASIC $ do
    10    GOSUB 1000
    20    PRINT "* Welcome to HiLo *"
    30    GOSUB 1000

    100    LET I := INT(100 * RND(0))
    200    PRINT "Guess my number:"
    210    INPUT X
    220    LET S := SGN(I-X)
    230    IF S <> 0 THEN 300

    240    FOR X := 1 TO 5
    250    PRINT X*X;" You won!"
    260    NEXT X
    270    STOP

    300 IF S <> 1 THEN 400
    310 PRINT "Your guess ";X;" is too low."
    320 GOTO 200

    400 PRINT "Your guess ";X;" is too high."
    410 GOTO 200

    1000 PRINT "*******************"
    1010 RETURN

    9999 END
652 lines of
   Haskell
what does the
 future hold?
does typing
  matter?
=>typing influences
      language features and
      tools
      =>static typing is

YES
      being wrongly bashed
      because of C#/Java just
      as dynamic was bashed
      because of PHP/Perl
      =>schools are merging
      (e.g. C# 4) and it’s
      important to know each
      one’s sweet spot
=>saying that something
     is static or dynamic
     doesn’t tell much about
     what it can do
     =>most nice features in

NO   Python/Ruby/JavaScript
     are related to meta-
     model, not typing
     =>Java/C# are
     bureaucratic for
     historical reasons, not
     limitations on typing
refs:
=>http://pico.vub.ac.be/~wdmeuter/RDL04/papers/
Meijer.pdf
=>http://lucacardelli.name/Papers/TypefulProg.A4.pdf
=>http://sadekdrobi.com/2008/12/22/null-references-
the-billion-dollar-mistake/

=>http://www.flickr.com/photos/twindx/
=>http://www.flickr.com/photos/darwinbell/
=>http://www.flickr.com/photos/wainwright/
=>http://www.flickr.com/photos/fikirbaz/

Contenu connexe

Tendances

Hacking Go Compiler Internals / GoCon 2014 Autumn
Hacking Go Compiler Internals / GoCon 2014 AutumnHacking Go Compiler Internals / GoCon 2014 Autumn
Hacking Go Compiler Internals / GoCon 2014 Autumn
Moriyoshi Koizumi
 
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
Fwdays
 
JavaScript - new features in ECMAScript 6
JavaScript - new features in ECMAScript 6JavaScript - new features in ECMAScript 6
JavaScript - new features in ECMAScript 6
Solution4Future
 

Tendances (20)

Bind me if you can
Bind me if you canBind me if you can
Bind me if you can
 
Hacking Go Compiler Internals / GoCon 2014 Autumn
Hacking Go Compiler Internals / GoCon 2014 AutumnHacking Go Compiler Internals / GoCon 2014 Autumn
Hacking Go Compiler Internals / GoCon 2014 Autumn
 
JavaScript ES6
JavaScript ES6JavaScript ES6
JavaScript ES6
 
Fun with Lambdas: C++14 Style (part 2)
Fun with Lambdas: C++14 Style (part 2)Fun with Lambdas: C++14 Style (part 2)
Fun with Lambdas: C++14 Style (part 2)
 
Building native Android applications with Mirah and Pindah
Building native Android applications with Mirah and PindahBuilding native Android applications with Mirah and Pindah
Building native Android applications with Mirah and Pindah
 
What's New In C# 7
What's New In C# 7What's New In C# 7
What's New In C# 7
 
EcmaScript 6
EcmaScript 6 EcmaScript 6
EcmaScript 6
 
Java Generics - by Example
Java Generics - by ExampleJava Generics - by Example
Java Generics - by Example
 
2018 cosup-delete unused python code safely - english
2018 cosup-delete unused python code safely - english2018 cosup-delete unused python code safely - english
2018 cosup-delete unused python code safely - english
 
ES6 in Real Life
ES6 in Real LifeES6 in Real Life
ES6 in Real Life
 
Building fast interpreters in Rust
Building fast interpreters in RustBuilding fast interpreters in Rust
Building fast interpreters in Rust
 
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
 
JavaScript - new features in ECMAScript 6
JavaScript - new features in ECMAScript 6JavaScript - new features in ECMAScript 6
JavaScript - new features in ECMAScript 6
 
Java Class Design
Java Class DesignJava Class Design
Java Class Design
 
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
 
Tuga IT 2017 - What's new in C# 7
Tuga IT 2017 - What's new in C# 7Tuga IT 2017 - What's new in C# 7
Tuga IT 2017 - What's new in C# 7
 
Rust ⇋ JavaScript
Rust ⇋ JavaScriptRust ⇋ JavaScript
Rust ⇋ JavaScript
 
Functional Algebra: Monoids Applied
Functional Algebra: Monoids AppliedFunctional Algebra: Monoids Applied
Functional Algebra: Monoids Applied
 
The best language in the world
The best language in the worldThe best language in the world
The best language in the world
 
ES6 PPT FOR 2016
ES6 PPT FOR 2016ES6 PPT FOR 2016
ES6 PPT FOR 2016
 

En vedette

En vedette (20)

Pg nordic-day-2014-2 tb-enough
Pg nordic-day-2014-2 tb-enoughPg nordic-day-2014-2 tb-enough
Pg nordic-day-2014-2 tb-enough
 
“Writing code that lasts” … or writing code you won’t hate tomorrow. - #PHPSRB16
“Writing code that lasts” … or writing code you won’t hate tomorrow. - #PHPSRB16“Writing code that lasts” … or writing code you won’t hate tomorrow. - #PHPSRB16
“Writing code that lasts” … or writing code you won’t hate tomorrow. - #PHPSRB16
 
Real World React Native & ES7
Real World React Native & ES7Real World React Native & ES7
Real World React Native & ES7
 
Expériencer les objets connectés
Expériencer les objets connectésExpériencer les objets connectés
Expériencer les objets connectés
 
SfPot Lille 07/2015 - Utiliser Symfony sur des environnements Heroku-like
SfPot Lille 07/2015 - Utiliser Symfony sur des environnements Heroku-likeSfPot Lille 07/2015 - Utiliser Symfony sur des environnements Heroku-like
SfPot Lille 07/2015 - Utiliser Symfony sur des environnements Heroku-like
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 
Symfony2 for legacy app rejuvenation: the eZ Publish case study
Symfony2 for legacy app rejuvenation: the eZ Publish case studySymfony2 for legacy app rejuvenation: the eZ Publish case study
Symfony2 for legacy app rejuvenation: the eZ Publish case study
 
Performance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfonyPerformance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfony
 
The Art of Transduction
The Art of TransductionThe Art of Transduction
The Art of Transduction
 
A tale of queues — from ActiveMQ over Hazelcast to Disque - Philipp Krenn
A tale of queues — from ActiveMQ over Hazelcast to Disque - Philipp KrennA tale of queues — from ActiveMQ over Hazelcast to Disque - Philipp Krenn
A tale of queues — from ActiveMQ over Hazelcast to Disque - Philipp Krenn
 
Grand Rapids PHP Meetup: Behavioral Driven Development with Behat
Grand Rapids PHP Meetup: Behavioral Driven Development with BehatGrand Rapids PHP Meetup: Behavioral Driven Development with Behat
Grand Rapids PHP Meetup: Behavioral Driven Development with Behat
 
ScalaItaly 2015 - Your Microservice as a Function
ScalaItaly 2015 - Your Microservice as a FunctionScalaItaly 2015 - Your Microservice as a Function
ScalaItaly 2015 - Your Microservice as a Function
 
Finagle @ SoundCloud
Finagle @ SoundCloudFinagle @ SoundCloud
Finagle @ SoundCloud
 
Profiling php5 to php7
Profiling php5 to php7Profiling php5 to php7
Profiling php5 to php7
 
Using Magnolia in a Microservices Architecture
Using Magnolia in a Microservices ArchitectureUsing Magnolia in a Microservices Architecture
Using Magnolia in a Microservices Architecture
 
All Aboard for Laravel 5.1
All Aboard for Laravel 5.1All Aboard for Laravel 5.1
All Aboard for Laravel 5.1
 
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and more
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and moreSymfony Guard Authentication: Fun with API Token, Social Login, JWT and more
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and more
 
La #NouvelleVague de l’écosystème français des startups
La #NouvelleVague de l’écosystème français des startupsLa #NouvelleVague de l’écosystème français des startups
La #NouvelleVague de l’écosystème français des startups
 
Composer in monolithic repositories
Composer in monolithic repositoriesComposer in monolithic repositories
Composer in monolithic repositories
 
Keeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and WebpackKeeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and Webpack
 

Similaire à (ThoughtWorks Away Day 2009) one or two things you may not know about typesystems

Similaire à (ThoughtWorks Away Day 2009) one or two things you may not know about typesystems (20)

Computer Project For Class XII Topic - The Snake Game
Computer Project For Class XII Topic - The Snake Game Computer Project For Class XII Topic - The Snake Game
Computer Project For Class XII Topic - The Snake Game
 
Novidades do c# 7 e 8
Novidades do c# 7 e 8Novidades do c# 7 e 8
Novidades do c# 7 e 8
 
TechTalk - Dotnet
TechTalk - DotnetTechTalk - Dotnet
TechTalk - Dotnet
 
.NET Foundation, Future of .NET and C#
.NET Foundation, Future of .NET and C#.NET Foundation, Future of .NET and C#
.NET Foundation, Future of .NET and C#
 
Chapter i(introduction to java)
Chapter i(introduction to java)Chapter i(introduction to java)
Chapter i(introduction to java)
 
Design problem
Design problemDesign problem
Design problem
 
How to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ CodeHow to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ Code
 
How to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ CodeHow to Adopt Modern C++17 into Your C++ Code
How to Adopt Modern C++17 into Your C++ Code
 
C# Today and Tomorrow
C# Today and TomorrowC# Today and Tomorrow
C# Today and Tomorrow
 
Cpp tutorial
Cpp tutorialCpp tutorial
Cpp tutorial
 
A la découverte de TypeScript
A la découverte de TypeScriptA la découverte de TypeScript
A la découverte de TypeScript
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
CppTutorial.ppt
CppTutorial.pptCppTutorial.ppt
CppTutorial.ppt
 
Introduction to typescript
Introduction to typescriptIntroduction to typescript
Introduction to typescript
 
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
 
Kotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsKotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projects
 
.net progrmming part1
.net progrmming part1.net progrmming part1
.net progrmming part1
 
Design Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on ExamplesDesign Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on Examples
 
ASP.NET
ASP.NETASP.NET
ASP.NET
 
C++ L09-Classes Part2
C++ L09-Classes Part2C++ L09-Classes Part2
C++ L09-Classes Part2
 

Plus de Phil Calçado

the afterparty: refactoring after 100x hypergrowth
the afterparty: refactoring after 100x hypergrowththe afterparty: refactoring after 100x hypergrowth
the afterparty: refactoring after 100x hypergrowth
Phil Calçado
 
don't try this at home: self-improvement as a senior leader
don't try this at home: self-improvement as a senior leaderdon't try this at home: self-improvement as a senior leader
don't try this at home: self-improvement as a senior leader
Phil Calçado
 
From microservices to serverless - Chicago CTO Summit 2019
From microservices to serverless - Chicago CTO Summit 2019From microservices to serverless - Chicago CTO Summit 2019
From microservices to serverless - Chicago CTO Summit 2019
Phil Calçado
 
The Not-So-Straightforward Road From Microservices to Serverless
The Not-So-Straightforward Road From Microservices to ServerlessThe Not-So-Straightforward Road From Microservices to Serverless
The Not-So-Straightforward Road From Microservices to Serverless
Phil Calçado
 
Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...
Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...
Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...
Phil Calçado
 
An example of Future composition in a real app
An example of Future composition in a real appAn example of Future composition in a real app
An example of Future composition in a real app
Phil Calçado
 
Evolutionary Architecture at Work
Evolutionary  Architecture at WorkEvolutionary  Architecture at Work
Evolutionary Architecture at Work
Phil Calçado
 
Structuring apps in Scala
Structuring apps in ScalaStructuring apps in Scala
Structuring apps in Scala
Phil Calçado
 
From a monolithic Ruby on Rails app to the JVM
From a monolithic  Ruby on Rails app  to the JVMFrom a monolithic  Ruby on Rails app  to the JVM
From a monolithic Ruby on Rails app to the JVM
Phil Calçado
 
Applying Evolutionary Architecture on a Popular API
Applying Evolutionary Architecture on a  Popular APIApplying Evolutionary Architecture on a  Popular API
Applying Evolutionary Architecture on a Popular API
Phil Calçado
 

Plus de Phil Calçado (20)

the afterparty: refactoring after 100x hypergrowth
the afterparty: refactoring after 100x hypergrowththe afterparty: refactoring after 100x hypergrowth
the afterparty: refactoring after 100x hypergrowth
 
don't try this at home: self-improvement as a senior leader
don't try this at home: self-improvement as a senior leaderdon't try this at home: self-improvement as a senior leader
don't try this at home: self-improvement as a senior leader
 
The Economics of Microservices (redux)
The Economics of Microservices (redux)The Economics of Microservices (redux)
The Economics of Microservices (redux)
 
From microservices to serverless - Chicago CTO Summit 2019
From microservices to serverless - Chicago CTO Summit 2019From microservices to serverless - Chicago CTO Summit 2019
From microservices to serverless - Chicago CTO Summit 2019
 
The Not-So-Straightforward Road From Microservices to Serverless
The Not-So-Straightforward Road From Microservices to ServerlessThe Not-So-Straightforward Road From Microservices to Serverless
The Not-So-Straightforward Road From Microservices to Serverless
 
Ten Years of Failing Microservices
Ten Years of Failing MicroservicesTen Years of Failing Microservices
Ten Years of Failing Microservices
 
The Next Generation of Microservices
The Next Generation of MicroservicesThe Next Generation of Microservices
The Next Generation of Microservices
 
The Next Generation of Microservices — YOW 2017 Brisbane
The Next Generation of Microservices — YOW 2017 BrisbaneThe Next Generation of Microservices — YOW 2017 Brisbane
The Next Generation of Microservices — YOW 2017 Brisbane
 
The Economics of Microservices (2017 CraftConf)
The Economics of Microservices  (2017 CraftConf)The Economics of Microservices  (2017 CraftConf)
The Economics of Microservices (2017 CraftConf)
 
Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...
Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...
Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...
 
A Brief Talk On High-Performing Organisations
A Brief Talk On High-Performing OrganisationsA Brief Talk On High-Performing Organisations
A Brief Talk On High-Performing Organisations
 
Three Years of Microservices at SoundCloud - Distributed Matters Berlin 2015
Three Years of Microservices at SoundCloud - Distributed Matters Berlin 2015Three Years of Microservices at SoundCloud - Distributed Matters Berlin 2015
Three Years of Microservices at SoundCloud - Distributed Matters Berlin 2015
 
Rhein-Main Scala Enthusiasts — Your microservice as a Function
Rhein-Main Scala Enthusiasts — Your microservice as a FunctionRhein-Main Scala Enthusiasts — Your microservice as a Function
Rhein-Main Scala Enthusiasts — Your microservice as a Function
 
Finagle-Based Microservices at SoundCloud
Finagle-Based Microservices at SoundCloudFinagle-Based Microservices at SoundCloud
Finagle-Based Microservices at SoundCloud
 
An example of Future composition in a real app
An example of Future composition in a real appAn example of Future composition in a real app
An example of Future composition in a real app
 
APIs: The Problems with Eating your Own Dog Food
APIs: The Problems with Eating your Own Dog FoodAPIs: The Problems with Eating your Own Dog Food
APIs: The Problems with Eating your Own Dog Food
 
Evolutionary Architecture at Work
Evolutionary  Architecture at WorkEvolutionary  Architecture at Work
Evolutionary Architecture at Work
 
Structuring apps in Scala
Structuring apps in ScalaStructuring apps in Scala
Structuring apps in Scala
 
From a monolithic Ruby on Rails app to the JVM
From a monolithic  Ruby on Rails app  to the JVMFrom a monolithic  Ruby on Rails app  to the JVM
From a monolithic Ruby on Rails app to the JVM
 
Applying Evolutionary Architecture on a Popular API
Applying Evolutionary Architecture on a  Popular APIApplying Evolutionary Architecture on a  Popular API
Applying Evolutionary Architecture on a Popular API
 

Dernier

Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
FIDO Alliance
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
FIDO Alliance
 
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
Muhammad Subhan
 

Dernier (20)

Overview of Hyperledger Foundation
Overview of Hyperledger FoundationOverview of Hyperledger Foundation
Overview of Hyperledger Foundation
 
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The InsideCollecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
 
Using IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandUsing IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & Ireland
 
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
 
TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and Insight
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
 
Design and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data ScienceDesign and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data Science
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
 
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
 
Design Guidelines for Passkeys 2024.pptx
Design Guidelines for Passkeys 2024.pptxDesign Guidelines for Passkeys 2024.pptx
Design Guidelines for Passkeys 2024.pptx
 
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
 
State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
 
Intro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptxIntro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptx
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 

(ThoughtWorks Away Day 2009) one or two things you may not know about typesystems