Bü Bü Bündnerfleisch mit soundbite

Wie gut Audio und Text zusammen passen, zeigt dieser von mir mittels soundbite angereicherte Artikel aus der Neuen Luzerner Zeitung:

Ein Bundesrat hat sehr wohl was zu lachen, selbst wenn er Hans-Rudolf Merz heisst. Das exerzierte der Finanzminister gestern in der Fragestunde des Nationalrats eindrücklich vor: Mit Tränen in den Augen krümmte er sich vor Heiterkeit, prustete immer wieder los und brachte kaum ein Wort heraus.

Die gute Laune ausgelöst hatte eine Frage des Waadtländer SVP-Bauern Jean-Pierre Grin. Dieser erkundigte sich danach, ob die Zollverwaltung auch genug gegen die Importzunahme von gewürztem Fleisch unternehme.

Anfangs gelang es dem obersten Chef der Zollbeamten noch, die einschlägigen Bestimmungen mit dem nötigen Ernst zu verlesen – etwa, dass es sich um «die Zolltarifnummer 1602.5099 (Schlüssel 914)» handle. Doch je verwirrender die Paragrafen und ihre Anwendung wurden, desto mehr verlor er die Contenance. Bis ihm die «sogenannten schweizerischen Erläuterungen zum Zolltarif» die Tränen in die Augen trieben. Und Merz mehrmals Anlauf nehmen musste, um den Ausdruck «Bündnerfleisch» am Stück und allgemein verständlich auszusprechen.

Vom Nationalrat erntete der bisweilen selber Belächelte spontanen Beifall. Auch politische Gegner lachten mit, als Merz Grin am Ende um Verzeihung bat und bekannte: «Ich habe bisweilen einfach nicht verstanden, was ich Ihnen vorlas.»

Einzelne Audiofiles per Soundbite einzubinden ist simpel und funktioniert dank HTML5 sowohl in modernen Browsern als auch auf mobilen Geräten*. Der Code dazu lautet:

 <span data-audio="audio/merz03.ogg">«Bündnerfleisch»</span>

Das grösste Problem war, die Javascript-Library in WordPress einzubinden. Die Anleitung dazu gibt’s hier.

Eingefügt habe ich in header.php:

<script type="text/javascript" src="/scripts/Soundbite.js"></script>

in footer.php

<link rel='stylesheet' href='scripts/Soundbite.css'>
<script> 
Soundbite.init();
 </script>

*Aus einem mir unbekannten Grund musste ich die Zeile 54 der Datei Soundbite.css (overflow: hidden;) entfernen, weil dieser Eintrag eine falsche Darstellung erzeugte. Bei mobilen Geräten besteht dieser Fehler weiterhin – Lösungsvorschläge gerne an shufschmid[(a)]gmail.com. Und nun noch als Bonus das Video in voller Länge:

Eigene Artikel auf Facebook-Page posten

Einfacher Ansatz, aufwendige Lösung. So könnte man meine Bemühungen festhalten, meine eigenen neuen Artikel auf 20min.ch automatisch auf meiner Facebook-Page und hier auf diesem Blog zu posten. Hier eine Schritt-für-Schritt-Anleitung.

1. News-Site mit Google-Alerts überwachen.
Google-Alerts schickt automatisch eine E-Mail, wenn ein neuer Eintrag zu einer bestimmten Suchabfrage in den Resultaten erscheint. Der Dienst funktioniert auch mit Google-News und kann statt einer E-Mail auch einen RSS-Feed generieren. In meinem Fall alle neuen Artikel auf „site:20min.ch“, die „von Samuel Hufschmid“ enthalten. Der Alert findet sich hier, der dazugehörige RSS-Feed hier.

2. RSS-Feed mit ifttt.com auf Facebook-Page posten
Der Automatisierungsdienst ifttt.com (ifthisthenthat) wirbt mit dem Slogan „Put the internet to work for you“ und erlaubt neuerdings auch Updates von Facebook-Pages. Das entsprechende Rezept wird immer dann ausgelöst, wenn im RSS-Feed ein neues Item erscheint. Facebook zeigt den Artikel inkl. Link und Bild an. Das Rezept habe ich hier veröffentlich.

3. RSS-Feed als Widget in WordPress integrieren
Damit die Artikel auch auf diesem Blog erscheinen, habe ich den RSS-Feed als Widget der Sidebar hinzugefügt. Im Gegensatz zu den Facebook-Einträgen erscheint lediglich der Titel inkl. Link.

Update:
Ein Speedtest für meinen ersten Artikel zeigt:
20.10.2013 20:37 Veröffentlich auf 20min.ch
20.10.2013 23.03 Facebook-Eintrag veröffentlicht
= 2,5 Stunden, bis der Artikel von Google gefunden, der RSS-Feed ergänzt und von ifttt.com gescannt wurde. Dafür, dass keiner dieser Dienste auch nur einen Rappen kostet, eine durchaus verkraftbare Verzögerung.

Google Autorship für Journalisten

Inspiriert von diesem Blog-Post („The One Reason Every Blogger Should Use Google+“) habe ich mich erstmals mit Google Autorship auseinandergesetzt. Kurz zusammengefasst bietet Google Autorship die Möglichkeit, eigene Artikel in Suchresultaten persönlicher darstellen zu lassen – also mit Foto und Link zum eigenen Google+-Profil. Zunächst habe die Artikel auf samuelhufschmid.ch autorisiert, was gemäss der oben verlinkten Anleitung problemlos funktioniert hat. Eigentlich kein Wunder, läuft dieser Blog doch mit dem meisterverwendeten CMS der Welt – WordPress. Schwieriger war es, mich als Autor meiner Artikel auf 20minuten.ch anzugeben. Zwar steht auch dort mein Name als Autor und ich verfüge auch über eine @20minuten.ch-Emailadresse, aber zunächst wollte das Unterfangen nicht funktionieren. Google bietet mit dem Structured Data Testing Tool eine Möglichkeit, die Fehlerquelle zu identifizieren. „Authorship is not working for this webpage“, hiess es dort. Und ich habe aufgegeben, da ich aus guten gründen nicht am Quellcode von 20min.ch herumbasteln darf. Die freudige Überraschung kam dann einige Tage später, als ich per Zufall auf google.com mein Bild neben einem meiner Artikel auf 20min.ch entdeckt habe.

 

Update: Zwillingsgeburten


Die JavaScript-Bibliothek „D3“ bietet unzählige Möglichkeiten, Daten im Web graphisch darzustellen. Als Einstieg kann ich das Tutorial von Scott Murray empfehlen. Allerdings sind gewisse JavaScript-Vorkenntnisse nötig, um das Tutorial zu begreifen. Nach dem Durcharbeiten der 13 Tutorial-Kapitel ist es mir gelungen, diese relativ simple Darstellung der Zwillingsgeburten im Kanton Basel-Stadt zu erstellen. Die Datengrundlage liefert das Statistische Amt, die ich in Excel in ein JavaScript-Array umgewandelt habe. Die Syntax von D3 ist äusserst knapp gehalten und ermöglicht daher ziemlich effektives Arbeiten. Der untenstehende Befehl beispielsweise erstellt für jeden Eintrag im Array „dataset“ einen Balken in der korrekten Höhe und Position.

 

svg.selectAll("rect")
 .data(dataset)
 .enter()
 .append("rect")
 .attr("x", function(d, i) { return i * (w / dataset.length); })
 .attr("y", function(d) { return h - yScale(d); })
 .attr("width", Math.round(w / dataset.length - barPadding))
 .attr("height", function(d) { return yScale(d); })

Genauere Erläuterungen sind dem Tutorial von Scot Murray zu entnehmen. Das einzige, was ich in Abweichung zum Tutorial selbständig hinzugefügt habe, sind die Jahreszahlen. Diese sind als .append(„text“)-Elemente hinzugefügt, müssen aber im svg.selectAll-Befehl einen neuen Namen erhalten, in meinem Beispiel svg.selectAll(„text2“).

Update: Daten via Google Drive, E-Book

Um D3 besser zu verstehen, habe ich mir das E-Book „Getting Started with D3“ heruntergeladen und mein erstes Beispiel neu programmiert. Zudem war es mir wichtig, einen Weg zu finden, wie ich die Daten als Google Spreadsheet speichern und ins Script einbinden konnte. Das entsprechende Datenfile findet sich hier. Der zunächst einfachste Weg schien mir, die Daten im JSON-Format zu übertragen, da D3 dieses Format unterstütz. Zum Export fand ich auch ein gutes Tutorial, das jedoch nicht zufriedenstellend funktioniert hat. Also habe ich auf CSV-Format umgesattelt, das von Google Drive direkt unterstützt wird (die entsprechende Anleitung ist im JSON-Tutorial enthalten) und bemerkt, dass D3 CSV-Import ebenfalls unterstützt. Die Import-Funktion lautet:

d3.csv('https://docs.google.com/spreadsheet/pub?key=0AnPrU5riz1tMdC10Nl9NOUxvVVc0YzBvSmJVOGNURHc&single=true&gid=0&output=csv', function(data){
 draw(data);
})

Im erwähnten E-Book wird die funktion draw(data) zur Ausgabe der Darstellung verwendet, die unabhängig von der Erstellung des Daten-Array funktioniert. Entsprechend habe ich mir beim Umprogrammieren meines Scripts an die Anweisungen aus dem E-Book gehalten. Programmiert habe ich auf jsfiddle.net, einer Online-Programmierumgebung für JavaScript, die auch die D3-Library direkt einbinden kann. Ebenfalls praktisch: Das Programm kann als iframe exportiert und beispielsweise hier in diesem Blog eingebunden werden (fürs Diagramm auf Result klicken).

Fortsetzung folgt.

Personensuche mit Facebook Graph

Facebook Graph Search ist wohl eines der mächtigsten Werkzeuge für Journalisten. Wieso? Hier ein aktuelles Beispiel aus der 20 Minuten Redaktion. Die Facebook-Seite Basel’s Schönheiten ist derzeit bei Jugendlichen sehr beliebt (3500+ likes). Die Administratoren posten Fotos von jungen Männern und Frauen, die dann vom Pöbel kommentiert und vor allem geliked werden. Die meisten Likes hat Facebook-Userin Marta Adriana Alejos erhalten, die ich für einen Bericht gerne befragt hätte. Auf Facebook-Messages und Freundschaftsanfragen hat sie jedoch nicht reagiert. Da kommt der Graph Search ins Spiel. Mit der Anfrage „My friends who are friends of friends of Marta Adriana Alejos“ fand ich mehrere Facebook-Freunde, die ihrerseits Freunde haben, die mit Marta befreundet sind. Man könnte diese Anfrage folgendermassen darstellen:

[Ich] <–> [meine Freunde] <–> [Freunde von Marta] <–> [Marta]

Per Handy kontaktierte ich einen meiner Freunde, erklärte ihm das Problem, nannte ihm den Namen seines gemeinsamen Freundes mit Marta und fragte, ob er diesem Martas Handynummer entlocken könne.

 

Trendsportart Hockern erobert die Schweiz

Der Sport-Hockern-Weltmeister Stephan Landschütz ist mit seinem ungewöhnlichen Sportgerät auf Europa-Tournee. Derzeit ist er für Filmaufnahmen in Basel.

Am Anfang waren eine WG in Kiel, gelangweilte Studenten und unter dem Küchentisch ein Hocker im 70er-Jahre-Design. Eines Tages haben die Studenten mit dem Hocker Tricks ausprobiert, bis er bei einem besonders gewagten Manöver zerbrach. «Da hatte es uns bereits gepackt. Wir reparierten den Stuhl mit Eisenstangen und Gaffer-Tape, damit wir weiter hockern konnten», erzählt Stephan Landschütz (32).

Sechs Jahre und unzählige reparierte Hocker später ist aus der Studenten-Blödelei ein Trendsport mit Weltmeisterschaft und Turnieren in mehreren Ländern geworden. Um den Sport noch bekannter zu machen, tourt Landschütz in diesem Sommer mit drei weiteren Elite-Hockerern für Filmaufnahmen durch zehn europäische Städte. Gestern haben die vier in Basel Halt gemacht und demonstriert, wie vielfältig der zwei Kilogramm schwere, aus Spezialmaterial angefertigte Sport-Hocker eingesetzt werden kann. «Hockerer kommen aus vielen verschiedenen Sportarten und haben ganz unterschiedliche Ideen und Konzepte in den Sport eingebracht», erklärt der dreifache Weltmeister. «Hockern ist heute, was Skateboarden in den 80er-Jahren war: Es gibt ein neues Sportgerät und jede Menge talentierte und kreative Menschen, die damit Tricks ausprobieren.» Samuel HufschmidStephan Landschütz und seine Crew legten auf ihrer Hock Europe Tournee in Basel einen Halt ein und machten den Theaterplatz unsicher.

Twitter im Bundeshaus

Twitter-User @polittweets führt eine aktuelle Liste twitternder National- und Ständeräte. Mit Hilfe des Excel-Tools NodeXL lassen automatisch auslesen und analysieren. Wegen der neuen restriktiven Richtlinien der Twitter-API dauert Follower-Abfrage der aktuell 84 auf der Liste eingetragenen Parlamentarier mehrere Stunden. Wichtig: Der Computer darf dabei einfach nicht in den Standby-Modus wechseln. Eine praktische Anleitung im Umgang mit Twitter-Listen und NodeXL liefert connectedaction.net. Das Resultat der Abfrage sind sämtliche „followed“-Verbindungen, das heisst Twitter User X folgt Twitter User Y. Falls Y User X ebenfalls folgt, ergibt das eine zweite Verbindung. Die Daten können mittels NodeXL weiterverarbeitet oder in die Visualisierungs-Software Gephi importiert werden. Für mein Beispiel „Twitterkönige im Bundeshaus“ habe ich Google Fusion Tables verwendet. Dazu habe ich die Daten aus Excel per copy/paste in ein Google Spreadsheet eingefügt und daraus eine Fusion Tables Datei erzeugt. Um die am besten vernetzten Parlamentarier zu finden, habe ich in der Diagramm-Ansicht einen Filter auf die erste Datenspalte angewendet. Durch einen Klick auf „sort by count“ zeigt es die Parlamentarier, die von anderen Parlamentarier am häufigsten gefolgt werden. Aktuell (28. Juli 2013) sind das Kathy Riklin (@kathyriklin) und Christian Wasserfallen (@cwasi). Beide zählen 70 der 84 twitternden Parlamentarier zu ihren Followern, allerding – wie der Network-Graph zeigt.

Interessen Grossräte

Die aktuellen Interessenbindungen der Grossräte werden auf bs.ch publiziert. Im Gegensatz zur PDF-Datei werden die Daten in den einzelnen Porträts ständig aktualisiert. Mittels Scraper-Wiki können die einzelnen Porträts automatisch ausgelesen werden, das entsprechende Python-Script ist hier. Das Script liefert ein Tabellen-File für sämtliche Grossräte in folgendem Format:

AticiMustafa InteressenbindungenArbeitgeberAD Atici Management GmbH, Basel (Gastronomie)Mitgliedschaften in F&uumlhrungs- und AufsichtsgremienA Foodliner GmbH, Basel (Gesellschafter/Geschäftsführer) AD Atici Management GmbH, Basel (Gesellschafter/Geschäftsführer)fabe: Familien-, Paar- und Erziehungsberatung, Basel (A/M)Neue Helvetische Gesellschaft Region Basel (A/M)MUSUB: Multikulturelle Suchtberatungsstelle beider Basel (A/M)GGG Ausländerberatung, Kommission (M)
SolandTanja InteressenbindungenArbeitgeberAids-Hilfe beider Basel, BaselMitgliedschaften in F&uumlhrungs- und AufsichtsgremienFDP Basel-Stadt (P)Hausbesitzerverein Basel, Delegiertenversammlung (M)Verein Gemeinnützige Institutionen, Basel (P)Rockförderverein Basel (A/M)Mitgliedschaften in staatlichen, nicht durch den Grossen Rat gewählten KommissionenNationalrat (M)Sicherheitskommission NR (M)

Die von Google Fusion Tables für Network-Graph vorgesehene Datenstruktur ist jedoch deutlich anders. Sie besteht im vorliegenden Beispiel aus einzelnen Verknüpfungen zwischen Organisationen und Grossräten. Das entsprechende Google Drive Spreadsheet steht hier zur Verfügung. Der Umwandlungsprozess war kompliziert und erforderte viel Handarbeit. Das beste Ergebnis erzielte ich durch den Einsatz von Excel und einem einfachen Text-Editor.

Die Tabelle kann danach in Google Fusion Tables importiert werden. Eine Filterung nach all jenen Organisationen, die mehr als einen Vertreter haben, lässt sich einfach vornehmen. Fusion Tables ermöglicht es, die einzelnen Werte nach Anzahl Nennungen anzuzeigen. Danach können die mehrfach vorkommenden Organisationen ausgewählt werden. Eine weitere Option ermöglicht es, die Werte aus den beiden Spalten unterschiedlich einzufärben.

Abstimmung Landrat

Eine Auswertung der ÖV-Abstimmung im Landrat im Rahmen des Sparpakets. Die Resultate sämtlicher Landratsentscheide, aufgeschlüsselt nach einzelnen Landräten, sind seit 2009 unter bl.ch verfügbar. Kombiniert man diese Daten mit den Wohnadressen der Landräte, kann man die Resultate via Google Fusion Tables auf einer Google Map darstellen. Zur Auswahl der einzelnen Symbole (im Beispiel: $ für Sparer, Bus-Symbol für ÖV-Förderer) muss man in Fution Tables „Nein“ durch den Namen des Symbols ersetzen. Eine praktische Übersicht sämtlicher verfügbarer Symbole gibt es hier: https://www.google.com/fusiontables/DataSource?dsrcid=308519#map:id=3.

Dasselbe gilt übrigens auch für Abstimmungen im Grossen Rat, hier ebenfalls ein Beispiel (Sperrung der Mittlere Brücke für Individualverkehr):

Babynamen Bethesda-Spital

Basierend auf denselben Daten der Baby-Galerie des Basler Bethesda-Spitals, ausgelesen mit ScraperWiki (beschrieben in diesem Blogpost), habe ich die Namen der Neugeborenen mit Hilfe mehrerer Wordcloud-Generatoren ausgewertet. Die einzelnen Anbieter haben Vor- und Nachteile, die perfekte Lösung habe ich bisher nicht gefunden. Unbrauchbar war der weitverbreitete Generator von wordle.net, vor allem weil der Export nur als Java-Applet funktioniert und es keine Möglichkeit gibt, das Resultat in einen Blog einzubauen. Besser gefallen hat mir der Wordcloud-Generator Tagxedo. Dieser erlaubt das Exportieren in viele verschiedene Formate. Damit die Wordcloud interaktiv bleibt, wird jedoch das Microsoft Silverlight plugin benötigt. Am besten gefallen hat mir die Lösung von tagul.com. Auch bei diesem Generator können die Clouds in diversen Formaten exportiert werden. Die interaktive Lösung basiert auf Adobe Flash, die einzelnen Einträge können jedoch automatisiert verlinkt werden (in meinem Fall auf die Einträge des Entsprechenden Namens in der ursprünglichen Baby-Galerie).

Word Cloud mit tagul.com:

Die Interaktiven Versionen der anderen Generatoren sind:
Babynamen-Wordcloud auf Tagxedo.com
Babynamen-Wordcloud auf Wordle.net