GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30....

30

Transcript of GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30....

Page 1: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

GNU MediaGoblin @ ChiPy

Christopher Allan Webber

2011-06-09 Thu

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 1 / 30

Page 2: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Outline

1 About me!

2 Let's see some screenshots

3 The technology stack

4 State of the project / etc

5 How do I get involved

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 2 / 30

Page 3: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Hello Chipy! / About Me

Hi, I'm Christopher Allan Webber!

I used to give talks here a lot

Then I moved to Deklabbs (DeKalb, IL)

By dayjob, a programmer for Creative Commons

By night, programmer on various FOSS things, maker of weirddrawings

http://dustycloud.org/

But I'm not here to talk about me. . .

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 3 / 30

Page 4: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Logo?

.-''-.

< o o >

/oO-Ooo'\

///\/ -____- \

-->\. ///\.\

\__/\ -\_/ /

) \_/

/ \__/ '

/ / | |

____ _ _ _ _

/ ___| \ | | | | |

| | _| \| | | | |

| |_| | |\ | |_| |

\____|_| \_|\___/

__ __ _ _ ____ _ _ _

| \/ | ___ __| (_) __ _ / ___| ___ | |__ | (_)_ __

| |\/| |/ _ \/ _` | |/ _` | | _ / _ \| '_ \| | | '_ \

| | | | __/ (_| | | (_| | |_| | (_) | |_) | | | | | |

|_| |_|\___|\__,_|_|\__,_|\____|\___/|_.__/|_|_|_| |_|

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 4 / 30

Page 5: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

So, about GNU MediaGoblin!

Pull up http://mediagoblin.org/Better summary on page but in short we're building:

Media publishing system

Initially images only

But designing for multiple media types (video, documents, etc)

Federated (more on this later!)

Think: FOSS, federated Flickr/DeviantArt (eventuallyYouTube/Blip/Vimeo)

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30

Page 6: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

The problem of intarwebs homogenization

Teh intarwebs!

Initially this great, decentralized, fault-tolerant system

More and more homogenization means:

more centralizationmore rigiditymore fragilitysad intarwebs

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 6 / 30

Page 7: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Enter federation and free software

Decentralization w/ intercommunication

We already know what this looks like outside the web:

emailxmpp/jabber

Federated web services: bringing intercommunication to the web

We already have a pretty good meta-standard: OStatus

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 7 / 30

Page 8: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Main page

| GNU MediaGoblin | login | register |

|------------------------------------------------|

| |

| ___________________________________________ |

| | | |

| | GNU MediaGoblin is a great way to start | |

| | sharing blah blah blah | |

| | [ Sign me up! ] | |

| | [ More about GMG ] | |

| '-------------------------------------------' |

| |

| ___________________________________________ |

| |_Featured_works____________________________| |

| | _________ _________ _________ | |

| | | ,-\/ | | ,( ) | | ,,, | | |

| | | /o o_,,| | (_o_) | | e~_~ | | |

| | |/ __vvvv | | / | | \ / | | |

| | | / \ | | ,,,,,, | | / \ | | |

| | '---------' '---------' '---------' | |

| | Dragons of Clover in Joe is so | |

| | Flame by the grass Hip | |

| | schendje by clovdud by joe | |

| '-------------------------------------------' |

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 8 / 30

Page 9: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Piece of media

| GNU MediaGoblin | login | register |

|------------------------------------------------|

| |

| The Terror of Tinman Tim |

| Posted by cwebber on May 8, 2011 |

| ___________________________________________ |

| | | |

| | __ ____ | |

| | (O)== | |=(O) | |

| | | |O o| DESTROY ALL HUMANS | |

| | |__|[ww]| | |

| | | | _ | _ | |

| | | ((((((_ |((_ | |

| | | | | | |

| | |____|____| | |

| | |_| \_\ _ | |

| | _/_/_ \_// / | |

| | |___|| |/_/ | |

| | | |

| '-------------------------------------------' |

| _________________________________________ |

| | Just another piece on a robot who wants | |

| | to do what any robot would want to do. | |

| '-----------------------------------------' |

| |

| Comments: |

| __________________________________________ |

| | Wow I love your robot!!!!!! | |

| | sue @ May 8 2011 11:45PM | |

| '------------------------------------------' |

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 9 / 30

Page 10: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

User pro�le

_____

|_( )_| USER NAME

| | |

|_/_\_|

Recent artwork:

___________________ ___________________________

| ___ ___ ___ | |_About_User_Name___________|

| |pic| |pic| |pic| | | |

| |___| |___| |___| | | Some sort of self- |

| ___ ___ ___ | | description probably goes |

< | |pic| |pic| |pic| | > | here |

| |___| |___| |___| | | |

| ___ ___ ___ | | |

| |pic| |pic| |pic| | | |

| |___| |___| |___| | | |

|___________________| |___________________________|

___________________________

Recent favorites: |_Recent_activity___________|

___________________ | New picture: DragonFace |

| ___ ___ ___ | | 4/2/2010 |

| |pic| |pic| |pic| | |---------------------------|

| |___| |___| |___| | | Sup yall this is some kind|

| ___ ___ ___ | | of mini blogpost. Maybe |

< | |pic| |pic| |pic| | > | the interface will allow |

| |___| |___| |___| | | for this? |

| ___ ___ ___ | |___________________________|

| |pic| |pic| |pic| |

| |___| |___| |___| | ___________________________

|___________________| |_External_comments_here____|

| Dang! This stuff rocks |

| - Joe 4/2/2010 |

|---------------------------|

| Nice job on the dragon |

| - Morgan 4/2/2010 |

'---------------------------'

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 10 / 30

Page 11: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Uploading an image

Upload an image

[ Title ]

Upload: [ ] [Browse]

___________________________________________

| |

| |

| o0O |

| o ' |

| o_.' |

| |

| Uploading... OK | <-,

| Resizing... OK | |

| | Area replaced w/ resized

| | image when done

|___________________________________________|

________________

License |_CC BY-SA_____|V|

___________________________________________

| Description goes here. |

| You can type it up in here and everything |

| and it'll show up under the image. |

| |

| Possibly we should allow some kind of |

| markup... maybe markdown? |

'___________________________________________'

__________________________________________

|> Advanced |

------------------------------------------

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 11 / 30

Page 12: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

OH WAIT

Oh wait sorryso sorryReal screenshots:http://mediagoblin.org/2011/06/version-002�we-can-haz-pages/

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 12 / 30

Page 13: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

But this is a ChiPy presentation!

What is GNU MediaGoblin from like, a technical standpoint

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 13 / 30

Page 14: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

"Framework"

WSGI minimalist application

�no framework� / unframework

�Django minus Django�

highly recommend reading �Another Do-It-Yourself Framework�in webob docshttp://pythonpaste.org/webob/do-it-yourself.html

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 14 / 30

Page 15: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Django minus Django (part 1)

Django minus Django, why not Django?

I must be an idiot, I don't know how great Django is

I've done a ton of Django development, yes I know howawesome it is

Actually I replaced the world's �rst major Python Pastedeployment with Django at Imaginary Landscape

McAvoy: �Do your �ngers burn as you type�

I think this was the right choice for Imaginary Landscape!

Also have worked on http://miroguide.com/ andhttp://mirocommunity.org and Django was great for these

Django is great for many, maybe most webdev, and is theabsolute best option for new python web programmers

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 15 / 30

Page 16: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Django minus Django (part 2)

Replace the templates with Jinja2, replace the database withMongoDB / MongoKit, etc, how much Django do you have left?

Most of Django's ideas implemented as good or better inindependent libraries now

Gluing together those libraries yourself

not hard at all�framework� module mediagoblin/app.py only 160 lines andpretty custom

In the end our stack still owes a lot of thanks to Django though.

(Other frameworks are also nice, hi Massimo!)

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 16 / 30

Page 17: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

What the app looks like:

-. mediagoblin/

|-> app.py

|-> routing.py

|-> util.py

|

|-. db/

| |-> models.py

| '-> migrations.py

|

|-. auth/

| |-> routing.py

| |-> views.py

| '-> lib.py

|

|-. submit/

| |-> routing.py

| |-> views.py

| '-> lib.py

|

|-. templates/

. . . etc. Look familiar enough?Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 17 / 30

Page 18: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

The technology stack page!

Python langauge

Nose tests

zc.buildout for the environment, you can use virtualenv tho

MongoDB for the database

MongoKit ORM for the database

Paste Deploy For launching the application / applicationcon�guration

WebOb Request / Response objects (very Django-like)

Jinja2 Templating system

WTForms Form stu�

Celery For farming out tasks/media processing (image resizing,video transcoding, etc)

A few other things Whatever, read our setup.py

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 18 / 30

Page 19: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

mediagoblin/auth/routing.py

from routes.route import Route

auth_routes = [

Route('mediagoblin.auth.register',

'/register/',

controller='mediagoblin.auth.views:register'),

Route('mediagoblin.auth.register_success',

'/register/success/',

template='mediagoblin/auth/register_success.html',

controller='mediagoblin.views:simple_template_render'),

Route('mediagoblin.auth.login',

'/login/',

controller='mediagoblin.auth.views:login'),

Route('mediagoblin.auth.logout',

'/logout/',

controller='mediagoblin.auth.views:logout'),

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 19 / 30

Page 20: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

mediagoblin/db/models.py

class User(Document):

__collection__ = 'users'

structure = {

'username': unicode,

'email': unicode,

'created': datetime.datetime,

'plugin_data': dict, # plugins can dump stuff here.

'pw_hash': unicode,

'email_verified': bool,

'status': unicode,

'verification_key': unicode,

'is_admin': bool,

}

required_fields = ['username', 'created', 'pw_hash', 'email']

default_values = {

'created': datetime.datetime.utcnow

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 20 / 30

Page 21: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

mediagoblin/user_pages/views.py

@uses_pagination

def user_home(request, page):

"""'Homepage' of a User()"""

user = request.db.User.find_one({

'username': request.matchdict['user'],

'status': 'active'})

if not user:

return exc.HTTPNotFound()

cursor = request.db.MediaEntry.find(

{'uploader': user['_id'],

'state': 'processed'}).sort('created', DESCENDING)

# [...]

return render_to_response(

request,

'mediagoblin/user_pages/user.html',

{'user': user,

'media_entries': media_entries,

'pagination': pagination})

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 21 / 30

Page 22: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

mediagoblin/auth/forms.py

class RegistrationForm(wtforms.Form):

username = wtforms.TextField(

'Username',

[wtforms.validators.Required(),

wtforms.validators.Length(min=3, max=30),

wtforms.validators.Regexp(r'^\w+$')])

password = wtforms.PasswordField(

'Password',

[wtforms.validators.Required(),

wtforms.validators.Length(min=6, max=30),

wtforms.validators.EqualTo(

'confirm_password',

'Passwords must match.')])

confirm_password = wtforms.PasswordField(

'Confirm password',

[wtforms.validators.Required()])

email = wtforms.TextField(

'Email address',

[wtforms.validators.Required(),

wtforms.validators.Email()])

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 22 / 30

Page 23: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

mediagoblin/templates/[. . . ]/user.html

{% block mediagoblin_content %}

<form action="{{ request.urlgen('mediagoblin.auth.login') }}"

method="POST" enctype="multipart/form-data">

<div class="login_box form_box">

<h1>Log in</h1>

{% if login_failed %}

<div class="form_field_error">Login failed!</div>

{% endif %}

{{ wtforms_util.render_divs(login_form) }}

<div class="form_submit_buttons">

<input type="submit" value="submit" class="button"/>

</div>

{% if next %}

<input type="hidden" name="next" value="{{ next }}"

class="button" style="display: none;"/>

{% endif %}

<p>

Don't have an account yet?

<a href="{{ request.urlgen('mediagoblin.auth.register') }}">

Create one here!</a></p>

</div>

</form>

{% endblock %}

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 23 / 30

Page 24: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Why MongoDB?

Actually little to do with scalabilityKind of the opposite (worried about scaling down)More �exibility:

Example (Example)

{"title": "Me talking until you are bored",

"description": "blah blah blah",

"media_type": "audio",

"media_data": {

"length": "2:30",

"codec": "OGG Vorbis"},

"plugin_data": {

"licensing": {

"license": "http://creativecommons.org/[...]/"}}}

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 24 / 30

Page 25: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Thoughts on MongoKit

Pretty great

Good way to ensure structure while retaining �exibility

Not too fond of the indexing and migration stu�, we'll probablydo it ourselves

Development slightly stagnant, but not completely

Doesn't bloat your documents at all

Hope it keeps going!

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 25 / 30

Page 26: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Thoughts on Jinja2

Like Django templating but extremely better:

Able to pass in arguments to function

Don't have to waste your time on super�uous tags

{% elif %}

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 26 / 30

Page 27: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

OStatus!

http://ostatus.org

How we're going to do federation

Kind of a meta-standard

PubSubHubbubSalmonetc. . .

Already in use!

StatusNet / http://identi.caGoogle Buzz (largely)

Can go through this at end if have time :)

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 27 / 30

Page 28: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

A bit on it being a GNU project

Wasn't originally a GNU project, was asked if I want to make itGNU

But I'm very proud the software is �GNU MediaGoblin�

web-wise, FOSS is winning in libraries and failing in applications

Vision of GNU 25 years ago, and mostly come true

Many of us rely on this dream come true for our dayjobs even

Do the ideas of GNU apply in the modern day?

A very interesting copyright assignment strategy

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 28 / 30

Page 29: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Actual state of the project

1 month private development

1.5 months public dev

For that timeline, made some good progress:

a lot of good infrastructureyou can submit and view mediaauthentication systemstart of a good theme

A lot of the best features still �in the future�:

federationmultiple media types

Moving fast!

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 29 / 30

Page 30: GNU MediaGoblin @ ChiPy · Christopher Allan Webber GNU MediaGoblin @ ChiPy 2011-06-09 Thu 5 / 30. The problem of intarwebs homogenization ehT intarwebs! Initially this great, decentralized,

Okay, I want to get involved!

We're o� to a really great start but we could use your help!

Getting started easier than you might think!See the �hacking howto� section of our docs especially.

Join us! Contact us!

Website http://mediagoblin.org

Join us http://mediagoblin.org/join/ <- !

Docs http://docs.mediagoblin.org

IRC #mediagoblin on irc.freenode.net

Contact me http://dustycloud.org/contact/

Christopher Allan Webber () GNU MediaGoblin @ ChiPy 2011-06-09 Thu 30 / 30