SlideShare a Scribd company logo
1 of 125
How to build Great Stuff
     (using Web Technologies)
How do I know?
• I am a natural coder
• I am a natural coder
• I LOVE coding!
• I am a natural coder
• I LOVE coding!
• I HOPE you feel the same way.
• I am a natural coder
• I LOVE coding!
• I HOPE you feel the same way.
• We have our own language. It changes fast.
• I am a natural coder
• I LOVE coding!
• I HOPE you feel the same way.
• We have our own language. It changes fast.
• We do abstract things.
• I am a natural coder
• I LOVE coding!
• I HOPE you feel the same way.
• We have our own language. It changes fast.
• We do abstract things.
• “Normal” people think of it as “magic”
Eye Candy Intro:
     100 Tweets
http://9elements.com/io/projects/html5/canvas/
                 by 9elements
“Somebody set up us
  the bomb DOM!”
“Somebody set up us
     the bomb DOM!”

<script type="text/javascript" />
“Somebody set up us
     the bomb DOM!”

<script type="text/javascript" />

<audio />
“Somebody set up us
     the bomb DOM!”

<script type="text/javascript" />

<audio />

<canvas />
<script />
<script />
<audio>
<script />
          • Find out supported audio format
<audio>
<script />
          • Find out supported audio format
<audio>   • OGG vs mp3
<script />
          • Find out supported audio format
<audio>   • OGG vs mp3
          • Set <audio> src accordingly
<script />
                          • Find out supported audio format
       <audio>            • OGG vs mp3
                          • Set <audio> src accordingly

Twitter Search API Req.
      “html5+love”
<script />
                          • Find out supported audio format
       <audio>            • OGG vs mp3
                          • Set <audio> src accordingly

Twitter Search API Req.
                          • Search for 100 tweets
      “html5+love”
<script />
                          • Find out supported audio format
       <audio>            • OGG vs mp3
                          • Set <audio> src accordingly

Twitter Search API Req.
                          • Search for 100 tweets
      “html5+love”        • On click, display tweet’s text
<script />
                          • Find out supported audio format
       <audio>            • OGG vs mp3
                          • Set <audio> src accordingly

Twitter Search API Req.
                          • Search for 100 tweets
      “html5+love”        • On click, display tweet’s text
                          • Instruct dot to move
<script />
                          • Find out supported audio format
       <audio>            • OGG vs mp3
                          • Set <audio> src accordingly

Twitter Search API Req.
                          • Search for 100 tweets
      “html5+love”        • On click, display tweet’s text
                          • Instruct dot to move

      <canvas>
<script />
                          • Find out supported audio format
       <audio>            • OGG vs mp3
                          • Set <audio> src accordingly

Twitter Search API Req.
                          • Search for 100 tweets
      “html5+love”        • On click, display tweet’s text
                          • Instruct dot to move

                          • On every frame, draw dots
      <canvas>
<script />
                          • Find out supported audio format
       <audio>            • OGG vs mp3
                          • Set <audio> src accordingly

Twitter Search API Req.
                          • Search for 100 tweets
      “html5+love”        • On click, display tweet’s text
                          • Instruct dot to move

                          • On every frame, draw dots
      <canvas>            • Animations are manual
<script />
                          • Find out supported audio format
       <audio>            • OGG vs mp3
                          • Set <audio> src accordingly

Twitter Search API Req.
                          • Search for 100 tweets
      “html5+love”        • On click, display tweet’s text
                          • Instruct dot to move

                          • On every frame, draw dots
      <canvas>            • Animations are manual
                          • Beat animation is precoded
Selected quotes
 from right before launch
Selected quotes
          from right before launch

• “Nah. It’s not ready.”
Selected quotes
          from right before launch

• “Nah. It’s not ready.”
• “Look at the code.”
Selected quotes
        from right before launch

• “Nah. It’s not ready.”
• “Look at the code.”
• “I mean, LOOK AT THE CODE!”
Selected quotes
         from right before launch

• “Nah. It’s not ready.”
• “Look at the code.”
• “I mean, LOOK AT THE CODE!”
• “Let’s add some more... Stuff?”
Selected quotes
          from right before launch

• “Nah. It’s not ready.”
• “Look at the code.”
• “I mean, LOOK AT THE CODE!”
• “Let’s add some more... Stuff?”
• “We did similar things with Flash...
Selected quotes
          from right before launch

• “Nah. It’s not ready.”
• “Look at the code.”
• “I mean, LOOK AT THE CODE!”
• “Let’s add some more... Stuff?”
• “We did similar things with Flash...
• ...10 years ago.”
Not showing what you created
is the single biggest mistake
you can possibly make.
Because you never know.
Because you never know.
Because you never know.




   A quarter million. In four days.
Because you never know.




     A quarter million. In four days.
For an HTML5 Canvas Audio Experiment.
Because you never know.




     A quarter million. In four days.
For an HTML5 Canvas Audio Experiment.

             Not so bad.
Because you never know.




     A quarter million. In four days.
For an HTML5 Canvas Audio Experiment.

             Not so bad.
            (We’re not a porn site)
Self-referential Praise
Nearly all of the 100 Tweets linked back to ourselves.
                      It felt good.
Reason for Success?
 Made developers see what is possible.
Purpose
Make developers see what is possible.
Lessons learned
Lessons learned

• Know and love your tools
Lessons learned

• Know and love your tools
• Be enthusiastic about an idea
Lessons learned

• Know and love your tools
• Be enthusiastic about an idea
• Enthusiasm is what will drive you!
Lessons learned

• Know and love your tools
• Be enthusiastic about an idea
• Enthusiasm is what will drive you!
• Do it in your spare time
“The future is here.
It's just not evenly distributed yet.”
- William Gibson
So what is our job?
Distribute future.
Future ==== Technology




  Operator of super-convenient equality
ActiveRecord, anyone?

class Future
  has_many :innovations, :through => :technologies
end
It is too easy ;-)
It is too easy ;-)

• Free technology
It is too easy ;-)

• Free technology
• Open technology
It is too easy ;-)

• Free technology
• Open technology
• Mostly based open standards
It is too easy ;-)

• Free technology
• Open technology
• Mostly based open standards
• Widely adopted technology
It is too easy ;-)

• Free technology
• Open technology
• Mostly based open standards
• Widely adopted technology
• So please, just do it.
Let’s do that right now.
Four technologies,
 explained briefly.
One.
WebSockets API
WebSockets API

• Full-duplex communication channel
WebSockets API

• Full-duplex communication channel
• Between Browser and Server
WebSockets API

• Full-duplex communication channel
• Between Browser and Server
• API is simply awesome
WebSockets API

• Full-duplex communication channel
• Between Browser and Server
• API is simply awesome
• I can’t possibly handle more bullets
WebSockets API

• Full-duplex communication channel
• Between Browser and Server
• API is simply awesome
• I can’t possibly handle more bullets
• In fact, from now on, no more bullets
Using WebSockets
Using WebSockets
// Setup
var socket = new WebSocket("ws://www.example.com");
Using WebSockets
// Setup
var socket = new WebSocket("ws://www.example.com");

// Sending messages
socket.send("Feel so free without HTTP!");
Using WebSockets
// Setup
var socket = new WebSocket("ws://www.example.com");

// Sending messages
socket.send("Feel so free without HTTP!");

// It rhymes! Please, make a websockets song!
socket.send("There’s no HTTP ‘round me!");
Using WebSockets
// Setup
var socket = new WebSocket("ws://www.example.com");

// Sending messages
socket.send("Feel so free without HTTP!");

// It rhymes! Please, make a websockets song!
socket.send("There’s no HTTP ‘round me!");

// Receiving messages
socket.onmessage = function(e) { alert(e.data); }
Two.
Canvas 2D API
Canvas 2D API
// Setup
var canvas   = document.getElementById('ze-canvas'),
Canvas 2D API
// Setup
var canvas = document.getElementById('ze-canvas'),
    context = canvas.getContext('2d');
Canvas 2D API
// Setup
var canvas = document.getElementById('ze-canvas'),
    context = canvas.getContext('2d');

// Drawing shapes
context.fillRect(x, y, width, height);
Canvas 2D API
// Setup
var canvas = document.getElementById('ze-canvas'),
    context = canvas.getContext('2d');

// Drawing shapes
context.fillRect(x, y, width, height);

// Or images (image being successfully loaded)
context.drawImage(image, 25, 25);
Canvas 2D API
// Setup
var canvas = document.getElementById('ze-canvas'),
    context = canvas.getContext('2d');

// Drawing shapes
context.fillRect(x, y, width, height);

// Or images (image being successfully loaded)
context.drawImage(image, 25, 25);

// Animations? (ohh, SUSPENSE!)
Canvas 2D API
// Setup
var canvas = document.getElementById('ze-canvas'),
    context = canvas.getContext('2d');

// Drawing shapes
context.fillRect(x, y, width, height);

// Or images (image being successfully loaded)
context.drawImage(image, 25, 25);

// Animations? (ohh, SUSPENSE!)
window.setTimeout(function() {



}, 1000/max_fps);
Canvas 2D API
// Setup
var canvas = document.getElementById('ze-canvas'),
    context = canvas.getContext('2d');

// Drawing shapes
context.fillRect(x, y, width, height);

// Or images (image being successfully loaded)
context.drawImage(image, 25, 25);

// Animations? (ohh, SUSPENSE!)
window.setTimeout(function() {
 context.clearRect(0, 0, canvasWidth, canvasHeight);
 context.fillRect(x++, y++, width, height);
}, 1000/max_fps);
Three.
# Hey,
# Hey,
# realizing bullets are great for informal bits,
# Hey,
# realizing bullets are great for informal bits,
# and not wanting to break my promise from before,
#   Hey,
#   realizing bullets are great for informal bits,
#   and not wanting to break my promise from before,
#   I hacked the format and put bullets into code comments!
#   Hey,
#   realizing bullets are great for informal bits,
#   and not wanting to break my promise from before,
#   I hacked the format and put bullets into code comments!
#   Here we go :D
#   Hey,
#   realizing bullets are great for informal bits,
#   and not wanting to break my promise from before,
#   I hacked the format and put bullets into code comments!
#   Here we go :D
#
#                        <3 Redis <3
#   Hey,
#   realizing bullets are great for informal bits,
#   and not wanting to break my promise from before,
#   I hacked the format and put bullets into code comments!
#   Here we go :D
#
#                        <3 Redis <3
#
#               A persistent key-value database
#
#                         // OR: //
#   Hey,
#   realizing bullets are great for informal bits,
#   and not wanting to break my promise from before,
#   I hacked the format and put bullets into code comments!
#   Here we go :D
#
#                        <3 Redis <3
#
#               A persistent key-value database
#
#                         // OR: //
#
#                   21st century malloc()
#                    (via @hungryblank)
#   Hey,
#   realizing bullets are great for informal bits,
#   and not wanting to break my promise from before,
#   I hacked the format and put bullets into code comments!
#   Here we go :D
#
#                        <3 Redis <3
#
#               A persistent key-value database
#
#                         // OR: //
#
#                   21st century malloc()
#                    (via @hungryblank)
#
#   It can do some very useful things,
#   and it does those things very good.
# Start redis server
$ redis-server redis.conf &
# Start redis server
$ redis-server redis.conf &

# Set value by key
$ redis-cli set foo bar
OK
# Start redis server
$ redis-server redis.conf &

# Set value by key
$ redis-cli set foo bar
OK

# Retrieve value by key
$ redis-cli get foo
bar
# Start redis server
$ redis-server redis.conf &

# Set value by key
$ redis-cli set foo bar
OK

# Retrieve value by key
$ redis-cli get foo
bar

# Redis values can also be:
# Start redis server
$ redis-server redis.conf &

# Set value by key
$ redis-cli set foo bar
OK

# Retrieve value by key
$ redis-cli get foo
bar

# Redis values can also be:
# - lists
# Start redis server
$ redis-server redis.conf &

# Set value by key
$ redis-cli set foo bar
OK

# Retrieve value by key
$ redis-cli get foo
bar

# Redis values can also be:
# - lists
# - sets
# Start redis server
$ redis-server redis.conf &

# Set value by key
$ redis-cli set foo bar
OK

# Retrieve value by key
$ redis-cli get foo
bar

#   Redis values can also be:
#   - lists
#   - sets
#   - ordered sets
# Start redis server
$ redis-server redis.conf &

# Set value by key
$ redis-cli set foo bar
OK

# Retrieve value by key
$ redis-cli get foo
bar

#   Redis values can also be:
#   - lists
#   - sets
#   - ordered sets
#   - hashes (HEAD)
Four.
“Hey Apache, here are 5000 concurrent
   requests I need you to handle.”
“Hey Apache, here are 5000 concurrent
   requests I need you to handle.”

      “And keep them all open!”
It cannot work due to the way Apache httpd’s request handling is designed.
                 (Admitted, at least not out of the box)
# The heart of Google Chrome?
# The heart of Google Chrome?
#
# - V8, of course!
# The heart of Google Chrome?
#
# - V8, of course!
#
# By opening up V8, Google made not only the client better.
#   The heart of Google Chrome?
#
#   - V8, of course!
#
#   By opening up V8, Google made not only the client better.
#
#   Somebody put V8 on the server!
#   The heart of Google Chrome?
#
#   - V8, of course!
#
#   By opening up V8, Google made not only the client better.
#
#   Somebody put V8 on the server!
#
#   Together with a quality non-blocking infrastructure.
#   The heart of Google Chrome?
#
#   - V8, of course!
#
#   By opening up V8, Google made not only the client better.
#
#   Somebody put V8 on the server!
#
#   Together with a quality non-blocking infrastructure.
#
#   Now, what do we have?
#   The heart of Google Chrome?
#
#   - V8, of course!
#
#   By opening up V8, Google made not only the client better.
#
#   Somebody put V8 on the server!
#
#   Together with a quality non-blocking infrastructure.
#
#   Now, what do we have?
So I hacked something together
 It’s not great, it’s just a demo.
      Started today at 5pm
      Got it running at 6pm
   http://github.com/evilhackerdude/beergarden
We lay the foundation.
We lay the foundation.




         Our Ideas
       Raw concepts
        Frameworks
We lay the foundation.



      Useful Applications
        Early Adoption
       Real world usage


          Our Ideas
        Raw concepts
         Frameworks
We lay the foundation.
                   Manifestations
Yay :-) Geo Metadata, Mobile Focus, $awesome
        Nay... “2.0”, “SEO”, “Social Media”


             Useful Applications
               Early Adoption
              Real world usage


                 Our Ideas
               Raw concepts
                Frameworks
Do. Not. Hesitate.
     MAKE!
> thanks && this
{
    "author": new Person("Stephan Seidt", {twitter: "evilhackerdude"}),
    "date": new Date(2010, 2, 22), // wtfjs: january = 0
    "license": new License.CC("by", "sa"),
    "url": "http://www.slideshare.net/evilhackerdude/",
    "sources": [
      "http://en.wikipedia.org/wiki/File:SouthParkChef.png",
      "http://dev.w3.org/html5/websockets/",
      "http://dev.w3.org/html5/canvas-api/canvas-2d-api.html",
      "https://developer.mozilla.org/en/Canvas_tutorial",
      "http://code.google.com/p/redis/",
      "http://github.com/antirez/redis",
      "http://nodejs.org/",
      "http://s3.amazonaws.com/four.livejournal/20091117/jsconf.pdf",
      "http://github.com/guille/node.websocket.js/",
      "http://github.com/fictorial/redis-node-client"
    ]
}

// thanks == true and honest!

More Related Content

Similar to Building Great Stuff Using Web Technologies

Webapp security testing
Webapp security testingWebapp security testing
Webapp security testingTomas Doran
 
Webapp security testing
Webapp security testingWebapp security testing
Webapp security testingTomas Doran
 
DefCamp 2013 - Http header analysis
DefCamp 2013 - Http header analysisDefCamp 2013 - Http header analysis
DefCamp 2013 - Http header analysisDefCamp
 
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기Heejong Ahn
 
API 101 - Understanding APIs
API 101 - Understanding APIsAPI 101 - Understanding APIs
API 101 - Understanding APIs3scale
 
API 101 - Understanding APIs.
API 101 - Understanding APIs.API 101 - Understanding APIs.
API 101 - Understanding APIs.Kirsten Hunter
 
ExpOn 2011 - Cassiano Travareli - A Base para Link Building
ExpOn 2011 - Cassiano Travareli - A Base para Link BuildingExpOn 2011 - Cassiano Travareli - A Base para Link Building
ExpOn 2011 - Cassiano Travareli - A Base para Link BuildingDOGSCAMP Summit
 
HTML5 and CSS3 for Teachers
HTML5 and CSS3 for TeachersHTML5 and CSS3 for Teachers
HTML5 and CSS3 for TeachersJason Hando
 
Html5 - the new kid on the block
Html5 - the new kid on the blockHtml5 - the new kid on the block
Html5 - the new kid on the blockMarian Borca
 
Principles Of Web Design Workshop
Principles Of Web Design WorkshopPrinciples Of Web Design Workshop
Principles Of Web Design WorkshopGavin Elliott
 
Build your own analytics power tools
Build your own analytics power toolsBuild your own analytics power tools
Build your own analytics power toolsAlban Gérôme
 
Tropo: Telephony in the Cloud
Tropo: Telephony in the CloudTropo: Telephony in the Cloud
Tropo: Telephony in the CloudWes Gamble
 
Making drupal beautiful with web fonts
Making drupal beautiful with web fontsMaking drupal beautiful with web fonts
Making drupal beautiful with web fontsFour Kitchens
 
Scaling with swagger
Scaling with swaggerScaling with swagger
Scaling with swaggerTony Tam
 
A Holistic Approach to HTML5 Game Design & Development
A Holistic Approach to HTML5 Game Design & DevelopmentA Holistic Approach to HTML5 Game Design & Development
A Holistic Approach to HTML5 Game Design & DevelopmentKarl Bunyan
 
Japanese CloudSearch Use-Cases and Tech Deep Dive
Japanese CloudSearch Use-Cases and Tech Deep DiveJapanese CloudSearch Use-Cases and Tech Deep Dive
Japanese CloudSearch Use-Cases and Tech Deep DiveEiji Shinohara
 
6 reasons Jubilee could be a Rubyist's new best friend
6 reasons Jubilee could be a Rubyist's new best friend6 reasons Jubilee could be a Rubyist's new best friend
6 reasons Jubilee could be a Rubyist's new best friendForrest Chang
 

Similar to Building Great Stuff Using Web Technologies (20)

Webapp security testing
Webapp security testingWebapp security testing
Webapp security testing
 
Webapp security testing
Webapp security testingWebapp security testing
Webapp security testing
 
DefCamp 2013 - Http header analysis
DefCamp 2013 - Http header analysisDefCamp 2013 - Http header analysis
DefCamp 2013 - Http header analysis
 
Looking into HTML5 + CSS3
Looking into HTML5 + CSS3Looking into HTML5 + CSS3
Looking into HTML5 + CSS3
 
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
 
API 101 - Understanding APIs
API 101 - Understanding APIsAPI 101 - Understanding APIs
API 101 - Understanding APIs
 
API 101 - Understanding APIs.
API 101 - Understanding APIs.API 101 - Understanding APIs.
API 101 - Understanding APIs.
 
ExpOn 2011 - Cassiano Travareli - A Base para Link Building
ExpOn 2011 - Cassiano Travareli - A Base para Link BuildingExpOn 2011 - Cassiano Travareli - A Base para Link Building
ExpOn 2011 - Cassiano Travareli - A Base para Link Building
 
HTML5 and CSS3 for Teachers
HTML5 and CSS3 for TeachersHTML5 and CSS3 for Teachers
HTML5 and CSS3 for Teachers
 
HTML5
HTML5 HTML5
HTML5
 
Html5 - the new kid on the block
Html5 - the new kid on the blockHtml5 - the new kid on the block
Html5 - the new kid on the block
 
Principles Of Web Design Workshop
Principles Of Web Design WorkshopPrinciples Of Web Design Workshop
Principles Of Web Design Workshop
 
Build your own analytics power tools
Build your own analytics power toolsBuild your own analytics power tools
Build your own analytics power tools
 
Tropo: Telephony in the Cloud
Tropo: Telephony in the CloudTropo: Telephony in the Cloud
Tropo: Telephony in the Cloud
 
Making drupal beautiful with web fonts
Making drupal beautiful with web fontsMaking drupal beautiful with web fonts
Making drupal beautiful with web fonts
 
Scaling with swagger
Scaling with swaggerScaling with swagger
Scaling with swagger
 
Html5 public
Html5 publicHtml5 public
Html5 public
 
A Holistic Approach to HTML5 Game Design & Development
A Holistic Approach to HTML5 Game Design & DevelopmentA Holistic Approach to HTML5 Game Design & Development
A Holistic Approach to HTML5 Game Design & Development
 
Japanese CloudSearch Use-Cases and Tech Deep Dive
Japanese CloudSearch Use-Cases and Tech Deep DiveJapanese CloudSearch Use-Cases and Tech Deep Dive
Japanese CloudSearch Use-Cases and Tech Deep Dive
 
6 reasons Jubilee could be a Rubyist's new best friend
6 reasons Jubilee could be a Rubyist's new best friend6 reasons Jubilee could be a Rubyist's new best friend
6 reasons Jubilee could be a Rubyist's new best friend
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 

Recently uploaded (20)

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 

Building Great Stuff Using Web Technologies

  • 1. How to build Great Stuff (using Web Technologies)
  • 2. How do I know?
  • 3.
  • 4. • I am a natural coder
  • 5. • I am a natural coder • I LOVE coding!
  • 6. • I am a natural coder • I LOVE coding! • I HOPE you feel the same way.
  • 7. • I am a natural coder • I LOVE coding! • I HOPE you feel the same way. • We have our own language. It changes fast.
  • 8. • I am a natural coder • I LOVE coding! • I HOPE you feel the same way. • We have our own language. It changes fast. • We do abstract things.
  • 9. • I am a natural coder • I LOVE coding! • I HOPE you feel the same way. • We have our own language. It changes fast. • We do abstract things. • “Normal” people think of it as “magic”
  • 10. Eye Candy Intro: 100 Tweets http://9elements.com/io/projects/html5/canvas/ by 9elements
  • 11. “Somebody set up us the bomb DOM!”
  • 12. “Somebody set up us the bomb DOM!” <script type="text/javascript" />
  • 13. “Somebody set up us the bomb DOM!” <script type="text/javascript" /> <audio />
  • 14. “Somebody set up us the bomb DOM!” <script type="text/javascript" /> <audio /> <canvas />
  • 17. <script /> • Find out supported audio format <audio>
  • 18. <script /> • Find out supported audio format <audio> • OGG vs mp3
  • 19. <script /> • Find out supported audio format <audio> • OGG vs mp3 • Set <audio> src accordingly
  • 20. <script /> • Find out supported audio format <audio> • OGG vs mp3 • Set <audio> src accordingly Twitter Search API Req. “html5+love”
  • 21. <script /> • Find out supported audio format <audio> • OGG vs mp3 • Set <audio> src accordingly Twitter Search API Req. • Search for 100 tweets “html5+love”
  • 22. <script /> • Find out supported audio format <audio> • OGG vs mp3 • Set <audio> src accordingly Twitter Search API Req. • Search for 100 tweets “html5+love” • On click, display tweet’s text
  • 23. <script /> • Find out supported audio format <audio> • OGG vs mp3 • Set <audio> src accordingly Twitter Search API Req. • Search for 100 tweets “html5+love” • On click, display tweet’s text • Instruct dot to move
  • 24. <script /> • Find out supported audio format <audio> • OGG vs mp3 • Set <audio> src accordingly Twitter Search API Req. • Search for 100 tweets “html5+love” • On click, display tweet’s text • Instruct dot to move <canvas>
  • 25. <script /> • Find out supported audio format <audio> • OGG vs mp3 • Set <audio> src accordingly Twitter Search API Req. • Search for 100 tweets “html5+love” • On click, display tweet’s text • Instruct dot to move • On every frame, draw dots <canvas>
  • 26. <script /> • Find out supported audio format <audio> • OGG vs mp3 • Set <audio> src accordingly Twitter Search API Req. • Search for 100 tweets “html5+love” • On click, display tweet’s text • Instruct dot to move • On every frame, draw dots <canvas> • Animations are manual
  • 27. <script /> • Find out supported audio format <audio> • OGG vs mp3 • Set <audio> src accordingly Twitter Search API Req. • Search for 100 tweets “html5+love” • On click, display tweet’s text • Instruct dot to move • On every frame, draw dots <canvas> • Animations are manual • Beat animation is precoded
  • 28. Selected quotes from right before launch
  • 29. Selected quotes from right before launch • “Nah. It’s not ready.”
  • 30. Selected quotes from right before launch • “Nah. It’s not ready.” • “Look at the code.”
  • 31. Selected quotes from right before launch • “Nah. It’s not ready.” • “Look at the code.” • “I mean, LOOK AT THE CODE!”
  • 32. Selected quotes from right before launch • “Nah. It’s not ready.” • “Look at the code.” • “I mean, LOOK AT THE CODE!” • “Let’s add some more... Stuff?”
  • 33. Selected quotes from right before launch • “Nah. It’s not ready.” • “Look at the code.” • “I mean, LOOK AT THE CODE!” • “Let’s add some more... Stuff?” • “We did similar things with Flash...
  • 34. Selected quotes from right before launch • “Nah. It’s not ready.” • “Look at the code.” • “I mean, LOOK AT THE CODE!” • “Let’s add some more... Stuff?” • “We did similar things with Flash... • ...10 years ago.”
  • 35. Not showing what you created is the single biggest mistake you can possibly make.
  • 38. Because you never know. A quarter million. In four days.
  • 39. Because you never know. A quarter million. In four days. For an HTML5 Canvas Audio Experiment.
  • 40. Because you never know. A quarter million. In four days. For an HTML5 Canvas Audio Experiment. Not so bad.
  • 41. Because you never know. A quarter million. In four days. For an HTML5 Canvas Audio Experiment. Not so bad. (We’re not a porn site)
  • 42. Self-referential Praise Nearly all of the 100 Tweets linked back to ourselves. It felt good.
  • 43. Reason for Success? Made developers see what is possible.
  • 44. Purpose Make developers see what is possible.
  • 46. Lessons learned • Know and love your tools
  • 47. Lessons learned • Know and love your tools • Be enthusiastic about an idea
  • 48. Lessons learned • Know and love your tools • Be enthusiastic about an idea • Enthusiasm is what will drive you!
  • 49. Lessons learned • Know and love your tools • Be enthusiastic about an idea • Enthusiasm is what will drive you! • Do it in your spare time
  • 50. “The future is here. It's just not evenly distributed yet.” - William Gibson
  • 51. So what is our job?
  • 53. Future ==== Technology Operator of super-convenient equality
  • 54. ActiveRecord, anyone? class Future has_many :innovations, :through => :technologies end
  • 55. It is too easy ;-)
  • 56. It is too easy ;-) • Free technology
  • 57. It is too easy ;-) • Free technology • Open technology
  • 58. It is too easy ;-) • Free technology • Open technology • Mostly based open standards
  • 59. It is too easy ;-) • Free technology • Open technology • Mostly based open standards • Widely adopted technology
  • 60. It is too easy ;-) • Free technology • Open technology • Mostly based open standards • Widely adopted technology • So please, just do it.
  • 61.
  • 62. Let’s do that right now.
  • 64. One.
  • 66. WebSockets API • Full-duplex communication channel
  • 67. WebSockets API • Full-duplex communication channel • Between Browser and Server
  • 68. WebSockets API • Full-duplex communication channel • Between Browser and Server • API is simply awesome
  • 69. WebSockets API • Full-duplex communication channel • Between Browser and Server • API is simply awesome • I can’t possibly handle more bullets
  • 70. WebSockets API • Full-duplex communication channel • Between Browser and Server • API is simply awesome • I can’t possibly handle more bullets • In fact, from now on, no more bullets
  • 72. Using WebSockets // Setup var socket = new WebSocket("ws://www.example.com");
  • 73. Using WebSockets // Setup var socket = new WebSocket("ws://www.example.com"); // Sending messages socket.send("Feel so free without HTTP!");
  • 74. Using WebSockets // Setup var socket = new WebSocket("ws://www.example.com"); // Sending messages socket.send("Feel so free without HTTP!"); // It rhymes! Please, make a websockets song! socket.send("There’s no HTTP ‘round me!");
  • 75. Using WebSockets // Setup var socket = new WebSocket("ws://www.example.com"); // Sending messages socket.send("Feel so free without HTTP!"); // It rhymes! Please, make a websockets song! socket.send("There’s no HTTP ‘round me!"); // Receiving messages socket.onmessage = function(e) { alert(e.data); }
  • 76. Two.
  • 78. Canvas 2D API // Setup var canvas = document.getElementById('ze-canvas'),
  • 79. Canvas 2D API // Setup var canvas = document.getElementById('ze-canvas'), context = canvas.getContext('2d');
  • 80. Canvas 2D API // Setup var canvas = document.getElementById('ze-canvas'), context = canvas.getContext('2d'); // Drawing shapes context.fillRect(x, y, width, height);
  • 81. Canvas 2D API // Setup var canvas = document.getElementById('ze-canvas'), context = canvas.getContext('2d'); // Drawing shapes context.fillRect(x, y, width, height); // Or images (image being successfully loaded) context.drawImage(image, 25, 25);
  • 82. Canvas 2D API // Setup var canvas = document.getElementById('ze-canvas'), context = canvas.getContext('2d'); // Drawing shapes context.fillRect(x, y, width, height); // Or images (image being successfully loaded) context.drawImage(image, 25, 25); // Animations? (ohh, SUSPENSE!)
  • 83. Canvas 2D API // Setup var canvas = document.getElementById('ze-canvas'), context = canvas.getContext('2d'); // Drawing shapes context.fillRect(x, y, width, height); // Or images (image being successfully loaded) context.drawImage(image, 25, 25); // Animations? (ohh, SUSPENSE!) window.setTimeout(function() { }, 1000/max_fps);
  • 84. Canvas 2D API // Setup var canvas = document.getElementById('ze-canvas'), context = canvas.getContext('2d'); // Drawing shapes context.fillRect(x, y, width, height); // Or images (image being successfully loaded) context.drawImage(image, 25, 25); // Animations? (ohh, SUSPENSE!) window.setTimeout(function() { context.clearRect(0, 0, canvasWidth, canvasHeight); context.fillRect(x++, y++, width, height); }, 1000/max_fps);
  • 86.
  • 88. # Hey, # realizing bullets are great for informal bits,
  • 89. # Hey, # realizing bullets are great for informal bits, # and not wanting to break my promise from before,
  • 90. # Hey, # realizing bullets are great for informal bits, # and not wanting to break my promise from before, # I hacked the format and put bullets into code comments!
  • 91. # Hey, # realizing bullets are great for informal bits, # and not wanting to break my promise from before, # I hacked the format and put bullets into code comments! # Here we go :D
  • 92. # Hey, # realizing bullets are great for informal bits, # and not wanting to break my promise from before, # I hacked the format and put bullets into code comments! # Here we go :D # # <3 Redis <3
  • 93. # Hey, # realizing bullets are great for informal bits, # and not wanting to break my promise from before, # I hacked the format and put bullets into code comments! # Here we go :D # # <3 Redis <3 # # A persistent key-value database # # // OR: //
  • 94. # Hey, # realizing bullets are great for informal bits, # and not wanting to break my promise from before, # I hacked the format and put bullets into code comments! # Here we go :D # # <3 Redis <3 # # A persistent key-value database # # // OR: // # # 21st century malloc() # (via @hungryblank)
  • 95. # Hey, # realizing bullets are great for informal bits, # and not wanting to break my promise from before, # I hacked the format and put bullets into code comments! # Here we go :D # # <3 Redis <3 # # A persistent key-value database # # // OR: // # # 21st century malloc() # (via @hungryblank) # # It can do some very useful things, # and it does those things very good.
  • 96.
  • 97. # Start redis server $ redis-server redis.conf &
  • 98. # Start redis server $ redis-server redis.conf & # Set value by key $ redis-cli set foo bar OK
  • 99. # Start redis server $ redis-server redis.conf & # Set value by key $ redis-cli set foo bar OK # Retrieve value by key $ redis-cli get foo bar
  • 100. # Start redis server $ redis-server redis.conf & # Set value by key $ redis-cli set foo bar OK # Retrieve value by key $ redis-cli get foo bar # Redis values can also be:
  • 101. # Start redis server $ redis-server redis.conf & # Set value by key $ redis-cli set foo bar OK # Retrieve value by key $ redis-cli get foo bar # Redis values can also be: # - lists
  • 102. # Start redis server $ redis-server redis.conf & # Set value by key $ redis-cli set foo bar OK # Retrieve value by key $ redis-cli get foo bar # Redis values can also be: # - lists # - sets
  • 103. # Start redis server $ redis-server redis.conf & # Set value by key $ redis-cli set foo bar OK # Retrieve value by key $ redis-cli get foo bar # Redis values can also be: # - lists # - sets # - ordered sets
  • 104. # Start redis server $ redis-server redis.conf & # Set value by key $ redis-cli set foo bar OK # Retrieve value by key $ redis-cli get foo bar # Redis values can also be: # - lists # - sets # - ordered sets # - hashes (HEAD)
  • 105. Four.
  • 106.
  • 107. “Hey Apache, here are 5000 concurrent requests I need you to handle.”
  • 108. “Hey Apache, here are 5000 concurrent requests I need you to handle.” “And keep them all open!”
  • 109.
  • 110. It cannot work due to the way Apache httpd’s request handling is designed. (Admitted, at least not out of the box)
  • 111.
  • 112. # The heart of Google Chrome?
  • 113. # The heart of Google Chrome? # # - V8, of course!
  • 114. # The heart of Google Chrome? # # - V8, of course! # # By opening up V8, Google made not only the client better.
  • 115. # The heart of Google Chrome? # # - V8, of course! # # By opening up V8, Google made not only the client better. # # Somebody put V8 on the server!
  • 116. # The heart of Google Chrome? # # - V8, of course! # # By opening up V8, Google made not only the client better. # # Somebody put V8 on the server! # # Together with a quality non-blocking infrastructure.
  • 117. # The heart of Google Chrome? # # - V8, of course! # # By opening up V8, Google made not only the client better. # # Somebody put V8 on the server! # # Together with a quality non-blocking infrastructure. # # Now, what do we have?
  • 118. # The heart of Google Chrome? # # - V8, of course! # # By opening up V8, Google made not only the client better. # # Somebody put V8 on the server! # # Together with a quality non-blocking infrastructure. # # Now, what do we have?
  • 119. So I hacked something together It’s not great, it’s just a demo. Started today at 5pm Got it running at 6pm http://github.com/evilhackerdude/beergarden
  • 120. We lay the foundation.
  • 121. We lay the foundation. Our Ideas Raw concepts Frameworks
  • 122. We lay the foundation. Useful Applications Early Adoption Real world usage Our Ideas Raw concepts Frameworks
  • 123. We lay the foundation. Manifestations Yay :-) Geo Metadata, Mobile Focus, $awesome Nay... “2.0”, “SEO”, “Social Media” Useful Applications Early Adoption Real world usage Our Ideas Raw concepts Frameworks
  • 125. > thanks && this { "author": new Person("Stephan Seidt", {twitter: "evilhackerdude"}), "date": new Date(2010, 2, 22), // wtfjs: january = 0 "license": new License.CC("by", "sa"), "url": "http://www.slideshare.net/evilhackerdude/", "sources": [ "http://en.wikipedia.org/wiki/File:SouthParkChef.png", "http://dev.w3.org/html5/websockets/", "http://dev.w3.org/html5/canvas-api/canvas-2d-api.html", "https://developer.mozilla.org/en/Canvas_tutorial", "http://code.google.com/p/redis/", "http://github.com/antirez/redis", "http://nodejs.org/", "http://s3.amazonaws.com/four.livejournal/20091117/jsconf.pdf", "http://github.com/guille/node.websocket.js/", "http://github.com/fictorial/redis-node-client" ] } // thanks == true and honest!

Editor's Notes

  1. Two things.