SlideShare ist ein Scribd-Unternehmen logo
1 von 32
The Beauty and the Beast




Bastian Feder                              OSIDays 2010
Liip Inc.                                    20.09.2010
Me, myself and I

●   Senior application developer & architect
●   Prof. trainer
●   PHP since 2001
●   JavaScript since 2002
●   Liip Inc. since 2010
Who are you?
Agenda

●   What is this phpDocumentor everyone is talking
    about?
●   Doh! Too less space for a complete
    documentation!
●   Nice so far! Are there tools supporting this
    thing?
●   Where to find more information.
What is this phpDocumentor?

●   Command line tool
●   Written in PHP
●   Identifies annotations (tags)
●   Converters render different formats (HTML,
    Smarty, DocBook, etc)
●   Automated documentation
Drawbacks

●   Memory consuming
        set memory_limit up
●   Time consuming
        set max_execution_time
phpDocumentor - tags


●   A phpDocumentor tag is an annotation telling a
    parser what to do with the given information.
●   Rendering template decides which information
    will be displayed.
DocBlock – example
 <?php
 /**
  * Just a DocBlock example
  *
  * this is an example for a phpDocumentor class documentation block
  *
  * @package myProject
  * @subpackage examples
  *
  * @revision pre-alpha 1
  */
 class foo {

     /**
      * Just returns a boolean.
      *
      * @retrun boolean Just true.
      */
     public function bar() {
        return true;
     }

 }
Tag annotation - examples


●   @package, @subpackage, @category
●   @author, @license, @version
●   @param, @return
●   @access
●   @see, @link, @uses
●   @todo
●   @example, @tutorial
inline{} tags

●   Display their information in the text flow


    /**
    * inline tags demonstration
    *
    * this function works heavily with {@link foo()} to rule the world. If I want
    * to use the characters "{@link" in a docblock, I just use "{@}link." If
    * I want the characters "{@*}" I use "{@}*}"
    */
     function bar() {
       return;
     }
Page DocBlock definition

/**
* This is an example short description of a phpDocumentor DocBlock.
*
* This example shall show how a DocBlock shall look like and what information are
* to be displayed.
* This text and the upper license will be displayed in the rendered documentation as the
* so called long description of the DocBlock.
*
* @copyright 2002-2008 by papaya Software GmbH - All rights reserved.
* @link http://www.papaya-cms.com/
* @license GNU General Public Licence (GPL) 2 http://www.gnu.org/copyleft/gpl.html
*
* You can redistribute and/or modify this script under the terms of the GNU General Public
* License (GPL) version 2, provided that the copyright and license notes, including these
* lines, remain unmodified. papaya 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.
*
* @package papayaCMS
* @version $Id: index.php 19965 2008-08-11 12:23:29Z feder $
*/
DocBlock inheritence

●   @author, @version, and @copyright are automatically
    inherited unless explicitly specified in the DocBlock
●   @package and @subpackage are inherited unless
    explicitly specified in the DocBlock
●   If there is no short description, the short description will be
    inherited.
●   If there is no long description, the long description will be
    inherited.
●   If there is a long description, and you still want to inherit
    the parent's description, use inline {@inheritdoc}
Tutorials

●   Ability to link in external documentation
●   DocBook format
●   Hooks are the inline{} tags
●   Enable rendering the tutorial:
    –   Existing subdir named „tutorials“
    –   Comandline switch „-d“, „--directory“, „-f“ or „--
        filename“ must contain the subdir
    –   Predefined structure:
        tutorials/package/package.pkg
Tutorials – example integration
/**
* FluentDOM implements a jQuery like replacement for DOMNodeList
*
* @version $Id: FluentDOM.php 338 2009-09-28 13:21:22Z lapis $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
* @copyright Copyright (c) 2009 Bastian Feder, Thomas Weinert
*
* @tutorial FluentDOM.pkg
* @package FluentDOM
*/
Tutorials - example

     FluentDOM.pkg
<refentry id="{@id}">
 <refnamediv>
  <refname>User Guide for FluentDOM</refname>
  <refpurpose></refpurpose>
 </refnamediv>
 <refsynopsisdiv>
  <author>Bastian Feder</author>
  <author>Thomas Weinert</author>
 </refsynopsisdiv>
 {@toc}
 <refsect1 id="{@id intro}">
  <title>FluentDOM</title>
  <para>
    FluentDOM ist a jQuery like fluent XML interface for the DOMDocument in PHP.
  </para>
  <para>
    The idea was born in a workshop of {@link http://schlitt.info Tobias Schlitt},
    about the PHP XML extensions at the IPC Spring, in Berlin. He used this idea to show
    XPath samples in the session.
  </para>
 </refsect1>
</refentry>
Rendered tutorial example




   See http://fluentdom.github.com/docs/index.html for the complete version.
Quality check

●   Error log
    (errors.html in root of API documentation)
●   Todo list
    (todolist.html in root of API documentation)
SVN / CVS identifier

●   $Date: $
      $Date: 2006-07-22 21:42:37 -0700 (Sat, 22 Jul 2006) $
●   $Revision: $
      $Revision: 144 $
●   $Author: $
      $Author: feder $
●   $headURL: $
      $HeadURL: http://svn.papaya.local/svn/weisseliste/trunk/README $
●   $Id: $
      $Id: content_assistant_step.php 19696 2008-08-05 15:52:41Z feder $
SVN / CVS identifier (II)

●   Location of 'config' – file:
        – MacOsX/Linux:
          ~/.subversion/config
        – WinXp:

          C:Dokumente und Einstellungen
           <USER>AnwendungsdatenSubversion
           config
SVN / CVS identifier (III)

        Add following lines to configuration file:
[miscellany]
global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store .project .cache .settings
enable-auto-props = yes

[auto-props]
*.js = svn:eol-style=LF;svn:keywords=Id LastChangedDate LastChangedRevision URL
*.css = svn:eol-style=LF;svn:keywords=Id LastChangedDate LastChangedRevision URL
*.php = svn:eol-style=LF;svn:keywords=Id LastChangedDate LastChangedRevision URL
*.html = svn:eol-style=LF;svn:mime-type=text/html;svn:keywords=Id URL
*.htm = svn:eol-style=LF;svn:mime-type=text/html;svn:keywords=Id URL
*.xsl = svn:eol-style=LF
*.xml = svn:eol-style=LF
*.xsd = svn:eol-style=LF
*.sql = svn:eol-style=LF
*.txt = svn:eol-style=LF
Eclipse PDT – docu hints

If you plan to instantiate a new object in your
   class, declare the name of the class to be
   instantitated as type of the class var you will
   use.

            /**
            * Example description for a public class var.
            *
            * @var base_plugin
            */
            protected $basePluginObj;
Eclipse PDT – docu hints (II)

●   Once you declared the complete function
    DocBlock, Eclipse is able to show you these
    information in the tooltip of the function call.
●   Try to hit F2 when the tooltip appears. This will
    set the focus to the tooltip and it can be resized
    to see the complete info.
Eclipse PDT – docu hints (III)

 ●   Magic methods                             ●   Magic properties
           –   __clone()                                 –   __set()
           –   __empty()                                 –   __get()
           –   ...

/**
* FluentDOM implements a jQuery like replacement for DOMNodeList
*
* @property string $contentType Ouput type – text/xml or text/html
* @property-read DOMDocument $document An instance of the current DOMDocument
* @property-read DOMXPath $xpath An Instance of the current DOMXPath object
*
* @method bool empty() clears the current node list identified by a selector
* @method DOMDocument clone() clones the current node list identified by a selector
*
* @package FluentDOM
*/
Eclipse PDT – docu hints
external Tools framework

●   Enables Eclipse to run ‚stand-alone‘
    applications
●   Two broad classes of external tools are
    available:
    –   Ant build files
    –   Everything else
How to integrate
How to integrate (II)

●   Location
    points to the phpDocumentor installation

●   Working Directory
    directory to store temporary data

●   Arguments
    command line parameters to be passed to
    phpDocumentor

    '-c' defines the location of a configuration file

    '${project_loc}' Eclipse variable representing
    the location of the current selected project.
How to integrate (III)

●   Display in favorites
    menu

●   Standard Input and
    Output
Any questions left?
Slides'n Feedback

●   Sildes
    (http://www.slideshare.net/lapistano)

●   Feedback
            –   Personal contact
                  (lapistano@php.net)

            –   Joind'in
                  (http://joind.in/event/view/425 )
References
●   phpDocumentor website @ pear.php.net
    (http://pear.php.net/package/PhpDocumentor/docs/1.4.4)

●   phpDocumentor Manual
    (http://manual.phpdoc.org)

●   FluentDOM
    (http://fluentdom.org)

●   Eclipse website
    (http://eclipse-org/pdt)

●   SVN keyword substitution
    (http://svnbook.red-bean.com/en/1.4/svn-book.html#svn.advanced.props.special.keywords)
License

   This set of slides and the source code included
    in the download package is licensed under the

        Creative Commons Attribution-
     Noncommercial-Share Alike 2.0 Generic
                   License


      http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en

Weitere ähnliche Inhalte

Was ist angesagt?

Drupal 8: Forms
Drupal 8: FormsDrupal 8: Forms
Drupal 8: Formsdrubb
 
Drupal 8: Routing & More
Drupal 8: Routing & MoreDrupal 8: Routing & More
Drupal 8: Routing & Moredrubb
 
Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4Fabien Potencier
 
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Fabien Potencier
 
Dependency injection-zendcon-2010
Dependency injection-zendcon-2010Dependency injection-zendcon-2010
Dependency injection-zendcon-2010Fabien Potencier
 
Dependency injection - phpday 2010
Dependency injection - phpday 2010Dependency injection - phpday 2010
Dependency injection - phpday 2010Fabien Potencier
 
The Zen of Lithium
The Zen of LithiumThe Zen of Lithium
The Zen of LithiumNate Abele
 
Dependency Injection IPC 201
Dependency Injection IPC 201Dependency Injection IPC 201
Dependency Injection IPC 201Fabien Potencier
 
Lithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksLithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksNate Abele
 
Dependency injection in Drupal 8
Dependency injection in Drupal 8Dependency injection in Drupal 8
Dependency injection in Drupal 8Alexei Gorobets
 
Rich Model And Layered Architecture in SF2 Application
Rich Model And Layered Architecture in SF2 ApplicationRich Model And Layered Architecture in SF2 Application
Rich Model And Layered Architecture in SF2 ApplicationKirill Chebunin
 
Building Lithium Apps
Building Lithium AppsBuilding Lithium Apps
Building Lithium AppsNate Abele
 
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionLithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionNate Abele
 
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)Fabien Potencier
 
Symfony 2.0
Symfony 2.0Symfony 2.0
Symfony 2.0GrUSP
 
The State of Lithium
The State of LithiumThe State of Lithium
The State of LithiumNate Abele
 
PhpUnit - The most unknown Parts
PhpUnit - The most unknown PartsPhpUnit - The most unknown Parts
PhpUnit - The most unknown PartsBastian Feder
 
PHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkPHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkG Woo
 

Was ist angesagt? (20)

Drupal 8: Forms
Drupal 8: FormsDrupal 8: Forms
Drupal 8: Forms
 
Drupal 8: Routing & More
Drupal 8: Routing & MoreDrupal 8: Routing & More
Drupal 8: Routing & More
 
Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4
 
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
 
Dependency injection-zendcon-2010
Dependency injection-zendcon-2010Dependency injection-zendcon-2010
Dependency injection-zendcon-2010
 
Dependency injection - phpday 2010
Dependency injection - phpday 2010Dependency injection - phpday 2010
Dependency injection - phpday 2010
 
The Zen of Lithium
The Zen of LithiumThe Zen of Lithium
The Zen of Lithium
 
PHP7 Presentation
PHP7 PresentationPHP7 Presentation
PHP7 Presentation
 
Dependency Injection IPC 201
Dependency Injection IPC 201Dependency Injection IPC 201
Dependency Injection IPC 201
 
Lithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksLithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate Frameworks
 
Dependency injection in Drupal 8
Dependency injection in Drupal 8Dependency injection in Drupal 8
Dependency injection in Drupal 8
 
Rich Model And Layered Architecture in SF2 Application
Rich Model And Layered Architecture in SF2 ApplicationRich Model And Layered Architecture in SF2 Application
Rich Model And Layered Architecture in SF2 Application
 
Building Lithium Apps
Building Lithium AppsBuilding Lithium Apps
Building Lithium Apps
 
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionLithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
 
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
 
Symfony 2.0
Symfony 2.0Symfony 2.0
Symfony 2.0
 
The State of Lithium
The State of LithiumThe State of Lithium
The State of Lithium
 
PhpUnit - The most unknown Parts
PhpUnit - The most unknown PartsPhpUnit - The most unknown Parts
PhpUnit - The most unknown Parts
 
PHP MVC
PHP MVCPHP MVC
PHP MVC
 
PHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkPHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php framework
 

Andere mochten auch

Principi del Management: 14^ - Gruppi e Team
Principi del Management: 14^ - Gruppi e TeamPrincipi del Management: 14^ - Gruppi e Team
Principi del Management: 14^ - Gruppi e TeamManager.it
 
Meoug annual confference uae
Meoug annual confference uaeMeoug annual confference uae
Meoug annual confference uaemeoug
 
Elem of design unit 1 module 0 discussion of the program
Elem of design unit 1 module 0 discussion of the programElem of design unit 1 module 0 discussion of the program
Elem of design unit 1 module 0 discussion of the programkateridrex
 
Next Action Decision Making Process
Next Action   Decision Making ProcessNext Action   Decision Making Process
Next Action Decision Making Processrpuerzer
 
Thabiso Mathelela Curriculum Vitae
Thabiso Mathelela Curriculum VitaeThabiso Mathelela Curriculum Vitae
Thabiso Mathelela Curriculum VitaeThabiso Mathelela
 
Wd131 unit 6 module 4 the rules of type
Wd131 unit 6 module 4 the rules of type Wd131 unit 6 module 4 the rules of type
Wd131 unit 6 module 4 the rules of type kateridrex
 
Principi del Management: 19^ - Gestione di Nuovi Prodotti, il loro Sviluppo e...
Principi del Management: 19^ - Gestione di Nuovi Prodotti, il loro Sviluppo e...Principi del Management: 19^ - Gestione di Nuovi Prodotti, il loro Sviluppo e...
Principi del Management: 19^ - Gestione di Nuovi Prodotti, il loro Sviluppo e...Manager.it
 
Keistimewaan nilai-nilai dari huruf arab
Keistimewaan nilai-nilai dari huruf arabKeistimewaan nilai-nilai dari huruf arab
Keistimewaan nilai-nilai dari huruf arabrina-nuraeni
 
Principi del Management: 10^ - Gestione delle Risorse Umane
Principi del Management: 10^ - Gestione delle Risorse UmanePrincipi del Management: 10^ - Gestione delle Risorse Umane
Principi del Management: 10^ - Gestione delle Risorse UmaneManager.it
 
L'ago della bilancia. Valutazione delle Competenze e del Potenziale
L'ago della bilancia. Valutazione delle Competenze e del PotenzialeL'ago della bilancia. Valutazione delle Competenze e del Potenziale
L'ago della bilancia. Valutazione delle Competenze e del PotenzialeL'ago della bilancia
 
Voyage noël en Alsace 2016
Voyage noël en Alsace 2016Voyage noël en Alsace 2016
Voyage noël en Alsace 2016Joanne Sun
 
marketing research on mcdonalds
marketing research on mcdonaldsmarketing research on mcdonalds
marketing research on mcdonaldsnabeel1214
 

Andere mochten auch (13)

Principi del Management: 14^ - Gruppi e Team
Principi del Management: 14^ - Gruppi e TeamPrincipi del Management: 14^ - Gruppi e Team
Principi del Management: 14^ - Gruppi e Team
 
Meoug annual confference uae
Meoug annual confference uaeMeoug annual confference uae
Meoug annual confference uae
 
Elem of design unit 1 module 0 discussion of the program
Elem of design unit 1 module 0 discussion of the programElem of design unit 1 module 0 discussion of the program
Elem of design unit 1 module 0 discussion of the program
 
Next Action Decision Making Process
Next Action   Decision Making ProcessNext Action   Decision Making Process
Next Action Decision Making Process
 
Thabiso Mathelela Curriculum Vitae
Thabiso Mathelela Curriculum VitaeThabiso Mathelela Curriculum Vitae
Thabiso Mathelela Curriculum Vitae
 
Wd131 unit 6 module 4 the rules of type
Wd131 unit 6 module 4 the rules of type Wd131 unit 6 module 4 the rules of type
Wd131 unit 6 module 4 the rules of type
 
Principi del Management: 19^ - Gestione di Nuovi Prodotti, il loro Sviluppo e...
Principi del Management: 19^ - Gestione di Nuovi Prodotti, il loro Sviluppo e...Principi del Management: 19^ - Gestione di Nuovi Prodotti, il loro Sviluppo e...
Principi del Management: 19^ - Gestione di Nuovi Prodotti, il loro Sviluppo e...
 
Ntx 09-d
Ntx 09-dNtx 09-d
Ntx 09-d
 
Keistimewaan nilai-nilai dari huruf arab
Keistimewaan nilai-nilai dari huruf arabKeistimewaan nilai-nilai dari huruf arab
Keistimewaan nilai-nilai dari huruf arab
 
Principi del Management: 10^ - Gestione delle Risorse Umane
Principi del Management: 10^ - Gestione delle Risorse UmanePrincipi del Management: 10^ - Gestione delle Risorse Umane
Principi del Management: 10^ - Gestione delle Risorse Umane
 
L'ago della bilancia. Valutazione delle Competenze e del Potenziale
L'ago della bilancia. Valutazione delle Competenze e del PotenzialeL'ago della bilancia. Valutazione delle Competenze e del Potenziale
L'ago della bilancia. Valutazione delle Competenze e del Potenziale
 
Voyage noël en Alsace 2016
Voyage noël en Alsace 2016Voyage noël en Alsace 2016
Voyage noël en Alsace 2016
 
marketing research on mcdonalds
marketing research on mcdonaldsmarketing research on mcdonalds
marketing research on mcdonalds
 

Ähnlich wie The Beauty and the Beast

The beautyandthebeast phpbat2010
The beautyandthebeast phpbat2010The beautyandthebeast phpbat2010
The beautyandthebeast phpbat2010Bastian Feder
 
Php Documentor The Beauty And The Beast
Php Documentor The Beauty And The BeastPhp Documentor The Beauty And The Beast
Php Documentor The Beauty And The BeastBastian Feder
 
DocBlox: your source matters @ #pfc11
DocBlox: your source matters @ #pfc11DocBlox: your source matters @ #pfc11
DocBlox: your source matters @ #pfc11Mike van Riel
 
Fluent Development with FLOW3 1.0
Fluent Development with FLOW3 1.0Fluent Development with FLOW3 1.0
Fluent Development with FLOW3 1.0Robert Lemke
 
Code Documentation. That ugly thing...
Code Documentation. That ugly thing...Code Documentation. That ugly thing...
Code Documentation. That ugly thing...Christos Manios
 
The Big Documentation Extravaganza
The Big Documentation ExtravaganzaThe Big Documentation Extravaganza
The Big Documentation ExtravaganzaStephan Schmidt
 
Automating API Documentation
Automating API DocumentationAutomating API Documentation
Automating API DocumentationSelvakumar T S
 
Eclipse Pdt2.0 26.05.2009
Eclipse Pdt2.0 26.05.2009Eclipse Pdt2.0 26.05.2009
Eclipse Pdt2.0 26.05.2009Bastian Feder
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy CodeRowan Merewood
 
IPCSE12: Getting into FLOW3
IPCSE12: Getting into FLOW3IPCSE12: Getting into FLOW3
IPCSE12: Getting into FLOW3Robert Lemke
 
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?Wong Hoi Sing Edison
 
Php Development With Eclipde PDT
Php Development With Eclipde PDTPhp Development With Eclipde PDT
Php Development With Eclipde PDTBastian Feder
 
Getting Into FLOW3 (DPC12)
Getting Into FLOW3 (DPC12)Getting Into FLOW3 (DPC12)
Getting Into FLOW3 (DPC12)Robert Lemke
 
20090629 Using phpDocumentor
20090629 Using phpDocumentor20090629 Using phpDocumentor
20090629 Using phpDocumentorRimpei Ogawa
 
NginX - good practices, tips and advanced techniques
NginX - good practices, tips and advanced techniquesNginX - good practices, tips and advanced techniques
NginX - good practices, tips and advanced techniquesClaudio Borges
 
Eclipse HandsOn Workshop
Eclipse HandsOn WorkshopEclipse HandsOn Workshop
Eclipse HandsOn WorkshopBastian Feder
 
FLOW3 Tutorial - T3CON11 Frankfurt
FLOW3 Tutorial - T3CON11 FrankfurtFLOW3 Tutorial - T3CON11 Frankfurt
FLOW3 Tutorial - T3CON11 FrankfurtRobert Lemke
 
.NET @ apache.org
 .NET @ apache.org .NET @ apache.org
.NET @ apache.orgTed Husted
 

Ähnlich wie The Beauty and the Beast (20)

The beautyandthebeast phpbat2010
The beautyandthebeast phpbat2010The beautyandthebeast phpbat2010
The beautyandthebeast phpbat2010
 
Php Documentor The Beauty And The Beast
Php Documentor The Beauty And The BeastPhp Documentor The Beauty And The Beast
Php Documentor The Beauty And The Beast
 
Inside DocBlox
Inside DocBloxInside DocBlox
Inside DocBlox
 
DocBlox: your source matters @ #pfc11
DocBlox: your source matters @ #pfc11DocBlox: your source matters @ #pfc11
DocBlox: your source matters @ #pfc11
 
Fluent Development with FLOW3 1.0
Fluent Development with FLOW3 1.0Fluent Development with FLOW3 1.0
Fluent Development with FLOW3 1.0
 
Code Documentation. That ugly thing...
Code Documentation. That ugly thing...Code Documentation. That ugly thing...
Code Documentation. That ugly thing...
 
The Big Documentation Extravaganza
The Big Documentation ExtravaganzaThe Big Documentation Extravaganza
The Big Documentation Extravaganza
 
Automating API Documentation
Automating API DocumentationAutomating API Documentation
Automating API Documentation
 
Eclipse Pdt2.0 26.05.2009
Eclipse Pdt2.0 26.05.2009Eclipse Pdt2.0 26.05.2009
Eclipse Pdt2.0 26.05.2009
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
 
IPCSE12: Getting into FLOW3
IPCSE12: Getting into FLOW3IPCSE12: Getting into FLOW3
IPCSE12: Getting into FLOW3
 
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
 
Php Development With Eclipde PDT
Php Development With Eclipde PDTPhp Development With Eclipde PDT
Php Development With Eclipde PDT
 
Getting Into FLOW3 (DPC12)
Getting Into FLOW3 (DPC12)Getting Into FLOW3 (DPC12)
Getting Into FLOW3 (DPC12)
 
20090629 Using phpDocumentor
20090629 Using phpDocumentor20090629 Using phpDocumentor
20090629 Using phpDocumentor
 
NginX - good practices, tips and advanced techniques
NginX - good practices, tips and advanced techniquesNginX - good practices, tips and advanced techniques
NginX - good practices, tips and advanced techniques
 
Eclipse HandsOn Workshop
Eclipse HandsOn WorkshopEclipse HandsOn Workshop
Eclipse HandsOn Workshop
 
PHP Development Tools
PHP  Development ToolsPHP  Development Tools
PHP Development Tools
 
FLOW3 Tutorial - T3CON11 Frankfurt
FLOW3 Tutorial - T3CON11 FrankfurtFLOW3 Tutorial - T3CON11 Frankfurt
FLOW3 Tutorial - T3CON11 Frankfurt
 
.NET @ apache.org
 .NET @ apache.org .NET @ apache.org
.NET @ apache.org
 

Mehr von Bastian Feder

JQuery plugin development fundamentals
JQuery plugin development fundamentalsJQuery plugin development fundamentals
JQuery plugin development fundamentalsBastian Feder
 
Why documentation osidays
Why documentation osidaysWhy documentation osidays
Why documentation osidaysBastian Feder
 
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownpartsBastian Feder
 
Introducing TDD to your project
Introducing TDD to your projectIntroducing TDD to your project
Introducing TDD to your projectBastian Feder
 
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)Bastian Feder
 
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Debugging PHP with xDebug inside of Eclipse PDT 2.1Debugging PHP with xDebug inside of Eclipse PDT 2.1
Debugging PHP with xDebug inside of Eclipse PDT 2.1Bastian Feder
 
Bubbles & Trees with jQuery
Bubbles & Trees with jQueryBubbles & Trees with jQuery
Bubbles & Trees with jQueryBastian Feder
 
Ajax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google SuggestAjax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google SuggestBastian Feder
 

Mehr von Bastian Feder (11)

JQuery plugin development fundamentals
JQuery plugin development fundamentalsJQuery plugin development fundamentals
JQuery plugin development fundamentals
 
Why documentation osidays
Why documentation osidaysWhy documentation osidays
Why documentation osidays
 
Solid principles
Solid principlesSolid principles
Solid principles
 
jQuery secrets
jQuery secretsjQuery secrets
jQuery secrets
 
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownparts
 
Introducing TDD to your project
Introducing TDD to your projectIntroducing TDD to your project
Introducing TDD to your project
 
jQuery's Secrets
jQuery's SecretsjQuery's Secrets
jQuery's Secrets
 
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
 
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Debugging PHP with xDebug inside of Eclipse PDT 2.1Debugging PHP with xDebug inside of Eclipse PDT 2.1
Debugging PHP with xDebug inside of Eclipse PDT 2.1
 
Bubbles & Trees with jQuery
Bubbles & Trees with jQueryBubbles & Trees with jQuery
Bubbles & Trees with jQuery
 
Ajax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google SuggestAjax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google Suggest
 

Kürzlich hochgeladen

What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 

Kürzlich hochgeladen (20)

What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 

The Beauty and the Beast

  • 1. The Beauty and the Beast Bastian Feder OSIDays 2010 Liip Inc. 20.09.2010
  • 2. Me, myself and I ● Senior application developer & architect ● Prof. trainer ● PHP since 2001 ● JavaScript since 2002 ● Liip Inc. since 2010
  • 4. Agenda ● What is this phpDocumentor everyone is talking about? ● Doh! Too less space for a complete documentation! ● Nice so far! Are there tools supporting this thing? ● Where to find more information.
  • 5. What is this phpDocumentor? ● Command line tool ● Written in PHP ● Identifies annotations (tags) ● Converters render different formats (HTML, Smarty, DocBook, etc) ● Automated documentation
  • 6. Drawbacks ● Memory consuming set memory_limit up ● Time consuming set max_execution_time
  • 7. phpDocumentor - tags ● A phpDocumentor tag is an annotation telling a parser what to do with the given information. ● Rendering template decides which information will be displayed.
  • 8. DocBlock – example <?php /** * Just a DocBlock example * * this is an example for a phpDocumentor class documentation block * * @package myProject * @subpackage examples * * @revision pre-alpha 1 */ class foo { /** * Just returns a boolean. * * @retrun boolean Just true. */ public function bar() { return true; } }
  • 9. Tag annotation - examples ● @package, @subpackage, @category ● @author, @license, @version ● @param, @return ● @access ● @see, @link, @uses ● @todo ● @example, @tutorial
  • 10. inline{} tags ● Display their information in the text flow /** * inline tags demonstration * * this function works heavily with {@link foo()} to rule the world. If I want * to use the characters "{@link" in a docblock, I just use "{@}link." If * I want the characters "{@*}" I use "{@}*}" */ function bar() { return; }
  • 11. Page DocBlock definition /** * This is an example short description of a phpDocumentor DocBlock. * * This example shall show how a DocBlock shall look like and what information are * to be displayed. * This text and the upper license will be displayed in the rendered documentation as the * so called long description of the DocBlock. * * @copyright 2002-2008 by papaya Software GmbH - All rights reserved. * @link http://www.papaya-cms.com/ * @license GNU General Public Licence (GPL) 2 http://www.gnu.org/copyleft/gpl.html * * You can redistribute and/or modify this script under the terms of the GNU General Public * License (GPL) version 2, provided that the copyright and license notes, including these * lines, remain unmodified. papaya 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. * * @package papayaCMS * @version $Id: index.php 19965 2008-08-11 12:23:29Z feder $ */
  • 12. DocBlock inheritence ● @author, @version, and @copyright are automatically inherited unless explicitly specified in the DocBlock ● @package and @subpackage are inherited unless explicitly specified in the DocBlock ● If there is no short description, the short description will be inherited. ● If there is no long description, the long description will be inherited. ● If there is a long description, and you still want to inherit the parent's description, use inline {@inheritdoc}
  • 13. Tutorials ● Ability to link in external documentation ● DocBook format ● Hooks are the inline{} tags ● Enable rendering the tutorial: – Existing subdir named „tutorials“ – Comandline switch „-d“, „--directory“, „-f“ or „-- filename“ must contain the subdir – Predefined structure: tutorials/package/package.pkg
  • 14. Tutorials – example integration /** * FluentDOM implements a jQuery like replacement for DOMNodeList * * @version $Id: FluentDOM.php 338 2009-09-28 13:21:22Z lapis $ * @license http://www.opensource.org/licenses/mit-license.php The MIT License * @copyright Copyright (c) 2009 Bastian Feder, Thomas Weinert * * @tutorial FluentDOM.pkg * @package FluentDOM */
  • 15. Tutorials - example FluentDOM.pkg <refentry id="{@id}"> <refnamediv> <refname>User Guide for FluentDOM</refname> <refpurpose></refpurpose> </refnamediv> <refsynopsisdiv> <author>Bastian Feder</author> <author>Thomas Weinert</author> </refsynopsisdiv> {@toc} <refsect1 id="{@id intro}"> <title>FluentDOM</title> <para> FluentDOM ist a jQuery like fluent XML interface for the DOMDocument in PHP. </para> <para> The idea was born in a workshop of {@link http://schlitt.info Tobias Schlitt}, about the PHP XML extensions at the IPC Spring, in Berlin. He used this idea to show XPath samples in the session. </para> </refsect1> </refentry>
  • 16. Rendered tutorial example See http://fluentdom.github.com/docs/index.html for the complete version.
  • 17. Quality check ● Error log (errors.html in root of API documentation) ● Todo list (todolist.html in root of API documentation)
  • 18. SVN / CVS identifier ● $Date: $ $Date: 2006-07-22 21:42:37 -0700 (Sat, 22 Jul 2006) $ ● $Revision: $ $Revision: 144 $ ● $Author: $ $Author: feder $ ● $headURL: $ $HeadURL: http://svn.papaya.local/svn/weisseliste/trunk/README $ ● $Id: $ $Id: content_assistant_step.php 19696 2008-08-05 15:52:41Z feder $
  • 19. SVN / CVS identifier (II) ● Location of 'config' – file: – MacOsX/Linux: ~/.subversion/config – WinXp: C:Dokumente und Einstellungen <USER>AnwendungsdatenSubversion config
  • 20. SVN / CVS identifier (III) Add following lines to configuration file: [miscellany] global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store .project .cache .settings enable-auto-props = yes [auto-props] *.js = svn:eol-style=LF;svn:keywords=Id LastChangedDate LastChangedRevision URL *.css = svn:eol-style=LF;svn:keywords=Id LastChangedDate LastChangedRevision URL *.php = svn:eol-style=LF;svn:keywords=Id LastChangedDate LastChangedRevision URL *.html = svn:eol-style=LF;svn:mime-type=text/html;svn:keywords=Id URL *.htm = svn:eol-style=LF;svn:mime-type=text/html;svn:keywords=Id URL *.xsl = svn:eol-style=LF *.xml = svn:eol-style=LF *.xsd = svn:eol-style=LF *.sql = svn:eol-style=LF *.txt = svn:eol-style=LF
  • 21. Eclipse PDT – docu hints If you plan to instantiate a new object in your class, declare the name of the class to be instantitated as type of the class var you will use. /** * Example description for a public class var. * * @var base_plugin */ protected $basePluginObj;
  • 22. Eclipse PDT – docu hints (II) ● Once you declared the complete function DocBlock, Eclipse is able to show you these information in the tooltip of the function call. ● Try to hit F2 when the tooltip appears. This will set the focus to the tooltip and it can be resized to see the complete info.
  • 23. Eclipse PDT – docu hints (III) ● Magic methods ● Magic properties – __clone() – __set() – __empty() – __get() – ... /** * FluentDOM implements a jQuery like replacement for DOMNodeList * * @property string $contentType Ouput type – text/xml or text/html * @property-read DOMDocument $document An instance of the current DOMDocument * @property-read DOMXPath $xpath An Instance of the current DOMXPath object * * @method bool empty() clears the current node list identified by a selector * @method DOMDocument clone() clones the current node list identified by a selector * * @package FluentDOM */
  • 24. Eclipse PDT – docu hints
  • 25. external Tools framework ● Enables Eclipse to run ‚stand-alone‘ applications ● Two broad classes of external tools are available: – Ant build files – Everything else
  • 27. How to integrate (II) ● Location points to the phpDocumentor installation ● Working Directory directory to store temporary data ● Arguments command line parameters to be passed to phpDocumentor '-c' defines the location of a configuration file '${project_loc}' Eclipse variable representing the location of the current selected project.
  • 28. How to integrate (III) ● Display in favorites menu ● Standard Input and Output
  • 30. Slides'n Feedback ● Sildes (http://www.slideshare.net/lapistano) ● Feedback – Personal contact (lapistano@php.net) – Joind'in (http://joind.in/event/view/425 )
  • 31. References ● phpDocumentor website @ pear.php.net (http://pear.php.net/package/PhpDocumentor/docs/1.4.4) ● phpDocumentor Manual (http://manual.phpdoc.org) ● FluentDOM (http://fluentdom.org) ● Eclipse website (http://eclipse-org/pdt) ● SVN keyword substitution (http://svnbook.red-bean.com/en/1.4/svn-book.html#svn.advanced.props.special.keywords)
  • 32. License  This set of slides and the source code included in the download package is licensed under the Creative Commons Attribution- Noncommercial-Share Alike 2.0 Generic License http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en