SlideShare uma empresa Scribd logo
1 de 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!

Mais conteúdo relacionado

Semelhante a 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
 

Semelhante a 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
 

Último

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
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
 
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
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
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
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
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
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
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
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
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
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
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
 

Último (20)

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
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
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
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
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
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
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
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
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
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?
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
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
 

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!

Notas do Editor

  1. Two things.