Archiv für den Monat: Juni 2014

Elfmeterschießen ist voll ungerecht!

wm2014Die Gruppenphase der Fussballweltmeisterschaft 2014 ist Geschichte, in wenigen Minuten beginnt die KO-Runde: Wer verliert, ist raus. Das bedeutet auch, dass – anders als in der Vorrunde – bei jedem Spiel ein eindeutiger Sieger ermittelt werden muss. Steht es auch nach Verlängerung unentschieden, dann schafft ein Elfmeterschießen Abhilfe. Die Regeln dafür sind genau festgelegt und nicht allzu kompliziert. Eine ebenfalls simple Sache im Prozedere ist aber doch etwas zu simpel gelöst:

Abwechselnd schießt je ein Spieler beider Mannschaften einen Strafstoß.

via http://de.wikipedia.org/wiki/Elfmeterschießen

In der Praxis sieht das so aus, wenn die Mannschaft X gegen die Mannschaft Y antritt und Mannschaft X beginnt:

XY XY XY XY XY

Gegebenenfalls wird die Reihe weiter verlängert, bis ein eindeutiger Sieger feststeht, aber das hier ist die einfache Grundstruktur. Klingt vernünftig, jedoch zeigen statistische Untersuchungen, dass bei dieser Regelung mit einer Wahrscheinlichkeit von 60% diejenige Mannschaft gewinnt, die den ersten Elfmeter schießt, also in unserem Fall die Mannschaft X. Eine gerechte Reihenfolge dagegen wäre:

XY YX YX XY YX XY XY YX

So eine Abfolge nennt man auch Thue-Morse-Folge. Man beginnt mit XY. Danach nimmt man die bisherige Folge, invertiert sie und hängt sie wieder hinten an: YX. Und immer so weiter. Es lässt sich zeigen, dass das eine gerechte Abfolge wäre. Falls dich das genauer interessiert kann ich dir diese beiden Artikeln aus der „Math up your life!“-Reihe der Zeit empfehlen, in denen das genau erklärt wird. Kleiner Lesetipp für die Halbzeitpause:

Kaugummis: Sympathische Sucht

Extra Professional PeppermintIch bin kaugummisüchtig. Wirklich, ich werde ziemlich nervös, wenn ich keine Kaugummis habe. Fragt meine Freunde. In der Regel habe ich Kaugummis a) in meiner Hosentasche und b) zur Absicherung und für den Nachschub in meiner Tasche, in der ich den sonstigen Kram mit mir herumtrage. Ich finde sie blind. Und ich bin wählerisch. Ab und an nehme ich allen Mut zusammen und probiere neue Sorten aus, komme aber immer wieder auf die „Extra Professional Peppermint“ zurück. Vermutlich haben sie mich mit dem clever gewählten Namen am Wickel.

Sucht ist Sucht, mit all ihren Problemen. Die Kaugummisucht aber hat auch ihre Vorteile:

Ich bin erleichtert.

 

Bulk Calendar – Mehrere Termine auf einmal bei Google Calendar eintragen

Ihr kennt das: Man will weder einen einzelnen Termin in seinen Google Calendar eintragen, noch einen Serientermin erstellen. Man hat beispielsweise eine Reihe an Seminaren mit verschiedenen Themen, irgendwelche Meetings an wechselnden Orten oder die Fussballtermine der Kinder gegen verschiedene Gegener. Man kann jetzt entweder auf die Details verzichten und doch einen Serientermine anlegen, oder aber man hat viel Handarbeit vor sich.

Genau diese Handarbeit kann man sich deutlich erleichtern, indem man die anzulegenden Termine in eine simple Google Tabelle einträgt und anschließend dort ein Skript startet, welches diese tabellarisch erfassten Daten in einen Kalender einträgt. Es ist schon etwas länger her, dass ich mich auf die Suche nach einem solchen Skript gemacht habe. Daher fehlt mir jetzt leider die Referenz auf das Original an dem ich anschließend noch ziemlich weitergebastelt habe.

Ich habe hier eine Kopie meiner Tabelle erstellt und freigegeben. Sieht in etwas so aus:

Bulk Calendar - Tabelle

Wenn du die Tabelle und das Skript verwenden willst erstellst du dir am besten erst mal eine Kopie der Tabelle (das Skript ist darin eingebettet):

Bulk Calendar - Kopie erstellen

Zuerst muss man logischerweise die gewünschten Daten in die Tabelle eintragen (Tabelle s.o.). Die grau markierten Zellen (Start- und Endzeitpunkt) dürfen nicht editiert werden. Wichtig ist, dass man die Formel in den grauen Spalten nur soweit nach unten kopiert, wie auch Daten in die Zeilen eingetragen sind:

Bulk Calendar - Formeln

Anschließend muss das Skript ausgeführt werden:

Bulk Calendar - Tools - Skriptmanager

Bulk Calendar - Skriptmanager Ausführen

Beim Ausführen des Skript gibt es diverse Kontroll-Dialoge, die man einfach im Skript nach Belieben auskommentieren kann.

Der Vollständigkeit halber hier noch der Code des Skripts. Wie immer quick’n’dirty, tut es aber für mich. Falls jemand damit weiter bastelt bin ich offen für Anregungen.


// Custom Menu:
// see https://developers.google.com/apps-script/guides/bound#custom_menus_dialogs_and_sidebars
function onOpen() {
  
//  var cals = CalendarApp.getAllOwnedCalendars();
//  Browser.msgBox('Es gibt genau %s Kalender zu Auswahl:', CalendarApp.getAllOwnedCalendars().length);
//  for (var c=0; c < cals.length; c++) {
//    ui.createMenu('Termine eintragen')
//      .addItem(cals.getName(), 'TermineInCalendarEintragen')
//      .addToUi();
//  }  
  
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Termine eintragen')
      .addItem('Go!', 'TermineInCalendarEintragen')
      .addToUi();

}





function TermineInCalendarEintragen() {
 
  // Default-Kalender auswählen:
  //var cal = CalendarApp.getDefaultCalendar();
 
  // Besser: Auswahl an Kalendern anbieten.
  // Ansatz: Alle möglichen Kalender auflisten, per Eingabefeld den gewünschten eingeben lassen:
  var kalenderauswahl = 'In welchen Kalender sollen die Termine eingetragen werden?\\n\\n';
  // Alle eigenen Kalender abrufen:
  var cals = CalendarApp.getAllOwnedCalendars();
  
  Logger.log('Es gibt genau %s Kalender zu Auswahl:', cals.length);
  
  // Kalender durchgehen und Ausgabenachricht zusammenbasteln:
  //for (c in cals) {
  for (var c=0; c < cals.length; c++) {
    Logger.log("ID: " + cals.getName());
    kalenderauswahl = kalenderauswahl + '- ' + cals.getName() + '\\n';
  }
  kalenderauswahl = kalenderauswahl + '\\nBitte Kalendername EXAKT eingeben:';
  var kalendername = Browser.inputBox(kalenderauswahl)
  Logger.log("Kalender: " + kalendername);
  
  // Jetzt den Kalender mit dem übergebenen Namen auswählen:
  cal = CalendarApp.getCalendarsByName(kalendername);
 
  
  // Falls ein (brauchbarer) Kalendername eingegeben wurde:
  if (kalendername && cal.length > 0) {
    Browser.msgBox('Kalender "' + cal[0].getName()  + '" gewählt.')
    
    // Jetzt werden die Daten aus der Tabelle gezogen:
    var sheet = SpreadsheetApp.getActiveSheet();
    var startRow = 2;
    var numRows = SpreadsheetApp.getActiveSheet().getLastRow()-1;  // -1, weil die Kopfzeile keine Daten enthält
    Browser.msgBox('Es sollen ' + numRows + ' Termine eingetragen werden.')
    // Datenbereich auswählen:
    var dataRange = sheet.getRange(startRow, 1, numRows, 8);
    // Daraus Daten in Variable schreiben:
    var data = dataRange.getValues();
    // Jetzt jede Zeile durchgehen:
    for (d in data) {
      // Daten aus dieser Zeile wählen:
      var row = data[d];
      
      // Jetzt einzelne Felder davon:
      var title  = row[0];
      var tstart = row[4];
      var tstop  = row[5];
      var loc    = row[6];
      var desc   = row[7];
      
      // Jetzt wird der Termin eingetragen:
      // https://developers.google.com/apps-script/class_calendarapp?hl=de#createEvent
      cal[0].createEvent(title, tstart, tstop, {description:desc,location:loc});
      
      // ... und noch eine Meldung ausgegeben. Denn manchmal steigt das Skript aus, und so weiß man, wie weit es war.
      Browser.msgBox( parseInt(d)+1 + '. Termin in Kalender "' + kalendername + '" eingetragen:\\n\\n' + title + '\\n\\n' +  tstart + '\\n\\n' + desc )
    }
    // Am Ende nochmal Meldung, dann ist klar, dass alles durchgelaufen ist:
    Browser.msgBox('Fertig!');
  }
  else {
    Browser.msgBox('Kein Kalender ausgewählt oder Kalender falsch angegeben...')
  }
}


Cross Country: Ein alter Hut

War heute mit dem Mountainbike eine Runde in den Wäldern Südtirols unterwegs. Irgendwie dachte ich, dass das ein relativ junger Sport ist, den ich da betreibe, aber dieses Video eines Cross-Country-Rennens von 1920 beweist das Gegenteil:


via http://overnighter.de/2014/06/video-nicht-neu-cross-country-cycling/

Würde durch Demut

Ich bin jetzt mal so dreist und kopiere nahezu 1:1 einen Beitrag von Gerd. Er verweist auf die Rede des Schriftstellers Navid Kermani zur Feierstunde „65 Jahre Grundgesetz“. Gerd ist darin eine Passage aufgefallen, die auch ich ziemlich bemerkens- und erwähnenswert finde. Es geht darin um Willy Brandts Kniefall von Warschau:

Dies ist noch merkwürdiger als das Paradox mit dem das Grundgesetz beginnt und wohl beispiellos in der Geschichte der Völker: Dieser Staat hat Würde durch einen Akt der Demut erlangt. Wird nicht das Heroische gewöhnlich mit Stärke assoziiert? Mit Männlichkeit und also auch physischer Kraft? Und am allermeisten mit Stolz?
Hier jedoch hat einer Größe gezeigt, indem er seinen Stolz unterdrückte und Schuld auf sich nahm. Noch dazu Schuld, für die er persönlich als Gegner Hitlers und Exilant am wenigsten verantwortlich war. Hier hat einer seine Ehre bewiesen, indem er sich öffentlich schämte. Hier hat einer seinen Patriotismus so verstanden, dass er vor den Opfern Deutschlands auf die Knie ging.

Falls du die durchaus kontrovers diskutierte Rede Kermanis noch nicht angehört hast solltest du das dringend nachholen: