Freeing the cloud, one service at a time
-
Upload
francois-marier -
Category
Technology
-
view
679 -
download
1
description
Transcript of Freeing the cloud, one service at a time
François [email protected]
freeing the cloudone (small) service at a time
open sourcedesktop
applications
SaaS
privacy®
autonomy
control
1980s
100% free
operating systems
started replacing allproprietary 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 allproprietary services
one at a time
libreprojects.net
looking for a small one...
1. upload photo
2. assign to email address
101
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
https://api.twitter.com/statuses/show/123.xml
https://identi.ca/api/statuses/show/123.xml
use the same API
be a Twitter client
must fit into the world
use the same API
be a Gravatar client
http://www.gravatar.com/avatar/f52a1d3d8c39868fc92cf70828821635.jpg
http://cdn.libravatar.org/avatar/f52a1d3d8c39868fc92cf70828821635.jpg
use the same API
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
AccountExport
LDAP
IPv6 SHA256 OpenID
PhotoImporters
AccountExport
LDAP
What does it look like?
Live demo!
Django
photos uploadedor imported by users
Django
static fileson disk
photos uploadedor imported by users
Apache(mod_rewrite)
Django
static fileson disk
avatars sent tothird parties
photos uploadedor imported by users
Apache(mod_rewrite)
Django
static fileson disk
avatars sent tothird parties
photos uploadedor imported by users
high traffic
(static)
low traffic
(dynamic)
Apache(mod_rewrite)
Django
static fileson disk
avatars sent tothird parties
photos uploadedor imported by users
Apache(mod_rewrite)
Django
static fileson disk
avatars sent tothird parties
photos uploadedor imported by users
Crop, resizeand optimise
GearmanQueue
Apache(mod_rewrite)
Django
static fileson disk
avatars sent tothird parties
photos uploadedor imported by users
Crop, resizeand optimise
GearmanQueue
Apache(mod_rewrite)
Django
static fileson disk
avatars sent tothird parties
photos uploadedor imported by users
Crop, resizeand optimise
GearmanQueue
Apache(mod_rewrite)
static fileson disk
avatars sent tothird parties
Apache(mod_rewrite)
static fileson disk
avatars sent tothird parties
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'}; $_->{datereviewed} = format_date($_->{datereviewed});
Get involved!
● write a plugin
www.libravatar.org launchpad.net/libravatar
libravatar.onlinegroups.net#libravatar on chat.freenode.net
Get involved!
● write a plugin
● host a mirror
www.libravatar.org launchpad.net/libravatar
libravatar.onlinegroups.net#libravatar on chat.freenode.net
Get involved!
● write a plugin
● host a mirror
● translate the UI
www.libravatar.org launchpad.net/libravatar
libravatar.onlinegroups.net#libravatar on chat.freenode.net
Get involved!
● write a plugin
● host a mirror
● translate the UI
● create an account today!
www.libravatar.org launchpad.net/libravatar
libravatar.onlinegroups.net#libravatar on chat.freenode.net
ideas for Libravatar?
other easy services to replace?
Questions?
fmarier fmarier
http://feeding.cloud.geek.nz
Photo creditsStorm 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.jpgBenjamin Mako Hill: http://www.flickr.com/photos/soulfish/2374876735Mike Linksvayer: http://www.flickr.com/photos/joi/2595169497/Luis Villa: http://tieguy.org/pics/Wedding/Honeymoon/Highlights/New-Zealand/img_2145Henri 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 MarierReleased under the terms of the Creative CommonsAttribution Share Alike 3.0 Unported Licence