# 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
}
MAKE ME A DONUT (ch) - Olson (2013)
Label : Tenacity Music
Sortie du Scud : 20 octobre 2013
Pays : Suisse
Genre : Deathcore progressif / Djent
Type : Album
Playtime : 8 Titres - 31 Mins
Sainte Marie, mère de Dieu, éloigne de moi toute tentation perverse. Protège-moi du Mal et de la lecture des lettres incendiaires de groupies avec cristaux de soudes dans les narines. Epargne-moi la douleur d'apprendre que je ne suis qu'un musicien raté, aigri, sodomite et cocu. Disperse les élans chevaleresques qui glorifient la médiocrité. Cristallise l'amour que je porte à mon Prochain, car il pourrait être mon Rédempteur. Ou pas.
Absentem laedit, qui cum ebrio litigat. Amen.
J'ai modestement appris à mes dépens le danger auquel on s'expose en évoquant le cas très particulier de MAKE ME A DONUT. Et encore, je n'ai pas à me plaindre. Certains ont pris bien plus cher à l'époque de l'EP. Quelques uns l'avaient néanmoins bien mérité. Passons sur les querelles intestines et contextualisons, voulez-vous.
Juin 2011. Les p'tits Suisses s'attirent les foudres de la célèbre Prêchi-Prêcha Corporation pour un EP, mi-yaourt, mi-tourte, au contenu franchement exécrable. Au rythme de "The Final Exile", les patchs se décollaient d'eux-mêmes des vestes en jean miteuses et pour une fois, la naphtaline n'y était pour rien. Promis, juré, craché, on n'y reprendra plus MAKE ME A DONUT, qui, pour une première, plonge tête baissée dans un lac de sang. Un baptême purificateur au goût ferré de VIH dont les plus ardents détracteurs se délectaient avec gourmandise. Une mise à mort publique digne des places les plus mal fréquentées de Kaboul. Et paradoxalement, c'était probablement trop violent pour éviter cette concentration de brutalité crasse qui va faire d'Olson l'album qu'il est aujourd'hui.
On ne fait pas d'un bourricot un cheval de course. Cependant, MAKE ME A DONUT a mis en œuvre quelques astuces de base pour se rendre la vie moins pénible :
- Changer de line-up (on vient d'apprendre le départ récent d'Isaïe #buzz #consternation #kleenex)
- Donner un cap à sa musique
- Ne plus passer pour un groupe simplement "fun"
- Ne plus avoir un univers visuel aussi ridicule que son nom de scène
- Se tailler une putain de réputation scénique
Agréable surprise. Tout ce joli programme (aux contours presque présidentiels) va faire de ce premier opus une œuvre inégale, approximative, bancale, mais au moins crédible. Non, MAKE ME A DONUT n'aura certainement pas volé sa légitimité. Les PERIPHERY, EMMURE, THE CONTORTIONIST, AFTER THE BURIAL, VEIL OF MAYA et autres BORN OF OSIRIS font aujourd'hui partie d'une sphère "Djentcore" dans laquelle ces Suisses pourront prétendre s'introduire sans dépareiller. C'était difficile, mais enfin, il se pourrait qu'ils fassent quelque chose de leur talent. Qu'elle était loin, cette évidence. De une parce que "Baseness" n'a aucuns relents Dubstep (j'en vois qui chialent dans le fond, vous méritez la première balle), de deux parce que le rythme infernal et algébrique d'"Algorithms Of Omniscients" tape sur le système, en particulier ces trente dernières secondes absolument épouvantables, qu'un MESHUGGAH n'aurait jamais osé. Puis, alors qu'on partait sur un mauvais souvenir vieux de deux ans (amputé de sa grotesquerie, je vous l'accorde) : une embellie. Ce n'est pas un microclimat mais un simple rayon de soleil. "Nemesis" se leste d'un mouvement grassouillet et d'un chant clair pas dégueu, faisant d'elle une compo très Deathcore dont la typicité fait oublier l'idée que ça puisse être mal écrit. "We Are Vendetta" est également extrêmement séduisante. Une douce syncope rend l'appareil à un mouvement stellaire avant que tout ne s'emballe au fil des traditionnels tappings, riffs catchys, polyrythmies, enchaînements Mathcore. En dépit d'une banalité à fleur de peau, Olson est construit sur des fondations solides qui le rendent aussi propre que pro. Plus surprenant encore : le moment où l'on détecte une once de beauté et de pureté dans une compo. Deux univers se percutent. L'oreille gauche perçoit un vol baumgartnerien au-dessus de la stratosphère, la droite reçoit une salve de riffs bétonnés. Il aura fallu attendre une grosse demi-heure et l'arrivée tardive de l'instrumentale "Olson" pour qu'on l'accepte enfin.
Ça ne sauve absolument pas cet opus d'un destin qu'il aura lui-même provoqué. En étant résolument agenouillé au pied des superproductions américaines qui n'attendaient qu'un peu de salive fraîche, le pantalon sur les chevilles, MAKE ME A DONUT passe pour la cinquième roue du carrosse. On ne voit pas actuellement comment ce groupe au parcours si atypique pourrait tenir un rôle plus prestigieux que la tapineuse de service, tant leur Deathcore / Djent mathématisé souffre de la popularité acquise par leurs augustes ainés. Mais il y a cependant une vraie progression et une vraie maturité dans ce qu'ils font. J'oserais même croire en une vraie sincérité, et c'était important pour moi de vous laisser sur une réflexion positive.
Ajouté : Vendredi 01 Août 2014 Chroniqueur : Stef. Score : Lien en relation: Make Me A Donut Website Hits: 7272
|