Manuale: http://doc.async.com.br/jpgraph/html/index.html
Controllo: andare sul proprio php-info.php e controllare se la versione php è corretta e se le GD sono enabled.
Installazione: con Debian è stato facile trovare i pacchetti con dselect (libphp-jpgraph).
Check post-installazione: controllato con dpkg -L dove sono i nuovi file.
idrogeno:/# dpkg -l | grep jpgraph
ii libphp-jpgraph 1.5.2-11+u1
Object oriented graph library for php4
ii libphp-jpgraph-examples 1.5.2-11+u1
idrogeno:/# dpkg -L libphp-jpgraph
/usr/share/jpgraph/jpgraph_error.php
/usr/share/jpgraph/jpgraph_spider.php
/usr/share/jpgraph/jpgraph_canvas.php
/usr/share/jpgraph/jpgraph_pie3d.php
/usr/share/jpgraph/jpgraph_scatter.php
/usr/share/jpgraph/jpgraph_dir.php
/usr/share/jpgraph/jpgraph_bar.php
/usr/share/jpgraph/jpgraph_line.php
/usr/share/jpgraph/jpgraph_log.php
/usr/share/jpgraph/jpgraph_pie.php
/usr/share/jpgraph/jpgraph.php
/usr/share/jpgraph/jpgraph_gantt.php
[...]
/usr/share/doc/libphp-jpgraph/README.gz
[...]
Gli esempi sono in:
/usr/share/doc/libphp-jpgraph-examples/*
Poi ho provato questo esempio includendo i miei percorsi alle librerie:
include ("/usr/share/jpgraph/jpgraph.php" );
include ("/usr/share/jpgraph/jpgraph_pie.php");

All done!
[Edit 090225: Warning; Debian è rimasta a jpgraph versione 1.5.2-11 causa cambio licenza e l'aggiornamento non è presente nei repo non-free. Scaricare dal sito ufficiale la versione aggiornata. ]
Accidenti.
Il brutto trend del 2008 non era ancora finito. Emmobbastaveramenteperò.
NP non c’è più. Decisamente triste.
1914-2009
Un secolo di storia.
In un secolo si vedono tantissime cose: Le Guerre Mondiali, nascita e caduta del Fascismo, l’avvento della meccanica quantistica (1925), il telefono di Marconi, la televisione, l’Italia che diventa Repubblica, gli aerei che cominciano a volare; e poi i computer, i palazzi, il lavoro…
Spero di non dimenticarmi del passato.
NP era molto buono.
Lei guardò il nuovo venuto con sorpresa. Era un uomo alto e asciutto, con sottili baffi neri e piccoli occhi blu, e una perpetua espressione di distante e sardonico divertimento. Provò immediatamente un forte sentimento nei suoi confronti, ma non sapeva bene se perché le piaceva o perché le dispiaceva. Il suo daimon era una lepre male in arnese, magra, e dall’aria dura quanto lui.
[...] Il viso dello Skraeling, in quel momento, aveva la stessa espressione del santo in quel dipinto: un estatico protendersi verso l’oblio. Lee lasciò cadere, disgustato, il suo corpo.
Hester fece schioccare la lingua.
“Avremmo dovuto pensarci, che quello mandava un messaggio” disse. “Prendigli l’anello”.
“Ma perché diavolo? Non siamo mica ladri, no?”
“No, siamo dei rinnegati” disse lei. “Non per nostra scelta, ma per sua malignità [...]”
Lee non aveva mai amato la violenza, e uccidere gli era assolutamente odioso, anche se gli era toccato farlo già tre volte.
“E’ assurdo starci a pensare” disse Hester. “Non ci ha dato la minima scelta, e del resto non abbiamo sparato per uccidere. Accidenti a lui, Lee, quello voleva morire. Questa gente è pazza”.
Philip Pullman – Queste Oscure Materie
* Lee Scoresby su His Dark Materials wikia e su wikipedia.
Che è? Le taglie delle T-shirt? eXtra Medium Large?
No, nun ce siamo.
Benché in questi mesi io abbia evitato abbastanza accuratamente l’eXtensible Markup Language (nun me piace), alla lunga ci ho dovuto scozzare.
Non è il diavolo, sia chiaro, ma mi fa strano: scrivi un sacco di roba per avere i dati ben delineati; questo è bene! Solo che scrivi piu’ di contorno che di dati…
Comunque, poco male.
XML è comodo per manipolare dati. Il formato è assolutamente portabile, flessibile nella nomenclatura e rigido nella struttura.
<?xml version="1.0"?>
<!DOCTYPE agenda SYSTEM "address.dtd">
<addressbook>
<person>
<name>Paolo</name>
<surname>Rossi</surname>
<age>45</age>
<country>Italy</country>
</person>
<person>
<name>Mario</name>
<surname>Bianchi</surname>
<age>32</age>
<country>Italy</country>
</person>
</addressbook>
Con dei dati esposti in questa maniera, chiunque è in grado di capire come sono messi e intuire come possono essere manipolati.
Specifiche XML del W3C.
Namespaces in XML.
In un documento XML ci sono 3 parti da distinguere bene:
- Il contenuto (XML)
- Le specifiche per gli elementi di struttura (DTD)
- Le specifiche legate alla visualizzazione (XSL, CSS, …)
E’ cosa buona e giusta indicare la Document Type Declaration (DTD) del file XML. IL DTD codifica le regole grammaticali per l’XML (insieme degli elementi, attributi, relazioni gerarchiche, ordine di apparizione, ecc.). Il DTD può essere esplicito (interno all’XML) o distinto (esterno con riferimento in <!DOCTYPE …>).
L’XSL (eXtensible Stylesheet Language) fornisce i modi per trasformare e presentare i documenti XML (ie: ci può permettere di convertire il documento XML in un formato adatto ad un supporto differente, come l’HTML). L’XSL utilizza pattern per specificare gli elementi XML a cui applicare un determinato template (regole su come disporre il pattern).
Per aggiungere uno stylesheet, è necessario inserire una riga con il riferimento nell’XML:
<?xml-stylesheet type="text/xsl" href="file.xsl"?>
XML XPath è un linguaggio per “esplorare” i file XML (un tutorial del W3C).
30 anni e non sentirli…
Che bazza! ![]()
Pochi giorni fa sono andato all’EuropAuditorium di Bologna a vedere Momix, che presentava Bothanica di Moses Pendleton.
Uno spettacolo estremamente affascinante, molto valido musicalmente e visivamente – costumi e scenografie da lasciare senza parole.
Ho sempre avuto un’ammirazione quasi sconfinata per i ballerini, tanto per il loro fisico quanto per il loro controllo sul proprio corpo. I Momix, dopo anni, mi hanno ricordato il perché.
Assolutamente da non perdere (il calendario, nel caso…).
Un po’ di immagini googlate.
Ho scoperto solo di recente che vim puo’ fare da editor anche per i binari.
Il buon vecchio:
sim@idrogeno:~/script/gcc/tmp$ cat hw.c #includeint main(int argc, char **argv) { printf("Hello world\n"); return 0; }
post compilazione appare così:
sim@idrogeno:~/script/gcc/tmp$ head -n1 hw ELF>à@@À@@%"@@@@@À@@@@¤¤ ¨¨`¨▒ ÐÐ`Ð` @@ Påtdèè@è@$$Qåt/lib64/ld-linux-x86-64.so.2GN ▒ÂÀ__gmon_start__libc.so.6puts__libc_start_mainGLIBC_2.2.5u▒i 1`HèkèúèåHÃÿ5Ê ÿ%Ì @ÿ%Ê héàÿÿÿÿ% héÐÿÿÿ1íIÑ^HâHäðPTIÇÀð@HÇÁ@HÇÇÌ@èÇÿÿÿôHHY HÀtÿÐHÃUHåSH=p uK¸À`Hj H-¸`HÁøHXÿH9Ús%HBHE ÿŸ`H7 H9ÚrâÆ# H[ÉÃfff.UH= Håt▒¸HÀt¿È`IÃÉAÿã@ÉÃUHåHì}üHuð¿Ü@èÛþÿÿ¸ÉÃóÃfffff.Hl$ØL|$øH- L= Ld$àLl$èLt$ðH\$ÐHì8L)ýAþIõHÁýIÔèSþÿÿHít1Û@LâLîD÷AÿßHÃH9ërêH \Hl$Ld$▒Ll$ Lt$(L|$0HÄ8ÃUHåSH Høÿt»¨`DHÿÐHHøÿuñH[ÉÃHè_þÿÿHÃHello worlc$äþÿÿÿÿÿx▒ÿÿÿzRx zRx Ì@ AC þÿÿ$4þÿÿJf@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ È@@@õþÿoh@è@@ @ sim@idrogeno:~/script/gcc/tmp$
Bene. Ogni tanto capita di avere a che fare con spazzatura illeggibile.
Ora, se apriamo il binario con vim -b hw avvertiamo l'editor che sta per aprire un binario, quindi che stia attento.
Il codice è comunque ancora illeggibile.
Per rendere piu' chiaro l'hex interno usiamo l'opzione :set display=uhex che visualizza i vari valori byte per byte.
Dovremmo vedere qualcosa tipo:
<7f>ELF<02><01><01><00><00><00> [...]
Per essere in grado di lavorare sul serio sul codice piu’ comodamente è necessario convertire il testo (o meglio, fare un hexdump) ulteriormente con un programma unix che si chiama xxd (man) attraverso l’opzione :%!xxd (modifica tutto il file [%] usando il comando esterno [!] xxd). Avremo quindi:
sim@idrogeno:~/script/gcc/tmp$ head hw.xxd 0000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............ 0000010: 0200 3e00 0100 0000 e003 4000 0000 0000 ..>.......@..... 0000020: 4000 0000 0000 0000 c010 0000 0000 0000 @............... 0000030: 0000 0000 4000 3800 0800 4000 2500 2200 ....@.8...@.%.". 0000040: 0600 0000 0500 0000 4000 0000 0000 0000 ........@....... 0000050: 4000 4000 0000 0000 4000 4000 0000 0000 @.@.....@.@..... 0000060: c001 0000 0000 0000 c001 0000 0000 0000 ................ 0000070: 0800 0000 0000 0000 0300 0000 0400 0000 ................ 0000080: 0002 0000 0000 0000 0002 4000 0000 0000 ..........@..... 0000090: 0002 4000 0000 0000 1c00 0000 0000 0000 ..@.............
Ora possiamo modificare il programma con vim andando a toccare i codici hex nella parte centrale (la parte letterale è irrilevante).
Posizionandoci su un carattere nella parte letterale e utilizzando il comando ga possiamo vedere che vim ci annuncia la codifica in hex corrispondente (e, ovviamente, presente nella parte centrale nel caso di caratteri).
E’ fondamentale, finite le modifiche al codice, reversare il dump con :%!xxd -r e poi salvare l’eseguibile con vim come normale.