SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
Blogs und Bier?
Das lob' ich mir!
#ironbloggerhh
#bchh // 15.11.2013
#ironbloggerhh://hi!

carolinn

hasenfarm

kommanderkat

moeffju
#ironblogger://wie alles anfing
Benjamin Mako Hill
2011
Boston, USA

Because you you should blog more.
Because there’s no motivation like peer pressure.
Because doing things for beer is never a bad idea.
://Hamburg
Januar 2013
75 Iron Blogger_innen
40 Aktive
5.840 Beiträge
ø 126 pro Woche
://Hamburg
2 Treffen bisher
Nächster Termin:
04.12.
Aktueller
Kassenstand: 230 €
Spenden
85€ Opferhilfe Hamburg
150€ Kinderhospiz
Sternenbrücke
#ironblogger://Technik im Moment

4 Python Skripte
Datenhaltung in git
Ausführung über cron
Abrechnung in ledger
Wochenpost über XML-RPC
#!/usr/bin/env python
import yaml
import feedparser
import datetime
import sys
import os
from dateutil.parser import parse
import dateutil.tz as tz
import settings
config=settings.load_settings()
with open('bloggers.yml') as f:
users = yaml.safe_load(f.read())
if not os.path.exists('out'):
os.makedirs('out')
try:
with open('out/report.yml') as f:
log = yaml.safe_load(f.read())
except IOError:
log = {}
START = datetime.datetime.strptime(config['start_date'],'%Y/%m/%d')
def parse_published(pub):
try:
return parse(pub).astimezone(tz.tzlocal()).replace(tzinfo=None)
except:
return parse(pub).replace(tzinfo=None)
def get_date(post):
for k in ('published', 'created', 'updated'):
if k in post:
return post[k]
raise ValueError
…
def render_template(path, week=None, **kwargs):
with open('out/report.yml') as r:
report = yaml.safe_load(r)
with open('bloggers.yml') as f:
users = yaml.safe_load(f)
if week:
week = parse(week, default=START)
else:
week = START
week = (week - START).days / 7
week_start = START + (week * datetime.timedelta(7))
week_end = START + ((week + 1) * datetime.timedelta(7))
good = []
lame = []
skip = []
skipped_users = []
userlist = []
punted = []
class User(object):
pass
for (un, rec) in users.items():
u = User()
u.username = un
u.name = rec['name']
u.links = rec['links']
u.twitter = rec.get('twitter')
u.start_de = datetime.datetime.strptime(rec['start'], "%Y/%m/%d").strftime("%d.%m.%Y")
u.start = rec['start']
u.end = rec.get('end')
u.punt = rec.get('punt')
u.stop = rec.get('stop')
u.skip = parse_skip(rec)
u.weeks = report.get(un, [])
userlist.append(u)
# create a subset of punted users
if u.punt:
punted.append(u)
def user_key(u):
return (u.start, u.username)
userlist.sort(key=user_key)
punted.sort(key=user_key)
for u in userlist:
user_start = parse(u.start, default=START)
if u.stop:
continue
try:
if u.end and u.end <= week_start:
continue
except Exception as e:
pass
try:
if u.end and parse(u.end, default=START) <= week_start:
continue
except Exception as e:
pass
if should_skip(u.skip, week):
skipped_users.append(u)
elif user_start > week_start:
skip.append(u)
elif len(u.weeks) <= week or not u.weeks[week]:
lame.append(u)
else:
good.append(u)
debts = get_debts()
return Template(filename=path, output_encoding='utf-8').render(
week=week, week_start=week_start, week_end=week_end,
good=good, lame=lame, skip=skip, skipped_users=skipped_users, userlist=userlist,
pool=(get_balance('Pool') - get_balance('Event')), paid=get_balance('Pool:Paid'),
event=get_balance('Pool:Event'), cgi=cgi,
debts=debts, punted=punted, **kwargs)
Meins!
Gruppenmotivation
Filterbubble
Vernetzung
Einstieg
Bier!
#ironblogger://
Next Level?
#ironblogger://Danke!
@kommanderkat
@carolinn
@hasenfarm
@moeffju
Credits
●
●
●
●
●
●

Mako Hill by Joi Ito http://www.flickr.com/photos/joi/1022023224/ (CCBY)
Ironblogger Logos - Inken Meyer
Foto Ironblogger Treffen Hamburg - Steffen Groenveld
Foto Ironblogger Treffen Stuttgart - Ute Mündlein
Cat with Beer by swardraws http://www.flickr.
com/photos/swardraws/1344472184
Alle Tag Clouds made with love and http://wordle.net/

Weitere ähnliche Inhalte

Was ist angesagt?

Django class based views
Django class based viewsDjango class based views
Django class based viewsjustinvoss
 
Juul Wholesale
Juul WholesaleJuul Wholesale
Juul Wholesalezahid021
 
Code igniter parameter passing techniques
Code igniter parameter passing techniquesCode igniter parameter passing techniques
Code igniter parameter passing techniquesRakhitha Ratnayake
 
global_shopping_online
global_shopping_onlineglobal_shopping_online
global_shopping_onlinedrocallaghan
 
global_shopping_online
global_shopping_onlineglobal_shopping_online
global_shopping_onlinedrocallaghan
 
global_shopping_online
global_shopping_onlineglobal_shopping_online
global_shopping_onlinedrocallaghan
 
global_shopping_online
global_shopping_onlineglobal_shopping_online
global_shopping_onlinedrocallaghan
 
global_shopping_online
global_shopping_onlineglobal_shopping_online
global_shopping_onlinedrocallaghan
 
PerlでWeb API入門
PerlでWeb API入門PerlでWeb API入門
PerlでWeb API入門Yusuke Wada
 
Twib in Yokoahma.pm 2010/3/5
Twib in Yokoahma.pm 2010/3/5Twib in Yokoahma.pm 2010/3/5
Twib in Yokoahma.pm 2010/3/5Yusuke Wada
 
Java&Script
Java&ScriptJava&Script
Java&Scriptcarffuca
 

Was ist angesagt? (13)

Blog Hacks 2011
Blog Hacks 2011Blog Hacks 2011
Blog Hacks 2011
 
Django class based views
Django class based viewsDjango class based views
Django class based views
 
Juul Wholesale
Juul WholesaleJuul Wholesale
Juul Wholesale
 
Code igniter parameter passing techniques
Code igniter parameter passing techniquesCode igniter parameter passing techniques
Code igniter parameter passing techniques
 
Capybara
CapybaraCapybara
Capybara
 
global_shopping_online
global_shopping_onlineglobal_shopping_online
global_shopping_online
 
global_shopping_online
global_shopping_onlineglobal_shopping_online
global_shopping_online
 
global_shopping_online
global_shopping_onlineglobal_shopping_online
global_shopping_online
 
global_shopping_online
global_shopping_onlineglobal_shopping_online
global_shopping_online
 
global_shopping_online
global_shopping_onlineglobal_shopping_online
global_shopping_online
 
PerlでWeb API入門
PerlでWeb API入門PerlでWeb API入門
PerlでWeb API入門
 
Twib in Yokoahma.pm 2010/3/5
Twib in Yokoahma.pm 2010/3/5Twib in Yokoahma.pm 2010/3/5
Twib in Yokoahma.pm 2010/3/5
 
Java&Script
Java&ScriptJava&Script
Java&Script
 

Ähnlich wie Iron Blogger Hamburg #bchh13

How to Scrap Any Website's content using ScrapyTutorial of How to scrape (cra...
How to Scrap Any Website's content using ScrapyTutorial of How to scrape (cra...How to Scrap Any Website's content using ScrapyTutorial of How to scrape (cra...
How to Scrap Any Website's content using ScrapyTutorial of How to scrape (cra...Anton
 
With Great Nerdery Comes Great Responsibility
With Great Nerdery Comes Great Responsibility With Great Nerdery Comes Great Responsibility
With Great Nerdery Comes Great Responsibility John Anderson
 
How I Built a Power Debugger Out of the Standard Library and Things I Found o...
How I Built a Power Debugger Out of the Standard Library and Things I Found o...How I Built a Power Debugger Out of the Standard Library and Things I Found o...
How I Built a Power Debugger Out of the Standard Library and Things I Found o...doughellmann
 
Friend this-new&delete
Friend this-new&deleteFriend this-new&delete
Friend this-new&deleteShehzad Rizwan
 
Deep Dive Into Swift
Deep Dive Into SwiftDeep Dive Into Swift
Deep Dive Into SwiftSarath C
 
How I Built a Power Debugger Out of the Standard Library and Things I Found o...
How I Built a Power Debugger Out of the Standard Library and Things I Found o...How I Built a Power Debugger Out of the Standard Library and Things I Found o...
How I Built a Power Debugger Out of the Standard Library and Things I Found o...doughellmann
 
Language Sleuthing HOWTO with NLTK
Language Sleuthing HOWTO with NLTKLanguage Sleuthing HOWTO with NLTK
Language Sleuthing HOWTO with NLTKBrianna Laugher
 
RubyBarCamp “Полезные gems и plugins”
RubyBarCamp “Полезные gems и plugins”RubyBarCamp “Полезные gems и plugins”
RubyBarCamp “Полезные gems и plugins”apostlion
 
RESTful services on IBM Domino/XWork
RESTful services on IBM Domino/XWorkRESTful services on IBM Domino/XWork
RESTful services on IBM Domino/XWorkJohn Dalsgaard
 
Functions And Header Files In C++ | Bjarne stroustrup
Functions And Header Files In C++ | Bjarne stroustrupFunctions And Header Files In C++ | Bjarne stroustrup
Functions And Header Files In C++ | Bjarne stroustrupSyedHaroonShah4
 
The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015Matt Raible
 
Caret Introduction
Caret IntroductionCaret Introduction
Caret IntroductionJ B
 
Drupal Module Development
Drupal Module DevelopmentDrupal Module Development
Drupal Module DevelopmentSumeet Pareek
 
Go Web Development
Go Web DevelopmentGo Web Development
Go Web DevelopmentCheng-Yi Yu
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overviewYehuda Katz
 

Ähnlich wie Iron Blogger Hamburg #bchh13 (20)

How to Scrap Any Website's content using ScrapyTutorial of How to scrape (cra...
How to Scrap Any Website's content using ScrapyTutorial of How to scrape (cra...How to Scrap Any Website's content using ScrapyTutorial of How to scrape (cra...
How to Scrap Any Website's content using ScrapyTutorial of How to scrape (cra...
 
With Great Nerdery Comes Great Responsibility
With Great Nerdery Comes Great Responsibility With Great Nerdery Comes Great Responsibility
With Great Nerdery Comes Great Responsibility
 
Django
DjangoDjango
Django
 
How I Built a Power Debugger Out of the Standard Library and Things I Found o...
How I Built a Power Debugger Out of the Standard Library and Things I Found o...How I Built a Power Debugger Out of the Standard Library and Things I Found o...
How I Built a Power Debugger Out of the Standard Library and Things I Found o...
 
Friend this-new&delete
Friend this-new&deleteFriend this-new&delete
Friend this-new&delete
 
Deep Dive Into Swift
Deep Dive Into SwiftDeep Dive Into Swift
Deep Dive Into Swift
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
How I Built a Power Debugger Out of the Standard Library and Things I Found o...
How I Built a Power Debugger Out of the Standard Library and Things I Found o...How I Built a Power Debugger Out of the Standard Library and Things I Found o...
How I Built a Power Debugger Out of the Standard Library and Things I Found o...
 
Language Sleuthing HOWTO with NLTK
Language Sleuthing HOWTO with NLTKLanguage Sleuthing HOWTO with NLTK
Language Sleuthing HOWTO with NLTK
 
Django
DjangoDjango
Django
 
RubyBarCamp “Полезные gems и plugins”
RubyBarCamp “Полезные gems и plugins”RubyBarCamp “Полезные gems и plugins”
RubyBarCamp “Полезные gems и plugins”
 
RESTful services on IBM Domino/XWork
RESTful services on IBM Domino/XWorkRESTful services on IBM Domino/XWork
RESTful services on IBM Domino/XWork
 
Functions And Header Files In C++ | Bjarne stroustrup
Functions And Header Files In C++ | Bjarne stroustrupFunctions And Header Files In C++ | Bjarne stroustrup
Functions And Header Files In C++ | Bjarne stroustrup
 
The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015
 
About Go
About GoAbout Go
About Go
 
Caret Introduction
Caret IntroductionCaret Introduction
Caret Introduction
 
vue js.docx
vue js.docxvue js.docx
vue js.docx
 
Drupal Module Development
Drupal Module DevelopmentDrupal Module Development
Drupal Module Development
 
Go Web Development
Go Web DevelopmentGo Web Development
Go Web Development
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
 

Iron Blogger Hamburg #bchh13

  • 1. Blogs und Bier? Das lob' ich mir! #ironbloggerhh #bchh // 15.11.2013
  • 3.
  • 4. #ironblogger://wie alles anfing Benjamin Mako Hill 2011 Boston, USA Because you you should blog more. Because there’s no motivation like peer pressure. Because doing things for beer is never a bad idea.
  • 5. ://Hamburg Januar 2013 75 Iron Blogger_innen 40 Aktive 5.840 Beiträge ø 126 pro Woche
  • 6. ://Hamburg 2 Treffen bisher Nächster Termin: 04.12. Aktueller Kassenstand: 230 €
  • 7. Spenden 85€ Opferhilfe Hamburg 150€ Kinderhospiz Sternenbrücke
  • 8.
  • 9.
  • 10.
  • 11. #ironblogger://Technik im Moment 4 Python Skripte Datenhaltung in git Ausführung über cron Abrechnung in ledger Wochenpost über XML-RPC
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18. #!/usr/bin/env python import yaml import feedparser import datetime import sys import os from dateutil.parser import parse import dateutil.tz as tz import settings config=settings.load_settings() with open('bloggers.yml') as f: users = yaml.safe_load(f.read()) if not os.path.exists('out'): os.makedirs('out') try: with open('out/report.yml') as f: log = yaml.safe_load(f.read()) except IOError: log = {} START = datetime.datetime.strptime(config['start_date'],'%Y/%m/%d') def parse_published(pub): try: return parse(pub).astimezone(tz.tzlocal()).replace(tzinfo=None) except: return parse(pub).replace(tzinfo=None) def get_date(post): for k in ('published', 'created', 'updated'): if k in post: return post[k] raise ValueError …
  • 19. def render_template(path, week=None, **kwargs): with open('out/report.yml') as r: report = yaml.safe_load(r) with open('bloggers.yml') as f: users = yaml.safe_load(f) if week: week = parse(week, default=START) else: week = START week = (week - START).days / 7 week_start = START + (week * datetime.timedelta(7)) week_end = START + ((week + 1) * datetime.timedelta(7)) good = [] lame = [] skip = [] skipped_users = [] userlist = [] punted = [] class User(object): pass for (un, rec) in users.items(): u = User() u.username = un u.name = rec['name'] u.links = rec['links'] u.twitter = rec.get('twitter') u.start_de = datetime.datetime.strptime(rec['start'], "%Y/%m/%d").strftime("%d.%m.%Y") u.start = rec['start'] u.end = rec.get('end') u.punt = rec.get('punt') u.stop = rec.get('stop') u.skip = parse_skip(rec) u.weeks = report.get(un, []) userlist.append(u) # create a subset of punted users if u.punt: punted.append(u) def user_key(u): return (u.start, u.username) userlist.sort(key=user_key) punted.sort(key=user_key) for u in userlist: user_start = parse(u.start, default=START) if u.stop: continue try: if u.end and u.end <= week_start: continue except Exception as e: pass try: if u.end and parse(u.end, default=START) <= week_start: continue except Exception as e: pass if should_skip(u.skip, week): skipped_users.append(u) elif user_start > week_start: skip.append(u) elif len(u.weeks) <= week or not u.weeks[week]: lame.append(u) else: good.append(u) debts = get_debts() return Template(filename=path, output_encoding='utf-8').render( week=week, week_start=week_start, week_end=week_end, good=good, lame=lame, skip=skip, skipped_users=skipped_users, userlist=userlist, pool=(get_balance('Pool') - get_balance('Event')), paid=get_balance('Pool:Paid'), event=get_balance('Pool:Event'), cgi=cgi, debts=debts, punted=punted, **kwargs)
  • 20.
  • 21.
  • 25.
  • 26. Credits ● ● ● ● ● ● Mako Hill by Joi Ito http://www.flickr.com/photos/joi/1022023224/ (CCBY) Ironblogger Logos - Inken Meyer Foto Ironblogger Treffen Hamburg - Steffen Groenveld Foto Ironblogger Treffen Stuttgart - Ute Mündlein Cat with Beer by swardraws http://www.flickr. com/photos/swardraws/1344472184 Alle Tag Clouds made with love and http://wordle.net/