Sunday, October 29, 2006

Visit of the London Googleplex

Last friday I went to London to visiting the Google office with other GSoCers.First of all, I went to London to visit Google and I had no idea how great it would be to met other GSoCers. Everybody were nice, funny and very excited about theirs projects.

We had a nice lunch (with sushis, I love sushis !!!) and we had a round table with Chris Di Bona and Zaheda Bhorat where everyone did an self-introduction. It was a chance to know a little bit more about everybody and it also was a chance to see in what kind of studies we're all involved. Then we did the lightning talk presentations and we had a big chat about the Google Summer of Code: what was great, what went wrong, what is next, what could be improved etc.
A Googler came to talk to us about being an engineer at Google and we did a visit of the Office.

It was very enriching at so many level. I learned more about the Google work environment, what kind of relationship Google has with the Open source world, how awesome GSoCers are and it was also a great opportunity to know more about being an engineers at Google.

You can get the pdf version here.

Tuesday, October 3, 2006

Visualize the parse tree of a PHP source code

 wrote this xslt stylesheet to visualize the parse tree of a PHP source code.
The stylesheet can actually convert any XML tree to a graph in the dot format interpreted by Graphviz.

The code to vizualize nice parse tree with the PECL extension is the following:

//Loading the parse tree into a DOMDocument
$xml = new DOMDocument;
$xml->loadXML(parse_tree_from_file('order.php'), XML_OPTIONS);
//Loading the stylesheet into a DOMDocument
$xsl = new DOMDocument;
$xsl->load('toDot.xsl', XML_OPTIONS);
//Stylesheet processing
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
//Generating the image with graphviz
file_put_contents('order.dot', trim($proc->transformToXML($xml)));
`dot -T png -o order.png order.dot`
So if order.php contains the following source code:
class Order{
    private $items = array();
    private $amount = 0;
 
    public function addItem($reference, $quantity){
        $this->items[] = array($reference, $quantity);
        $this->amount += $quantity*Catalog::getPrice($reference);
    }
 
    public function getAmount(){
        return $this->amount;
    }
}
class Catalog{
    private static $priceList = array('Largo Winch' => 9.31, 'Astérix' => 8.46, 'XIII' => 8.70);
 
    public static function getPrice($reference){
        return self::$priceList[$reference];
    }
}
$myOrder = new Order;
$myOrder->addItem('Largo Winch',2);
$myOrder->addItem('Astérix',2);
You'll get the following tree:
To test this example at home, you need the Parse Tree pecl extension, an xslt proc and graphviz:
order.php is the original php file.
order.xml is the xml generated with the parse_tree_from_file function.
order.dot is the parse tree in dot format.
order.png is the png generated by graphviz.
toDot.xsl isthe stylesheet generating dot from xml.