# 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
}
UNIT 731 (usa) - Res Ipsa Loquitur (2010)

Label : Auto-Production
Sortie du Scud : Juin 2010
Pays : Etats-Unis
Genre : Hardcore
Type : Album
Playtime : 10 Titres - 31 Mins
Petite piqure de rappel. Nous sommes en 1936 quand la ville de Pingfang, localité chinoise à l’époque occupée par l’Empire du Japon accueille l’Unité 731. Cette section militaire, officiellement dédiée à la recherche bactériologique aura été le théâtre d’expérimentations secrètes sur des cobayes humains. L’Etat japonais aura eu besoin de 70 ans pour reconnaître les quelques 400 000 victimes de cette boucherie et l’incapacité chronique de Shiro Ishii (le Josef Mengele nippon) à traiter ses patients avec délicatesse. Et forcément, ce genre d’affaire inspire. Si un groupe finlandais et un autre anglais ont déjà fait l’usage de ce patronyme, c’est SLAYER qui aura la primeur de l’exclusivité avec le titre « Unit 731 » sur l’album World Painted Blood. Aucune chance donc, pour ce groupe de Hardcore américain, de se faire une place au soleil. D’autant plus que son second opus sorti en 2010, Res Ipsa Loquitur, n’a pas la dégénérescence suffisante pour faire l’objet d’une vivisection.
« Res Ipsa Loquitur ». En français, « la chose parle d’elle-même ». Je crois qu’effectivement, sur ce coup, UNIT 731 a juste besoin de dérouler son Hardcore, de réciter bêtement ses gammes pour qu’on puisse le recaler, non sans lui avoir au préalable adressé tous nos encouragements, sur un ton franchement hypocrite. Ces garçons sont des élèves studieux, attentifs, motivés, soucieux de leur réussite. Mais ils souffrent d’un manque de concentration qui rend leur Hardcore beaucoup trop scolaire. Situé quelque part entre EMMURE, HATEBREED et NORMA JEAN, cet album fait d’incessants allers et retours entre le classicisme de vocaux provocateurs et l’écœurement de rythmiques aussi répétitives que patibulaires. A de rares occasions, la situation s’envenime, à tel point qu’on regarde avec appétit les choses dégénérer. Mais la tension retombe vite, notamment à cause du déroulement très lent des évènements. Si on secoue la tête, c’est sans conviction, juste par habitude. Ce que je veux dire, c’est qu’il m’apparaît difficile de vivre pleinement des compositions sans relief comme « Fostering Our Fears » ou « Prescribed Conformity », qui semblent se contenter de cette apathie manifeste. UNIT 731 peine à mettre du rythme dans son Hardcore, à hausser son niveau de jeu. Le riffing est plutôt laxiste, bien que suffisamment séditieux pour déclencher la bagarre dans la fosse. A ce niveau-là, pas de doute, ces mecs sont de vrais coreux. Rares sont ceux qui arrivent à être bons sur scène et sur CD. Eux ne dérogent pas à la règle. Ce second effort est vain. Au final, seule la batterie, tenue par King Jeremy est en perpétuelle révolte, proposant des frappes lourdes, presque Deathcore et des accélérations improbables dignes du Punk Hardcore (« Perversion Of Trust »). Elle rafraichit à elle seule l’ambiance moite et le climat détestable instauré par des guitares lunatiques et hostiles. Pas suffisant, hélas, pour faire décoller Res Ipsa Loquitur de son petit trône confortable, qui ressemble à s’y méprendre à un siège de water-closet.
C’est fait, c’est dit. Aussitôt écouté, aussitôt oublié. On aurait aimé retenir de cette sortie sa générosité, son trop-plein de bonne volonté, ses authentiques dispositions. Mais sa terrible banalité la rend totalement transparente. UNIT 731 n’est pas un groupe d’avenir, pas un groupe sur lequel il faudra compter quand il s’agira d’écrire le futur du Hardcore américain. A peine un greffier docile. Voilà une formation qui porte définitivement bien son nom. A l’image de l’Unité 731, on aurait simplement préféré ne jamais en entendre parler.
Ajouté : Lundi 19 Novembre 2012 Chroniqueur : Stef. Score :    Lien en relation: Unit 731 Website Hits: 9986
|