# 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
}
FUCK YOUR SHADOW FROM BEHIND (de) - Freigeist (2010)

Label : Bastardized Recordings
Sortie du Scud : 26 février 2010
Pays : Allemagne
Genre : Deathcore
Type : Album
Playtime : 10 Titres - 42 Mins
Au petit jeu du groupe portant le nom de scène le plus ridicule, je vois en FUCK YOUR SHADOW FROM BEHIND un potentiel vainqueur. C’est vrai, les allemands n’ont vraiment pas à rougir de leur performance et se classent sans problèmes aux côtés des farfelus WE BUTTER THE BREAD WITH BUTTER, SHEMALES FROM OUTTA SPACE OF DEATH et autres IWRESTLEDABEARONCE. Mais le plus important est peut-être à un autre endroit… Essayons donc de découvrir ensemble la tanière de l’Essentiel, qui, si l’on s’en réfère à une célèbre maxime de St-Exupéry, sera bien compliquée a dénicher. Ce petit salopard s’était caché dans un Jewel Case orné du mot Freigeist, un premier full-lenght très attendu après une démo complètement déjantée parue en 2007, annonciatrice d’une expérience teutonique réjouissante et à l’exact opposé de mes derniers papiers rédigés sur les pointures américaines du Deathcore.
Car une fois n’est pas coutume, c’est de Deathcore dont il s’agit là ! Certainement pas le meilleur qui existe, mais suffisamment bien exécuté pour mériter notre attention. Et si l’artwork possède un magnétisme certain, c’est aussi le cas de la plupart des créations proposées. FUCK YOUR SHADOW FROM BEHIND ne s’embarrasse que rarement de froufrous à l’américaine comme les breakdowns concentriques ou les guitares aux notes rondes et artificielles. Le son de la petite bande germanique est très épuré. Les sonorités propres à chaque instrument sont restituées à leurs justes valeurs. Paradoxalement, c’est au moment où sa musicalité est la plus poussée que le combo se révèle comme extrêmement intéressant. Les titres violents et sans réelle cohésion tels « Verse Der Freiheit » ou « Der Wahrheit Zweites Gesicht » passeront totalement inaperçu pour la majorité d’entre nous en dépit d’un travail de fond qui reste soigné. FUCK YOUR SHADOW FROM BEHIND peine à sublimer son talent, à mettre en valeur son inspiration. Freigeist tombe souvent dans des structures simplistes qui deviennent subitement alambiquées ou incohérentes sans qu’on comprenne vraiment le pourquoi du comment. Et à l’inverse, quand le groupe se décide à faire parler le peu de finesse qui est en lui, on se retrouve confronté à des plages sensuelles et racoleuses comme « Ein Tagwerk », « Tristesse » sans oublier l’excellente et changeante « Zwielicht ». Vous aurez bien compris que les allemands sont capables du meilleur comme du pire en très peu de temps, ce qui n’est pas forcément une qualité… Autre point noir de cet opus ; le duo vocal formé par Adi (screams) et Bär (pseudo-growls). Je n’ai pas très envie de les accabler, tant ils m’ont l’air sympathiques, mais être à deux sur un micro pour une livraison aussi plate, ce n’est pas ce que j’appelle du rendement. D’autant plus que le reste de la bande qui peine parfois à se défoncer n’a pas besoin qu’on lui tire en plus une balle dans le pied.
Définitivement, et sans être foncièrement un disque médiocre, Freigeist demeure fragile dans son contenu et pas plus solide quand il s’agit d’accélérer le mouvement. FUCK YOUR SHADOW FROM BEHIND fait preuve de bonne volonté mais à ce niveau, ce n’est pas suffisant. Bien sûr, on pourra se consoler en se disant que ce n’est qu’un premier essai, qu’ils feront mieux la prochaine fois, qu’avec davantage de bouteille, ça passera… Mais avec un nom pareil, il me semblait quand même qu’ils avaient pris les devants et s’étaient parés des meilleures dispositions qui soient.
Ajouté : Mercredi 16 Février 2011 Chroniqueur : Stef. Score :    Lien en relation: Fuck Your Shadow From Behind Website Hits: 11354
|