# 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
}
ALKOHOLIZER (it) - Free Beer...Surf's Up! (2014
Label : Punishment 18 Records
Sortie du Scud : 13 octobre 2014
Pays : Italie
Genre : Thrash Metal
Type : Album
Playtime : 10 Titres - 42 Mins
Il faut se méfier des apparences selon l'adage... L'habit ne fait pas le moine, le calme qui cache la tempête... Bref, on aura compris, le bon sens séculaire l'emporte souvent sur l'impulsion et l'instinct, mais au final, qu'est ce qu'on en a à foutre ?
Bah rien.
Mais il faut avouer que parfois, y'a des trucs comme ça qui trompent pas. On tombe dessus par hasard et on est presque déjà sûr de ce qu'on va y trouver. Un vieux jean, un chat avec une bonne tête de fumier, une femme qui en veut à votre carte bleue, ou une pizza au saumon qui sent pas bon. Des exemples, j'en ai plein ma musette. Mais le dernier en date nous/vous concerne. Sinon, je ne serais pas là à en parler.
Un disque, c'est une histoire de confiance. On regarde la pochette, on lit le nom du groupe, on observe le graphisme, le titre, et une fois de temps à autre, on est déjà quasiment fixé sur ce qu'il contient. Prenons le cas d'ALKOHOLIZER, et son second LP, Free Beer... Surf's Up!
Le nom, le titre, la pochette, tout est là pour te dire avec un clin d'oeil appuyé "mais tu vois très bien de quoi on veut parler!!!". Alors on écoute et on répond avec un grand sourire "Ah ben là oui forcément!".
Allons-y, jouons à un gentil jeu de piste. Design au trait grossier, un requin mal dessiné qui rappelle autant les covers Thrash de série B que les extraordinaires BD frontales de RISK, un nom qui fleure bon le TANKARD de la grande époque, un titre d'album qui emprunte autant à l'éthylisme de WEHRMACHT qu'au délire plagiste de M.O.D, c'est quand même assez difficile de faire fausse route...
On cherche un peu de bio, Ok, Italie, premier album Drunk or Dead bien accueilli, label activiste et engagé pour la cause (Punishment 18 Records, MINDWARS, HYADES, NUCLEAR AGGRESSOR, BATTERY), la bonne impression se confirme, pas de problème.
Alors on y va et on écoute, le coeur plein d'allant, d'autant plus que le chat avec sa bonne tête de fumier vient encore de dégueuler.
Et là, confirmation, level 99+, ALKOHOLIZER est bien un groupe de Thrash, voire de Thrashcore selon les pointes de folie, mais plus que ça, c'est un EXCELLENT groupe de Thrash qui manie les codes du genre avec brio, respect et talent.
Musicalement, pas de soucis. Les mecs sont affûtés, précis, les soli sont propres avec quand même ce petit grain de folie qui les fait parfois partir un peu hors de la gamme, le chanteur (Fabrizio Fele, avec un nom pareil en France c'était gagné) assure sans forcer, et la rythmique suit sans problème, la plupart du temps assez rapidement, mais sans jamais tomber dans le chaos. Ne tournons pas autour du pot, le fort d'ALKOHOLIZER, en sus de sa haute teneur en malt ou houblon, ce sont les riffs. Marco et Lögan (pas très Italien faut l'avouer comme blaze quand même...) tricotent sans cesse saccadé, nous ressortent des plans d'il y a trente ans comme s'ils les avaient composés hier (ne vous y trompez pas, c'est bien un compliment), varient les approches, et donnent à l'album une puissance indéniable, rendant chaque morceau important et entraînant.
Rayon style, l'affaire est propre et claire. Si je parlais de WEHRMACHT et TANKARD en avant garde, la musique elle se rapproche plutôt de deux combos que j'aime particulièrement, dont les mémorables GAMMACIDE, groupe maudit duquel les quatre transalpins se rapprochent dangereusement dans les passages les plus furieux. On pourrait aussi évoquer un VIO-LENCE en version un poil plus sage, tandis que le chant stable de Fabrizio s'envole parfois dans les aigus à la Tom Araya jeune et à peine pubère. Pas mal les références non ?
Certaines parties de guitare sonnent aussi comme les coups de rasoir que donnaient Ray Mensh et Bernie Siedler lorsqu'ils manient l'instrument dans EXUMER, et pour en finir avec les allusions notables, ils se permettent même de finir leur album sur un morceau qui sent bon l'adaptation thrashisante d'un morceau que BIOHAZARD bourré aurait pu composer, et repris par la suite par un SUICIDAL TENDENCIES particulièrement joueur et juvénile ("Stop Hit Off the Ghetto - Join the Boar Party!!!"). L'influence crossover de la période 85/88 de ces derniers est parfois palpable, dans les passages les plus mid tempo notamment, ramenant même à la surface le bon souvenir de groupes aussi essentiels que les fabuleux EXCEL.
Pas de lecture linéaire pour cette fois, d'une parce que c'est lourd, et de plus, parce que je vous laisse faire votre choix vous même. Free Beer... Surf's Up! assurant une belle cohésion et aucun titre n'étant faible par rapport aux autres, ils sont tous recommandables et moulés avec la même louche. Mais en argent.
Comme je le disais, parfois les choses sont donc évidentes au premier coup d'oeil. Je sentais que ces Italiens allaient me plaire, et j'avais raison. Et si vous avez envie d'écouter un très bon album de Thrash un peu rétro mais pas fallot, ce deuxième longue durée d'ALKOHOLIZER est fait pour vous.
Avec un peu de chance, vous aurez la chance de l'écouter avant que le chat avec sa bonne tête de fumier ne remette ça. Et donc, payer votre tournée, cela s'entend.
Ajouté : Vendredi 06 Février 2015 Chroniqueur : Mortne2001 Score : Lien en relation: Alkoholizer Website Hits: 5434
|