# 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
}
KORN (usa) - Korn III: Remember Who You Are (2010)

Label : Roadrunner Records / Warner Music France
Sortie du Scud : 12 Juillet 2010
Pays : Etats-Unis
Genre : Re-Néo, Re-naissance
Type : Album (édition spéciale)
Playtime : 14 Titres - 61 Mins
Qu’il est dur parfois d’être un leader. KORN invitait pourtant ses auditeurs et sa progéniture à le suivre il y a quelques années. Mais que voulez vous, il en va des pas de géants comme des avancées scientifiques, certains croient comprendre l’équation et l’appliquent avec une maladresse scolaire vulgaire et lénifiante, et d’autres se contentent d’en admirer la complexité.
On a certainement trop résumé le talent du groupe à un gros son de guitare, une basse ténue, et un chant plaintif et multi expressif. La recette paraissait simple, et à appliquer et à décortiquer, mais il n’en était rien en fin de compte.
KORN, comme tous les créateurs de la première heure, dissimule sous le manteau de la puissance une inventivité sans limite, et une identité chèrement acquise. Un peu comme le super vilain qu’on arrive jamais à flinguer à la fin du film, parce que l’on a cru sa brutalité unidimensionnelle, et sa capacité de résistance limitée.
Ceci et cela. Rien n’empêche les erreurs, et il est certain qu’ils sont tombés dans l’excès de confiance plus d’une fois. Mais même tombés, même à terre, personne n’a pu achever la bête.
Et rien ne lui interdit dès lors de revenir encore une fois, hanter nos souvenirs.
Un jour, un petit homme mal peigné a hurlé au détour d’une intro un primal « Are you reeeeeaaaaaady ??? » qui a changé la donne à jamais.
Et peu de gens l’étaient. Prêts, je veux dire.
Depuis, on a eu un peu trop tendance à croire que l’habitude allait nous protéger d’une éventuelle prise de conscience. Quel tort.
Alors on pouvait légitimement craindre que ce retour aux sources ne soit qu’une ultime tentative de re-crédibilisation, un gimmick dernier souffle, avant l’extrême onction.
Le refus d’utiliser les outils numériques usuels et quasi incontournables, l’anti-complexe d’Oedipe avec le rappel du père Robinson derrière la console, tout ça sentait le coup fourré du biz’, la patine dissimulant la non inspiration, mais une fois de plus, il est utile de rappeler que Jonathan Davis n’a jamais souhaité coucher avec sa mère, malgré des griefs à son encontre qu’il a développés plus d’une fois. Alors il n’y avait personne à tuer. Sauf les sceptiques.
Se rappeler qui on est ? Tu as pu l’oublier Jonathan ?
Tu as oublié que tu étais le porte parole d’une génération, comme Kurt avant toi, ou Bob, John, et tant d’autres ? Il fallait juste que tu changes l’enrobage du message. L’idée fut la bonne et le résultat presque émouvant. Tu as enfin retrouvé cette haine salvatrice qui ces dernières années le confinait presque à l’exercice de style éculé. On te croit à nouveau.
Et quel choix d’avoir enfin titularisé dans l’équipe ce batteur formidable qu’est Ray. Un style délié, une puissance mêlée d’habileté époustouflante, un feeling extraordinaire, qui éclipse enfin une basse trop envahissante, la reléguant à son propre rôle, celle d’un support rythmique.
Du coup, le côté « analogique » prend encore plus de relief. On retrouve enfin de véritables chansons construites, et non plus ces sempiternels pavés balancés à la tronche de manifestants de l’inutile déjà partis de toute façon.
« Oildale (Leave Me Alone) » et « Pop A Pill » sont deux entrées en matière qui valent bien « Blind » et « Ball Tongue ».
Sauf qu’ici, c’est « Fear Is A Place To Live » et son labyrinthe quasi enfantin qui suit. Sorte de Néo pop song malsaine, c’est un brûlot, comme on n’avait plus trop l’habitude d’entendre sur les disques de KORN. « Lead The Parade », c’est une façon comme une autre de célébrer le retour du carnaval, et peut être la meilleure. Le jeu de Ray est brillant, et tel Ringo STARR qui savait en permanence comment frapper pour mettre en valeur un morceau, il se livre à un test d’équilibriste des baguettes avec une maestria hors norme.
Les ambiances, tout est une question d’ambiance. Et lorsque dans sa mansuétude, Jonathan plaide la cause des coupables dans « Let The Guilt Go », c’est pour mieux les accabler de reproches d’une voix revancharde. Avant de se replonger dans son passé pour mieux en exhorter les vieux fantômes.
Et il finit par poser la bonne question. « Are You Ready To Live? ». A tes côtés Jonathan, le contraire semble impossible.
La nostalgie n’est qu’une façon d’éviter de penser au futur, de peur qu’il ne vous blesse à jamais. On s’y réfugie pour s’y protéger, on s’y love parce que le monde extérieur n’est plus ce qu’il était.
Le monde de KORN a toujours été intérieur. Si KORN III : Remember Who You Are existe, ça n’est pas pour prouver par A+B que KORN était là avant tout le monde, c’est tout simplement un besoin vital, une quête personnelle, rien d’égoïste, juste un besoin de parcourir à nouveau le chemin de traverse de ses racines.
De retrouver l’envie.
Et de la redonner, au centuple.
On passe très près du chef d’œuvre.
Ajouté : Dimanche 11 Juillet 2010 Chroniqueur : Mortne2001 Score :      Lien en relation: Korn Website Hits: 18604
|