SlideShare ist ein Scribd-Unternehmen logo
1 von 84
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

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 Django
DjangoCon2008
 
Advanced JavaScript Development
Advanced JavaScript DevelopmentAdvanced JavaScript Development
Advanced JavaScript Development
Jussi 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
 
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
Steven Evatt
 

Was ist angesagt? (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)
 

Ähnlich wie Freeing the cloud, one service at a time

Deploying
DeployingDeploying
Deploying
soon
 
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
Fred Sauer
 
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
Angelo Dell'Aera
 
Django: Beyond Basics
Django: Beyond BasicsDjango: Beyond Basics
Django: Beyond Basics
arunvr
 
Rapid Prototyping with TurboGears2
Rapid Prototyping with TurboGears2Rapid Prototyping with TurboGears2
Rapid Prototyping with TurboGears2
Alessandro Molina
 

Ähnlich wie 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
 

Mehr von Francois Marier

Killing Passwords with JavaScript
Killing Passwords with JavaScriptKilling Passwords with JavaScript
Killing Passwords with JavaScript
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 Web
Francois 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 in
Francois Marier
 

Mehr von 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
 

Kürzlich hochgeladen

Kürzlich hochgeladen (20)

Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
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
 
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
 
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...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
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...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
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
 
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)
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
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
 

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