Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Open source development trends - CVO Leerstad 2013

Open source development trends - CVO Leerstad 2013

Slides for my CVO Leerstad 2013 talk about open source development trends

Thijs Feryn

April 25, 2013
Tweet

More Decks by Thijs Feryn

Other Decks in Technology

Transcript

  1. Open%source%development%trends
    Thijs%Feryn
    Evangelist
    +32%(0)9%218%79%06
    [email protected]
    donderdag 25 april 13

    View Slide

  2. Hi#
    my#name#
    is#Thijs
    donderdag 25 april 13

    View Slide

  3. I’m#
    an#evangelist#at
    donderdag 25 april 13

    View Slide

  4. I’m#
    a#board#member#
    at
    donderdag 25 april 13

    View Slide

  5. donderdag 25 april 13

    View Slide

  6. donderdag 25 april 13

    View Slide

  7. Modern%web%developer
    donderdag 25 april 13

    View Slide

  8. Modern%web%developer
    Code Infrastructure
    Agile%processes
    Quality%assurance
    Frontend%vs%
    backend
    Project%
    management
    Build%&%release%cycles
    Performance%&%scalability
    Security
    Flexibility
    donderdag 25 april 13

    View Slide

  9. Internet
    donderdag 25 april 13

    View Slide

  10. Military
    donderdag 25 april 13

    View Slide

  11. ScienTfic
    donderdag 25 april 13

    View Slide

  12. Public%(hobbyism)
    donderdag 25 april 13

    View Slide

  13. Corporate
    donderdag 25 april 13

    View Slide

  14. EVcommerce%&%web%applicaTons
    donderdag 25 april 13

    View Slide

  15. Web%2.0
    donderdag 25 april 13

    View Slide

  16. SoXware%As%A%Service
    donderdag 25 april 13

    View Slide

  17. Social%media
    donderdag 25 april 13

    View Slide

  18. Cloud
    donderdag 25 april 13

    View Slide

  19. Mobile
    donderdag 25 april 13

    View Slide

  20. Big%data
    donderdag 25 april 13

    View Slide

  21. EvoluTon%of%programming%languages
    donderdag 25 april 13

    View Slide

  22. EvoluTon%of%programming%languages
    ✓C
    ✓C++
    ✓C#
    ✓ObjecTve%C
    ✓Perl
    ✓VB(A)
    ✓Java
    ✓Javascript
    ✓PHP
    ✓Ruby
    ✓Python
    ✓Node.js
    donderdag 25 april 13

    View Slide

  23. TradiTonal%languages%are%sTll%there
    donderdag 25 april 13

    View Slide

  24. Mix%&%match
    donderdag 25 april 13

    View Slide

  25. ScripTng%languages%are%accepted/respected
    PHP,%
    Perl,%Javascript,%
    Ruby,%Python,%Bash
    donderdag 25 april 13

    View Slide

  26. donderdag 25 april 13

    View Slide

  27. Proprietary%vs%(free%&)%open%source%soXware
    donderdag 25 april 13

    View Slide

  28. donderdag 25 april 13

    View Slide

  29. Security through obscurity
    donderdag 25 april 13

    View Slide

  30. donderdag 25 april 13

    View Slide

  31. Liability
    donderdag 25 april 13

    View Slide

  32. Linux%is%a%
    cancer
    Steve%Ballmer,%CEO%of%MicrosoX,%%June%2001
    donderdag 25 april 13

    View Slide

  33. donderdag 25 april 13

    View Slide

  34. Microsoft has changed as a company and is becoming more open in the
    way that we work with and collaborate with others in the industry, in how
    we listen to customers, and in our approach to the cloud.
    We contribute to and partner with open source communities and promote
    interoperability to make it easier and less costly for customers to develop
    and manage mixed IT environments. We actively participate in the
    standards setting process and support established and emerging
    standards in our products.
    In the cloud, we support key standards that provide the building blocks for
    open, interoperable cloud services, and we support developer choice of
    programming languages. We support data portability and believe
    customers own and control their data, no matter where it resides.
    donderdag 25 april 13

    View Slide

  35. Passion
    donderdag 25 april 13

    View Slide

  36. donderdag 25 april 13

    View Slide

  37. Frontend%vs%backend
    donderdag 25 april 13

    View Slide

  38. Design%pacerns
    donderdag 25 april 13

    View Slide

  39. Decorator%pacern
    donderdag 25 april 13

    View Slide

  40. interface ServiceClient
    {
    function getData();
    }
    class MyWebServiceClient implements ServiceClient
    {
    private $data;
    function MyWebServiceClient()
    {
    $client = new SoapClient("some.wsdl");
    $this->data = $client->getDataFunction();
    }
    function getData()
    {
    return $this->data;
    }
    }
    donderdag 25 april 13

    View Slide

  41. $client = new MyWebServiceClient();
    // Later in your code, and possibly in multiple
    places
    print $client->getData();
    donderdag 25 april 13

    View Slide

  42. abstract class ServiceClientDecorator implements ServiceClient
    {
    protected $serviceClient;
    public function __construct(ServiceClient $serviceClient)
    {
    $this->serviceClient = $serviceClient;
    }
    }
    class HtmlEntitiesDecorator extends ServiceClientDecorator
    {
    public function getData()
    {
    return htmlentities($this->serviceClient->getData());
    }
    }
    class ParagraphDecorator extends ServiceClientDecorator
    {
    public function getData()
    {
    return ''.$this->serviceClient->getData().'';
    }
    }
    donderdag 25 april 13

    View Slide

  43. $client = new MyWebServiceClient();
    // Add our decorators
    $client = new HtmlEntititesDecorator($client);
    $client = new ParagraphDecorator($client);
    // Later in your code, and possibly in multiple
    places
    print $client->getData();
    donderdag 25 april 13

    View Slide

  44. Factory%pacern
    donderdag 25 april 13

    View Slide

  45. class DatabaseFactory
    {
    // The factory function takes as an argument the
    // name of the class to produce
    public static function getInstance($driver)
    {
    // Attempt to include the the file containing the class
    // (not necessary if you use a custom autoloader)
    if(include_once(dirname(__FILE__).'/drivers/database_'.
    $driver.'.php'))
    {
    // Build the name of the class, instantiate, and
    return
    $driver_class = 'Database_'.$driver;
    return new $driver_class;
    }
    else
    {
    throw new Exception('Database driver not found');
    }
    }
    }
    // To use, call the factory's static method:
    $db = DatabaseFactory::getInstance('MySQL');
    donderdag 25 april 13

    View Slide

  46. Singleton%pacern
    donderdag 25 april 13

    View Slide

  47. class Database
    {
    // A static property to hold the single instance of the class
    private static $instance;
    // The constructor is private so that outside code cannot instantiate
    private function __construct() { }
    // All code that needs to get and instance of the class should call
    // this function like so: $db = Database::getInstance();
    public function getInstance()
    {
    // If there is no instance, create one
    if (!isset(self::$instance)) {
    $c = __CLASS__;
    self::$instance = new $c;
    }
    return self::$instance;
    }
    // Block the clone method
    private function __clone() {}
    }
    // To use, call the static method to get the only instance
    $db = Database::getInstance();
    donderdag 25 april 13

    View Slide

  48. Dependency%injecTon%pacern
    donderdag 25 april 13

    View Slide

  49. class Book
    {
    ! public function __construct()
    {
    ! ! $registry = RegistrySingleton::getInstance();
    ! ! $this->_database = $registry->database;
    ! ! // or
    ! ! global $databaseConnection;
    ! ! $this->_database = $database;
    ! }
    }
    $book = new Book();
    donderdag 25 april 13

    View Slide

  50. class Book
    {
    ! private $_databaseConnection;
    ! public function __construct() { }
    ! public function
    setDatabaseConnection($databaseConnection) {
    ! ! $this->_databaseConnection = $databaseConnection;
    ! }
    }
    $book = new Book();
    $book->setDatabase($databaseConnection);
    donderdag 25 april 13

    View Slide

  51. Welcome%back%Javascript!
    donderdag 25 april 13

    View Slide

  52. donderdag 25 april 13

    View Slide

  53. donderdag 25 april 13

    View Slide

  54. HTML5%features
    ✓Canvas%drawing
    ✓Movie%support
    ✓Offline%data
    ✓Document%ediTng
    ✓Drag%&%drop
    ✓GeolocaTon
    ✓File%manipulaTon
    ✓New%intuiTve%tags%&%elements
    donderdag 25 april 13

    View Slide

  55. donderdag 25 april 13

    View Slide

  56. donderdag 25 april 13

    View Slide

  57. Request
    &
    Response
    donderdag 25 april 13

    View Slide

  58. Methods
    &
    Status0
    codes
    donderdag 25 april 13

    View Slide

  59. Headers
    &
    Body
    donderdag 25 april 13

    View Slide

  60. GET$/$HTTP/1.1
    Host:$www.cvoleerstad.be
    User8Agent:$Mozilla/5.0$(Macintosh;$Intel$Mac$OS$X$
    10.8;$rv:20.0)$Gecko/20100101$Firefox/20.0
    Accept:$text/html,application/xhtml+xml,application/
    xml;q=0.9,*/*;q=0.8
    Accept8Language:$nl,en;q=0.7,fr8be;q=0.3
    Accept8Encoding:$gzip,$deflate
    Cookie:$
    52aaaa602e4730981271b4385bdb39c7=8ff0e3dd7f1ec82d1e83
    f000e467e500;$
    __utma=206997569.1837407744.1366871232.1366871232.136
    6871232.1;$__utmb=206997569.1.10.1366871232;$
    __utmc=206997569;$
    __utmz=206997569.1366871232.1.1.utmcsr=(direct)|
    utmccn=(direct)|utmcmd=(none)
    Connection:$keep8alive
    donderdag 25 april 13

    View Slide

  61. HTTP/1.1$200$OK
    Date:$Thu,$25$Apr$2013$06:27:20$GMT
    Server:$Apache/1.3.42$(Unix)$PHP/5.2.17$
    mod_log_bytes/1.2$mod_bwlimited/1.4$
    mod_auth_passthrough/1.8$FrontPage/5.0.2.2635$
    mod_ssl/2.8.31$OpenSSL/0.9.7a
    X8Powered8By:$PHP/5.2.17
    P3P:$CP="NOI$ADM$DEV$PSAi$COM$NAV$OUR$OTRo$STP$IND$
    DEM"
    Expires:$Mon,$1$Jan$2001$00:00:00$GMT
    Last8Modified:$Thu,$25$Apr$2013$06:27:21$GMT
    Cache8Control:$no8store,$no8cache,$must8revalidate,$
    post8check=0,$pre8check=0
    Pragma:$no8cache
    Keep8Alive:$timeout=15,$max=93
    Connection:$Keep8Alive
    Transfer8Encoding:$chunked
    Content8Type:$text/html;$charset=utf88
    donderdag 25 april 13

    View Slide

  62. Status0
    codes
    hcp://www.w3.org/Protocols/rfc2616/rfc2616Vsec10.html
    hcp://en.wikipedia.org/wiki/List_of_HTTP_status_codes
    donderdag 25 april 13

    View Slide

  63. 1000range
    Magic,'
    fuggedaboudid!
    donderdag 25 april 13

    View Slide

  64. 2000range
    Check!
    donderdag 25 april 13

    View Slide

  65. 200
    201
    202
    203
    OK
    Created
    Accepted
    Non3Authorita7ve9
    Informa7on
    donderdag 25 april 13

    View Slide

  66. 204
    205
    206
    No9Content
    Reset9Content
    Par7al9Content
    donderdag 25 april 13

    View Slide

  67. 3000range
    Talk'to'that'guy'over'
    there
    donderdag 25 april 13

    View Slide

  68. 301
    302
    303
    304
    Moved9permanently
    Found
    See9other
    Not9modified
    donderdag 25 april 13

    View Slide

  69. 305
    306
    307
    Use9Proxy
    Unused
    Temporary9Redirect
    donderdag 25 april 13

    View Slide

  70. 4000range
    Dude,'you'f’d'up!
    donderdag 25 april 13

    View Slide

  71. 400
    403
    404
    405
    408
    Bad9request
    Forbidden
    Not9found
    Method9not9allowed
    Request97meout
    donderdag 25 april 13

    View Slide

  72. 400
    401
    402
    403
    404
    Bad9Request
    Unauthorized
    Payment9Required
    Forbidden
    Not9Found
    donderdag 25 april 13

    View Slide

  73. 405
    406
    407
    408
    409
    Method9Not9Allowed
    Not9Acceptable
    Proxy9Authen7ca7on9
    Required
    Request9Timeout
    Conflict
    donderdag 25 april 13

    View Slide

  74. 410
    411
    412
    413
    414
    Gone
    Length9Required
    Precondi7on9Failed
    Request9En7ty9Too9Large
    Request3URI9Too9Long
    donderdag 25 april 13

    View Slide

  75. 415
    416
    417
    Unsupported9Media9Type
    Requested9Range9Not9
    Sa7sfiable
    Expecta7on9Failed
    donderdag 25 april 13

    View Slide

  76. 5000range
    Sorry'man,'we'f’d'
    up!
    donderdag 25 april 13

    View Slide

  77. 500
    501
    502
    503
    504
    505
    Internal9server9error
    Not9implemented
    Bad9gateway
    Service9unavailable
    Gateway97meout
    HTTP9Version9Not9
    Supported
    donderdag 25 april 13

    View Slide

  78. Request
    Headers
    donderdag 25 april 13

    View Slide

  79. Accept
    Accept3Charset
    Accept3Encoding
    Accept3language
    Authorization
    Cache3control
    Connection
    Cookie
    Content3length
    Date
    text/plain
    u^8
    gzip,9deflate
    en,nl;q=0.7,fr3be;q=0.3
    Basic9QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    no3cache
    close
    bla=ja;9foo=bar
    1024
    Tue,9159Nov91994908:12:319GMT
    donderdag 25 april 13

    View Slide

  80. Host
    If3None3Match
    Pragma
    Proxy3Authorization
    Referer
    Upgrade
    User3Agent
    Via
    www.fronteers.nl
    "737060cd8c284d8af7ad3082f209582d"
    no3cache
    Basic9
    QWxhZGRpbjpvcGVuIHNl
    c2FtZQ==
    h=p://www.combell.com
    Mozilla/5.09
    websocket
    1.09fred,91.19example.com9(Apache/1.1)
    donderdag 25 april 13

    View Slide

  81. Response
    Headers
    donderdag 25 april 13

    View Slide

  82. Age
    Allow
    Cache3control
    Connection
    Content3Encoding
    Content3Language
    Content3Length
    Content3Type
    Date
    12
    GET,HEAD
    max3age=3600
    close
    gzip
    nl
    1024
    text/html;9charset=u^38
    Tue,9159Nov91994908:12:319GMT
    donderdag 25 april 13

    View Slide

  83. ETag
    Expires
    Last3Modified
    Location
    Pragma
    Server
    Set3Cookie
    Transfer3Encoding
    Vary
    737060cd8c284d8af7ad3082f209582d
    Thu,9019Dec91994916:00:009GMT
    Thu,9019Dec91994916:00:009GMT
    hkp://www.combell.com
    no3cache
    My9magic9server
    bla=abc;9session=12345
    chuncked
    Accept3encoding
    donderdag 25 april 13

    View Slide

  84. GET$/$HTTP/1.1
    Host:$www.cvoleerstad.be
    User8Agent:$Mozilla/5.0$(Macintosh;$Intel$Mac$OS$X$
    10.8;$rv:20.0)$Gecko/20100101$Firefox/20.0
    Accept:$text/html,application/xhtml+xml,application/
    xml;q=0.9,*/*;q=0.8
    Accept8Language:$nl,en;q=0.7,fr8be;q=0.3
    Accept8Encoding:$gzip,$deflate
    Cookie:$
    52aaaa602e4730981271b4385bdb39c7=8ff0e3dd7f1ec82d1e83
    f000e467e500;$
    __utma=206997569.1837407744.1366871232.1366871232.136
    6871232.1;$__utmb=206997569.1.10.1366871232;$
    __utmc=206997569;$
    __utmz=206997569.1366871232.1.1.utmcsr=(direct)|
    utmccn=(direct)|utmcmd=(none)
    Connection:$keep8alive
    donderdag 25 april 13

    View Slide

  85. HTTP/1.1$200$OK
    Date:$Thu,$25$Apr$2013$06:27:20$GMT
    Server:$Apache/1.3.42$(Unix)$PHP/5.2.17$
    mod_log_bytes/1.2$mod_bwlimited/1.4$
    mod_auth_passthrough/1.8$FrontPage/5.0.2.2635$
    mod_ssl/2.8.31$OpenSSL/0.9.7a
    X8Powered8By:$PHP/5.2.17
    P3P:$CP="NOI$ADM$DEV$PSAi$COM$NAV$OUR$OTRo$STP$IND$
    DEM"
    Expires:$Mon,$1$Jan$2001$00:00:00$GMT
    Last8Modified:$Thu,$25$Apr$2013$06:27:21$GMT
    Cache8Control:$no8store,$no8cache,$must8revalidate,$
    post8check=0,$pre8check=0
    Pragma:$no8cache
    Keep8Alive:$timeout=15,$max=93
    Connection:$Keep8Alive
    Transfer8Encoding:$chunked
    Content8Type:$text/html;$charset=utf88
    donderdag 25 april 13

    View Slide

  86. Caching
    donderdag 25 april 13

    View Slide

  87. ETag
    If#Non#Match:-"3e86#410#35968bc"
    ETag:-"3e86#410#35968bc"
    donderdag 25 april 13

    View Slide

  88. Expires
    Expires-"Wed,-1-Jan-2014-20:00:00-GMT"
    donderdag 25 april 13

    View Slide

  89. CacheJcontrol
    Cache#Control-“max#age=3600,-s#
    maxage=1000,-public,-must#revalidate”
    donderdag 25 april 13

    View Slide

  90. Max9Age
    S9maxage
    Public
    Private
    No9cache
    No9store
    Must9revalidate
    Proxy9revalidate
    TTL9for9browsers9in9seconds
    TTL9for9proxies9in9seconds
    Proxies9&9browsers9can9cache
    Only9browsers9can9cache
    Revalidate9before9dropping9from9cache
    Don’t9cache9at9all
    Browser9revalidate9before9serving9from9
    cache9
    Proxy9revalidate9before9serving9from9
    cache9
    donderdag 25 april 13

    View Slide

  91. Cookies
    donderdag 25 april 13

    View Slide

  92. Cookies
    Tracking
    Sessions
    Language
    donderdag 25 april 13

    View Slide

  93. Cookies
    HTTP cookie
    request header
    via browser
    HTTP set-cookie
    response header
    via webserver
    donderdag 25 april 13

    View Slide

  94. Service%Oriented%Architecture
    donderdag 25 april 13

    View Slide

  95. API
    Webservice
    donderdag 25 april 13

    View Slide

  96. WSDL9=9HTTP9GET
    RPC9call9=9HTTP9POST
    Not9cacheable
    No9HTTP9vocabuliary9re3use
    Complex9markup
    SOAP
    donderdag 25 april 13

    View Slide

  97. REpresentational-
    State-
    Transfer
    donderdag 25 april 13

    View Slide

  98. Developed-in-
    parallel-with-
    HTTP/1.1
    donderdag 25 april 13

    View Slide

  99. The-way-the-
    web
    -*should*-
    work
    donderdag 25 april 13

    View Slide

  100. Resources
    Stateless
    Cacheable
    Layered
    Uniform-interface
    Vocabulary-re#use
    HATEOAS
    Keywords
    donderdag 25 april 13

    View Slide

  101. donderdag 25 april 13

    View Slide

  102. David0
    Zülke
    [email protected]
    donderdag 25 april 13

    View Slide

  103. ✓A%URL%idenTfies%a%resource.%
    ✓Resources%have%a%hierarchy,%so%you%know%that%
    something%with%addiTonal%slashes%is%a%subordinate%
    resource
    ✓Verbs%are%used%to%perform%operaTons%on%
    resources
    ✓The%operaTon%is%implicit%and%not%part%of%the%URL
    ✓A%hypermedia%format%is%used%to%represent%the%
    data
    ✓Link%relaTons%are%used%to%navigate%a%service
    QuoSng0
    David0Zülke
    [email protected]
    donderdag 25 april 13

    View Slide

  104. GET
    POST
    PUT
    DELETE
    Retrieve
    Insert
    Update
    Remove
    donderdag 25 april 13

    View Slide

  105. HATEOAS
    WTF?
    donderdag 25 april 13

    View Slide

  106. Hypertext
    As
    The
    Engine
    Of
    Application
    State
    donderdag 25 april 13

    View Slide

  107. GET$/products/1234$HTTP/1.1
    Host:$example.com
    Accept:$application/vnd.com.example+xml$
    HTTP/1.1$200$OK
    Content8Type:$application/vnd.com.example+xml;$charset=utf88
    Allow:$GET,$PUT,$DELETE
    $xml$version="1.0"$encoding="utf88"$?>
    w3.org/2005/Atom">
    $$1234
    $$My$product
    $$Mijn$product
    5
    6.5
    +xml"$href="http://example.com/products/1234/payment"

    $
    Thx9
    David!
    donderdag 25 april 13

    View Slide

  108. Implementations
    donderdag 25 april 13

    View Slide

  109. Javascript
    Ajax
    Jquery
    Backbone.js
    Websockets
    donderdag 25 april 13

    View Slide

  110. Open%data
    donderdag 25 april 13

    View Slide

  111. Open%data
    ✓hcp://appsforghent.be
    ✓hcp://opendata.antwerpen.be/appsVantwerp
    ✓hcp://www.openbelgium.be%
    donderdag 25 april 13

    View Slide

  112. Version%control
    donderdag 25 april 13

    View Slide

  113. donderdag 25 april 13

    View Slide

  114. donderdag 25 april 13

    View Slide

  115. donderdag 25 april 13

    View Slide

  116. donderdag 25 april 13

    View Slide

  117. donderdag 25 april 13

    View Slide

  118. donderdag 25 april 13

    View Slide

  119. donderdag 25 april 13

    View Slide

  120. Popular%GitHub%projects
    ✓Twicer%Bootstrap
    ✓Homebrew
    ✓Ruby%On%Rails
    ✓HTML5%Boilerplate
    ✓Jquery
    ✓Node.js
    ✓Phonegap
    ✓Backbone
    ✓Linux%Kernel
    ✓Symfony2%Framework
    ✓Django%Framework
    ✓Zend%Framework%2
    ✓Git
    donderdag 25 april 13

    View Slide

  121. Not
    Invented
    Here
    donderdag 25 april 13

    View Slide

  122. donderdag 25 april 13

    View Slide

  123. Manage%dependencies
    donderdag 25 april 13

    View Slide

  124. Manage%dependencies
    ✓Add%to%project
    ✓Share%across%environment
    ✓Beste%of%both%worlds:%package%managers
    donderdag 25 april 13

    View Slide

  125. Manage%dependencies
    ✓Ruby:%Gem
    ✓Python:%Pip
    ✓Perl:%CPAN
    ✓PEAR,%PECL%&%Composer
    ✓.NET:%NuGet
    ✓Linux:%yum,%aptVget
    donderdag 25 april 13

    View Slide

  126. Dependency
    Injection
    Pattern
    donderdag 25 april 13

    View Slide

  127. Webservers
    donderdag 25 april 13

    View Slide

  128. donderdag 25 april 13

    View Slide

  129. donderdag 25 april 13

    View Slide

  130. donderdag 25 april 13

    View Slide

  131. GWS 3%9
    of9the9
    internet
    donderdag 25 april 13

    View Slide

  132. Database%servers
    donderdag 25 april 13

    View Slide

  133. donderdag 25 april 13

    View Slide

  134. donderdag 25 april 13

    View Slide

  135. donderdag 25 april 13

    View Slide

  136. donderdag 25 april 13

    View Slide

  137. “I#wish#I#had#enough#money#to#run#Oracle#
    instead#of#Postgres."#
    “Why#do#you#want#to#do#that?"#
    “I#dont,#I#just#wish#I#had#enough#money#to”#
    donderdag 25 april 13

    View Slide

  138. Addressing the needs of
    today’s internet
    donderdag 25 april 13

    View Slide

  139. Maturity%&%stability
    donderdag 25 april 13

    View Slide

  140. Availability
    donderdag 25 april 13

    View Slide

  141. Performance
    donderdag 25 april 13

    View Slide

  142. Security
    donderdag 25 april 13

    View Slide

  143. Scalability
    donderdag 25 april 13

    View Slide

  144. Social
    Mobile
    Cloud
    Data
    donderdag 25 april 13

    View Slide

  145. donderdag 25 april 13

    View Slide

  146. Mobile
    donderdag 25 april 13

    View Slide

  147. Data%...%big%data
    donderdag 25 april 13

    View Slide

  148. The tools
    have evolved
    donderdag 25 april 13

    View Slide

  149. Not-only-SQL
    donderdag 25 april 13

    View Slide

  150. donderdag 25 april 13

    View Slide

  151. donderdag 25 april 13

    View Slide

  152. donderdag 25 april 13

    View Slide

  153. Message%queues
    donderdag 25 april 13

    View Slide

  154. donderdag 25 april 13

    View Slide

  155. Varnish
    donderdag 25 april 13

    View Slide

  156. donderdag 25 april 13

    View Slide

  157. ✓Async,%nonVblocking,%eventVdriven
    ✓Javascript%based
    ✓Callbacks
    ✓Data%intensive
    ✓CK10%problem
    ✓Not%for%websites
    ✓RealVTme%communicaTon
    ✓Websockets
    ✓Hipsters
    Node.js
    donderdag 25 april 13

    View Slide

  158. var http = require('http');
    http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type':
    'text/plain'});
    res.end('Hello World\n');
    }).listen(1337, '127.0.0.1');
    console.log('Server running at http://
    127.0.0.1:1337/');
    donderdag 25 april 13

    View Slide

  159. Change
    donderdag 25 april 13

    View Slide

  160. Flexibility/elasTcity
    Scalability
    Distributed%systems
    Any%server%could%die%any%moment
    Clustering
    ReplicaTon
    Sharding
    Modularity
    donderdag 25 april 13

    View Slide

  161. Developers
    Agile
    donderdag 25 april 13

    View Slide

  162. Agile
    ✓Persons%>%processes
    ✓Usability%>%documentaTon
    ✓Late%requirement%changes
    ✓Fast%changes
    ✓Prototype%~%producTon
    ✓ConTnuous%delivery
    ✓Short%cycles
    ✓Quick%releases
    donderdag 25 april 13

    View Slide

  163. Fail fast
    donderdag 25 april 13

    View Slide

  164. Move fast
    &
    break things
    donderdag 25 april 13

    View Slide

  165. donderdag 25 april 13

    View Slide

  166. donderdag 25 april 13

    View Slide

  167. Sysadmins
    DevOps
    donderdag 25 april 13

    View Slide

  168. Patrick Debois
    “What is this DevOps thing anyway?”
    http://www.jedi.be/blog/2010/02/12/
    what-is-this-devops-thing-anyway
    @PatrickDebois
    donderdag 25 april 13

    View Slide

  169. ✓Fear of change
    ✓Risky deployment
    ✓It work on my machine
    ✓Siloisation
    http://www.jedi.be/blog/2010/02/12/
    what-is-this-devops-thing-anyway
    donderdag 25 april 13

    View Slide

  170. Kris Buytaert
    “Building Clouds since before the bookstore”
    http://www.krisbuytaert.be/blog/what-devops
    “Everything is a Freaking DNS problem”
    @KrisBuytaert
    donderdag 25 april 13

    View Slide

  171. That sweet spot between "operating
    system" or platform stack and the
    application layer
    http://www.krisbuytaert.be/blog/what-devops
    donderdag 25 april 13

    View Slide

  172. Culture collaboration, tool-chains
    http://www.krisbuytaert.be/blog/what-devops
    donderdag 25 april 13

    View Slide

  173. The systematic process of building,
    deploying, managing, and using an
    application or group of applications
    http://www.krisbuytaert.be/blog/what-devops
    donderdag 25 april 13

    View Slide

  174. Tearing%down%silos
    donderdag 25 april 13

    View Slide

  175. Infrastructure9
    =9
    code
    donderdag 25 april 13

    View Slide

  176. donderdag 25 april 13

    View Slide

  177. class$apache$(
    $$$default_mods$=$true,
    $$$service_enable$=$true,
    $$$serveradmin$$=$'[email protected]',
    $$$sendfile$$$$$=$false,
    $$$purge_vdir$$$=$true
    )${
    $$include$apache::params
    $$package${$'httpd':
    $$$$ensure$=>$installed,
    $$$$name$$$=>$$apache::params::apache_name,
    $$}
    !!#!true/false!is!sufficient!for!both!ensure!and!enable
    $$validate_bool($service_enable)
    $$service${$'httpd':
    $$$$ensure$$$$=>$$service_enable,
    $$$$name$$$$$$=>$$apache::params::apache_name,
    $$$$enable$$$$=>$$service_enable,
    $$$$subscribe$=>$Package['httpd'],
    donderdag 25 april 13

    View Slide

  178. donderdag 25 april 13

    View Slide

  179. Vagrant::Config.run$do$|config|
    $$config.vm.box$=$"lucid32"
    $$config.vm.box_url$=$"http://files.vagrantup.com/lucid32.box"
    $$config.vm.customize$[
    $$$$$$$$"modifyvm",$:id,
    $$$$$$$$"88name",$"Varnish$Training",
    $$$$$$$$"88memory",$"512"
    $$]
    $$config.vm.network$:hostonly,$"12.12.12.6"
    $$config.vm.share_folder$"v8data",$"/home/data",$"./"
    $$config.vm.provision$:chef_solo$do$|chef|
    $$$$chef.cookbooks_path$=$"./tools/chef/cookbooks"
    $$$$chef.json$=${
    $$$$$$:varnish$=>${
    $$$$$$$$$$$$:vcl_dir$=>$"/home/data",$$$$$$$$$$$$
    $$$$$$$$$$$$:version$=>$"3.0",
    $$$$$$$$$$$$:listen_port$=>$"80",
    $$$$$$$$$$$$:storage$=>$"malloc",
    $$$$$$$$$$$$:storage_size$=>$"256m",
    $$$$$$$$$$},
    $$$$$$:apache$=>${
    $$$$$$$$$$$$:listen_ports$=>$["8080"]
    $ $ }$$$$$$$$$$$$$$
    $ }
    $$$$chef.add_recipe("vim")
    $$$$chef.add_recipe("apache2")
    $$$$chef.add_recipe("apache2::mod_php5")$$$$
    $$$$chef.add_recipe("varnish::apt_repo")
    $$$$chef.add_recipe("varnish::default")
    $$end
    end
    donderdag 25 april 13

    View Slide

  180. Measure
    donderdag 25 april 13

    View Slide

  181. Measure
    ✓Google%AnalyTcs
    ✓Access_logs
    ✓Logstash
    ✓Graphite
    ✓Collectd
    ✓Statsd
    ✓New%Relic
    ✓Datadog
    donderdag 25 april 13

    View Slide

  182. The%community
    donderdag 25 april 13

    View Slide

  183. Move%fast.%Keep%up.
    donderdag 25 april 13

    View Slide

  184. And#
    on#that#
    bombshell#...
    donderdag 25 april 13

    View Slide

  185. donderdag 25 april 13

    View Slide

  186. Thanks
    donderdag 25 april 13

    View Slide