SlideShare a Scribd company logo
freeing the cloud
one (small) service at a time



                               François Marier
                      francois@catalyst.net.nz
open source
  desktop
applications
SaaS
privacy   ®
autonomy

 control
1980s
100% free



            operating systems
started replacing all
proprietary programs
     one at a time
“
Developers of network services are encouraged to:

●   Use the GNU Affero GPL, a license designed specifically for network
    service software, to ensure that users of services have the ability to
    examine the source or implement their own service.

●   Develop freely-licensed alternatives to existing popular but non-Free
    network services.




                                                                      ”
●   Develop software that can replace centralized services and data storage
    with distributed software and data deployment, giving control back to
    users.

                         Franklin Street Statement, 14 July 2008
start replacing all
proprietary services
   one at a time
libreprojects.net
looking for a small one...
2. assign to email address




1. upload photo
101
FMarier@GMail.com
fmarier@gmail.com
f52a1d3d8c39868fc92cf70828821635
http://www.gravatar.com/avatar/
f52a1d3d8c39868fc92cf70828821635.jpg
<img src=”http://www.gravatar.com/avatar/
  f52a1d3d8c39868fc92cf70828821635.jpg”>
<img src=”http://www.gravatar.com/avatar/
  f52a1d3d8c39868fc92cf70828821635.jpg”>
started to write a replacement
Libravatar
“80%” of what            does

        protected accounts
“80%” of what                does

        G / PG / X ratings

        XMLRPC API
must fit into the   world
must fit into the             world

           use the same API
must fit into the                world

           use the same API

           be a Twitter client
use the same API
https://api.twitter.com/statuses
         /show/123.xml

https://identi.ca/api/statuses
        /show/123.xml
be a Twitter client
must fit into the                 world

           use the same API

           be a Gravatar client
use the same API
   http://www.gravatar.com/avatar/
f52a1d3d8c39868fc92cf70828821635.jpg


  http://cdn.libravatar.org/avatar/
f52a1d3d8c39868fc92cf70828821635.jpg
be a Gravatar client
Now, how about making it better?
Federation via DNS


_avatars._tcp SRV avatars.catalyst.net.nz
IPv6
IPv6   SHA256
IPv6   SHA256   OpenID
IPv6   SHA256   OpenID




LDAP
IPv6   SHA256    OpenID



       Account
LDAP
        Export
IPv6   SHA256     OpenID



       Account     Photo
LDAP
        Export   Importers
What does it look like?
Live demo!
photos uploaded
or imported by users



        Django
photos uploaded
               or imported by users




                     Django




static files
  on disk
avatars sent to     photos uploaded
 third parties    or imported by users




   Apache
                        Django
(mod_rewrite)




  static files
    on disk
avatars sent to          photos uploaded
 third parties         or imported by users




 high traffic
   Apache
                   low traffic
                             Django
(mod_rewrite)




        (static)   (dynamic)
  static files
    on disk
avatars sent to     photos uploaded
 third parties    or imported by users




   Apache
                        Django
(mod_rewrite)




  static files
    on disk
avatars sent to                    photos uploaded
 third parties                   or imported by users




   Apache
                                       Django
(mod_rewrite)




                                      Gearman
                  Crop, resize
  static files                         Queue
                  and optimise
    on disk
avatars sent to                    photos uploaded
 third parties                   or imported by users




   Apache
                                       Django
(mod_rewrite)




                                      Gearman
                  Crop, resize
  static files                         Queue
                  and optimise
    on disk
avatars sent to   avatars sent to   avatars sent to                    photos uploaded
 third parties     third parties     third parties                   or imported by users




   Apache            Apache            Apache
                                                                           Django
(mod_rewrite)     (mod_rewrite)     (mod_rewrite)




                                                                          Gearman
                                                      Crop, resize
  static files      static files      static files                         Queue
                                                      and optimise
    on disk           on disk           on disk
Who uses it?
--- a/IkiWiki/Plugin/comments.pm
+++ b/IkiWiki/Plugin/comments.pm
@@ -187,6 +188,16 @@ sub preprocess {

            $commentauthor = $commentuser;
        }
+
+       eval 'use Libravatar::URL';
+
+       if (! $@) {
+           my $email = IkiWiki::userinfo_get($commentuser, 'email');
+
+           if (defined $email) {
+               $commentauthoravatar = libravatar_url(email => $email);
+           }
+       }
    }
    else {
        if (defined $params{ip}) {
--- a/templates/comment.tmpl
+++ b/templates/comment.tmpl
@@ -1,6 +1,10 @@
 <TMPL_IF HTML5><article class="comment" id="<TMPL_VAR COMMENTID>">
 <TMPL_ELSE><div class="comment" id="<TMPL_VAR COMMENTID>"></TMPL_IF>

+<TMPL_IF COMMENTAUTHORAVATAR><div class="comment-avatar">
+<img src="<TMPL_VAR COMMENTAUTHORAVATAR>" alt="" />
+</div></TMPL_IF>
+
  <TMPL_IF HTML5><header class="comment-subject">
<TMPL_ELSE><div class="comment-subject"></TMPL_IF>
  <TMPL_IF PERMALINK>
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt
@@ -675,6 +678,9 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
     [% ELSE %]
     <div class="commentline">
     [% IF ( ShowReviewer ) %]
+         [% IF ( review.avatarurl ) %]
+    <img class="avatar" src="[% review.avatarurl %]" height="80" width="80"/>
+         [% END %]
     <h5>
          Comment by
          [% review.title %]
--- a/opac/opac-detail.pl
+++ b/opac/opac-detail.pl
@@ -295,6 +295,13 @@ $template->param(
     ocoins => GetCOinSBiblio($biblionumber),
  );

+my $libravatar_available = 0;
+eval 'use Libravatar::URL';
+if (! $@) {
+    $libravatar_available = 1;
+}

  my $reviews = getreviews( $biblionumber, 1 );
  my $loggedincommenter;
@@ -303,6 +310,9 @@ foreach ( @$reviews ) {
      $_->{title}      = $borrowerData->{'title'};
      $_->{surname}    = $borrowerData->{'surname'};
      $_->{firstname} = $borrowerData->{'firstname'};
+     if ($libravatar_available and $borrowerData->{'email'}) {
+         $_->{avatarurl} = libravatar_url(email => $borrowerData->{'email'});
+     }
      $_->{userid}    = $borrowerData->{'userid'};
      $_->{cardnumber}     = $borrowerData->{'cardnumber'};
Get involved!
                   ●   write a plugin




www.libravatar.org                            libravatar.onlinegroups.net
launchpad.net/libravatar                #libravatar on chat.freenode.net
Get involved!
                   ●   write a plugin
                   ●   host a mirror




www.libravatar.org                            libravatar.onlinegroups.net
launchpad.net/libravatar                #libravatar on chat.freenode.net
Get involved!
                   ●   write a plugin
                   ●   host a mirror
                   ●   translate the UI




www.libravatar.org                            libravatar.onlinegroups.net
launchpad.net/libravatar                #libravatar on chat.freenode.net
Get involved!
                   ●   write a plugin
                   ●   host a mirror
                   ●   translate the UI
                   ●   create an account today!


www.libravatar.org                            libravatar.onlinegroups.net
launchpad.net/libravatar                #libravatar on chat.freenode.net
Questions?
  ideas for Libravatar?

  other easy services to replace?

       fmarier            fmarier

http://feeding.cloud.geek.nz
Photo credits
Storm clouds: http://www.flickr.com/photos/johnson7/1460568819/
Linen texture: http://www.flickr.com/photos/zooboing/4715048673/
Name tag: http://www.flickr.com/photos/stevegarfield/833593377/
Cloud sign: http://www.flickr.com/photos/jamescridland/4122948535/
Facebook data center: http://www.flickr.com/photos/traftery/5596941479/
First web server: http://www.flickr.com/photos/scobleizer/2251820987/
Bradley Kuhn: https://secure.wikimedia.org/wikipedia/en/wiki/File:Bkuhn-2008-08-20.jpg
Benjamin Mako Hill: http://www.flickr.com/photos/soulfish/2374876735
Mike Linksvayer: http://www.flickr.com/photos/joi/2595169497/
Luis Villa: http://tieguy.org/pics/Wedding/Honeymoon/Highlights/New-Zealand/img_2145
Henri Poole: http://www.flickr.com/photos/weblogsky/9271675/
Evan Prodromou: http://www.flickr.com/photos/christopheducamp/4469158609/
Jonathan Gray: http://www.flickr.com/photos/jwyg/4497000847/
Aaron Swartz: http://www.flickr.com/photos/creativecommons/3111021669/
Evan Prodromou presenting: http://www.flickr.com/photos/walkah/4831658754


                      Copyright © 2011 François Marier
                      Released under the terms of the Creative Commons
                      Attribution Share Alike 3.0 Unported Licence

More Related Content

What's hot

[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견
NAVER D2
 
Writing Pluggable Software
Writing Pluggable SoftwareWriting Pluggable Software
Writing Pluggable Software
Tatsuhiko Miyagawa
 
Django a whirlwind tour
Django   a whirlwind tourDjango   a whirlwind tour
Django a whirlwind tour
Brad Montgomery
 
Testing Drupal with Ghosts and Gherkin
Testing Drupal  with Ghosts and GherkinTesting Drupal  with Ghosts and Gherkin
Testing Drupal with Ghosts and Gherkin
Phase2
 
Bootstrap과 UI-Bootstrap
Bootstrap과 UI-BootstrapBootstrap과 UI-Bootstrap
Bootstrap과 UI-Bootstrap
WebFrameworks
 
Introduction To Django (Strange Loop 2011)
Introduction To Django (Strange Loop 2011)Introduction To Django (Strange Loop 2011)
Introduction To Django (Strange Loop 2011)Jacob Kaplan-Moss
 
High Performance Django
High Performance DjangoHigh Performance Django
High Performance DjangoDjangoCon2008
 
jQuery Internals + Cool Stuff
jQuery Internals + Cool StuffjQuery Internals + Cool Stuff
jQuery Internals + Cool Stuff
jeresig
 
Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!
Eric Palakovich Carr
 
Performance Improvements in Browsers
Performance Improvements in BrowsersPerformance Improvements in Browsers
Performance Improvements in Browsers
jeresig
 
Practical Clojure Programming
Practical Clojure ProgrammingPractical Clojure Programming
Practical Clojure Programming
Howard Lewis Ship
 
Advanced JavaScript Development
Advanced JavaScript DevelopmentAdvanced JavaScript Development
Advanced JavaScript DevelopmentJussi Pohjolainen
 
Open innovation in software means Open Source (2011 remix)
Open innovation in software means Open Source (2011 remix)Open innovation in software means Open Source (2011 remix)
Open innovation in software means Open Source (2011 remix)
Bertrand Delacretaz
 
FP - Découverte de Play Framework Scala
FP - Découverte de Play Framework ScalaFP - Découverte de Play Framework Scala
FP - Découverte de Play Framework Scala
Kévin Margueritte
 
Dust.js
Dust.jsDust.js
Groovy And Grails JUG Padova
Groovy And Grails JUG PadovaGroovy And Grails JUG Padova
Groovy And Grails JUG Padova
John Leach
 
memories of tumblr gear & Tumblrowl
memories of tumblr gear & Tumblrowlmemories of tumblr gear & Tumblrowl
memories of tumblr gear & Tumblrowl
honishi
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture Introduction
Haiqi Chen
 
Migrating PriceChirp to Rails 3.0: The Pain Points
Migrating PriceChirp to Rails 3.0: The Pain PointsMigrating PriceChirp to Rails 3.0: The Pain Points
Migrating PriceChirp to Rails 3.0: The Pain PointsSteven Evatt
 
Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)
DECK36
 

What's hot (20)

[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견
 
Writing Pluggable Software
Writing Pluggable SoftwareWriting Pluggable Software
Writing Pluggable Software
 
Django a whirlwind tour
Django   a whirlwind tourDjango   a whirlwind tour
Django a whirlwind tour
 
Testing Drupal with Ghosts and Gherkin
Testing Drupal  with Ghosts and GherkinTesting Drupal  with Ghosts and Gherkin
Testing Drupal with Ghosts and Gherkin
 
Bootstrap과 UI-Bootstrap
Bootstrap과 UI-BootstrapBootstrap과 UI-Bootstrap
Bootstrap과 UI-Bootstrap
 
Introduction To Django (Strange Loop 2011)
Introduction To Django (Strange Loop 2011)Introduction To Django (Strange Loop 2011)
Introduction To Django (Strange Loop 2011)
 
High Performance Django
High Performance DjangoHigh Performance Django
High Performance Django
 
jQuery Internals + Cool Stuff
jQuery Internals + Cool StuffjQuery Internals + Cool Stuff
jQuery Internals + Cool Stuff
 
Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!
 
Performance Improvements in Browsers
Performance Improvements in BrowsersPerformance Improvements in Browsers
Performance Improvements in Browsers
 
Practical Clojure Programming
Practical Clojure ProgrammingPractical Clojure Programming
Practical Clojure Programming
 
Advanced JavaScript Development
Advanced JavaScript DevelopmentAdvanced JavaScript Development
Advanced JavaScript Development
 
Open innovation in software means Open Source (2011 remix)
Open innovation in software means Open Source (2011 remix)Open innovation in software means Open Source (2011 remix)
Open innovation in software means Open Source (2011 remix)
 
FP - Découverte de Play Framework Scala
FP - Découverte de Play Framework ScalaFP - Découverte de Play Framework Scala
FP - Découverte de Play Framework Scala
 
Dust.js
Dust.jsDust.js
Dust.js
 
Groovy And Grails JUG Padova
Groovy And Grails JUG PadovaGroovy And Grails JUG Padova
Groovy And Grails JUG Padova
 
memories of tumblr gear & Tumblrowl
memories of tumblr gear & Tumblrowlmemories of tumblr gear & Tumblrowl
memories of tumblr gear & Tumblrowl
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture Introduction
 
Migrating PriceChirp to Rails 3.0: The Pain Points
Migrating PriceChirp to Rails 3.0: The Pain PointsMigrating PriceChirp to Rails 3.0: The Pain Points
Migrating PriceChirp to Rails 3.0: The Pain Points
 
Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)
 

Similar to Freeing the cloud, one service at a time

Advanced Topics in Continuous Deployment
Advanced Topics in Continuous DeploymentAdvanced Topics in Continuous Deployment
Advanced Topics in Continuous Deployment
Mike Brittain
 
Django deployment with PaaS
Django deployment with PaaSDjango deployment with PaaS
Django deployment with PaaS
Appsembler
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin
Justin Ryan
 
Deploying
DeployingDeploying
Deployingsoon
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13Fred Sauer
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
MarcinStachniuk
 
JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4
alexsaves
 
Honeynet Project Workshop 2014 - Thug: a low-interaction honeyclient
Honeynet Project Workshop 2014 - Thug: a low-interaction honeyclientHoneynet Project Workshop 2014 - Thug: a low-interaction honeyclient
Honeynet Project Workshop 2014 - Thug: a low-interaction honeyclientAngelo Dell'Aera
 
Django: Beyond Basics
Django: Beyond BasicsDjango: Beyond Basics
Django: Beyond Basicsarunvr
 
Web Development in Django
Web Development in DjangoWeb Development in Django
Web Development in Django
Lakshman Prasad
 
OpenStack Murano introduction
OpenStack Murano introductionOpenStack Murano introduction
OpenStack Murano introduction
Victor Zhang
 
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyConsegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Fabio Akita
 
Building Rackspace Cloud Monitoring
Building Rackspace Cloud MonitoringBuilding Rackspace Cloud Monitoring
Building Rackspace Cloud Monitoring
gdusbabek
 
Release management with NuGet/Chocolatey/JIRA
Release management with NuGet/Chocolatey/JIRARelease management with NuGet/Chocolatey/JIRA
Release management with NuGet/Chocolatey/JIRA
Yaroslav Serhieiev
 
Rapid Prototyping with TurboGears2
Rapid Prototyping with TurboGears2Rapid Prototyping with TurboGears2
Rapid Prototyping with TurboGears2Alessandro Molina
 
Intro To Django
Intro To DjangoIntro To Django
Intro To Django
Udi Bauman
 
Monkeybars in the Manor
Monkeybars in the ManorMonkeybars in the Manor
Monkeybars in the Manor
martinbtt
 

Similar to Freeing the cloud, one service at a time (20)

django
djangodjango
django
 
Introduce Django
Introduce DjangoIntroduce Django
Introduce Django
 
Advanced Topics in Continuous Deployment
Advanced Topics in Continuous DeploymentAdvanced Topics in Continuous Deployment
Advanced Topics in Continuous Deployment
 
Django deployment with PaaS
Django deployment with PaaSDjango deployment with PaaS
Django deployment with PaaS
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin
 
Deploying
DeployingDeploying
Deploying
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
 
JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4
 
dJango
dJangodJango
dJango
 
Honeynet Project Workshop 2014 - Thug: a low-interaction honeyclient
Honeynet Project Workshop 2014 - Thug: a low-interaction honeyclientHoneynet Project Workshop 2014 - Thug: a low-interaction honeyclient
Honeynet Project Workshop 2014 - Thug: a low-interaction honeyclient
 
Django: Beyond Basics
Django: Beyond BasicsDjango: Beyond Basics
Django: Beyond Basics
 
Web Development in Django
Web Development in DjangoWeb Development in Django
Web Development in Django
 
OpenStack Murano introduction
OpenStack Murano introductionOpenStack Murano introduction
OpenStack Murano introduction
 
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyConsegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
 
Building Rackspace Cloud Monitoring
Building Rackspace Cloud MonitoringBuilding Rackspace Cloud Monitoring
Building Rackspace Cloud Monitoring
 
Release management with NuGet/Chocolatey/JIRA
Release management with NuGet/Chocolatey/JIRARelease management with NuGet/Chocolatey/JIRA
Release management with NuGet/Chocolatey/JIRA
 
Rapid Prototyping with TurboGears2
Rapid Prototyping with TurboGears2Rapid Prototyping with TurboGears2
Rapid Prototyping with TurboGears2
 
Intro To Django
Intro To DjangoIntro To Django
Intro To Django
 
Monkeybars in the Manor
Monkeybars in the ManorMonkeybars in the Manor
Monkeybars in the Manor
 

More from Francois Marier

Security and Privacy settings for Firefox Power Users
Security and Privacy settings for Firefox Power UsersSecurity and Privacy settings for Firefox Power Users
Security and Privacy settings for Firefox Power Users
Francois Marier
 
Getting Browsers to Improve the Security of Your Webapp
Getting Browsers to Improve the Security of Your WebappGetting Browsers to Improve the Security of Your Webapp
Getting Browsers to Improve the Security of Your Webapp
Francois Marier
 
Hardening Firefox for Security and Privacy
Hardening Firefox for Security and PrivacyHardening Firefox for Security and Privacy
Hardening Firefox for Security and Privacy
Francois Marier
 
Security and Privacy on the Web in 2016
Security and Privacy on the Web in 2016Security and Privacy on the Web in 2016
Security and Privacy on the Web in 2016
Francois Marier
 
Privacy and Tracking Protection in Firefox
Privacy and Tracking Protection in FirefoxPrivacy and Tracking Protection in Firefox
Privacy and Tracking Protection in Firefox
Francois Marier
 
Security and Privacy on the Web in 2015
Security and Privacy on the Web in 2015Security and Privacy on the Web in 2015
Security and Privacy on the Web in 2015
Francois Marier
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScript
Francois Marier
 
URL to HTML
URL to HTMLURL to HTML
URL to HTML
Francois Marier
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScript
Francois Marier
 
Supporting Debian machines for friends and family
Supporting Debian machines for friends and familySupporting Debian machines for friends and family
Supporting Debian machines for friends and family
Francois Marier
 
Outsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to DebianOutsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to Debian
Francois Marier
 
URL to HTML
URL to HTMLURL to HTML
URL to HTML
Francois Marier
 
Easy logins for Ruby web applications
Easy logins for Ruby web applicationsEasy logins for Ruby web applications
Easy logins for Ruby web applications
Francois Marier
 
Easy logins for JavaScript web applications
Easy logins for JavaScript web applicationsEasy logins for JavaScript web applications
Easy logins for JavaScript web applications
Francois Marier
 
You're still using passwords on your site?
You're still using passwords on your site?You're still using passwords on your site?
You're still using passwords on your site?
Francois Marier
 
Killing Passwords with JavaScript
Killing Passwords with JavaScriptKilling Passwords with JavaScript
Killing Passwords with JavaScriptFrancois Marier
 
Securing the Web without site-specific passwords
Securing the Web without site-specific passwordsSecuring the Web without site-specific passwords
Securing the Web without site-specific passwords
Francois Marier
 
Easy logins for PHP web applications
Easy logins for PHP web applicationsEasy logins for PHP web applications
Easy logins for PHP web applications
Francois Marier
 
Persona: a federated and privacy-protecting login system for the whole Web
Persona: a federated and privacy-protecting login system for the whole WebPersona: a federated and privacy-protecting login system for the whole Web
Persona: a federated and privacy-protecting login system for the whole WebFrancois Marier
 
Taking the pain out of signing users in
Taking the pain out of signing users inTaking the pain out of signing users in
Taking the pain out of signing users inFrancois Marier
 

More from Francois Marier (20)

Security and Privacy settings for Firefox Power Users
Security and Privacy settings for Firefox Power UsersSecurity and Privacy settings for Firefox Power Users
Security and Privacy settings for Firefox Power Users
 
Getting Browsers to Improve the Security of Your Webapp
Getting Browsers to Improve the Security of Your WebappGetting Browsers to Improve the Security of Your Webapp
Getting Browsers to Improve the Security of Your Webapp
 
Hardening Firefox for Security and Privacy
Hardening Firefox for Security and PrivacyHardening Firefox for Security and Privacy
Hardening Firefox for Security and Privacy
 
Security and Privacy on the Web in 2016
Security and Privacy on the Web in 2016Security and Privacy on the Web in 2016
Security and Privacy on the Web in 2016
 
Privacy and Tracking Protection in Firefox
Privacy and Tracking Protection in FirefoxPrivacy and Tracking Protection in Firefox
Privacy and Tracking Protection in Firefox
 
Security and Privacy on the Web in 2015
Security and Privacy on the Web in 2015Security and Privacy on the Web in 2015
Security and Privacy on the Web in 2015
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScript
 
URL to HTML
URL to HTMLURL to HTML
URL to HTML
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScript
 
Supporting Debian machines for friends and family
Supporting Debian machines for friends and familySupporting Debian machines for friends and family
Supporting Debian machines for friends and family
 
Outsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to DebianOutsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to Debian
 
URL to HTML
URL to HTMLURL to HTML
URL to HTML
 
Easy logins for Ruby web applications
Easy logins for Ruby web applicationsEasy logins for Ruby web applications
Easy logins for Ruby web applications
 
Easy logins for JavaScript web applications
Easy logins for JavaScript web applicationsEasy logins for JavaScript web applications
Easy logins for JavaScript web applications
 
You're still using passwords on your site?
You're still using passwords on your site?You're still using passwords on your site?
You're still using passwords on your site?
 
Killing Passwords with JavaScript
Killing Passwords with JavaScriptKilling Passwords with JavaScript
Killing Passwords with JavaScript
 
Securing the Web without site-specific passwords
Securing the Web without site-specific passwordsSecuring the Web without site-specific passwords
Securing the Web without site-specific passwords
 
Easy logins for PHP web applications
Easy logins for PHP web applicationsEasy logins for PHP web applications
Easy logins for PHP web applications
 
Persona: a federated and privacy-protecting login system for the whole Web
Persona: a federated and privacy-protecting login system for the whole WebPersona: a federated and privacy-protecting login system for the whole Web
Persona: a federated and privacy-protecting login system for the whole Web
 
Taking the pain out of signing users in
Taking the pain out of signing users inTaking the pain out of signing users in
Taking the pain out of signing users in
 

Recently uploaded

GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
UiPath Community Day Dubai: AI at Work..
UiPath Community Day Dubai: AI at Work..UiPath Community Day Dubai: AI at Work..
UiPath Community Day Dubai: AI at Work..
UiPathCommunity
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
Jen Stirrup
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 

Recently uploaded (20)

GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
UiPath Community Day Dubai: AI at Work..
UiPath Community Day Dubai: AI at Work..UiPath Community Day Dubai: AI at Work..
UiPath Community Day Dubai: AI at Work..
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 

Freeing the cloud, one service at a time

  • 1. freeing the cloud one (small) service at a time François Marier francois@catalyst.net.nz
  • 2.
  • 3.
  • 4.
  • 5. open source desktop applications
  • 7. privacy ®
  • 9.
  • 10. 1980s
  • 11.
  • 12.
  • 13. 100% free operating systems
  • 14. started replacing all proprietary programs one at a time
  • 15.
  • 16.
  • 17.
  • 18. “ Developers of network services are encouraged to: ● Use the GNU Affero GPL, a license designed specifically for network service software, to ensure that users of services have the ability to examine the source or implement their own service. ● Develop freely-licensed alternatives to existing popular but non-Free network services. ” ● Develop software that can replace centralized services and data storage with distributed software and data deployment, giving control back to users. Franklin Street Statement, 14 July 2008
  • 19. start replacing all proprietary services one at a time
  • 20.
  • 21.
  • 23. looking for a small one...
  • 24.
  • 25. 2. assign to email address 1. upload photo
  • 26.
  • 27.
  • 28. 101
  • 33. <img src=”http://www.gravatar.com/avatar/ f52a1d3d8c39868fc92cf70828821635.jpg”>
  • 34. <img src=”http://www.gravatar.com/avatar/ f52a1d3d8c39868fc92cf70828821635.jpg”>
  • 35. started to write a replacement
  • 37.
  • 38.
  • 39.
  • 40.
  • 41. “80%” of what does protected accounts
  • 42. “80%” of what does G / PG / X ratings XMLRPC API
  • 43. must fit into the world
  • 44. must fit into the world use the same API
  • 45. must fit into the world use the same API be a Twitter client
  • 46. use the same API https://api.twitter.com/statuses /show/123.xml https://identi.ca/api/statuses /show/123.xml
  • 47. be a Twitter client
  • 48. must fit into the world use the same API be a Gravatar client
  • 49. use the same API http://www.gravatar.com/avatar/ f52a1d3d8c39868fc92cf70828821635.jpg http://cdn.libravatar.org/avatar/ f52a1d3d8c39868fc92cf70828821635.jpg
  • 50. be a Gravatar client
  • 51. Now, how about making it better?
  • 52.
  • 53. Federation via DNS _avatars._tcp SRV avatars.catalyst.net.nz
  • 54. IPv6
  • 55. IPv6 SHA256
  • 56. IPv6 SHA256 OpenID
  • 57. IPv6 SHA256 OpenID LDAP
  • 58. IPv6 SHA256 OpenID Account LDAP Export
  • 59. IPv6 SHA256 OpenID Account Photo LDAP Export Importers
  • 60. What does it look like?
  • 62. photos uploaded or imported by users Django
  • 63. photos uploaded or imported by users Django static files on disk
  • 64. avatars sent to photos uploaded third parties or imported by users Apache Django (mod_rewrite) static files on disk
  • 65. avatars sent to photos uploaded third parties or imported by users high traffic Apache low traffic Django (mod_rewrite) (static) (dynamic) static files on disk
  • 66. avatars sent to photos uploaded third parties or imported by users Apache Django (mod_rewrite) static files on disk
  • 67. avatars sent to photos uploaded third parties or imported by users Apache Django (mod_rewrite) Gearman Crop, resize static files Queue and optimise on disk
  • 68. avatars sent to photos uploaded third parties or imported by users Apache Django (mod_rewrite) Gearman Crop, resize static files Queue and optimise on disk
  • 69. avatars sent to avatars sent to avatars sent to photos uploaded third parties third parties third parties or imported by users Apache Apache Apache Django (mod_rewrite) (mod_rewrite) (mod_rewrite) Gearman Crop, resize static files static files static files Queue and optimise on disk on disk on disk
  • 71.
  • 72.
  • 73. --- a/IkiWiki/Plugin/comments.pm +++ b/IkiWiki/Plugin/comments.pm @@ -187,6 +188,16 @@ sub preprocess { $commentauthor = $commentuser; } + + eval 'use Libravatar::URL'; + + if (! $@) { + my $email = IkiWiki::userinfo_get($commentuser, 'email'); + + if (defined $email) { + $commentauthoravatar = libravatar_url(email => $email); + } + } } else { if (defined $params{ip}) { --- a/templates/comment.tmpl +++ b/templates/comment.tmpl @@ -1,6 +1,10 @@ <TMPL_IF HTML5><article class="comment" id="<TMPL_VAR COMMENTID>"> <TMPL_ELSE><div class="comment" id="<TMPL_VAR COMMENTID>"></TMPL_IF> +<TMPL_IF COMMENTAUTHORAVATAR><div class="comment-avatar"> +<img src="<TMPL_VAR COMMENTAUTHORAVATAR>" alt="" /> +</div></TMPL_IF> + <TMPL_IF HTML5><header class="comment-subject"> <TMPL_ELSE><div class="comment-subject"></TMPL_IF> <TMPL_IF PERMALINK>
  • 74. --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt @@ -675,6 +678,9 @@ YAHOO.util.Event.onContentReady("furtherm", function () { [% ELSE %] <div class="commentline"> [% IF ( ShowReviewer ) %] + [% IF ( review.avatarurl ) %] + <img class="avatar" src="[% review.avatarurl %]" height="80" width="80"/> + [% END %] <h5> Comment by [% review.title %] --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -295,6 +295,13 @@ $template->param( ocoins => GetCOinSBiblio($biblionumber), ); +my $libravatar_available = 0; +eval 'use Libravatar::URL'; +if (! $@) { + $libravatar_available = 1; +} my $reviews = getreviews( $biblionumber, 1 ); my $loggedincommenter; @@ -303,6 +310,9 @@ foreach ( @$reviews ) { $_->{title} = $borrowerData->{'title'}; $_->{surname} = $borrowerData->{'surname'}; $_->{firstname} = $borrowerData->{'firstname'}; + if ($libravatar_available and $borrowerData->{'email'}) { + $_->{avatarurl} = libravatar_url(email => $borrowerData->{'email'}); + } $_->{userid} = $borrowerData->{'userid'}; $_->{cardnumber} = $borrowerData->{'cardnumber'};
  • 75.
  • 76.
  • 77.
  • 78.
  • 79. Get involved! ● write a plugin www.libravatar.org libravatar.onlinegroups.net launchpad.net/libravatar #libravatar on chat.freenode.net
  • 80. Get involved! ● write a plugin ● host a mirror www.libravatar.org libravatar.onlinegroups.net launchpad.net/libravatar #libravatar on chat.freenode.net
  • 81. Get involved! ● write a plugin ● host a mirror ● translate the UI www.libravatar.org libravatar.onlinegroups.net launchpad.net/libravatar #libravatar on chat.freenode.net
  • 82. Get involved! ● write a plugin ● host a mirror ● translate the UI ● create an account today! www.libravatar.org libravatar.onlinegroups.net launchpad.net/libravatar #libravatar on chat.freenode.net
  • 83. Questions? ideas for Libravatar? other easy services to replace? fmarier fmarier http://feeding.cloud.geek.nz
  • 84. Photo credits Storm clouds: http://www.flickr.com/photos/johnson7/1460568819/ Linen texture: http://www.flickr.com/photos/zooboing/4715048673/ Name tag: http://www.flickr.com/photos/stevegarfield/833593377/ Cloud sign: http://www.flickr.com/photos/jamescridland/4122948535/ Facebook data center: http://www.flickr.com/photos/traftery/5596941479/ First web server: http://www.flickr.com/photos/scobleizer/2251820987/ Bradley Kuhn: https://secure.wikimedia.org/wikipedia/en/wiki/File:Bkuhn-2008-08-20.jpg Benjamin Mako Hill: http://www.flickr.com/photos/soulfish/2374876735 Mike Linksvayer: http://www.flickr.com/photos/joi/2595169497/ Luis Villa: http://tieguy.org/pics/Wedding/Honeymoon/Highlights/New-Zealand/img_2145 Henri Poole: http://www.flickr.com/photos/weblogsky/9271675/ Evan Prodromou: http://www.flickr.com/photos/christopheducamp/4469158609/ Jonathan Gray: http://www.flickr.com/photos/jwyg/4497000847/ Aaron Swartz: http://www.flickr.com/photos/creativecommons/3111021669/ Evan Prodromou presenting: http://www.flickr.com/photos/walkah/4831658754 Copyright © 2011 François Marier Released under the terms of the Creative Commons Attribution Share Alike 3.0 Unported Licence