Der Axel aus Bochum

Heute erzähle ich euch vom Axel aus Bochum. Genauer gesagt aus Wattenscheid, doch das wurde seit seiner Geburt eingemeindet. Egal. Also, der Axel spielt Gitarre. Und das nicht alleine, sondern in einer Band, die nach ihm benannt ist. Und da der Axel mit vollem Namen Axel Rudi Pell heißt, heißt die Band auch so. Und jetzt lass ich das mit dieser missglückten Pseudo–Sendung-mit-der-Maus-Einleitung und schreibe direkt über das Konzert gestern Abend, 4.5.2010, im Backstage Werk in München – zweites Konzert der aktuellen The Crest Tour, erstes in Deutschland.

Würde eigentlich jemand, der noch nie von A.R.Pell gehört hat, annehmen, dass eine Band dieses Namens klassisch-soliden Hard Rock/Melodic Metal spielt?^^ „Als feste Größe, als Fels in der Brandung und verlässlicher Bewahrer seiner unbestrittenen Stärken“, so die Beschreibung auf der Bandwebsite

Aber wie bei meinen Konzertberichten üblich, zunächst ein paar Worte zur Vorband: Freedom Call spielten recht guten Power Metal – pünktlich um 20:30 Uhr begonnen und knapp 50 Minuten lang. Ein gelungener Einstieg zum Einheizen, aber (naheliegenderweise) konnten sie der Hauptband nicht die Schau stehlen…

Freedom Call (Axel Rudi Pell Vorband) Axel Rudi Pell

Ich weiß nicht, was hinter den Kulissen immer so vorgeht, wenn Umbau und Soundcheck erledigt sind, die Bands aber noch zehn, zwanzig Minuten auf sich warten lassen – machen die das absichtlich, damit das Publikum ungeduldig und umso froher wird, wenn die Bands dann endlich rauskommen, oder müssen sie noch mal aufs Töpfchen? ;) Wie dem auch sei, gegen 21:55 kamen Axel und Kollegen ironischerweise mit „Too Late“ auf die Bühne, einem von – wenn ich mich nicht täusche – drei Songs des neuen Albums. Mag etwas wenig erscheinen, aber auch bei anderen Bands, die eine ordentliche Auswahl an alten Hits haben, keine Seltenheit und absolut kein Beinbruch.

Und wie sich’s für alte Hasen auf der Bühne gehört, haben sie auch großartig und mit Spaß an der Freud losgerockt und die Zeit bis ca. 23:45 ohne Durchhänger gefüllt; über die Stimmung in der kleinen, niedrigen Halle (wo es trotzdem zu einer vertiefte Arena gereicht hat1) kann man auch alles andere als meckern.

Natürlich haben praktisch alle Lieder ein Gitarrensolo/eine Gitarrenstrophe, und Axel hatte auch darüber hinaus genügend Gelegenheit, seine Fähigkeiten an den Saiten zu zeigen. Neben einem kurzen Keyboardsolo durfte sich auch Schlagzeuger Mike Terrana erst in einem „richtigen“ Solo und dann zur Wilhelm-Tell-Ouvertüre austoben (» hier eine unvollständige Aufnahme vom Montag aus Pratteln nahe Basel).

Axel Rudi Pell Axel Rudi Pell Drum Solo

Danach musste er sich erstmal den Schweiß abwischen und konnte Sänger Johnny Gioeli endlich mal seine Meinung sagen, dass er genug davon hätte, wie er immer dessen herumwackelnden Hintern sehen müsse – und schließlich haben sie mal eben die Plätze getauscht. Woraufhin auch Axel tauschen wollte. Und so landete Axel am Bass, der Bassist am Keyboard, der Keyboarder an der Gitarre, der Sänger an den Drums – und der Drummer sang „My Way“! Erst soft, dann mit voller Metal-Begleitung – auch hier wieder eine Pratteln-Aufnahme. (Und hier die wohl identische Setlist von dort.)

Fazit: :rocks: Mal wieder ein geiles Konzert!

  1. aber die Toiletten, wenn sie auch einigermaßen sauber waren, schon mal eine kleine Renovierung vertragen könnten… []

Filmisch

“Eine dünne Schicht von etwas” ist die neue Umschreibung im Projekt Stimulus, und auch ohne Googeln oder Wiktionarieren bin ich mir sicher, dass hiermit ein Film gemeint sein muss – mehr ein Schmier- oder Ölfilm als das, was im Kino läuft, aber das ist ja (sofern nicht digital) auch eine dünne Schicht, auf der die Bilder drauf sind.

Und wie es bei diesem Projekt schon Usus ist, nehme ich es als Anlass für die Auswahl einiger Queen-Lieder. Nun dürfte vielen bekannt sein, dass Queen „ein paar“ Takte Filmmusik bzw. Soundtrack-Songs für Flash Gordon und Highlander geschrieben haben, deswegen wende ich mich ein paar kleineren Soundtrack-Erscheinungen zu, auch wenn sie von Queen nicht speziell für diesen Zweck geschrieben wurden.

Oder umgekehrt: „Keep Passing The Open Windows“ vom Album The Works wurde für die Irving-Verfilmung The Hotel New Hampshire geschrieben, hat’s aber offenbar nicht in den Film geschafft.

Außerdem gibt’s noch eine Extended Version und eine frühe Demo-Version; letztere kannte ich bis eben auch noch nicht…

A Kind Of Magic hat nicht nur etliche Songs von und für Highlander, sondern auch einen, der in Iron Eagle verwendet wurde: „One Vision“. Hier die Wembley-Live-Version:

Bassist John Deacon hatte keine allzu großen Solo-Ambitionen, so gibt’s im Prinzip nur eine einzige Single (und ein paar Gastauftritte) mit einer Band, die sich „The Immortals“ nannte – mit an Bord waren Lenny Zakatek, der für Alan Parsons gesungen hatte, und Robert Ahwai, der mit Chris Rea gespielt hatte – und offenbar nur diese eine Single namens „No Turning Back“ für den Soundtrack des Biggles-Films herausgebracht hat1.

Einen anderen Mix (Chocs Away Mix) gibt’s auch.

Und zum Abschluss noch etwas aus einem deutschen Film, nämlich dem Schimanski-Tatort Zabou. Dort läuft „Hold On“, ein Duett von Freddie und der offenbar ziemlich unbekannten amerikanischen Schauspielerin Jo Dare2 – die aber im Video zu Freddies „Living On My Own“ dabei war – unauffällig im Hintergrund einer kurzen Szene.

https://youtu.be/q6SG9mCvNvY

  1. die in diesem Wikipedia-Artikel verlinkte Band mit diesem Namen ist eine andere []
  2. ich habe nicht mal einen IMDb-Eintrag gefunden; aber einen eigenen Bandauftritt von 1996, zehn Jahre nach diesem Duett []

Beliebteste Beiträge

Ich weiß nicht, ob’s jemand schon bemerkt hat^^, aber seit letzter Woche findet sich in meiner Sidebar ein Abschnitt mit den beliebtesten Beiträgen, und wie das bei mir so üblich ist, bemühe ich da nicht groß ein Plugin, sondern hab das selber gebastelt. Und da es vielleicht den einen oder anderen auch interessieren könnte, gibt’s diesen Beitrag… Verbesserungsvorschläge sind natürlich willkommen.

Die Frage war also: Welche Kriterien sollen für die Beliebtheit gelten, und wie krieg ich das mit einer Datenbankabfrage hin? Die Kriterien, an die ich gedacht habe, sind:

  • Aufrufzahlen der Beiträge, gezählt mit WP-PostViews1;
  • Anzahl der Kommentare;
  • Länge der Kommentare2 – kurze à la „toller Beitrag“ weniger stark gewichten;
  • Alter der Beiträge – neue Beiträge mit vielen Aufrufen oder Kommentaren sollen bevorzugt werden – bzw. Aufrufe pro Tag.

Wer ein Plugin zur Beitragsbewertung einsetzt, mag dessen Werte natürlich auch noch mit einschließen; entsprechendes gilt für ein anderes Statistik-Plugin als WP-PostViews. Und natürlich gibt’s auch etliche „Popular Posts“-Plugins, doch die wenigsten davon berücksichtigen mehr als die Kommentaranzahl – und eine maßgeschneiderte Lösung ist mir eben auch lieber…

Generell stellt sich noch die Frage nach der Gewichtung – wenn bei euch fast jeder Besucher kommentiert, müsst ihr die Kommentaranzahl nicht deutlich stärker als die Aufrufe gewichten, und man kann natürlich eigene Schwerpunkte setzen. Und man muss die einzelnen Kriterien auch nicht einfach mit einem Faktor addieren, sondern kann etwa alle anderen durch das Alter teilen u.v.a.m. Meine Gewichtung seht ihr unten im/nach dem Code.

Nun könnte man dazu mehrere Datenbankabfragen machen, die alle der Post-ID, also der eindeutigen Nummer eines Beitrags, ihren jeweiligen Wert zuordnen, und diese Arrays dann mittels PHP verrechnen und gewichten – ich hab’s hingegen in eine einzige MySQL-Abfrage gequetscht (war auch ’ne kleine Übung in Sachen MySQL… und ist sicher nicht perfekt…); mag sein, dass einzelne Abfragen schneller wären, aber nach etwas Optimierung hatte ich meine Query so weit, dass sie nicht viel länger dauert als das „Einsammeln“ der Kommentarlängen (die bei >10000 Kommentaren/Trackbacks schon ein bisschen dauert), und vermutlich geht’s nicht viel schneller – konkret: von ca. 1½ auf 0,3 Sekunden.

(Aus der Zeit vor der Optimierung stammt auch die kleine Cache-Funktionalität, die ihr gleich im Code seht; bei Verwendung eines Datenbank-Caches oder Verlassen auf den Query Cache der Datenbank selbst wäre die auch weniger wichtig.)

Hier also der Code3:

function ag_popular_posts($num=10) {
    global $wpdb;
    $lastupdate = (int) get_option("ag_popular_lastupdate",0);
    $output = '';
    if (time()-$lastupdate > 1800) {
        $exclude = "
            AND ID NOT IN (78,70)
            AND ID NOT IN (
                SELECT object_id FROM $wpdb->term_relationships
                WHERE $wpdb->term_relationships.term_taxonomy_id IN (92,384)
            )"
;
        $posts = $wpdb->get_results("
            SELECT ID,post_date,post_title,post_name,comment_count,
                $wpdb->postmeta.meta_value AS views,
                TO_DAYS(NOW())-TO_DAYS(post_date) AS age,
                comment_length,
                ($wpdb->postmeta.meta_value/2
                 +comment_count*50
                 +comment_length/comment_count*5
                 +(TO_DAYS(post_date)-TO_DAYS('2006-09-06'))*5) AS popularity
            FROM $wpdb->posts,$wpdb->postmeta,(
                SELECT comment_post_id, SUM(LENGTH(comment_content)) AS comment_length
                FROM $wpdb->comments
                WHERE comment_approved='1'
                GROUP BY comment_post_id) AS thecomm
            WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
            AND $wpdb->posts.ID = thecomm.comment_post_id
            AND $wpdb->postmeta.meta_key = 'views'
            AND comment_count > 0
            AND post_status = 'publish'
            AND post_type = 'post'
            AND post_password = ''
            $exclude
            ORDER BY popularity DESC, post_date
            LIMIT $num"
);
        if ($posts) {
            $output="<ul>";
            $pop0=0;
            foreach ($posts as $p) {
                if ($pop0==0) $pop0=$p->popularity;
                $output.='<li><a href="'.get_permalink($p->ID).'" title="'.
                        $p->comment_count.' Kommentare mit durchschnittlich '.
                        ($p->comment_count==0?'0':number_format($p->comment_length/$p->comment_count,1)).' Zeichen, '.
                        number_format($p->views).'x aufgerufen, '.
                        number_format($p->age).' Tage alt'.
                    '">'.
                    $p->post_title."</a> ".
                    "<small>(".number_format($p->popularity/$pop0*100,0).'%'.")</small>".
                    "</li>\n";
            }
            $output.="</ul>\n";
        }
        update_option("ag_popular_lastupdate",time());
        update_option("ag_popular_cached",$output);
    } else {
        $output = get_option("ag_popular_cached",'');
    }
    if ($output!='') {
        echo "<li id=\"side-popular\">\n".
            "<h2>Beliebteste Beitr&auml;ge</h2>\n".
            $output.
            "</li>\n";
    }
}
 

Also gehen wir den Code mal durch:

Wir beginnen mit der Abfrage, ob die Liste aktualisiert werden soll – das Intervall liegt hier bei 1800 Sekunden, also einer halben Stunde.

Um bestimmte Beiträge auszuschließen, kann man ihre ID wie in der ersten Zeile des ausgelagerten $exclude-Statements angeben – bei mir ist es 78 = die Liste der Musik-Zitate, die aufgrund ihrer hohen Abrufzahlen unangefochten an Platz 1 wäre, aber nicht so interessant ist, dass ich sie hier in der Beliebtheitsliste hervorheben möchte, und die 70 = die damalige Technorati4-Ketten-Aktion, die nur bei manchen Gewichtungsversuchen in der Top 10 wäre –, oder alternativ z.B. auch post_name.

Eine ganze Kategorie oder ein ganzes Tag kann man mit dem zweiten AND ID NOT IN-Statement ausschließen. Dazu muss man die term_taxonomy_id der/des fraglichen Kategorie/Tag herausfinden – indem man in der Tabelle wp_terms anhand des Namens die term_id findet und mit dieser in wp_term_taxonomy nachschlägt (oder irgendwelche WP-Funktionen verwendet, mit get_term_by() könnt’s vielleicht gehen) – und am Ende einsetzen; bei mir will ich alle Quiz-Beiträge (92) und nur englische (384) ausschließen (bzw. in englischer Ansicht alle deutschen, da steht dann 385).

Weiter geht’s mit der eigentlichen SELECT-Abfrage. In deren ersten vier Zeilen stehen ein paar für die Ausgabe benötigte Angaben, danach in Klammern (...) AS popularity der eigentliche Beliebtheitswert.

Wie ihr (vielleicht) seht, gewichte ich die Seitenaufrufe mit 0,5, die Kommentaranzahl mit 50, die durchschnittliche Kommentarlänge ebenso wie die Neuheit des Beitrags (Tage seit Blog-Start, was ihr für euch natürlich ändern müsst, siehe gelb hinterlegtes Datum – wenn ihr stattdessen das Alter, also die Tage zwischen Beitrag und heute, verwenden wollt, nehmt TO_DAYS(NOW())-TO_DAYS(post_date)) mit 5, was sich nach etwas Herumspielen als recht passend für mein Blog gezeigt hat.

(Die kurz darüber deklarierten Felder (AS views, AS age) kann man hier übrigens nicht mit den neuen Namen nehmen, da meckert MySQL – also eben nochmal komplett einsetzen.)

Die FROM-Zeile enthält neben der wp_posts-Tabelle noch wp_postmeta, weil dort die Aufrufzahlen von WP-PostViews liegen – braucht ihr nicht, wenn ihr diese Werte nicht verwendet – und das untergeordnete SELECT für die Kommentarlänge, genauer: die Summe der Länge aller Kommentare mit derselben post_id (inkl. Trackbacks; diese könnte man mit AND comment_type='' vor GROUP ausschließen).

Die WHERE– und die erste AND-Zeile verknüpfen die beteiligten Tabellen über die Post-ID, die nächste wählt die WP-PostViews-Werte aus (die eben „views“ heißen) und der Rest beschränkt das ganze auf geeignete Beiträge.

Danach wird die Ausgabe zusammengebastelt, insb. in der foreach-Schleife, die über die Beiträge läuft, wo der Link samt Tooltip (title) mit statistischen Infos und einem Prozentwert der Beliebtheit mit 100% für den 1. Platz zusammengeklebt wird.

Wenn diese Ausgabe zusammengeklöppelt ist, wird sie noch schnell in die Datenbank für unseren kleinen Cache geschrieben, von wo aus sie (im else-Zweig) innerhalb der nächsten halben Stunde gelesen wird. Und zu guter Letzt muss das ganze natürlich noch (mit Überschrift) ausgegeben werden.

So, das war jetzt jede Menge Code. Wer Verständnis- oder sonstige Fragen, Anmerkungen, Stellungnahmen, Lob, Kritik, Verbesserungsvorschläge, Beleidigungen, Ideen oder Anregungen hat, nur raus damit – Moment, auf eine dieser Arten von Äußerungen solltet ihr besser verzichten.^^

 

  1. mit dem Nachteil, dass ich dieses anfangs alle Zugriffe inkl. Suchmaschinen zählen ließ, aber seitdem ich auch WP Super Cache nutze nur mittels JavaScript – wodurch die Zähler mittlerweile weit weniger stark steigen… []
  2. auf Anregung von Julia, dankeschön []
  3. ich hoffe, ich hab beim Wieder-Entfernen meiner Sprachumschaltung keinen Fehler eingebaut… []
  4. Berners-Lee hab es selig []

Link und Videos der Woche (2010/17)

(Hier war etwas als Flash-Objekt eingebunden. Nicht mehr zeitgemäß.)

 

  • In gewisser Weise das Lied der Woche – Tim Minchins Papst-Lied (NSFW). Hier in einer untertitelten Version, bei den Skepchicks (via) gibt’s auch den Text in Gänze zum Mitlesen.

Und wer sich darüber aufregt, wie hier mit dem Papst umgegangen wird, sollte besser auf den Text achten: Was ist schlimmer, dieses Lied oder der Verdacht, dass der Papst, Kopf einer sich als hohe moralische Autorität gebärdenden Institution, möglicherweise Kinderficker gedeckt hat?

 

  • Was? Widersprüche in der Bibel? Kann das sein?^^ Dazu eine Cartoon-Quizshow (via Pharyngula):

Plusieurs, Nostradamus und der Aufstieg 2012

Nostradamus Im GWUP-Blog findet sich aktuell eine Beitragsserie1 zum Thema „Wie analysiert man Nostradamus-Verse?“, in der Bernd Harder schön auf die Probleme und den Unsinn der diversen Übersetzer eingeht. Aber wie erwartet geht so ein pöhser verschlossener Skeptiker natürlich nicht auf die Einzig Wahre™ Interpretation ein – dabei sollte doch jeder mittlerweile wissen, dass Nostradamus gar nicht auf französisch geschrieben hat, wie ich Ende letzten Jahres anhand von zweimal drei Quatrains gezeigt hatte.

Konkret geht es um einen Sechszeiler, der nicht im Hauptwerk der zehn Centurien steht, also quasi aus den kryptischen Apokryphen:

Plusieurs mourront avant que Phoenix meure,
Jusques six cents est sa demeure,
Passé quinze ans, vingt et un, trente-neuf,
Le premier est subject à maladie,
Et le second au fer danger de vie
Au feu à l’eau est subject trente-neuf.

Mit meiner unfehlbaren (süd)deutschen Direkt-Leseweise – denn wie Ende letzten Jahres gesagt, hat Nostradamus ganz offensichtlich für uns heute geschrieben, alles andere diente nur als Ablenkungsmanöver – ergibt sich (mit zum Verständnis hinzuzufügenden Ergänzungen in eckigen Klammern) dieses unzweideutige zeilenweise Ergebnis:

(1) Plus-Kunden (liebevoll Plusierus genannt) murren an [der] Wand: kein Fön, nix Möhre,
(2) Just wenn 6 Cents ist [das] S[onder]a[ngebot für] die Möhre,

Schon Nostradamus wusste, dass sich Lebensmitteldiscounter-Kunden hin und wieder über ein zu gering bestücktes Warenlager ärgern müssen, wenn die Lockvogelangebote schon ausverkauft sind.

(3) Pass [auf] sein Kind [auf], seinen Hans, [er] winkt E.T. an: drenten [=da drüben] nauf,
Wenn man auf die Kinder nicht aufpasst, können sie sich sogar mit Außerirdischen unterhalten und ihnen Hinweise zum Weg geben. Und das ist nicht der einzige Hinweis darüber, wo’s hinauf geht:

(4) [Der] Lepra[kranke] mir [von] Ost[en] zublökt einmal am Di[enstag],
Das Wissen um den richtigen Weg ist offenbar weit verbreitet.

(5) E.T. lese[n] konnt[e] auf Erd-Anger, der wie
(6) [der Text] auf eurem Los [mir] zublökt: drenten nauf.

Auch auf der graslosen Dorfwiese und sogar auf einem Los steht es geschrieben, wo man hinauf gehen soll. Das muss ja wirklich enorm wichtig sein – der falsche Weg wäre wohl sehr fatal.

Aber das ist natürlich klar, denn was gibt es Wichtigeres auf esoterischen Erden als den Aufstieg 2012? Nicht auszudenken, wenn die lieben Realitätseskapisten herenten, innerhalb der Grobstofflichkeit, aufstiegen und nicht drenten mit metasubliminalem Feinstofflichkeitskontakt!

Aber zum Glück weist (nicht nur) die moderne Nostradamus­wissenschaft den wahren Irr-, äh, Weg.

  1. der es übrigens nicht schaden würde, wenn der Text „Fortsetzung folgt“ am Ende der ersten drei Teile durch entsprechende Links ersetzt würde… wäre komfortabler, als sich übers Tag durchzuklicken []