SlideShare une entreprise Scribd logo
1  sur  84
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견NAVER D2
 
Testing Drupal with Ghosts and Gherkin
Testing Drupal  with Ghosts and GherkinTesting Drupal  with Ghosts and Gherkin
Testing Drupal with Ghosts and GherkinPhase2
 
Bootstrap과 UI-Bootstrap
Bootstrap과 UI-BootstrapBootstrap과 UI-Bootstrap
Bootstrap과 UI-BootstrapWebFrameworks
 
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 Stuffjeresig
 
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 Browsersjeresig
 
Practical Clojure Programming
Practical Clojure ProgrammingPractical Clojure Programming
Practical Clojure ProgrammingHoward 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 ScalaKévin Margueritte
 
Groovy And Grails JUG Padova
Groovy And Grails JUG PadovaGroovy And Grails JUG Padova
Groovy And Grails JUG PadovaJohn Leach
 
memories of tumblr gear & Tumblrowl
memories of tumblr gear & Tumblrowlmemories of tumblr gear & Tumblrowl
memories of tumblr gear & Tumblrowlhonishi
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture IntroductionHaiqi 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
 

Tendances (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)
 

Similaire à 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 DeploymentMike Brittain
 
Django deployment with PaaS
Django deployment with PaaSDjango deployment with PaaS
Django deployment with PaaSAppsembler
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third PluginJustin 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 2017MarcinStachniuk
 
JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4alexsaves
 
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 DjangoLakshman Prasad
 
OpenStack Murano introduction
OpenStack Murano introductionOpenStack Murano introduction
OpenStack Murano introductionVictor 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 RubyFabio Akita
 
Building Rackspace Cloud Monitoring
Building Rackspace Cloud MonitoringBuilding Rackspace Cloud Monitoring
Building Rackspace Cloud Monitoringgdusbabek
 
Release management with NuGet/Chocolatey/JIRA
Release management with NuGet/Chocolatey/JIRARelease management with NuGet/Chocolatey/JIRA
Release management with NuGet/Chocolatey/JIRAYaroslav 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 DjangoUdi Bauman
 
Monkeybars in the Manor
Monkeybars in the ManorMonkeybars in the Manor
Monkeybars in the Manormartinbtt
 

Similaire à 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
 

Plus de 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 UsersFrancois 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 WebappFrancois Marier
 
Hardening Firefox for Security and Privacy
Hardening Firefox for Security and PrivacyHardening Firefox for Security and Privacy
Hardening Firefox for Security and PrivacyFrancois 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 2016Francois Marier
 
Privacy and Tracking Protection in Firefox
Privacy and Tracking Protection in FirefoxPrivacy and Tracking Protection in Firefox
Privacy and Tracking Protection in FirefoxFrancois 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 2015Francois Marier
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptFrancois Marier
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptFrancois 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 familyFrancois Marier
 
Outsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to DebianOutsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to DebianFrancois Marier
 
Easy logins for Ruby web applications
Easy logins for Ruby web applicationsEasy logins for Ruby web applications
Easy logins for Ruby web applicationsFrancois Marier
 
Easy logins for JavaScript web applications
Easy logins for JavaScript web applicationsEasy logins for JavaScript web applications
Easy logins for JavaScript web applicationsFrancois 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 passwordsFrancois Marier
 
Easy logins for PHP web applications
Easy logins for PHP web applicationsEasy logins for PHP web applications
Easy logins for PHP web applicationsFrancois 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
 

Plus de 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
 

Dernier

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
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
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
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
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
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
 
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
 
🐬 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
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
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
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 

Dernier (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
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
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
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...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
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
 
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
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
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...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 

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