SlideShare una empresa de Scribd logo
1 de 31
FIREFOX
SWITCHBLADE!
Building Novel and Robust Applications with Firefox


Dietrich Ayala, Mozilla



                                                  Thursday, June 18th 2009
2 parts, 1 talk

• Optimizing the process
• Making cool things




                           Thursday, January 1st 1970
Sharpening your blade

• Environment
• Libraries
• Workflow



                        Thursday, January 1st 1970
How many foxes? N foxes.

• Profile Manager for
  multiple “environments”
 • --profilemanager
• Run multiple instances
 • Mac: rename the .app
    files
 • Win: -no-remote
                            Thursday, January 1st 1970
Take it to a higher level

• JQuery
• FUEL
• JIT + Mootools
• Mozilla Labs Modules




                            Thursday, January 1st 1970
Been caught stealin’

• .xpi == “zippee” == .zip
• .jar == .zip
• Re-usable JS: modules/, components/, content/
• Check license, ask, and give credit




                                           Thursday, January 1st 1970
Workflow tips

• Preferences in about:config
• Linkfile install method
• Test via chrome URIs: chrome://myext/content/test.xul
• Ubiquity’s restart command




                                           Thursday, January 1st 1970
Best practices

• Make your code:
 • Fast
 • Reusable
 • Testable




                    Thursday, January 1st 1970
JS Modules

• var EXPORTED_SYMBOLS = [“variableName”];
• Components.utils.import(“resource://yourfile.js”);
• Benefits
 •  Singleton
 • Enforced namespacing
 • Performance
                                           Thursday, January 1st 1970
Memoization

• Use memo-izing getters to lazily load and cache values
             var myObj = {
                get myCache() {
                   delete this.myCache;
                   return this.myCache = getThings();
                }
             };



                                                Thursday, January 1st 1970
On page load, please be zen.

• Every time you slow down page load, another user
  switches back to IE.
• I know we provide you with so many cool things to do
  when a page loads.
• Please just be patient, chill for sec.


                                           Thursday, January 1st 1970
Async FTW

• Really, just don’t do anything synchronously. ever.
• setTimeout()
• Yield! With generators!
• Asynchronous SQLite queries
• Background it with nsIThread

                                              Thursday, January 1st 1970
Testing... is this thing on?

• Fireunit
• uTest
• Ubiquity commands
• chrome://content/myExtension/test.html




                                           Thursday, January 1st 1970
The Good Stuff




                 Thursday, January 1st 1970
about:whatever

        • about:config, about:mozilla,
           about:rights, about:crashes
        • about:ubiquity
        • about:me

  <link rel="stylesheet" href="chrome://global/skin/about.css" type="text/css"/>
<link rel="stylesheet" href="chrome://aboutme/skin/aboutMe.css" type="text/css"/>

                                                           Thursday, January 1st 1970
New Tab is Your Canvas

• about:tab
• Autodial
• History Map
• Ambient news
• Snowl

                         Thursday, January 1st 1970
You Autocomplete Me

• Tags
• Quickfire
• Location bar, text fields
• autocompletesearch=”...”




                             Thursday, January 1st 1970
Process Execution

• Load external applications
• Run Applescripts
• Growl
• The “Say” command




                               Thursday, January 1st 1970
<canvas/>

• Processing.js
• Bespin/Thunderhead
• Radiohead



                       Thursday, January 1st 1970
<audio/>

• Ogg and Wav formats
• Scriptable: <audio/>.play()
• Jono made a piano
• JAI




                                Thursday, January 1st 1970
JAI: Javascript Audio Interface
  <li>
   <a href="@F1LT3R - Cryogenic Unrest.ogg">F1LT3R - Cryogenic Unrest</a>
   <audio src="@F1LT3R - Cryogenic Unrest.ogg">
     Your browser does not support the <code>audio</code> element.
     Get <a href="...">Firefox</a>.
   </audio>
  </li>




                                                            Thursday, January 1st 1970
<video/>

• HTML5
• Ogg Theora
• Configurable: autoplay,
  controls, volume, etc
• Media events
• Can fallback to plugins
                            Thursday, January 1st 1970
<video/> mashery bliss

• Chroma-keying
• Content insertion
• CSS3 transforms
• Motion tracking




                         Thursday, January 1st 1970
Streaming <video/>

• VLC
• IceCast
• <video/>
• http://air.mozilla.com




                           Thursday, January 1st 1970
XMPP

• SamePlace (XMPP4Moz)
• Strophe
• XMPP4Js
• JSJaC




                         Thursday, January 1st 1970
Outside of the Browser

• Firefox as Platform
• Standalone applications




                            Thursday, January 1st 1970
Prism

• Site-specific browsers
• Separate process
• Custom look and feel
• Bundles




                          Thursday, January 1st 1970
Mozilla Applications

• XULRunner
• Full desktop applications
• Can use Firefox as the runtime
• Separate process
• Bundle of JS and XUL or X/HTML

                                   Thursday, January 1st 1970
Webtopplications?

• Fully privileged desktop application in X/HTML
• XUL Window with XHTML default namespace
  • <xul:window xmlns:xul=”...xul...” xmlns=”...html...”>
•  JQuery UI Themes




                                             Thursday, January 1st 1970
XPI Deployment

• Package your
  application *inside*
  an extension
• Deploy from AMO
• Launch from Firefox


                         Thursday, January 1st 1970
<canvas/> + <audio/>

• Play me off, keyboard cat...




                                 Thursday, January 1st 1970

Más contenido relacionado

Destacado

Introducing the e concierge
Introducing the e conciergeIntroducing the e concierge
Introducing the e conciergeSuShiL S
 
Presentacion Ies Bendinat Bulgaria
Presentacion Ies Bendinat BulgariaPresentacion Ies Bendinat Bulgaria
Presentacion Ies Bendinat Bulgariabendinatcomenius
 
Firefox 3.5 and Beyond, At Portland Web Innovators
Firefox 3.5 and Beyond, At Portland Web InnovatorsFirefox 3.5 and Beyond, At Portland Web Innovators
Firefox 3.5 and Beyond, At Portland Web InnovatorsDietrich Ayala
 
Anexo Viii. Bendinat Banyalbufar
Anexo Viii.  Bendinat BanyalbufarAnexo Viii.  Bendinat Banyalbufar
Anexo Viii. Bendinat Banyalbufarbendinatcomenius
 
Mozilla, the Web and IOT
Mozilla, the Web and IOTMozilla, the Web and IOT
Mozilla, the Web and IOTDietrich Ayala
 
Mozilla India 2016 - IoT at Mozilla
Mozilla India 2016 - IoT at MozillaMozilla India 2016 - IoT at Mozilla
Mozilla India 2016 - IoT at MozillaDietrich Ayala
 

Destacado (9)

Introducing the e concierge
Introducing the e conciergeIntroducing the e concierge
Introducing the e concierge
 
Presentacion Ies Bendinat Bulgaria
Presentacion Ies Bendinat BulgariaPresentacion Ies Bendinat Bulgaria
Presentacion Ies Bendinat Bulgaria
 
Firefox 3.5 and Beyond, At Portland Web Innovators
Firefox 3.5 and Beyond, At Portland Web InnovatorsFirefox 3.5 and Beyond, At Portland Web Innovators
Firefox 3.5 and Beyond, At Portland Web Innovators
 
Anexo Viii. Bendinat Banyalbufar
Anexo Viii.  Bendinat BanyalbufarAnexo Viii.  Bendinat Banyalbufar
Anexo Viii. Bendinat Banyalbufar
 
PresentacióN DublíN Ii
PresentacióN DublíN IiPresentacióN DublíN Ii
PresentacióN DublíN Ii
 
Mattsally
MattsallyMattsally
Mattsally
 
Mozilla, the Web and IOT
Mozilla, the Web and IOTMozilla, the Web and IOT
Mozilla, the Web and IOT
 
Mozilla India 2016 - IoT at Mozilla
Mozilla India 2016 - IoT at MozillaMozilla India 2016 - IoT at Mozilla
Mozilla India 2016 - IoT at Mozilla
 
PDX Science Hack Day
PDX Science Hack DayPDX Science Hack Day
PDX Science Hack Day
 

Último

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 

Último (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 

Firefox Switchblade

  • 1. FIREFOX SWITCHBLADE! Building Novel and Robust Applications with Firefox Dietrich Ayala, Mozilla Thursday, June 18th 2009
  • 2. 2 parts, 1 talk • Optimizing the process • Making cool things Thursday, January 1st 1970
  • 3. Sharpening your blade • Environment • Libraries • Workflow Thursday, January 1st 1970
  • 4. How many foxes? N foxes. • Profile Manager for multiple “environments” • --profilemanager • Run multiple instances • Mac: rename the .app files • Win: -no-remote Thursday, January 1st 1970
  • 5. Take it to a higher level • JQuery • FUEL • JIT + Mootools • Mozilla Labs Modules Thursday, January 1st 1970
  • 6. Been caught stealin’ • .xpi == “zippee” == .zip • .jar == .zip • Re-usable JS: modules/, components/, content/ • Check license, ask, and give credit Thursday, January 1st 1970
  • 7. Workflow tips • Preferences in about:config • Linkfile install method • Test via chrome URIs: chrome://myext/content/test.xul • Ubiquity’s restart command Thursday, January 1st 1970
  • 8. Best practices • Make your code: • Fast • Reusable • Testable Thursday, January 1st 1970
  • 9. JS Modules • var EXPORTED_SYMBOLS = [“variableName”]; • Components.utils.import(“resource://yourfile.js”); • Benefits • Singleton • Enforced namespacing • Performance Thursday, January 1st 1970
  • 10. Memoization • Use memo-izing getters to lazily load and cache values var myObj = { get myCache() { delete this.myCache; return this.myCache = getThings(); } }; Thursday, January 1st 1970
  • 11. On page load, please be zen. • Every time you slow down page load, another user switches back to IE. • I know we provide you with so many cool things to do when a page loads. • Please just be patient, chill for sec. Thursday, January 1st 1970
  • 12. Async FTW • Really, just don’t do anything synchronously. ever. • setTimeout() • Yield! With generators! • Asynchronous SQLite queries • Background it with nsIThread Thursday, January 1st 1970
  • 13. Testing... is this thing on? • Fireunit • uTest • Ubiquity commands • chrome://content/myExtension/test.html Thursday, January 1st 1970
  • 14. The Good Stuff Thursday, January 1st 1970
  • 15. about:whatever • about:config, about:mozilla, about:rights, about:crashes • about:ubiquity • about:me <link rel="stylesheet" href="chrome://global/skin/about.css" type="text/css"/> <link rel="stylesheet" href="chrome://aboutme/skin/aboutMe.css" type="text/css"/> Thursday, January 1st 1970
  • 16. New Tab is Your Canvas • about:tab • Autodial • History Map • Ambient news • Snowl Thursday, January 1st 1970
  • 17. You Autocomplete Me • Tags • Quickfire • Location bar, text fields • autocompletesearch=”...” Thursday, January 1st 1970
  • 18. Process Execution • Load external applications • Run Applescripts • Growl • The “Say” command Thursday, January 1st 1970
  • 19. <canvas/> • Processing.js • Bespin/Thunderhead • Radiohead Thursday, January 1st 1970
  • 20. <audio/> • Ogg and Wav formats • Scriptable: <audio/>.play() • Jono made a piano • JAI Thursday, January 1st 1970
  • 21. JAI: Javascript Audio Interface <li> <a href="@F1LT3R - Cryogenic Unrest.ogg">F1LT3R - Cryogenic Unrest</a> <audio src="@F1LT3R - Cryogenic Unrest.ogg"> Your browser does not support the <code>audio</code> element. Get <a href="...">Firefox</a>. </audio> </li> Thursday, January 1st 1970
  • 22. <video/> • HTML5 • Ogg Theora • Configurable: autoplay, controls, volume, etc • Media events • Can fallback to plugins Thursday, January 1st 1970
  • 23. <video/> mashery bliss • Chroma-keying • Content insertion • CSS3 transforms • Motion tracking Thursday, January 1st 1970
  • 24. Streaming <video/> • VLC • IceCast • <video/> • http://air.mozilla.com Thursday, January 1st 1970
  • 25. XMPP • SamePlace (XMPP4Moz) • Strophe • XMPP4Js • JSJaC Thursday, January 1st 1970
  • 26. Outside of the Browser • Firefox as Platform • Standalone applications Thursday, January 1st 1970
  • 27. Prism • Site-specific browsers • Separate process • Custom look and feel • Bundles Thursday, January 1st 1970
  • 28. Mozilla Applications • XULRunner • Full desktop applications • Can use Firefox as the runtime • Separate process • Bundle of JS and XUL or X/HTML Thursday, January 1st 1970
  • 29. Webtopplications? • Fully privileged desktop application in X/HTML • XUL Window with XHTML default namespace • <xul:window xmlns:xul=”...xul...” xmlns=”...html...”> • JQuery UI Themes Thursday, January 1st 1970
  • 30. XPI Deployment • Package your application *inside* an extension • Deploy from AMO • Launch from Firefox Thursday, January 1st 1970
  • 31. <canvas/> + <audio/> • Play me off, keyboard cat... Thursday, January 1st 1970