# 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
}
MUMAKIL (ch) - Flies Will Starve (2013)

Label : Relapse Records
Sortie du Scud : 25 juin 2013
Pays : Suisse
Genre : Grindcore
Type : Album
Playtime : 24 Titres - 36 Mins
Il n'y a pas très longtemps, j'ai eu le privilège de partager un verre en tête-à-tête avec quelqu'un qui pense Grind, qui vit Grind, qui respire Grind. Quelqu'un qui fait ça depuis plus de vingt ans avec la même étique, la même fougue, la même détermination. Quelqu'un de vrai dont je tairai le nom car il m'a bien fait comprendre que la Une d'un magazine people comme le notre ne l'intéressait pas. Puis, devant un discours aussi poignant que véridique, je me suis dit qu'il fallait bien que je bouge mon gras et que je cherche en quoi le Grind est un style de vie. Tiens, comme c'est curieux, MUMAKIL sort un nouvel album. On dit que l'occasion fait le larron. A la droite du Christ, le mauvais s'est fait percer les yeux par un oiseau. Celui qui était exposé à sa gauche est monté avec Lui dans le royaume de Dieu, à la force d'une rédemption âprement négociée. Voilà pourquoi l'arrivée de Flies Will Starve tombe à pic. C'est aussi symbolique que ça. De Customized Warfare à Behold The Failure en passant par un vrai bon split avec BLOCKHEADS, les Suisses n'auront pas tardé à faire de leur blaze une référence et si le musicien évoqué plus haut à généreusement cité leur nom tout au long de notre discussion, de sa bouche, c'est assurément un gage de sécurité.
Pourtant, dans le grand livre du Grind, MUMAKIL, sans vouloir assombrir délibérément le tableau, n'est pas encore un vieux singe à qui on apprend à faire la grimace. Le groupe qui va souffler ses dix bougies en 2014 n'est pas un prophète, c'est un diamant et un diamant qui ne demande qu'à scintiller davantage. Au programme de ce troisième album, 24 propositions (27 sur Behold The Failure pour la même durée de 35 minutes). Autant dire qu'il va falloir harnacher sa culotte parce que ça va aller très vite. La mécanique se lance avec un "Death From Below" impressionnant, mais vraiment. C'est fat, expéditif, un joyeux bordel rythmique. L'idée de devoir remplacer une culotte souillée après une demi-heure de cette expédition punitive pointe le bout de son nez au moment où des morceaux comme "Built Of Lies", "Designed To Fail", "Hailing Regression" font retomber le soufflé. Étonnamment et en dépit d'un démarrage canon, Flies Will Starve peine à captiver. C'est évidement très lourd, minutieux, un véritable travail d'orfèvre, mais il me manque une étincelle. Vocalement, cet opus est moins exubérant que son prédécesseur, moins intense aussi. Où sont les pig-squeals de "Let There Be Meat" ? Où est la frénésie de "Black Sheep" ? Il n'est pas question de réécrire un Behold The Failure 2.0 mais de retrouver certains marqueurs qui font de MUMAKIL ce qu'il est. Et définitivement, ce troisième full-lenght, en teintant ce Grind d'un voile de Death, sombre dans quelque chose qui fait très mature, presque auguste et intimidant. Ce n'est assurément pas un bon moment, pas autant que je le souhaitais en tout cas. Car si le Grind a quelque chose de viscéral et de maladif en lui, il se doit également de ne pas renoncer à cette folie caractéristique. Chose que les Suisses ne renient pas mais ne surélèvent pas non plus outre-mesure et c'est bien cette absence de démence qui pénalise un Flies Will Starve honnête, puissant mais également étrangement lugubre.
Je pense qu'on peut aujourd'hui deviner une légère déviation artistique de l'entité MUMAKIL. Si le fond reste Grind, si la forme reste Grind (pour le moment), il y a en tout cas eu une évolution, au moins dans leur façon de composer. Et si après tout, ce micro-bouleversement était inhérent à la logique humaine, qui stipule qu'un homme grandit et donc mûrit ? Ça voudrait dire qu'on se retrouve en présence d'un MUMAKIL en pleine possession de ses facultés physiques et mentales, au top de sa forme ? Après un Behold The Failure autrement plus convaincant, je refuse d'y croire.
Ajouté : Dimanche 23 Février 2014 Chroniqueur : Stef. Score :    Lien en relation: Mumakil Website Hits: 8530
|