2007-11-25

BSOD*: nicht einmal das Fernsehen ist davor sicher!

loly-20071125-214832.jpg
Das aktuelle Bild auf unserem Lokalfernsehen!

* BSOD: Blue Screen of Death

22:18 [/software/windows] loly Google Trackback
Tags:

2007-09-23

Swisscom: Infrastruktur und Dienste trennen!

Um ein von Fredy Künzler begonnenes Thema wieder aufzugreifen: Offenbar funktionert es eben doch!

Viviane Reding, the EU media commissioner, this week cited the decision to split the networks and services division of BT of the UK as a potential template for [European] former state-run telecoms operators… BT agreed in 2005 with national regulator Ofcom to create an independent unit responsible for giving rivals access to its networks. The division, which BT still owns, is obliged to treat competitors on the same basis as its own services.
Financial Times (leider hinter einem Paywall verschwunden), via isen.blog

Als Folge dieses Entscheids können Bewohner von England zwischen über 50 ISPs auswhlen und sich denjenigen aussuchen, der ihre Bedürfnisse am besten abdeckt.

13:46 [/netz] swisscom_auftrennen Google Trackback
Tags:

2007-08-26

Using the Midnight commander mc(1) in a screen(1) session

Just a quick note for those people whose function keys don’t work when they use the GNU Midnight commander inside a screen session: issuing export TERM=xterm before starting @mc@ helps!

Maybe this problem is related to my SSH client PuTTY, but setting TERM fixes it.

22:36 [/software/debian] mc_f_keys_in_screen Google Trackback
Tags:

2007-08-03

3b, 3r und zwei andere Geeks an der Assembly 2007

Ein paar Kollegen unseres geekinfo-Kollektivs sind dieses Jahr also tatsächlich nach Helsinki an die Assembly gefahren!

Laufende Updates gibts auf 3bs Blog, die Bilder sind hier.

19:56 [/software] assembly2007 Google Trackback
Tags:

2007-08-02

Jonas Gabriel Julmy

Herzliche Gratulationen und Alles Gute an Julmys zur Geburt ihres Sohnes! Eva wurde nochmals Gotti…

19:40 [/familie] jgjulmy Google Trackback

2007-07-16

Hochzeitstag #19!

Eva vor der Myonen-Funkenkammer in der Sphynx Heute besuchten Eva und ich das Jungfraujoch. Am bisher heissesten Tag des Jahres 2007 war es auf über 3500 Metern immer noch 3 °C “warm”.

Wir haben die Zweisamkeit und das geniale Wetter sehr genossen.

PS: Danke an die GVB für die verbilligten Billete…

23:26 [/familie] hochzeitstag_19 Google Trackback

2007-07-12

Abgabe auf Musik-Playern? WTF?

Jetzt haben es also die Suisa und Konsorten geschafft, dass auf DAPs(Digital Audio Player) Steuern erhoben werden. Betroffen sind Flash-Player, Geräte mit Harddisk sowie Video-Recorder mit HD. Die Gebühr soll zwischen CHF 30 und 90 kosten, je nach Kapazität.

Damit bezahlt man jetzt also drei Mal Urheberrechtsgebühren: beim Kauf von bespielten CDs, beim Kauf von Leer-CDs (die werden ja alle für illegal kopierte Musik verwendet, nicht wahr), sowie eben beim Kauf von Abspielgeräten. Wenn das ganze Geld mindestens den Künstlern verteilt würde, aber die Studios schöpfen ja den grössten Teil in die eigene Kasse ab…

Und das alles ausgerechnet am Fair-Use Day!

00:16 [/medien] suisa_mp3_tax Google Trackback
Tags:

2007-05-01

GPS-Koordinaten in EXIF-Infos nachführen

Angeregt durch ein Mail von Alexander Klein und einen Artikel in der aktuellsten c’t 10/2007 will ich jetzt doch noch erklären, wie die GPS-Positionen aus meinem ersten Artikel von der Karte in die Bilder gelangen.

In der Karten-Seite befindet sich ein HTML-Formular, das die Eingabe von Breite und Länge erlaubt:

<form method="post" action="exifupd.php">
    <input type="hidden" name="image" value="<?php echo $image ?>" />
    <label for="lat">Latitude:</label>
    <input type="text" id="lat" name="lat" /><br />
    <label for="lon">Longitude:</label>
    <input type="text" id="lon" name="lon" /><br />
    <button type="submit">Update</button>
</form>

Die Werte im Formular werden per JavaScript im onclick() Event der Karte gesetzt:

GEvent.addListener(gMap, 'click', function(obj, pos) {
    document.getElementById('lat').value = pos.lat();
    document.getElementById('lon').value = pos.lng();
});

exifupd.php setzt die Koordinaten via ein Python-Skript ins Bild hinein. Die relevante Zeile des Update-Skripts ist diese:

exec("sudo -u me /home/me/bin/gpstag '{$_POST['lat']}' '{$_POST['lon']}' '{$_SERVER['DOCUMENT_ROOT']}{$_POST['image']}'", $result, $rc);

Der Python-Skript gpstag benötigt seinerseits exiv2, ein Kommandozeilen-Tool zum Bearbeiten von EXIF-Infos.

Diese zwei Zeilen in /etc/sudoers ermöglichen sudo, dass www-data, der User, als der mein Webserver läuft, in meinem Namen das Programm gpstag ausführen darf:

# Apache may update GPS data in images
www-data        ALL = (me) NOPASSWD: /home/me/bin/gpstag

Das Bearbeiten von sudoers erfordert root-Rechte und sollte immer mit dem Befehl visudo geschehen.

Als letztes wird der Update-Skript noch mit einem Eintrag in .htaccess passwortgeschützt:

# Password protection for GPS updates

<Files exifupd.php>
    AuthType Basic
    AuthName "GPS Update"
    AuthUserFile /home/me/lib/htpasswd/php
    Require valid-user
</Files>

Wie man ein Passwort-File bereitstellt, ist unter man htpasswd nachzulesen.

20:27 [/software/php] exif_gps_update Google Trackback
Tags:

2007-04-06

Neues RAM und Harddisk im Server

Kürzlich konnte ich in einem alten Server-Rack zwei SIMMs ausbauen, die verdächtig nach PC-133 aussahen, das in meinem Server verwendet wird (ich weiss, das ist ja uralt, aber unter Linux hat Hardware ca. die doppelte Lebensdauer als unter anderen OSen). Item, die 128 MB, die der Server hatte, wurden in letzter Zeit ein wenig knapp, und so hoffte ich, dass die neuen SIMMs ein wenig grösser wären, und in der Tat hat mein Server jetzt 512 MB RAM (merci Jonas, eine Spende fürs Kino folgt)!

Da ich die (kleine!) Kiste gerade offen hatte, habe ich ihr auch gerade eine neue 80er-HD verpasst. Die alte 40 GB-Scheibe läuft jetzt doch seit über vier Jahren non-stop, und hat auch bereits Lesefehler produziert. Bei der Gelegenheit wollte ich auch die Partitionen optimieren, d.h. keine eigenen Partitionen mehr für /boot und /usr, nur noch für root, /home und /var (obwohl, wie 3w richtig bemerkt, die Zeiten wohl vorbei sind, als man mal kurz mit einem zu grossen Logfile die Partition zum Überlaufen brachte, zumindest auf einem Home-Server).

Also die neue Platte als IDE-Slave angehängt, partitioniert, formatiert und mit cp -r die Dateien kopiert. Ich weiss, es gibt noch rsync, aber ich behaupte jetzt einfach, dass ein cp alleweil schneller ist, wenn im Ziel noch keine Dateien vorhanden sind.

Das erste Problem stellte sich (wie bereits das letzte Mal, als ich eine HD in einem Linux-System ersetzte), als ich lilo beibringen sollte, sich auf /dev/hdb zu installieren, aber so, dass beim nächsten Booten alles stimmen würde, wenn ab der neuen Platte gestartet würde, die dann ja /dev/hda hiesse. Nach einigem RTFM erledigte aber ein lilo -v -r /mnt diese Aufgabe. Jetzt noch /etc/fstab angepasst, und alles ist in Butter?!?

Leider nicht, denn ich erhielt früh im Boot-Vorgang die kryptische Fehlermeldung /usr/lib/yaird/exec/run_init: opening console: No such file or directory. Unterdessen war 01:20, und ich beschloss, darüber zu schlafen. Die alte Platte startete unterdessen nämlich auch nicht mehr, irgendwie hatte ich sie mit meinen lilo Experimenten dauerhaft vom Booten abgehalten :-(

Heute Abend suchte ich im Internet (den Laptop direkt ins Kabelmodem gesteckt; zum Glück lief auch dort ein sicheres Betriebssystem!) nach dieser Meldung und fand schnell Verweise auf yaird, “Yet another initrd generator”. initrd? Das waren doch diese Files, die man dem Kernel mitgeben musste, damit der seine ersten paar Module fand, mit Hilfe derer er dann ab HD weiterbooten konnte? Vor Jahren hatte ich in den Kernel-Sourcen gelesen, dass das Format seit 2.6 dasjenige von cpio sei, aber file initrd.img-2.6.28-4-486 sagte mir, das sei eine gzip-Datei. Also ausgepackt, und jetzt hatte ich tatsächlich ein cpio-Archiv vor mir. Nach noch mehr RTFM und einem finalen cpio -i <../initrd hatte ich den ausgepackten initrd vor mir.

Schliesslich fand ich im Script init zwei Referenzen auf meine alte Root-Partition /dev/hda6, die jetzt eben /dev/hda1 war. Nachdem ich alles wieder verpackt und gezippt hatte, startete mein System wieder ohne Probleme!

Fazit:

  • Never change a running system!
  • lilo ist gefährlich, vielleicht sollte ich auf grub umsteigen?
  • Bei HD-Wechseln in Zukunft nicht gleichzeitig die Partitionierung ändern
  • Zum Glück wurden für die initrd Standard-Tools verwendet

01:41 [/hardware] neue_hd Google Trackback
Tags:

2007-04-02

Fotos von der CD-Taufe

Andreas Hurni war an der CD-Taufe dabei und hat einige Bilder gemacht, darunter auch eines von “yours truly”!

23:34 [/musik] cd_taufe_fotos Google Trackback
Tags:

2007-03-22

CD-Taufe «10 little songs»

Morgen abend präsentiert die Band ihre zweite CD! Alle sind herzlich eingeladen…

23:13 [/musik] cd_taufe_10_little_songs Google Trackback
Tags:

2007-02-06

UTF-8? UTF-8!

Warnung: In den nächsten Tagen könnte meine Homepage Probleme mit der Darstellung von Umlauten haben; ich bin dabei, das Filesystem von ISO-8859-1 auf UTF-8 umzustellen. Bei der Shell ist das bereits geschehen; jetzt ist noch ~/public_html dran…

17:02 [/software/blog] utf8_ahead Google Trackback
Tags:

2007-01-12

GPS-Korrekturen mit Ntrip in der Schweiz

Heute abend habe ich ein wenig im Manual des GPS-Daemons gpsd geschmökert (man hat ja sonst nichts zu tun ☺) und habe gesehen, dass gpsd DGPS-Dienste unterstützt, und dass es solche dieser Dienste gibt, die ihre Daten über das Internet verbreiten. Zwei Google-Suchen weiter habe ich gesehen, dass swisstopo (die ehemalige Landestopographie, aber heute muss ja alles einen englischen Namen haben (sorry, ich schweife ab…)) einen öffentlichen Dienst anbietet, der genau diese Daten über GSM und GPRS zur Verfügung stellt. Halt, denke ich, GPRS ist ja einfach IP via Funk, das könnte doch auch über ein stationäres IP-Netz funktionieren!

Und tatsächlich findet sich unter http://www3.swisstopo.ch:8080 eine Ntrip Sourcetable, in der alle Schweizer Ntrip-Streams aufgeführt sind; der allgemein zugängliche und kostenlose Stream findet sich unter http://www3.swisstopo.ch:8080/swiposNAV.

Zwei kleine Grafiken von gpsprof verdeutlichen die höhere Genauigkeit mit Ntrip:

ohne Ntrip

mit Ntrip

00:16 [/netz] gps_ntrip Google Trackback
Tags:

2007-01-03

Scannen übers Netzwerk mit Ubuntu und HPLIP

alias netscan='xsane $(hp-makeuri -s hp2610)'

Das ist alles; hp-makeuri -s generiert eine SANE-URI, die den Netzwerk-Scanner mit Namen hp2610 bezeichnet.

21:54 [/software] ubuntu_hplip_scanning Google Trackback
Tags:

2006-12-27

Warum ich ein schwieriger Kunde bin, Folge XXIII

Heute eine weitere Folge aus der beliebten Reihe “Warum ich ein schwieriger Kunde bin”:

Ich habe heute für meinen Schwager einen Dell Desktop bestellt, per Vorauszahlung über eBanking. Weder auf der Webseite, in der Bestell- noch der Auftragsbestätigung waren eine Bankverbindung zu finden. Also habe ich dem Support telefoniert, in der Hoffnung, “da werden sie geholfen”.

Beim ersten Versuch habe ich mich in den Tiefen des Voice-Menus verirrt. Weder 0, # noch * erlaubten, einen Schritt zurück zu gehen und sich eine Ebene weiter oben anders zu entscheiden. Also wählte ich ein zweites Mal und verlangte Verkaufs-Support, in der Hoffnung, dass ich hier am schnellsten mit einem menschlichen Wesen würde sprechen können, und das funktionierte auch wirklich. Nach einmaligem Verbinden und 20 Minuten Wartezeit (angekündigt waren fünf Minuten…) sprach ich mit Erika vom Kundendienst. Zum Glück kann mein Telefon freisprechen! Das Gespräch verlief etwa so:

bb: Grüessech, do isch Bolli. I ha grad e PC bschteut mit Voruszahlig u ha niene i der Uftragebeschtätigung e Bankverbindig gfunge. Chönntet dir mir öies Kontonummero aagäh?

Erika: Könnten Sie hochdeutsch sprechen, bitte?

bb: Hallo, mein Name ist Bolli. Ich habe eben gerade einen Dell-PC bestellt mit Vorauszahlung und nirgends eine Bankverbindung gefunden. Könnten Sie mir eine Kontonummer angeben?

E Wie ist Ihre Auftragsnummer, bitte?

bb Weshalb spielt meine Auftragsnummer da eine Rolle? Ist die Kontonummer denn davon abhängig?

E Geben Sie mir bitte Ihre Anschrift.

bb Bolli, Kistlerweg 1, Aarberg.

E Ah, ich sehe Ihren Auftrag hier im System. Möchten Sie mit eBanking bezahlen?

bb Ja, gerne.

E Ich werde Ihnen die Angaben per Mail zustellen. Wie lautet Ihre Mail-Adresse?

bb Die habe ich doch bereits beim Bestellen…

E (fällt mir ins Wort) Kann ich ig@drbeat.li verwenden?

bb Ja, sehr gut, die funktioniert. Vielen Dank. Könnte das Mail der Auftragsbestätigung nicht dahingehend geändert werden, dass die Zahlungsverbindung ersichtlich ist? Sie erhalten im Moment für jede Bestellung mir Vorauszahlung einen Support-Anruf.

E Wenn Sie Probleme beim Zahlen haben, müssen Sie das mit der Finanzabteilung klären.

bb OK, vielen Dank, auf Wiederhören.

Abgesehen von der Ur-Sünde, weder auf der Webseite, während des Bestellvorgangs noch im Beestätigungsmail ein Konto anzugeben, ist dies wohl ein typisches Beispiel für die ganz normale Support-Hölle, mit der sich Kunden alltäglich und weltweit herumschlagen müssen. Von unflexiblen Voice-Menus bis zu Mitarbeitern, die streng an Ihren Skripts festhalten, wird dem Kunden zu verstehen gegeben: “Du bist nicht wichtig, wir wollen nur dein Geld”.

Dell, are you listening?

22:09 [/allgemein] kunde_dell Google Trackback
Tags:

2006-12-22

My first Rhythmbox plugin

Yesterday evening I threw together my first Rhythmbox plugin! Like Luke’s InfoSender for Winamp, it posts the currently playing artist and song title to a webpage. I use it to update my sidebar.

Just put the Python source and config file (see below) into ~/.gnome2/rhythmbox/plugins or /usr/share/rhythmbox/plugins and restart Rhythmbox to enable the plugin. Its name is posttune.

To configure the plugin, change the BASE_URL variable to point to your own page. The artist’s name and song title are appended to BASE_URL, then the plugin makes a GET request to the URL.

[RB Plugin]
Loader=python
Module=posttune
IAge=1
Name=Tune poster
Description=Posts the current artist and song title to a web form
Authors=Beat Bolli <bbolli@ewanet.ch>
Copyright=Copyright 2006 Beat Bolli
Website=http://www.drbeat.li/py/

12:13 [/software/python] rhythmbox_posttune Google Trackback
Tags:

2006-12-13

Fotos, EXIF-Infos, GPS, Google Maps etc…

Nachdem ich vor ca. zwei Wochen Mätthu geholfen hatte, einen Skript zu schreiben, mit dem er in Google Maps zeigen konnte, wo er ein bestimmtes Foto gemacht hat, habe ich diese Woche das selbe in mein Album eingebaut.

JPG-Dateien von Digital-Kameras können Meta-Daten enthalten, wie z.B. Belichtungszeit, Blende, ob der Blitz eingesetzt wurde, etc. Diese Daten werden innerhalb der JPG-Daten im EXIF-Format abgelegt. Seit Version 2.2 des EXIF-Standards ist möglich, in den Meta-Daten eine geografische Position und andere von einem GPS-Empfänger gelieferte Daten zu speichern.

Meine Skripts ermöglichen es nun, die Position auf einer Google Map darzustellen.

Zu Beginn stehen einige JavaScript-Funktionen:

// Convert a decimal degree value to degress, minutes and seconds
function decToDMS(dec) {
    var deg = Math.floor(dec);
    dec = (dec - deg) * 60;
    var min = Math.floor(dec);
    var sec = (dec - min) * 60;
    sec = Math.round(100 * sec) / 100;	// round to 1/100th precision
    return deg + "&#xB0; " + min + "&#x2032; " + sec + "&#x2033;";
}

// Convert latitude and longitude to a HTML string
function LatLngToHtml(lat, lng) {
    lat = decToDMS(Math.abs(lat)) + (lat < 0 ? ' S' : ' N');
    lng = decToDMS(Math.abs(lng)) + (lng < 0 ? ' W' : ' E');
    return lat + ', ' + lng;
}

// Create a marker at the given point with the given label
function GMcreateMarker(point, label) {
    var marker = new GMarker(point);
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(label);
    });
    return marker;
}

// Initialize a map and return it
function GMinit(mapid) {
    var div = document.getElementById(mapid);
    if (!div) {
        alert("Map region not found");
        return null;
    }

    if (!GBrowserIsCompatible()) {
        div.innerHTML = '<p>Sorry, your browser is not compatible with Google Maps.</p>';
        return null;
    }

    var map = new GMap2(div);

    if (parseInt(div.style.height) >= 350) {
        map.addControl(new GOverviewMapControl());
        map.addControl(new GLargeMapControl());
        map.addControl(new GScaleControl());
    }
    else
        map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    // map.enableDoubleClickZoom();
    map.setCenter(new GLatLng(47.2, 7.5), 8);

    // Allow to click anywhere and display the clicked point's coordinates
    GEvent.addListener(map, 'click', function(obj, point) {
        map.lastPoint = point;  // Keep a copy for the main page
        if (point)
            this.openInfoWindowHtml(point, LatLngToHtml(point.lat(), point.lng()));
    });

    // Add a new member function that creates labeled markers
    map.addMarkerOverlay = function(lat, lng, label) {
        var point = new GLatLng(lat, lng);
        this.addOverlay(GMcreateMarker(point, label));
        return point;
    }

    // Register the cleanup function
    window.onunload = GUnload;

    return map;
}

Die Funktion GMinit wird aus dem onload() Event aufgerufen und gibt ein GMap2-Objekt aus dem Google Map API zurück, das um eine Methode addMarkerOverlay() erweitert ist. Diese Methode erleichtert das Anzeigen von Popup-Meldungen.

Weiter gehts mit einigen PHP-Funktionen zum Auslesen der EXIF-Informationen:

// Utility functions dealing with GPS coordinates from EXIF data

define(NO_ALTITUDE, -1024);

// Convert a lat or lon 3-array to decimal degrees
function exif_degrees($a) {
  @eval("$deg = $a[0]; $min = $a[1]; $sec = $a[2];");
  return $deg + $min / 60.0 + $sec / 3600.0;
}

// Extract lat, lon and altitude from an EXIF GPS array
function exif_gps_vars($exif, &$lat, &$lon, &$alt) {
  $lat = exif_degrees($exif['GPS']['GPSLatitude']);
  if ($exif['GPS']['GPSLatitudeRef'] == 'S')
    $lat *= -1;
  $lon = exif_degrees($exif['GPS']['GPSLongitude']);
  if ($exif['GPS']['GPSLongitudeRef'] == 'W')
    $lon *= -1;
  if (isset($exif['GPS']['GPSAltitude']))
    @eval("$alt = {$exif['GPS']['GPSAltitude']};");
  else
    $alt = NO_ALTITUDE;
}

// Convert decimal degrees to deg° min' sec" H
function exif_dec_to_DMS($dec, $hemi_pos, $hemi_neg) {
  $absdec = abs($dec);
  $deg = intval($absdec);
  $absdec = ($absdec - $deg) * 60;
  $min = intval($absdec);
  $sec = ($absdec - $min) * 60;
  return sprintf("%d° %02d′ %05.2f″ %s",
    $deg, $min, $sec, $dec >= 0 ? $hemi_pos : $hemi_neg
  );
}

// Convert an EXIF GPS array to HTML-usable text
function exif_to_html($exif) {
  exif_gps_vars($exif, $lat, $lon, $alt);
  $lat = exif_dec_to_DMS($lat, 'N', 'S');
  $lon = exif_dec_to_DMS($lon, 'E', 'W');
  $alt = intval($alt);
  return "$lat, $lon" . ($alt == NO_ALTITUDE ? '' : " ($alt m)");
}

Diese Funktionen werden in der Karten-Seite zusammengesetzt:

PHP-Code:

$def_image = '/pic/glasses.jpg';
$image = isset($_GET['image']) ? $_GET['image'] : $def_image;

function image_exif_gps($file) {
  if (
    ($exif = @exif_read_data($_SERVER['DOCUMENT_ROOT'] . '/' . $file, 0, true)) !== false &&
    $exif['GPS']
  ) {
    exif_gps_vars($exif, $lat, $lon, $alt);
    // Return a JavaScript dictionary containing all useful GPS info
    return "{isValid: true, lat: $lat, lon: $lon, alt: $alt, file: \"$file\"}";
  }
  else
    return "{isValid: false, file: \"$file\"}";
}

JavaScript-Code:

var gmap;

window.onload = function() {
    if (gmap = GMinit('map')) {
        gmap.addMarkerOverlay(47.0452, 7.2713, 'Home, sweet home!');
        var gps = gmap.gps = <?php echo image_exif_gps($image) ?>;
        if (gps.isValid)
            gmap.setCenter(
                gmap.addMarkerOverlay(gps.lat, gps.lon, LatLngToHtml(gps.lat, gps.lon)),
                14, G_SATELLITE_MAP
            );
    }
}

Das Besondere dabei ist, dass die PHP-Funktion image_exif_gps() dynamisch ein JavaScript-Objekt generiert, das die GPS-Koordinaten enthält.

Den Update-Mechanismus beschreibe ich in einem nächsten Post.

Update: Hier gibts den versprochenen Update der GPS-Position im Bild.

23:33 [/software/php] exif_gps_gmap Google Trackback
Tags:

2006-12-08

Cisco firewalls messing with SMTP STARTTLS?

Ever since our company has implemented a new Cisco firewall, I’m no longer able to send e-mail using TLS. This is what my client sees after connecting:

> 220 **********************************
< EHLO [10.23.0.221]
> 250-my.mail.server
> 250-PIPELINING
> 250-SIZE 10240000
> 250-VRFY
> 250-ETRN
> 250-XXXXXXXA
> 250-ENHANCEDSTATUSCODES
> 250-8BITMIME
> 250 DSN

Strange how the 220 and the 250-STARTTLS lines are mangled… I have verified with tcpdump that what the server sends is correct.

09:35 [/software] cisco_messing_with_starttls Google Trackback
Tags:

2006-12-04

Hallo Kristina!

Am Samstag haben unsere guten Freunde Marlis und Andreas Weber ihre zweite Tochter Kristina geboren. Ich gratuliere ganz herzlich und wünsche der gewachsenen Familie alles Gute!

09:16 [/allgemein] hallo_kristina Google Trackback

2006-10-30

Sensationelle Rosanna-Version von Toto

Am diesjährigen Toto-Konzert hat die Band die erste Strophe von Rosanna komplett neu arrangiert. Jetzt habe ich auf YouTube (wo denn sonst? :-) eine Aufnahme gefunden, auf der das Ergebnis zu sehen und hören ist war:

Empfehlenswert!!!

23:01 [/musik] toto_2006_rosanna Google Trackback
Tags: