# Copyright (C) 2002-2004 gregoire HUBERT.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Author : gregoire HUBERT
#
# XML_node.objet
#
# This object is an XML node representation
#
# /- name (string)
# xml_node --- attributes (array)
# \- children (array) or value (string)
class xml_node {
var $name;
var $attributes = array();
var $children = array();
var $value = "";
function xml_node($name,$attributes,$children=array(),$value="") {
$this->name = $name;
if (is_array($attributes)) {
$this->attributes = $attributes;
}
$this->children = $children;
$this->value = $value;
}
}
# Copyright (C) 2003-2004 gregoire HUBERT.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Author : gregoire HUBERT
#
# xml_tree class
#
# This object parses an XML stream and offers a tree composed by xml_nodes
#
class xml_tree {
var $xml_stream;
var $current_node;
var $root_node;
var $index;
var $value;
function xml_tree() {
$this->root_node = new xml_node("__ROOT_NODE",array());
$this->current_node = $this->root_node;
}
function add_tree($xml_stream) {
# Managing the parser
$this->xml_stream = $xml_stream;
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1);
if (!xml_parse_into_struct($xml_parser,$this->xml_stream,$this->value,$this->index)) {
xml_parser_free($xml_parser);
die("XML Parse error");
}
xml_parser_free($xml_parser);
# Now, $this->value and $this->index are informed, we can use the get_node methode.
$tab_result = $this->get_node(0,count($this->value) - 1);
$this->root_node->children[] = $tab_result[0];
$this->current_node = $this->root_node;
}
function get_node($index_start,$index_stop) {
#echo " \n";
#echo "GET-NODE($index_start,$index_stop) \n";
# What we are going to return is an array of xml_nodes
$return_tab = array();
# depth is only here to check if everything is all right
$tab_node = $this->value[$index_start];
$depth = $tab_node["level"]-1;
# Now we have to be sure we do not forget a single node
for ($index = $index_start;$index <= $index_stop;$index++) {
#echo "\$index = $index ";
# get the current node
$tab_node = $this->value[$index];
# what type of node is it ?
switch($tab_node["type"]) {
case "complete" :
# Depth integrity check
if ($tab_node["level"] != $depth+1) {
die("ERREUR # contrainte d'intégrité au noeud complet $index, niveau $depth + 1 au lieu de ".$tab_node["level"]);
}
#echo "Noeud complet trouvé position $index TAG ".$tab_node["tag"]." \n";
# Easy one, no children to manage, only a value...
$return_tab[] = new xml_node($tab_node["tag"],$tab_node["attributes"],"",$tab_node["value"]);
break;
case "open" :
# Depth integrity check
if ($tab_node["level"] != $depth +1 ) {
die("ERREUR # contrainte d'intégrité au noeud ouvert $index, niveau $depth au lieu de ".$tab_node["level"]);
}
# Open tag, we re-use this methode to return its children
# Where is the correspondong close tag ?
$node_index = $this->index[$tab_node["tag"]];
$flipped_node_index = array_flip($node_index);
#echo "This ".$tab_node["tag"]." is at coords ".$flipped_node_index[$index]." ";
$i=1;
do {
$next_index = $node_index[$flipped_node_index[$index] + $i++];
$next_tag=$this->value[$next_index];
}
while ($next_tag["level"]!=$tab_node["level"]);
#echo "Ouverture de noeud détectée pos $index TAG ".$tab_node["tag"]." \n Parcours jusqu au $next_index \n";
# good, we can now instanciate our node
$return_tab[] = new xml_node($tab_node["tag"],$tab_node["attributes"],$this->get_node($index+1,$next_index),"");
# As we called the get_node methode, we are sure that nodes have been parsed to the corresponding close tag
$index = $next_index;
break;
case "close" :
# Depth integrity check
if ($tab_node["level"] != $depth ){
die("ERREUR # contrainte d'intégrité au noeud fermé $index, niveau $depth au lieu de ".$tab_node["level"]);
}
#echo "Fermeture de noeud detectée pos $index TAG ".$tab_node["tag"]."
\n";
# This ugly thing is useless because reaching a close tag means that $index==$index_stop but who knows ? =)
# it will be skipped soon
$index = $index_stop;
break;
default:
die("Erreur de type de TAG non déterminé :'".$tab_node["type"]."'");
}
}
# We are out ... returns the array with collected children...
return ($return_tab);
}
# this function browse the xml tree and set the current node to the selected node
function give_node($path) {
if ($path[0]=="/") {
$current_node=$this->root_node;
$path=substr($path,1);
#echo "ABSOLUTE PATH GIVEN=$path ";
}
else {
$current_node = $this->current_node;
}
#echo "PATH GIVEN=$path ";
$tab_path = split("/",$path);
foreach ($tab_path as $node_expr) {
#echo "STUDYING EXPR='$node_expr' ";
$node = $current_node;
$expr_tab = split("\?",$node_expr);
$node_name = $expr_tab[0];
$attr_tab = 0;
if (count($expr_tab)>1) {
##echo "TROUVE AU MOINS UNE CONDITION SUR LES ATTRIBUTS... ";
$attr_expr_tab=split(",",$expr_tab[1]);
$attr_tab=array();
foreach($attr_expr_tab as $attr_expr) {
$attr_split_expr=split("=",$attr_expr);
$attr_tab[$attr_split_expr[0]]=$attr_split_expr[1];
}
}
$last=0;
foreach ($node->children as $children) {
#echo "COMPARING WITH '$children->name' ";
if ($children->name == $node_name) {
##echo "TROUVE NOEUD CORRESPONDANT $node_name ";
if (is_array($attr_tab)) {
$node_attributes = $children->attributes;
foreach ($attr_tab as $key=>$value) {
if ($node_attributes[$key] == $value) {
#echo "ATTRIBUTE & CHANGE CURRENT NODE TO ".$children->name." ";
$current_node = $children;
$last = 1;
}
}
}
else {
##echo "CHILD=".$children->name." ";
#echo "CHANGE CURRENT NODE TO ".$children->name." ";
$current_node = $children;
$last=1;
}
}
if ($last) {
break;
}
}
if (!$last) {
#echo "PATH ERROR $node_name ";
#die("MMmmmh It seems that this file is not a DIA XML format...sorry...");
return 0;
}
}
return $current_node;
}
function browse_tree($path) {
$node = $this->give_node($path);
if (is_object($node)) {
$this->current_node = $node;
return 1;
}
return 0;
}
# this method dumps an html representation of the xml tree
function xml_show($node = "",$level=0,$last=0) {
if ($node=="") {
$node=$this->root_node;
}
if (!is_object($node)) {
die("ERROR : node is not an object");
}
$line="";
for($i=1;$i<=$level;$i++) {
if ((i==$level-1) and ($last)) {
$line.=" ";
}
else {
$line.=" |";
}
if ($i==$level) {
$line.="`-";
}
}
$line.=$node->name;
#echo $line;
$line.="".count($node->children)."";
if (count($node->children)==1) {
$line.=" (".$node->value.") \n";
echo "$line";
}
else {
$line.=" \n";
echo "$line";
$i=1;
foreach($node->children as $children) {
if ($i==count($node->children)) {
$this->xml_show($children,$level+1,1);
}
else {
$this->xml_show($children,$level+1);
}
$i++;
}
}
}
#END_CLASS
}
KOTTAK (usa) - Rock & Roll Forever (2010)
Label : SNUG Records
Sortie du Scud : 14 mai 2010
Pays : Etats-Unis
Genre : Fun Pop Punk
Type : Album
Playtime : 11 Titres - 38 Mins
Troisième album pour le projet annexe de James KOTTAK, nouveau nom, nouveau line up, on appelle ça un lifting intégral.
A ses côtés, Athena Bass, petite sœur de Tommy Lee, qui elle aussi taquine les fûts en lieu et place de son mari, qui lui se délecte du poste de guitariste chanteur.
Rock N’ Roll Forever est à prendre pour ce qu’il est, à savoir la récréation, le petit moment de détente d’un musicien qui passe son temps à jouer pour les autres. C’est vrai qu’aussi fameux soit votre groupe officiel, vous restez toujours « le batteur qui bosse pour », et c’est assez frustrant.
Marrant d’ailleurs de chroniquer cet album juste après le dernier effort du groupe en question. Alors que SCORPIONS tire sa révérence, et de la plus belle manière qui soit, KOTTAK louche vers l’avenir, en mettant de côté toute prétention. Le décalage est assez saisissant, mais pas désagréable, après tout, the show must go on !
Alors bien sur, inutile d’essayer de comparer cet album au Hard Rock des orfèvres de Hanovre, car les deux styles sont à cent lieues l’un de l’autre, et les démarches radicalement différentes.
Ici, tout est fun, catégorie délire d’ado attardé et fier de l’être, genre Steve Stiffler dans les douches des filles avec de la chantilly sur son cul.
LA référence de KOTTAK, ce sont quatre abrutis notoires qui se sont construit une réputation à grands coups de mélodies simples, de morceaux courts, et de paroles n’allant jamais très loin au niveau du mieux disant culturel, j’ai nommé les fabuleux trublions de SUM 41.
Il n’y a aucun mal à aimer SUM 41, parce qu’après tout, ils sont responsables de bon nombre de pépites Pop-Punk que beaucoup de metalleux écoutent en cachette, après avoir piqué le CD à leur petite sœur.
L’approche de James apporte je dirais, une caution Rock N’ Roll à l’affaire. Les riffs sont plus touffus, la prod’ aussi, et le jeu considérablement plus lourd, en témoigne le très Heavy « Super Pricks ».
Mais le mimétisme est parfois flagrant, tant au niveau des paroles que de la musique, et à l’occasion de « Drunk Uncle Pete », la ressemblance est étonnante, le confinant à la gémellité.
Ce que James a très bien compris, c’est que lorsque l’on s’adonne à une telle entreprise, il faut s’y donner à fond. Il n’a donc pas hésité à plonger la tête la première dans le Punk-Rock pour teenager, et nous propose donc un joli lot d’hymnes à reprendre en cœur lors de fêtes de confréries. Les exemples ne manquent pas, de l’imparable « Don’t Wanna Go Home » et ses « Hey hey hey » festifs, à l’hommage indispensable à « Sunset Blvd », tout l’éventail de chansons légères d’été est déployé, et il faut l’avouer, c’est la plupart du temps agréable, sans être impérissable.
Mais était ce là le but de KOTTAK ?
A n’en point douter non. Il a juste voulu nous offrir une petite confiserie qui se déguste lorsqu’il fait chaud, qui fond dans la bouche, et dont le goût reste encore un peu sur le palais une fois avalée.
Et, détail ironique et amusant, l’album se termine sur une reprise perso du « Holiday » de qui vous savez. Ultime révérence, pied de nez ? James me confiait que les fans réclamaient souvent cette chanson, et qu’ils l’avaient taquiné en répète.
D’un joyau de pureté, elle devient un au revoir torride, petit signe de la main d’un batteur à son ex groupe. Mignon non ?
NDR : Si sur le prochain album de KOTTAK vous retrouvez une reprise de « Do You Like It » de KINGDOM COME, ça sera de ma faute. C’est moi qui l’ai suggéré à James et l’idée a paru lui plaire.
Je sais. Je suis un vilain égoïste.
Ajouté : Mardi 13 Juillet 2010 Chroniqueur : Mortne2001 Score : Lien en relation: Kottak Website Hits: 11880
|