PHP – Da XML ad array

Pubblicato il Scritto il da

Ho avuto un periodo nella mia vita in cui parsare file XML in PHP era diventata un’ossessione (vedi “PHP – HTML Parser (text node compresi)“).

E con questo secondo appuntamento cambiamo metodo: non più DOM, ma XML Parser.

Vediamo il codice:

<?php
$xml="<a:root>
        aaa
        <a1 ciao="bella">
	    <b1>
	        ff
	    </b1>
	</a1>
	<a2>
	    bb
	</a2>
      </a:root>";

$struct = array();
$xml_parser = xml_parser_create(); 

xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "data"); 

$parse = xml_parse($xml_parser,$xml); 

xml_parser_free($xml_parser); 

print("<pre>n");
print_r($struct);
print("</pre>n"); 

function startElement($parser, $name, $attrs)
{
    global $struct; 

    $tag = array("name"=>$name, "attributes"=>$attrs); 

    array_push($struct,$tag);
} 

function data($parser, $data)
{
    global $struct,$i; 

    if(trim($data)) {
        $struct[count($struct)-1]['data']=trim($data);
    }
} 

function endElement($parser, $name)
{
    global $struct; 

    $struct[count($struct)-2]['child'][] = $struct[count($struct)-1]; 

    array_pop($struct);
}
?>

Scusate, per l’ennesima volta, la ruzzezza del codice (“ma non avuto il tempo di farlo in scala e di dipingerlo” [cit] )

L’output risultate è il seguente:

Array
(
    [0] => Array
	(
		[name] => A:ROOT
		[attributes] => Array
		(
		)

		[data] => aaa
		[child] => Array
		(
			[0] => Array
			(
				[name] => A1
				[attributes] => Array
				(
					[CIAO] => bella
				)

				[child] => Array
				(
					[0] => Array
					(
						[name] => B1
						[attributes] => Array
						(
						)
						[data] => ff
					)
				)
			)

			[1] => Array
			(
				[name] => A2
				[attributes] => Array
				(
				)
				[data] => bb
			)
		)
	)
)

Sarebbe interessante effettuare dei benchmark.

Buon parse! 😉

Fonte: link.

Fedora – Installare MySQL Workbench

Pubblicato il Scritto il da

Cos’è Workbench?
MySQL Workbench è uno strumento grafico completo per architetti, sviluppatori e DBA” (Database administrator) “. MySQL Workbench offre funzionalità di data modeling e sviluppo SQL, oltre a una serie completa di strumenti di amministrazione per la configurazione dei server, l’amministrazione degli utenti e tanto altro ancora. MySQL Workbench è disponibile su Windows, Linux e Mac OS.” (fonte)

Per chi viene dal mondo Microsoft, potrebbe vederlo come una specie di Sql Server Management Studio.

Sun prima, Oracle poi, hanno sempre fornito una versione del software anche per la nostra amata Fedora, attraverso un pacchetto RPM.

L’installazione dovrebbe, quindi, risultare semplice, ma così non è. Infatti potreste incappare in un problema di dipendenze riguardanti le librerie:

  • libmysqlclient.so.15
  • libmysqlclient.so.16

Come risolvere il problemino?
Installando il pacchetto MySQL-shared-compat-X.X.XX-X, dove le varie “X” corrispondono alla versione di WorkBench che avete installato.
Il pacchetto RPM è disponibile qui, o in qualche cartella superiore del server FTP.

Buona installazione. :)

P.S. Non ci sono problemi se installate la versione presente nei repository Fedora. :)

Blocco di Aruba

Pubblicato il Scritto il da

Ciao a tutti i lettori di Micene.net.

Avete notato che venerdì tutti quelli che hanno hosting su Aruba non sono riusciti a collegarsi nei siti come pure la mail non funzionava :( , quelli che hanno cercato di contattare Aruba non trovavano nessuna risposta, la linea telefonica cadeva subito, bene io ho scritto ad Aruba lamentando queste problematiche ed oggi ho avuto la risposta, eccola :

venerdì 8 luglio 2011 22.05

In data 08/07/2011 intorno alle ore 12.00 presso la Webfarm 1 di Arezzo si è verificata un’interruzione dell’alimentazione determinata da un guasto dell’impianto elettrico, conseguenza imprevedibile dell’incendio verificatosi il 29 Aprile scorso nel power center della struttura interessata.

L’alimentazione e’ stata ristabilita nei 30 minuti successivi all’evento, mentre il ripristino di alcuni servizi ha richiesto un tempo maggiore ed è stato completato nel corso del pomeriggio.

A superamento della possibilità del ripetersi di eventualità simili, sono in corso importanti interventi.

In particolare sono in fase di completamento i lavori di raddoppio di tutti gli impianti della Webfarm 1 avviati ad inizio Maggio. Questo consentirà di aumentare la ridondanza di tutti gli impianti, che raggiungeranno gli standard della nuova Webfarm 2, passando così da N+1 a 2xN. L’attivazione del secondo power center, prevista per il mese di Settembre, consentirà inoltre il completamento delle attività di sostituzione preventiva ed aggiornamento di tutti i componenti del power center attuale.

Ulteriori attività in corso sono volte all’evoluzione dell’attuale schema di Business Continuity tramite lo spostamento, precedentemente pianificato ed in fase di implementazione, dei sistemi di ridondanza, dalla Webfarm 1 alla nuova Webfarm 2 (attualmente suddivisi fra i due piani della Webfarm 1). In questo modo un guasto anche generalizzato di una delle due strutture non avrà impatti sui servizi erogati in questa modalità. Il nuovo schema di Business Continuity verrà applicato già a partire dalle prossime settimane ai sistemi che ospitano i servizi di posta elettronica ed hosting per poi essere esteso a tutti gli altri.”

Spero solo che questa sia l’ultima volta in 2 mesi  2 blackout sono difficili da digerire…….

Saluti

Caesartom

PHP – HTML Parser (text node compresi)

Pubblicato il Scritto il da

Ho cercato un bel po’ nella rete, ma non ho trovato soluzioni valide e complete contemporaneamente: soluzioni poco leggibili, soluzioni che non consideravano i text node
L’unica soluzione che ho trovato è stata quella di prendere dei pezzi qui e lì e creare il mio parser HTML.

Ecco il codice:

<?php
$xml="<root>aaa<a1><b1>ff</b1></a1></root>";
$dom=new DomDocument();
$dom->loadXML( $xml );
parse( $dom );

function parse( $node )
{
  foreach ($node->childNodes as $childNode)
  {
    if ($childNode->nodeType != XML_TEXT_NODE)
    {
      echo "node: " . $childNode->nodeName . "<br />";

      if ($childNode->hasAttributes())
      {
        foreach ($childNode->attributes as $attr)
        {
          echo "Attr: " . $attr->nodeName. " ". $attr->nodeValue . "<br />";
        }
      }

      if($childNode->hasChildNodes())
      {
        parse($childNode);
      }
    }
    else
    {
      echo "text node: " . $childNode->nodeValue . "<br />";
    }
  }
}
?>

Scusate la ruzzezza del codice (“ma non avuto il tempo di farlo in scala e di dipingerlo” [cit] ) :)

L’output è il seguente:

node: root
text node: aaa 
node: a1
node: b1
text node: ff
text node:

Vi conviene controllare se il text node è vuoto, così potete evitare di incappare in nodi vuoti come nell’ultima riga.

Buona navigazione nell’HTML. :)

Firefox: Ops, questo è imbarazzante

Pubblicato il Scritto il da

Penso che questo messaggio sia una novità della versione 3.5, prima non lo avevo mai visto.
Era già capitato che gli sviluppatori di casa Mozilla usassero in Firefox frasi “strane” di avvertimento, esempio: il messaggio che compare quando si accede alla pagina “about:config”:

Questa operazione potrebbe invalidare la garanzia
La modifica dei valori predefiniti delle seguenti impostazioni avanzate può compromettere la stabilità, la sicurezza e le prestazioni di questa applicazione. […]
Visualizza nuovamente questo avviso in futuro Farò attenzione, prometto  

Ecco lo screenshot:
Firefox e il messaggio di avviso

Questa volta il nuovo “amichevole” messaggio compare quando Firefox tenta, ma non ci riesce, di ripristinare la sessione precedente di navigazione. L’avviso recita:

Ops, questo è imbarazzante
Si sono verificati dei problemi durante il ripristino delle schede e delle finestre di Firefox. […]

Ops, questo è imbarazzante“??? Non ci credo…

Ecco lo screenshot:

Screenshot dell'avviso di errore
Questo nuovo messaggio, mai avvistato precedentemente, si è presentato con Firefox 3.5b4, quello rilasciato con Fedora 11…
Perchè hanno messo una beta con problemi in una release ufficiale???

 

 

Velocizzare gli aggiornamenti di Fedora (Yum Fast Downloader plugin)

Pubblicato il Scritto il da

Questo non sarà una di quelle guide dove vengono elencati trick (esoterici) per velocizzare dello 0,1% i vostri aggiornamenti, qui si parlerà di un’idea rivoluzionaria!

Già perchè un certo Hedayat Vatankhah (nome quasi impronunciabile per noi italici), ha creato un plugin per YUM* per velocizzare lo scaricamento di aggiornamenti e software da installare.

Con poco meno di 170 righe di codice ha realizzato quello che da tempo noi Fedoriani desideravamo: scaricare al massimo della nostra banda gli aggiornamenti.

Come ha fatto
Niente di complicatissimo: il suo plugin frutta Aria 2 un download manager molto veloce, che sfrutta multi connessioni alla sorgente, per chi ha avuto a che fare con Windows e i download manager è quasi paragonabile Flash Get.

Attenzione
Il plugin è alle sue primissime versioni e non pienamente testato, quindi non privo di possibili bug.

Io l’ho provato e non mi ha dato alcun problema. 😀

Data la sua tenera/acerba età non presenta molte caratteristiche che gli permettono di integrarsi con altri plugin di YUM o altri download manager, ma lo sviluppatore ha nella sua TODO list le seguenti voci:

  • Support downloading delta packages (il supporto al download dei pacchetti delta)
  • Support downloading other files (il supporto al download di altri file)
  • Support other download managers (il supporto ad altri download manager)

Gli ultimi due punti non sono così interessanti, ma il primo è sicuramente ad altra priorità, perchè se non sarà implementata questa funzionalità il plugin potrà non essere considerato così stupefacente, dato che i pacchetti delta hanno rappresentato un altro notevole passo avanti per velocizzare gli aggiornamenti della nostra Fedora.

Come installarlo
Scaricare il file .repo presente in questo link.
Copiatelo nella directory /etc/yum.repos.d (serviranno i privilegi di amministratore).
Aprite una console e digitate il seguente comando:

sudo yum install yum-fast-downloader

E il gioco è fatto.

Post ufficiale del plugin

Buona velocizzazione! 😛

* Per chi non lo sapesse YUM è il programma che si occupa di scaricare i pacchetti dai repository e di installarli.