SlideShare a Scribd company logo
1 of 60
Download to read offline
You’re Going To Need A
Bigger Toolbox

DIBI 28th April 2010


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/booleansplit/2376359338/
morethanseven.net




Gareth Rushgrove


gareth rushgrove | morethanseven.net
We Used To Just Build Websites


gareth rushgrove | morethanseven.net
Probably Simple Websites


gareth rushgrove | morethanseven.net
Maybe the odd Ecommerce Site


gareth rushgrove | morethanseven.net
Then We Built Web Applications


gareth rushgrove | morethanseven.net
Now We Just Build.


gareth rushgrove | morethanseven.net
Your Toolbox is Growing


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/gordonr/42555739
1
Embrace Heterogeneous Environments


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/mk1971/2548492513/
1
No Development Tool Silver Bullet


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/mk1971/2548492513/
We Build Websites With...


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/freefoto/3436970425/
PHP, MySQL, Apache


gareth rushgrove | morethanseven.net
.NET, MSSQL, IIS


gareth rushgrove | morethanseven.net
Java, Oracle, Tomcat


gareth rushgrove | morethanseven.net
Lots of Others


gareth rushgrove | morethanseven.net
Just One Stack?


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/harrygoldenfeld/4263710200/
The Guardian Java, Python, Oracle, App Engine


gareth rushgrove | morethanseven.net
LastFM PHP, C++, Java, Hadoop, Python


gareth rushgrove | morethanseven.net
GitHub Ruby, Erlang, MySQL, Redis, Sinatra


gareth rushgrove | morethanseven.net
Twitter Ruby, Scala, Java, C/C++


gareth rushgrove | morethanseven.net
Facebook PHP, Erlang, C, MySQL, Cassandra


gareth rushgrove | morethanseven.net
2
2. Know When Your Stack is out of its Depth


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/dk_spook/2421009077/
What Should You Know About?


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/takomabibelot/220265100/
wiki.nginx.org




Serve Web Pages With Nginx


gareth rushgrove | morethanseven.net
“Apache is like Microsoft Word, it has a
        million options but you only need six. Nginx
        does those six things, and it does five of
        them 50 times faster than Apache.
        Chris Lea




Why Nginx


gareth rushgrove | morethanseven.net
server {
               listen 80;
               server_name www.example.com;

                    location / {
                        root /var/www/example.com;
                    }
            }




Nginx Example


gareth rushgrove | morethanseven.net
http {
               upstream php {
                   server localhost:8002;
               }
               upstream python {
                   server localhost:8003;
               }
            }

            server {
               server_name www.example.com;
               location / {
                     proxy_pass http://python;
               }
               location ~ /basket/* {
                     proxy_pass http://php;
               }
            }



Nginx Example


gareth rushgrove | morethanseven.net
- Thin - http://code.macournoyer.com/thin/
       - Mongrel - http://github.com/fauna/mongrel/
       - Spawning - http://pypi.python.org/pypi/Spawning/
       - Unicorn - http://github.com/defunkt/unicorn/




Also See


gareth rushgrove | morethanseven.net
memcached.org




Caching with Memcached


gareth rushgrove | morethanseven.net
from django.core.cache import cache

            key = "/about/"
            content = cache.get(key)
            if not content:
                # expensive query to get content
                cache.set(key, content, 300)




Memcached Example


gareth rushgrove | morethanseven.net
- Squid - http://www.squid-cache.org
       - Varnish - http://varnish-cache.org




Also See


gareth rushgrove | morethanseven.net
lucene.apache.org/solr/




Search with Solr


gareth rushgrove | morethanseven.net
http://solr:8983/solr/products/select/
                ?q=colour:red
                &sort=price%20desc
                &rows=60
                &wt=json




Solr Example


gareth rushgrove | morethanseven.net
- Xapian - http://xapian.org
       - Sphinx - http://sphinxsearch.com
       - Nutch - http://lucene.apache.org/nutch/
       - Whoosh - http://whoosh.ca




Also See


gareth rushgrove | morethanseven.net
rabbitmq.com




Asynchronous Processing with RabbitMQ


gareth rushgrove | morethanseven.net
require 'carrot'

            q = Carrot.queue('carrot', :durable => true)
            10.times do |num|
              q.publish(num.to_s)
            end




RabbitMQ Enqueue Example


gareth rushgrove | morethanseven.net
puts "count: #{q.message_count}"

            while msg = q.pop(:ack => true)
              puts msg
              q.ack
            end

            Carrot.stop




RabbitMQ Dequeue Example


gareth rushgrove | morethanseven.net
- Apache ActiveMQ - http://activemq.apache.org
       - Beanstalk - http://kr.github.com/beanstalkd/
       - Stomp Server - http://stomp.codehaus.org
       - MemcacheQ - http://memcachedb.org/memcacheq/




Also See


gareth rushgrove | morethanseven.net
couchdb.apache.org




Data Storage With CouchDB


gareth rushgrove | morethanseven.net
<?php

                  $options['host'] = "localhost";
                  $options['port'] = 5984;

                  $couch = new CouchSimple($options);

                  $resp = $couch->send("PUT", "/test");

                  $resp = $couch->send("PUT", "/test/123",
                  '{"_id":"123","data":"Foo"}');

       ?>



CouchDB Example


gareth rushgrove | morethanseven.net
<?php

                  $options['host'] = "localhost";
                  $options['port'] = 5984;

                  $couch = new CouchSimple($options);

                  $resp = $couch->send("GET", "/test/_all_docs");

                  $resp = $couch->send("GET", "/test/123");

                  $resp = $couch->send("DELETE", "/test/");

       ?>



CouchDB Example


gareth rushgrove | morethanseven.net
- MongoDB - http://www.mongodb.org
       - Tokyo Tyrant - http://1978th.net/tokyotyrant/
       - Cassandra - http://cassandra.apache.org
       - Redis - http://code.google.com/p/redis/




Also See


gareth rushgrove | morethanseven.net
hadoop.apache.org




Data Mining With Hive


gareth rushgrove | morethanseven.net
CREATE TABLE u_data (
              userid INT,
              movieid INT,
              rating INT,
              unixtime STRING)
            ROW FORMAT DELIMITED
            FIELDS TERMINATED BY 't'
            STORED AS TEXTFILE;




Hive Create Example
Cucumber DSL Example


gareth rushgrove | morethanseven.net
LOAD DATA LOCAL INPATH 'data.txt' OVERWRITE
            INTO TABLE u_data;

            SELECT COUNT(1) FROM u_data;




Hive Load DSL Example
Cucumber Example


gareth rushgrove | morethanseven.net
add FILE weekday_mapper.py;

            INSERT OVERWRITE TABLE u_data_new
            SELECT
              TRANSFORM (userid, movieid, rating, unixtime)
              USING 'python weekday_mapper.py'
              AS (userid, movieid, rating, weekday)
            FROM u_data;

            SELECT weekday, COUNT(1)
            FROM u_data_new
            GROUP BY weekday;



Hive Map Reduce Example
Cucumber DSL Example


gareth rushgrove | morethanseven.net
- Hadoop - http://hadoop.apache.org
       - Hive - http://wiki.apache.org/hadoop/Hive/
       - Pig - http://hadoop.apache.org/pig/
       - Dumbo - http://lastfm.com/dumbo/
       - Disco - http://discoproject.org




Also See


gareth rushgrove | morethanseven.net
cukes.info




Testing with Cucumber


gareth rushgrove | morethanseven.net
Feature: google.co.uk
                To broaden their knowledge
                A user should be able
                To search for things

                       Scenario: Searching for things
                           Given I visit "http://www.google.co.uk"
                           When I fill in "q" with "wikipedia"
                           And I press "Google Search"
                           Then I should see "www.wikipedia.org"




Cucumber DSL Example


gareth rushgrove | morethanseven.net
Feature: google.co.uk
                To broaden their knowledge
                A user should be able
                To search for things

                       Scenario: Searching for things
                           Given I visit "http://www.google.co.uk"
                           When I fill in "q" with "wikipedia"
                           And I press "Google Search"
                           Then I should see "www.wikipedia.org"


            1 scenario (1 failed)
            4 steps (1 failed, 2 skipped, 1 passed)
            0m0.332s


Cucumber Results Example


gareth rushgrove | morethanseven.net
puppetlabs.com




Server Provisioning with Puppet


gareth rushgrove | morethanseven.net
class baseclass {
                $packagelist = ["sudo", "openssh-server"]
                package { $packagelist: ensure => installed }
                service { sshd:
                    name => "ssh",
                    enable => true,
                    ensure => running
                }
            }




Puppet Class Example


gareth rushgrove | morethanseven.net
node 'example.com' inherits basenode {
                $packagelist = ["nginx"]
                package { $packagelist: ensure => installed }
                service { "nginx":
                    ensure => running,
                    require => Package["nginx"]
                }
            }




Puppet Node Example


gareth rushgrove | morethanseven.net
- Chef - http://wiki.opscode.com/display/chef/Home/




Also See


gareth rushgrove | morethanseven.net
Conclusions


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/batega/1596898776/
1
Know What's Possible


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/docman/36125185/
2
Look for Opportunities


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/kgregory/500456103/
3
Experiment


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/seeminglee/3967329241/
4
Manage Complexity


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/30890318@N06/3510161637/
Questions?


gareth rushgrove | morethanseven.net   http://flickr.com/photos/psd/102332391/

More Related Content

What's hot

API analytics with Redis and Google Bigquery. NoSQL matters edition
API analytics with Redis and Google Bigquery. NoSQL matters editionAPI analytics with Redis and Google Bigquery. NoSQL matters edition
API analytics with Redis and Google Bigquery. NoSQL matters editionjavier ramirez
 
Apache Spark & Hadoop : Train-the-trainer
Apache Spark & Hadoop : Train-the-trainerApache Spark & Hadoop : Train-the-trainer
Apache Spark & Hadoop : Train-the-trainerIMC Institute
 
DansGuardian open source content filtering
DansGuardian open source content filteringDansGuardian open source content filtering
DansGuardian open source content filteringAndrew Vandever
 
OSMC 2014: Processing millions of logs with Logstash and integrating with Ela...
OSMC 2014: Processing millions of logs with Logstash and integrating with Ela...OSMC 2014: Processing millions of logs with Logstash and integrating with Ela...
OSMC 2014: Processing millions of logs with Logstash and integrating with Ela...NETWAYS
 
Install Apache Hadoop for Development/Production
Install Apache Hadoop for  Development/ProductionInstall Apache Hadoop for  Development/Production
Install Apache Hadoop for Development/ProductionIMC Institute
 
Web program-peformance-optimization
Web program-peformance-optimizationWeb program-peformance-optimization
Web program-peformance-optimizationxiaojueqq12345
 
Conquering the command line for code hackers
Conquering the command line for code hackersConquering the command line for code hackers
Conquering the command line for code hackersPavan M
 
Bigdata for small pockets, by Javier Ramirez from teowaki. RubyC Kiev 2014
Bigdata for small pockets, by Javier Ramirez from teowaki. RubyC Kiev 2014Bigdata for small pockets, by Javier Ramirez from teowaki. RubyC Kiev 2014
Bigdata for small pockets, by Javier Ramirez from teowaki. RubyC Kiev 2014javier ramirez
 
mri ruby gil
mri ruby gilmri ruby gil
mri ruby gilachempion
 
LogStash - Yes, logging can be awesome
LogStash - Yes, logging can be awesomeLogStash - Yes, logging can be awesome
LogStash - Yes, logging can be awesomeJames Turnbull
 
Analyse Tweets using Flume 1.4, Hadoop 2.7 and Hive
Analyse Tweets using Flume 1.4, Hadoop 2.7 and HiveAnalyse Tweets using Flume 1.4, Hadoop 2.7 and Hive
Analyse Tweets using Flume 1.4, Hadoop 2.7 and HiveIMC Institute
 

What's hot (14)

Scaling WordPress
Scaling WordPressScaling WordPress
Scaling WordPress
 
API analytics with Redis and Google Bigquery. NoSQL matters edition
API analytics with Redis and Google Bigquery. NoSQL matters editionAPI analytics with Redis and Google Bigquery. NoSQL matters edition
API analytics with Redis and Google Bigquery. NoSQL matters edition
 
Apache Spark & Hadoop : Train-the-trainer
Apache Spark & Hadoop : Train-the-trainerApache Spark & Hadoop : Train-the-trainer
Apache Spark & Hadoop : Train-the-trainer
 
DansGuardian open source content filtering
DansGuardian open source content filteringDansGuardian open source content filtering
DansGuardian open source content filtering
 
Nginx + PHP
Nginx + PHPNginx + PHP
Nginx + PHP
 
OSMC 2014: Processing millions of logs with Logstash and integrating with Ela...
OSMC 2014: Processing millions of logs with Logstash and integrating with Ela...OSMC 2014: Processing millions of logs with Logstash and integrating with Ela...
OSMC 2014: Processing millions of logs with Logstash and integrating with Ela...
 
curl better
curl bettercurl better
curl better
 
Install Apache Hadoop for Development/Production
Install Apache Hadoop for  Development/ProductionInstall Apache Hadoop for  Development/Production
Install Apache Hadoop for Development/Production
 
Web program-peformance-optimization
Web program-peformance-optimizationWeb program-peformance-optimization
Web program-peformance-optimization
 
Conquering the command line for code hackers
Conquering the command line for code hackersConquering the command line for code hackers
Conquering the command line for code hackers
 
Bigdata for small pockets, by Javier Ramirez from teowaki. RubyC Kiev 2014
Bigdata for small pockets, by Javier Ramirez from teowaki. RubyC Kiev 2014Bigdata for small pockets, by Javier Ramirez from teowaki. RubyC Kiev 2014
Bigdata for small pockets, by Javier Ramirez from teowaki. RubyC Kiev 2014
 
mri ruby gil
mri ruby gilmri ruby gil
mri ruby gil
 
LogStash - Yes, logging can be awesome
LogStash - Yes, logging can be awesomeLogStash - Yes, logging can be awesome
LogStash - Yes, logging can be awesome
 
Analyse Tweets using Flume 1.4, Hadoop 2.7 and Hive
Analyse Tweets using Flume 1.4, Hadoop 2.7 and HiveAnalyse Tweets using Flume 1.4, Hadoop 2.7 and Hive
Analyse Tweets using Flume 1.4, Hadoop 2.7 and Hive
 

Viewers also liked

Introduction to ZeroMQ
Introduction to ZeroMQIntroduction to ZeroMQ
Introduction to ZeroMQYiHung Lee
 
Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq
Roman Kuznietsov: Zeromq: sockets on steroids.Zero mqRoman Kuznietsov: Zeromq: sockets on steroids.Zero mq
Roman Kuznietsov: Zeromq: sockets on steroids.Zero mqSphere Consulting Inc
 
ZeroMQ Is The Answer
ZeroMQ Is The AnswerZeroMQ Is The Answer
ZeroMQ Is The AnswerIan Barber
 
Overview of ZeroMQ
Overview of ZeroMQOverview of ZeroMQ
Overview of ZeroMQpieterh
 

Viewers also liked (7)

Introduction to ZeroMQ
Introduction to ZeroMQIntroduction to ZeroMQ
Introduction to ZeroMQ
 
ZeroMQ
ZeroMQZeroMQ
ZeroMQ
 
Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq
Roman Kuznietsov: Zeromq: sockets on steroids.Zero mqRoman Kuznietsov: Zeromq: sockets on steroids.Zero mq
Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq
 
zeromq
zeromqzeromq
zeromq
 
RabbitMq
RabbitMqRabbitMq
RabbitMq
 
ZeroMQ Is The Answer
ZeroMQ Is The AnswerZeroMQ Is The Answer
ZeroMQ Is The Answer
 
Overview of ZeroMQ
Overview of ZeroMQOverview of ZeroMQ
Overview of ZeroMQ
 

Similar to You're Going To Need A Bigger Toolbox

Config managament for development environments iii
Config managament for development environments iiiConfig managament for development environments iii
Config managament for development environments iiiPuppet
 
Building Go Web Apps
Building Go Web AppsBuilding Go Web Apps
Building Go Web AppsMark
 
Config managament for development environments ii
Config managament for development environments iiConfig managament for development environments ii
Config managament for development environments iiGareth Rushgrove
 
Rugged Driven Development with Gauntlt
Rugged Driven Development with GauntltRugged Driven Development with Gauntlt
Rugged Driven Development with GauntltJames Wickett
 
Vagrant and Configuration Management
Vagrant and Configuration ManagementVagrant and Configuration Management
Vagrant and Configuration ManagementGareth Rushgrove
 
Using and scaling Rack and Rack-based middleware
Using and scaling Rack and Rack-based middlewareUsing and scaling Rack and Rack-based middleware
Using and scaling Rack and Rack-based middlewareAlona Mekhovova
 
Puppet Module Reusability - What I Learned from Shipping to the Forge
Puppet Module Reusability - What I Learned from Shipping to the ForgePuppet Module Reusability - What I Learned from Shipping to the Forge
Puppet Module Reusability - What I Learned from Shipping to the ForgePuppet
 
Introduction to Apache Camel
Introduction to Apache CamelIntroduction to Apache Camel
Introduction to Apache CamelClaus Ibsen
 
The Challenges of Container Configuration
The Challenges of Container ConfigurationThe Challenges of Container Configuration
The Challenges of Container ConfigurationGareth Rushgrove
 
Continuously Testing Infrastructure - Beyond Module Testing - PuppetConf 2014
Continuously Testing Infrastructure - Beyond Module Testing - PuppetConf 2014Continuously Testing Infrastructure - Beyond Module Testing - PuppetConf 2014
Continuously Testing Infrastructure - Beyond Module Testing - PuppetConf 2014Puppet
 
KubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
KubeCon EU 2016: Kubernetes and the Potential for Higher Level InterfacesKubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
KubeCon EU 2016: Kubernetes and the Potential for Higher Level InterfacesKubeAcademy
 
Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014Puppet
 
Apache spark session
Apache spark sessionApache spark session
Apache spark sessionknowbigdata
 
Stop Reinventing The Wheel - The Ruby Standard Library
Stop Reinventing The Wheel - The Ruby Standard LibraryStop Reinventing The Wheel - The Ruby Standard Library
Stop Reinventing The Wheel - The Ruby Standard LibraryBrian Hogan
 

Similar to You're Going To Need A Bigger Toolbox (20)

Config managament for development environments iii
Config managament for development environments iiiConfig managament for development environments iii
Config managament for development environments iii
 
Parsing Microformats
Parsing MicroformatsParsing Microformats
Parsing Microformats
 
Building Go Web Apps
Building Go Web AppsBuilding Go Web Apps
Building Go Web Apps
 
Puppet Data Mining
Puppet Data MiningPuppet Data Mining
Puppet Data Mining
 
Config managament for development environments ii
Config managament for development environments iiConfig managament for development environments ii
Config managament for development environments ii
 
Rugged Driven Development with Gauntlt
Rugged Driven Development with GauntltRugged Driven Development with Gauntlt
Rugged Driven Development with Gauntlt
 
Vagrant and Configuration Management
Vagrant and Configuration ManagementVagrant and Configuration Management
Vagrant and Configuration Management
 
Practical ngx_mruby
Practical ngx_mrubyPractical ngx_mruby
Practical ngx_mruby
 
Using and scaling Rack and Rack-based middleware
Using and scaling Rack and Rack-based middlewareUsing and scaling Rack and Rack-based middleware
Using and scaling Rack and Rack-based middleware
 
Puppet Module Reusability - What I Learned from Shipping to the Forge
Puppet Module Reusability - What I Learned from Shipping to the ForgePuppet Module Reusability - What I Learned from Shipping to the Forge
Puppet Module Reusability - What I Learned from Shipping to the Forge
 
Introduction to Apache Camel
Introduction to Apache CamelIntroduction to Apache Camel
Introduction to Apache Camel
 
The Challenges of Container Configuration
The Challenges of Container ConfigurationThe Challenges of Container Configuration
The Challenges of Container Configuration
 
Sprockets
SprocketsSprockets
Sprockets
 
Continuously Testing Infrastructure - Beyond Module Testing - PuppetConf 2014
Continuously Testing Infrastructure - Beyond Module Testing - PuppetConf 2014Continuously Testing Infrastructure - Beyond Module Testing - PuppetConf 2014
Continuously Testing Infrastructure - Beyond Module Testing - PuppetConf 2014
 
KubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
KubeCon EU 2016: Kubernetes and the Potential for Higher Level InterfacesKubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
KubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
 
RediSearch Mumbai Meetup 2020
RediSearch Mumbai Meetup 2020RediSearch Mumbai Meetup 2020
RediSearch Mumbai Meetup 2020
 
Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014
 
Apache spark session
Apache spark sessionApache spark session
Apache spark session
 
Logstash
LogstashLogstash
Logstash
 
Stop Reinventing The Wheel - The Ruby Standard Library
Stop Reinventing The Wheel - The Ruby Standard LibraryStop Reinventing The Wheel - The Ruby Standard Library
Stop Reinventing The Wheel - The Ruby Standard Library
 

More from Gareth Rushgrove

Communications Between Tribes
Communications Between TribesCommunications Between Tribes
Communications Between TribesGareth Rushgrove
 
Two Sides of Google Infrastructure for Everyone Else
Two Sides of Google Infrastructure for Everyone ElseTwo Sides of Google Infrastructure for Everyone Else
Two Sides of Google Infrastructure for Everyone ElseGareth Rushgrove
 
Automating web site deployment
Automating web site deploymentAutomating web site deployment
Automating web site deploymentGareth Rushgrove
 
Self Education for Web Professionals
Self Education for Web ProfessionalsSelf Education for Web Professionals
Self Education for Web ProfessionalsGareth Rushgrove
 
What to Build with Google App Engine
What to Build with Google App EngineWhat to Build with Google App Engine
What to Build with Google App EngineGareth Rushgrove
 
App Engine for Python Developers
App Engine for Python DevelopersApp Engine for Python Developers
App Engine for Python DevelopersGareth Rushgrove
 
Testing Django Applications
Testing Django ApplicationsTesting Django Applications
Testing Django ApplicationsGareth Rushgrove
 
Design Strategies for a Distributed Web
Design Strategies for a Distributed WebDesign Strategies for a Distributed Web
Design Strategies for a Distributed WebGareth Rushgrove
 
Things you probably don't do (or tying to make project automation sexy)
Things you probably don't do (or tying to make project automation sexy)Things you probably don't do (or tying to make project automation sexy)
Things you probably don't do (or tying to make project automation sexy)Gareth Rushgrove
 
Notes from (Web 2.0) Revolution
Notes from (Web 2.0) RevolutionNotes from (Web 2.0) Revolution
Notes from (Web 2.0) RevolutionGareth Rushgrove
 
Shiny Content Management with Radiant
Shiny Content Management with RadiantShiny Content Management with Radiant
Shiny Content Management with RadiantGareth Rushgrove
 

More from Gareth Rushgrove (20)

Communications Between Tribes
Communications Between TribesCommunications Between Tribes
Communications Between Tribes
 
Puppet and Openshift
Puppet and OpenshiftPuppet and Openshift
Puppet and Openshift
 
Two Sides of Google Infrastructure for Everyone Else
Two Sides of Google Infrastructure for Everyone ElseTwo Sides of Google Infrastructure for Everyone Else
Two Sides of Google Infrastructure for Everyone Else
 
Thinking Evil Thoughts
Thinking Evil ThoughtsThinking Evil Thoughts
Thinking Evil Thoughts
 
Web operations
Web operationsWeb operations
Web operations
 
Learnings from govuk
Learnings from govukLearnings from govuk
Learnings from govuk
 
Varnish Caching
Varnish CachingVarnish Caching
Varnish Caching
 
Metrics with Ganglia
Metrics with GangliaMetrics with Ganglia
Metrics with Ganglia
 
Automating web site deployment
Automating web site deploymentAutomating web site deployment
Automating web site deployment
 
Self Education for Web Professionals
Self Education for Web ProfessionalsSelf Education for Web Professionals
Self Education for Web Professionals
 
What to Build with Google App Engine
What to Build with Google App EngineWhat to Build with Google App Engine
What to Build with Google App Engine
 
App Engine for Python Developers
App Engine for Python DevelopersApp Engine for Python Developers
App Engine for Python Developers
 
Testing Django Applications
Testing Django ApplicationsTesting Django Applications
Testing Django Applications
 
Design Strategies for a Distributed Web
Design Strategies for a Distributed WebDesign Strategies for a Distributed Web
Design Strategies for a Distributed Web
 
A First Class Web Citizen
A First Class Web CitizenA First Class Web Citizen
A First Class Web Citizen
 
Things you probably don't do (or tying to make project automation sexy)
Things you probably don't do (or tying to make project automation sexy)Things you probably don't do (or tying to make project automation sexy)
Things you probably don't do (or tying to make project automation sexy)
 
Notes from (Web 2.0) Revolution
Notes from (Web 2.0) RevolutionNotes from (Web 2.0) Revolution
Notes from (Web 2.0) Revolution
 
Rails flavoured OpenId
Rails flavoured OpenIdRails flavoured OpenId
Rails flavoured OpenId
 
Shiny Content Management with Radiant
Shiny Content Management with RadiantShiny Content Management with Radiant
Shiny Content Management with Radiant
 
RESTful Rabbits
RESTful RabbitsRESTful Rabbits
RESTful Rabbits
 

Recently uploaded

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 

Recently uploaded (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

You're Going To Need A Bigger Toolbox

  • 1. You’re Going To Need A Bigger Toolbox DIBI 28th April 2010 gareth rushgrove | morethanseven.net http://www.flickr.com/photos/booleansplit/2376359338/
  • 3. We Used To Just Build Websites gareth rushgrove | morethanseven.net
  • 4. Probably Simple Websites gareth rushgrove | morethanseven.net
  • 5. Maybe the odd Ecommerce Site gareth rushgrove | morethanseven.net
  • 6. Then We Built Web Applications gareth rushgrove | morethanseven.net
  • 7. Now We Just Build. gareth rushgrove | morethanseven.net
  • 8. Your Toolbox is Growing gareth rushgrove | morethanseven.net http://www.flickr.com/photos/gordonr/42555739
  • 9. 1 Embrace Heterogeneous Environments gareth rushgrove | morethanseven.net http://www.flickr.com/photos/mk1971/2548492513/
  • 10. 1 No Development Tool Silver Bullet gareth rushgrove | morethanseven.net http://www.flickr.com/photos/mk1971/2548492513/
  • 11. We Build Websites With... gareth rushgrove | morethanseven.net http://www.flickr.com/photos/freefoto/3436970425/
  • 12. PHP, MySQL, Apache gareth rushgrove | morethanseven.net
  • 13. .NET, MSSQL, IIS gareth rushgrove | morethanseven.net
  • 14. Java, Oracle, Tomcat gareth rushgrove | morethanseven.net
  • 15. Lots of Others gareth rushgrove | morethanseven.net
  • 16. Just One Stack? gareth rushgrove | morethanseven.net http://www.flickr.com/photos/harrygoldenfeld/4263710200/
  • 17. The Guardian Java, Python, Oracle, App Engine gareth rushgrove | morethanseven.net
  • 18. LastFM PHP, C++, Java, Hadoop, Python gareth rushgrove | morethanseven.net
  • 19. GitHub Ruby, Erlang, MySQL, Redis, Sinatra gareth rushgrove | morethanseven.net
  • 20. Twitter Ruby, Scala, Java, C/C++ gareth rushgrove | morethanseven.net
  • 21. Facebook PHP, Erlang, C, MySQL, Cassandra gareth rushgrove | morethanseven.net
  • 22. 2 2. Know When Your Stack is out of its Depth gareth rushgrove | morethanseven.net http://www.flickr.com/photos/dk_spook/2421009077/
  • 23. What Should You Know About? gareth rushgrove | morethanseven.net http://www.flickr.com/photos/takomabibelot/220265100/
  • 24. wiki.nginx.org Serve Web Pages With Nginx gareth rushgrove | morethanseven.net
  • 25. “Apache is like Microsoft Word, it has a million options but you only need six. Nginx does those six things, and it does five of them 50 times faster than Apache. Chris Lea Why Nginx gareth rushgrove | morethanseven.net
  • 26. server { listen 80; server_name www.example.com; location / { root /var/www/example.com; } } Nginx Example gareth rushgrove | morethanseven.net
  • 27. http { upstream php { server localhost:8002; } upstream python { server localhost:8003; } } server { server_name www.example.com; location / { proxy_pass http://python; } location ~ /basket/* { proxy_pass http://php; } } Nginx Example gareth rushgrove | morethanseven.net
  • 28. - Thin - http://code.macournoyer.com/thin/ - Mongrel - http://github.com/fauna/mongrel/ - Spawning - http://pypi.python.org/pypi/Spawning/ - Unicorn - http://github.com/defunkt/unicorn/ Also See gareth rushgrove | morethanseven.net
  • 29. memcached.org Caching with Memcached gareth rushgrove | morethanseven.net
  • 30. from django.core.cache import cache key = "/about/" content = cache.get(key) if not content: # expensive query to get content cache.set(key, content, 300) Memcached Example gareth rushgrove | morethanseven.net
  • 31. - Squid - http://www.squid-cache.org - Varnish - http://varnish-cache.org Also See gareth rushgrove | morethanseven.net
  • 32. lucene.apache.org/solr/ Search with Solr gareth rushgrove | morethanseven.net
  • 33. http://solr:8983/solr/products/select/ ?q=colour:red &sort=price%20desc &rows=60 &wt=json Solr Example gareth rushgrove | morethanseven.net
  • 34. - Xapian - http://xapian.org - Sphinx - http://sphinxsearch.com - Nutch - http://lucene.apache.org/nutch/ - Whoosh - http://whoosh.ca Also See gareth rushgrove | morethanseven.net
  • 35. rabbitmq.com Asynchronous Processing with RabbitMQ gareth rushgrove | morethanseven.net
  • 36. require 'carrot' q = Carrot.queue('carrot', :durable => true) 10.times do |num| q.publish(num.to_s) end RabbitMQ Enqueue Example gareth rushgrove | morethanseven.net
  • 37. puts "count: #{q.message_count}" while msg = q.pop(:ack => true) puts msg q.ack end Carrot.stop RabbitMQ Dequeue Example gareth rushgrove | morethanseven.net
  • 38. - Apache ActiveMQ - http://activemq.apache.org - Beanstalk - http://kr.github.com/beanstalkd/ - Stomp Server - http://stomp.codehaus.org - MemcacheQ - http://memcachedb.org/memcacheq/ Also See gareth rushgrove | morethanseven.net
  • 39. couchdb.apache.org Data Storage With CouchDB gareth rushgrove | morethanseven.net
  • 40. <?php $options['host'] = "localhost"; $options['port'] = 5984; $couch = new CouchSimple($options); $resp = $couch->send("PUT", "/test"); $resp = $couch->send("PUT", "/test/123", '{"_id":"123","data":"Foo"}'); ?> CouchDB Example gareth rushgrove | morethanseven.net
  • 41. <?php $options['host'] = "localhost"; $options['port'] = 5984; $couch = new CouchSimple($options); $resp = $couch->send("GET", "/test/_all_docs"); $resp = $couch->send("GET", "/test/123"); $resp = $couch->send("DELETE", "/test/"); ?> CouchDB Example gareth rushgrove | morethanseven.net
  • 42. - MongoDB - http://www.mongodb.org - Tokyo Tyrant - http://1978th.net/tokyotyrant/ - Cassandra - http://cassandra.apache.org - Redis - http://code.google.com/p/redis/ Also See gareth rushgrove | morethanseven.net
  • 43. hadoop.apache.org Data Mining With Hive gareth rushgrove | morethanseven.net
  • 44. CREATE TABLE u_data ( userid INT, movieid INT, rating INT, unixtime STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY 't' STORED AS TEXTFILE; Hive Create Example Cucumber DSL Example gareth rushgrove | morethanseven.net
  • 45. LOAD DATA LOCAL INPATH 'data.txt' OVERWRITE INTO TABLE u_data; SELECT COUNT(1) FROM u_data; Hive Load DSL Example Cucumber Example gareth rushgrove | morethanseven.net
  • 46. add FILE weekday_mapper.py; INSERT OVERWRITE TABLE u_data_new SELECT TRANSFORM (userid, movieid, rating, unixtime) USING 'python weekday_mapper.py' AS (userid, movieid, rating, weekday) FROM u_data; SELECT weekday, COUNT(1) FROM u_data_new GROUP BY weekday; Hive Map Reduce Example Cucumber DSL Example gareth rushgrove | morethanseven.net
  • 47. - Hadoop - http://hadoop.apache.org - Hive - http://wiki.apache.org/hadoop/Hive/ - Pig - http://hadoop.apache.org/pig/ - Dumbo - http://lastfm.com/dumbo/ - Disco - http://discoproject.org Also See gareth rushgrove | morethanseven.net
  • 48. cukes.info Testing with Cucumber gareth rushgrove | morethanseven.net
  • 49. Feature: google.co.uk To broaden their knowledge A user should be able To search for things Scenario: Searching for things Given I visit "http://www.google.co.uk" When I fill in "q" with "wikipedia" And I press "Google Search" Then I should see "www.wikipedia.org" Cucumber DSL Example gareth rushgrove | morethanseven.net
  • 50. Feature: google.co.uk To broaden their knowledge A user should be able To search for things Scenario: Searching for things Given I visit "http://www.google.co.uk" When I fill in "q" with "wikipedia" And I press "Google Search" Then I should see "www.wikipedia.org" 1 scenario (1 failed) 4 steps (1 failed, 2 skipped, 1 passed) 0m0.332s Cucumber Results Example gareth rushgrove | morethanseven.net
  • 51. puppetlabs.com Server Provisioning with Puppet gareth rushgrove | morethanseven.net
  • 52. class baseclass { $packagelist = ["sudo", "openssh-server"] package { $packagelist: ensure => installed } service { sshd: name => "ssh", enable => true, ensure => running } } Puppet Class Example gareth rushgrove | morethanseven.net
  • 53. node 'example.com' inherits basenode { $packagelist = ["nginx"] package { $packagelist: ensure => installed } service { "nginx": ensure => running, require => Package["nginx"] } } Puppet Node Example gareth rushgrove | morethanseven.net
  • 54. - Chef - http://wiki.opscode.com/display/chef/Home/ Also See gareth rushgrove | morethanseven.net
  • 55. Conclusions gareth rushgrove | morethanseven.net http://www.flickr.com/photos/batega/1596898776/
  • 56. 1 Know What's Possible gareth rushgrove | morethanseven.net http://www.flickr.com/photos/docman/36125185/
  • 57. 2 Look for Opportunities gareth rushgrove | morethanseven.net http://www.flickr.com/photos/kgregory/500456103/
  • 58. 3 Experiment gareth rushgrove | morethanseven.net http://www.flickr.com/photos/seeminglee/3967329241/
  • 59. 4 Manage Complexity gareth rushgrove | morethanseven.net http://www.flickr.com/photos/30890318@N06/3510161637/
  • 60. Questions? gareth rushgrove | morethanseven.net http://flickr.com/photos/psd/102332391/