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

Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 

Recently uploaded (20)

Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 

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.