<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description></description><title>Agavi</title><generator>Tumblr (3.0; @agavi)</generator><link>http://blog.agavi.org/</link><item><title>Agavi 1.0.2 released!</title><description>&lt;p&gt;The Agavi team is happy to announce that Agavi 1.0.2 is now available for download at &lt;a href="http://www.agavi.org/"&gt;&lt;a href="http://www.agavi.org"&gt;www.agavi.org&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://trac.agavi.org/browser/tags/1.0.2/CHANGELOG"&gt;CHANGELOG&lt;/a&gt; for this release counts 8 additions, 22 changes and at least 39 fixes over Agavi 1.0.1; the most important ones are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support for HTML 5 forms in AgaviFormPopulationFilter.&lt;/li&gt;
&lt;li&gt;Support for Doctrine 1.2.&lt;/li&gt;
&lt;li&gt;Support for Propel 1.4.&lt;/li&gt;
&lt;li&gt;Support for Phing 2.4.0.&lt;/li&gt;
&lt;li&gt;Support for PHPTAL 1.2.&lt;/li&gt;
&lt;li&gt;Support for PHP 5.3 Namespaces&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Several validation-related fixes and changes have been made, and a ton of bugfixes were backported from the ICU project in the internationalization subsystem.&lt;/p&gt;

&lt;p&gt;The bundled PHPUnit, timezonedb and Schematron versions have also been updated to their latest releases.&lt;/p&gt;

&lt;p&gt;As always, the &lt;a href="http://trac.agavi.org/browser/tags/1.0.2/RELEASE_NOTES"&gt;RELEASE_NOTES&lt;/a&gt; have the full story.&lt;/p&gt;</description><link>http://blog.agavi.org/post/356745670</link><guid>http://blog.agavi.org/post/356745670</guid><pubDate>Wed, 27 Jan 2010 22:36:43 +0000</pubDate></item><item><title>Agavi 1.0.2 RC4 released!</title><description>&lt;p&gt;Agavi 1.0.2 RC4 is now available for download at &lt;a href="http://www.agavi.org/"&gt;&lt;a href="http://www.agavi.org"&gt;www.agavi.org&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This release adds support for Doctrine 1.2 and implements HTML 5 forms in AgaviFormPopulationFilter.&lt;/p&gt;

&lt;p&gt;A couple of bugs have also been fixed; the most important one results in whitespace-only configuration parameter values being cast to null now instead of an empty string.&lt;/p&gt;

&lt;p&gt;The timezone database has also been updated to their latest versions.&lt;/p&gt;

&lt;p&gt;As always, the &lt;a href="http://trac.agavi.org/browser/tags/1.0.2RC4/CHANGELOG"&gt;CHANGELOG&lt;/a&gt; has the full list of changes in this release.&lt;/p&gt;

&lt;p&gt;Please test this thoroughly; a final release is scheduled to follow next week.&lt;/p&gt;</description><link>http://blog.agavi.org/post/342494615</link><guid>http://blog.agavi.org/post/342494615</guid><pubDate>Tue, 19 Jan 2010 10:41:49 +0000</pubDate></item><item><title>Server Migration Wednesday/Thursday</title><description>&lt;p&gt;We’re about to move &lt;a href="http://www.agavi.org/"&gt;agavi.org&lt;/a&gt; and a ton of related stuff to a new server. This will affect the website, Trac, SVN, PEAR Channels, Mailing Lists and so forth.&lt;/p&gt;

&lt;p&gt;The DNS TTL for agavi.org is 24 hours and unfortunately, we can’t change that, so it’ll take quite a bit for the updated nameserver records to propagate. Because of this, we’re switching all services on the old servers to a read-only mode until the migration is completely finished. The mailing lists &lt;em&gt;should&lt;/em&gt; migrate relatively instantly (and seamlessly), but you never know.&lt;/p&gt;

&lt;p&gt;If you’re still experiencing any kind of trouble after Thursday, please let us know so we can investigate.&lt;/p&gt;

&lt;p&gt;Thank you for your patience and have very happy holidays!&lt;/p&gt;</description><link>http://blog.agavi.org/post/296946571</link><guid>http://blog.agavi.org/post/296946571</guid><pubDate>Wed, 23 Dec 2009 16:13:52 +0000</pubDate></item><item><title>Save Letters, Use Short Validator Names!</title><description>&lt;p&gt;Something’s been bugging me lately. Be it customer projects or code people post on the channel, I often find code that spells out long validator names, over and over again:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;ae:configurations
    xmlns="http://agavi.org/agavi/config/parts/validators/1.0"
    xmlns:ae="http://agavi.org/agavi/config/global/envelope/1.0"
    parent="%core.module_dir%/Account/config/validators.xml"
&gt;
    &lt;ae:configuration&gt;

        &lt;validators&gt;
            &lt;validator class="FooBarValidatorWithVeryLongClassname"&gt;
                &lt;arguments&gt;
                    &lt;argument&gt;foo&lt;/argument&gt;
                &lt;/arguments&gt;
            &lt;/validator&gt;

            &lt;validator class="FooBarValidatorWithVeryLongClassname"&gt;
                &lt;arguments&gt;
                    &lt;argument&gt;bar&lt;/argument&gt;
                &lt;/arguments&gt;
            &lt;/validator&gt;

            &lt;validator class="string"&gt;
                &lt;arguments&gt;
                    &lt;argument&gt;baz&lt;/argument&gt;
                &lt;/arguments&gt;
            &lt;/validator&gt;

        &lt;/validators&gt;

    &lt;/ae:configuration&gt;
&lt;/ae:configurations&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Granted, this is one of the less documented features in Agavi, but does nobody ever wonder whether there’s a better way? There’s obviously a way to create shortcuts or the validator named string couldn’t be resolved - the full classname is AgaviStringValidator.&lt;/p&gt;

&lt;p&gt;Actually, it’s quite simple. At any point in a validation file you can define shortnames and use like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;ae:configurations xmlns="http://agavi.org/agavi/config/parts/validators/1.0" 
xmlns:ae="http://agavi.org/agavi/config/global/envelope/1.0"&gt;

    &lt;ae:configuration&gt;
        &lt;validator_definitions&gt;

            &lt;validator_definition name="foo" class="FooBarValidatorWithVeryLongClassname" /&gt;

        &lt;/validator_definitions&gt;

        &lt;validators&gt;
            &lt;validator class="foo"&gt;
                &lt;arguments&gt;
                    &lt;argument&gt;foo&lt;/argument&gt;
                &lt;/arguments&gt;
            &lt;/validator&gt;

            &lt;validator class="foo"&gt;
                &lt;arguments&gt;
                    &lt;argument&gt;bar&lt;/argument&gt;
                &lt;/arguments&gt;
            &lt;/validator&gt;

            &lt;validator class="string"&gt;
                &lt;arguments&gt;
                    &lt;argument&gt;baz&lt;/argument&gt;
                &lt;/arguments&gt;
            &lt;/validator&gt;

        &lt;/validators&gt;
    &lt;/ae:configuration&gt;
&lt;/ae:configurations&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Validatordefinitions can include default parameters and multiple definitions can reference the same class:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;ae:configurations xmlns="http://agavi.org/agavi/config/parts/validators/1.0" 
xmlns:ae="http://agavi.org/agavi/config/global/envelope/1.0"&gt;

    &lt;ae:configuration&gt;
        &lt;validator_definitions&gt;

            &lt;validator_definition name="foo" class="FooBarValidatorWithVeryLongClassname" /&gt;


            &lt;validator_definition name="foobar" class="FooBarValidatorWithVeryLongClassname"&gt;
                &lt;ae:parameters&gt;
                    &lt;ae:parameter name="bar"&gt;baz&lt;/ae:parameter&gt;
                &lt;ae:parameters&gt;
            &lt;/validator_definition&gt;

        &lt;/validator_definitions&gt;

    &lt;/ae:configuration&gt;
&lt;/ae:configurations&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The default parameters can be overwritten by the actual validator definition referencing that shortname. This is how all the shortnames we provide are implemented - the curious among you can have a peek in the config/defaults/validators.xml file.&lt;/p&gt;

&lt;p&gt;Projects created with Agavi &gt; 1.0.0 will have a cascade of validator files that are loaded: The actual validaton file for the action which references a validator config in the module’s config directory which in turn references a validator config file in the app’s config directory which in turn references the agavi default file. Older projects do not have this structure but I do recommend to create at least a global config file to shorten often used names.&lt;/p&gt;</description><link>http://blog.agavi.org/post/284778196</link><guid>http://blog.agavi.org/post/284778196</guid><pubDate>Tue, 15 Dec 2009 15:51:28 +0000</pubDate></item><item><title>Agavi 1.0.2 RC3 released!</title><description>&lt;p&gt;Agavi 1.0.2 RC3 is now available for download at &lt;a href="http://www.agavi.org/"&gt;&lt;a href="http://www.agavi.org"&gt;www.agavi.org&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This release adds support for Propel 1.4 and introduces a new way to configure connection setting overrides for Propel; see the &lt;a href="https://trac.agavi.org/browser/tags/1.0.2RC3/RELEASE_NOTES"&gt;RELEASE_NOTES&lt;/a&gt; for details.&lt;/p&gt;

&lt;p&gt;A couple of bugs have also been fixed, most notably an issue where the first element of a multi-dimensional array would be lost when exported from a validator.&lt;/p&gt;

&lt;p&gt;PHPUnit and the timezone database have been updated to their latest versions.&lt;/p&gt;

&lt;p&gt;As always, the &lt;a href="https://trac.agavi.org/browser/tags/1.0.2RC3/CHANGELOG"&gt;CHANGELOG&lt;/a&gt; has the full list of changes in this release.&lt;/p&gt;

&lt;p&gt;Unless there are any nasty surprises, a final release will follow next week.&lt;/p&gt;</description><link>http://blog.agavi.org/post/277325864</link><guid>http://blog.agavi.org/post/277325864</guid><pubDate>Thu, 10 Dec 2009 08:45:01 +0000</pubDate></item><item><title>Agavi 1.0.2 RC2 released!</title><description>&lt;p&gt;Hello everybody,&lt;/p&gt;

&lt;p&gt;Agavi 1.0.2 RC2 is now available for download at &lt;a href="http://www.agavi.org/"&gt;&lt;a href="http://www.agavi.org"&gt;www.agavi.org&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A couple of fixes have been made since RC1, and PHPUnit and the timezone database have been updated to their latest versions.&lt;/p&gt;

&lt;p&gt;We’re currently planning a final release next week, after another new version of the timezone database has been released.&lt;/p&gt;

&lt;p&gt;Enjoy your weekend,&lt;/p&gt;

&lt;p&gt;David&lt;/p&gt;</description><link>http://blog.agavi.org/post/235059472</link><guid>http://blog.agavi.org/post/235059472</guid><pubDate>Fri, 06 Nov 2009 16:19:45 +0000</pubDate></item><item><title>Fifth Agavi Article on IBM developerWorks</title><description>&lt;p&gt;The fifth and final article in the &lt;a href="http://blog.agavi.org/post/141488227"&gt;series on Agavi over at IBM developerWorks&lt;/a&gt; has just been published.&lt;/p&gt;

&lt;p&gt;This last part talks about handling of file uploads, storing data in sessions and writing custom validator classes.  Go &lt;a href="http://www.ibm.com/developerworks/xml/library/x-agavipt5/"&gt;read it&lt;/a&gt;, rate it, blog about it and spread the word!&lt;/p&gt;</description><link>http://blog.agavi.org/post/189159167</link><guid>http://blog.agavi.org/post/189159167</guid><pubDate>Wed, 16 Sep 2009 07:26:07 +0100</pubDate></item><item><title>Agavi 1.0.2 RC1 released!</title><description>&lt;p&gt;Agavi 1.0.2 RC1 is now available for download at &lt;a href="http://www.agavi.org/"&gt;&lt;a href="http://www.agavi.org"&gt;www.agavi.org&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This maintenance release fixes a number of issues over Agavi 1.0.1 and brings a couple of minor enhancements.&lt;/p&gt;

&lt;p&gt;The following fixes are worth mentioning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AgaviArraylengthValidator didn’t work with files.&lt;/li&gt;
&lt;li&gt;AgaviValidationManager::clear() didn’t clear validation errors.&lt;/li&gt;
&lt;li&gt;Multiple settings blocks and settings prefixes were not allowed in module configs.&lt;/li&gt;
&lt;li&gt;AgaviNumberValidator does not mutate invalid input anymore.&lt;/li&gt;
&lt;li&gt;Several ICU bugfixes have been ported.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Important Changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Optional strict comparison of elements in AgaviInarrayValidator now possible.&lt;/li&gt;
&lt;li&gt;Validator shortcut “arraylength” now defaults to minimum of one element.&lt;/li&gt;
&lt;li&gt;Routing callback parameters are now set before initialize method is called.&lt;/li&gt;
&lt;li&gt;Lots of ICU bugfix and change backports to the date and translation system. As a result, custom time zones now have identifiers like “GMT+0200”.&lt;/li&gt;
&lt;li&gt;Namespaced class identifiers can now be used in all configuration files.&lt;/li&gt;
&lt;li&gt;AgaviValidator::getArgument() now accepts an argument identifier.&lt;/li&gt;
&lt;li&gt;Support for PHPTAL 1.2.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bundle updates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The timezone database has been updated to version 2009m.&lt;/li&gt;
&lt;li&gt;PHPUnit has been updated to version 3.4.0RC3.&lt;/li&gt;
&lt;li&gt;ISO Schematron has been updated to version 2009-05-18.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please refer to &lt;a href="http://trac.agavi.org/browser/tags/1.0.2RC1/CHANGELOG"&gt;CHANGELOG&lt;/a&gt; for a full list of changes.&lt;/p&gt;</description><link>http://blog.agavi.org/post/187094099</link><guid>http://blog.agavi.org/post/187094099</guid><pubDate>Sun, 13 Sep 2009 19:57:00 +0100</pubDate></item><item><title>Fourth Agavi Article on IBM developerWorks</title><description>&lt;p&gt;The fourth article in the &lt;a href="http://blog.agavi.org/post/141488227"&gt;series on Agavi over at IBM developerWorks&lt;/a&gt; has just been published.&lt;/p&gt;

&lt;p&gt;The new part details Agavi’s Output Types and how to quickly implement alternative response formats.  Go &lt;a href="http://www.ibm.com/developerworks/xml/library/x-agavipt4/"&gt;read it&lt;/a&gt;, rate it, blog about it and spread the word!&lt;/p&gt;</description><link>http://blog.agavi.org/post/177856217</link><guid>http://blog.agavi.org/post/177856217</guid><pubDate>Wed, 02 Sep 2009 11:24:21 +0100</pubDate></item><item><title>Get me a standard agavi project, the fast way</title><description>&lt;p&gt;More often than not I want to create a new agavi project the “standard” way, that is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change the projects name&lt;/li&gt;
&lt;li&gt;Change the projects prefix&lt;/li&gt;
&lt;li&gt;Use the defaults for all other options&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Calling agavi project-wizard makes me answer all questions, one by one. Sure, pressing enter at every prompt works, but I value my time too much to press enter at every prompt. I’d rather go write a blog post about how not to press enter at every prompt.&lt;/p&gt;

&lt;h2&gt;Enter “yes”&lt;/h2&gt;

&lt;p&gt;“yes” is a small commandline utility that answers “yes” or any given string to any prompt given to it:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;yes '' | agavi project-wizard
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;will create a project with all default values. Now the only thing that needs fixing is the project name and the project prefix - we can do that on the commandline[1]:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;yes '' | agavi -D project.name "My little test project" -D project.prefix "MyLTP" project-wizard
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is not faster in any way than running through the wizard, but I can do other things during that time.&lt;/p&gt;

&lt;p&gt;[1] Please note this bug that prevents passing parameters with spaces to the build system: &lt;a href="http://trac.agavi.org/ticket/1137"&gt;http://trac.agavi.org/ticket/1137&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.agavi.org/post/166523473</link><guid>http://blog.agavi.org/post/166523473</guid><pubDate>Wed, 19 Aug 2009 15:33:31 +0100</pubDate></item><item><title>Third Agavi Article on IBM developerWorks</title><description>&lt;p&gt;The third article in the &lt;a href="http://www.ibm.com/developerworks/library/x-agavipt3/"&gt;series on Agavi over at IBM developerWorks&lt;/a&gt; has just been published.&lt;/p&gt;

&lt;p&gt;This part focuses on creating an administration interface and on securing it. Go read it, rate it, blog about it and once again spread the word!&lt;/p&gt;</description><link>http://blog.agavi.org/post/161362607</link><guid>http://blog.agavi.org/post/161362607</guid><pubDate>Wed, 12 Aug 2009 17:33:18 +0100</pubDate></item><item><title>Finally, nightly documentation builds</title><description>&lt;p&gt;Finally a nightly pdf build of the agavi guide is available. It’s based on trunk and can be downloaded from &lt;a href="http://www.agavi.org/documentation-nightly-pdf.tar.gz"&gt;&lt;a href="http://www.agavi.org/documentation-nightly-pdf.tar.gz"&gt;http://www.agavi.org/documentation-nightly-pdf.tar.gz&lt;/a&gt;&lt;/a&gt;. The tarball contains the pdf version of the guide and all stage tarballs.&lt;/p&gt;

&lt;p&gt;The current build scheme is very simple and the file is replaced every night. The location may change if and when we decide to keep older versions of the guide around. Until then: Enjoy.&lt;/p&gt;</description><link>http://blog.agavi.org/post/161358861</link><guid>http://blog.agavi.org/post/161358861</guid><pubDate>Wed, 12 Aug 2009 17:26:00 +0100</pubDate></item><item><title>Using your own build templates from second zero</title><description>&lt;p&gt;Some tasks are nice to have around in each and every project, such as the JSLint task I &lt;a href="http://blog.agavi.org/post/155525959/extending-the-build-system-integrating-jsllint"&gt;wrote about earlier today&lt;/a&gt;. However, we still don’t want that in each and every project - where’s the point in having a js-lint in a project that does not use any javascript at all like a pure service oriented project without any html output? So we don’t want that task in the core agavi build file but still in our standard project.
However, using &lt;code&gt;agavi project-wizard&lt;/code&gt; copies the standard agavi buildfile, so we have to manually copy our changes over and over again. Tedious work. We might also have a customized set of templates to use with the latest &lt;a href="http://blog.agavi.org/post/145953668/news-from-the-edge-improved-build-system"&gt;output type generation&lt;/a&gt; feature and we’d like to use that from the start so that all views generated in the project wizard benefit from that as well. But hmm, &lt;code&gt;agavi project-wizard&lt;/code&gt; uses the standard templates. So let’s go change that.&lt;/p&gt;

&lt;h2&gt;A custom template set&lt;/h2&gt;

&lt;p&gt;We start off by copying the standard template set - there’s a task for it:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Zodiacal-Light:Sites fgilcher$ mkdir agavi-build-templates
Zodiacal-Light:Sites fgilcher$ cd agavi-build-templates/
Zodiacal-Light:agavi-build-templates fgilcher$ agavi system-template-copy-all 
Agavi &gt; system-template-copy-all:

Output directory [/Users/fgilcher/Sites/agavi-build-templates]: 
     [copy] Copying 55 files to /Users/fgilcher/Sites/agavi-build-templates

Zodiacal-Light:agavi-build-templates fgilcher$ 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now we modify the build.xml.tmpl to contain our JSL-Task:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;project name="%%PROJECT_NAME%%" basedir="." default="status"&gt;

    &lt;!--
      Define project-specific or custom build targets.
      --&gt;

    &lt;target name="lint-javascripts" description="check all javascripts for validity"&gt;
        &lt;property name="javascript.lint.showWarnings" value="true" /&gt;
        &lt;jsllint showWarnings="${javascript.lint.showWarnings}" haltOnFailure="true"&gt;
            &lt;fileset dir="${project.directory}/pub/"&gt;
                &lt;include name="**/*.js" /&gt;
            &lt;/fileset&gt;
        &lt;/jsllint&gt;
    &lt;/target&gt;

&lt;/project&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We can also change or add any other template we might like at this point. From here on it’s a matter of passing the template directory to use to the agavi script:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Zodiacal-Light:Sites fgilcher$ agavi -D templates.directory /Users/fgilcher/Sites/agavi-build-templates project-wizard
...
Zodiacal-Light:Sites fgilcher$ 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Done. This project will use the modified set of build templates from now on.&lt;/p&gt;</description><link>http://blog.agavi.org/post/155569516</link><guid>http://blog.agavi.org/post/155569516</guid><pubDate>Tue, 04 Aug 2009 11:46:51 +0100</pubDate></item><item><title>Extending the build system - integrating JSLLint</title><description>&lt;p&gt;Javascript errors are annoying and notoriously hard to track down due to limited IDE support and misleading error messages in browsers, but often it’s only a missing comma or a bracket in the wrong place. A linter helps by checking that your javascript is a least structurally sound. It’s the first check I run on any javascript that does not work, so having it right at my fingertips is important. I’ll show how to integrate that into any agavi project.&lt;/p&gt;

&lt;p&gt;There’s a number of JS-Linters out there, I use &lt;a href="http://www.javascriptlint.com/,"&gt;http://www.javascriptlint.com/,&lt;/a&gt; primarily because there’s an existing phing task for it (1). As the agavi build system is based on phing integrating that task is a breeze. Each agavi project has a build.xml in the root directory that can be used to define project-specific targets. By default it’s empty and looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;project name="Sample" basedir="." default="status"&gt;

    &lt;!--
      Define project-specific or custom build targets.
      --&gt;

&lt;/project&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Adding a JSL-Task is a matter of seconds:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;project name="Sample" basedir="." default="status"&gt;

    &lt;!--
      Define project-specific or custom build targets.
      --&gt;

    &lt;target name="lint-javascripts" description="check all javascripts for validity"&gt;
        &lt;property name="javascript.lint.showWarnings" value="true" /&gt;
        &lt;jsllint showWarnings="${javascript.lint.showWarnings}" haltOnFailure="true"&gt;
            &lt;fileset dir="${project.directory}/pub/"&gt;
                &lt;include name="**/*.js" /&gt;
            &lt;/fileset&gt;
        &lt;/jsllint&gt;
    &lt;/target&gt;

&lt;/project&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And now it’s just a call to&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Zodiacal-Light:~ fgilcher$ agavi lint-javascripts
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That’s it. It’s trivial to extend the task-definition to pass some options to the linter - I’ll leave that to you.&lt;/p&gt;

&lt;p&gt;(1) There’s a minor bug in the JSL-Lint Task that’s fixed on trunk. See &lt;a href="http://phing.info/trac/ticket/349"&gt;http://phing.info/trac/ticket/349&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.agavi.org/post/155525959</link><guid>http://blog.agavi.org/post/155525959</guid><pubDate>Tue, 04 Aug 2009 09:45:54 +0100</pubDate></item><item><title>New SSL Certificates on agavi.org</title><description>&lt;p&gt;&lt;a href="https://svn.agavi.org/"&gt;&lt;a href="https://svn.agavi.org/"&gt;https://svn.agavi.org/&lt;/a&gt;&lt;/a&gt; and &lt;a href="https://trac.agavi.org/"&gt;&lt;a href="https://trac.agavi.org/"&gt;https://trac.agavi.org/&lt;/a&gt;&lt;/a&gt; now use SSL Certificates signed by &lt;a href="http://www.cacert.org/"&gt;CACert&lt;/a&gt;. CACert’s root certificate is not installed by default on most operating systems, browsers and so forth, which means you might get trust warnings.&lt;/p&gt;

&lt;p&gt;You can either trust the individual certificates, or, for more convenience, you can download their root certificate from their website and import it into your system/browser/whatever; after you’ve done this, everything should work without warnings. Make sure you compare fingerprints and certificate details when doing this.&lt;/p&gt;

&lt;p&gt;You will also need to trust the certificate separately for command line SVN, which is &lt;a href="http://www.geekforgod.com/2006/12/01/making-svn-trust-a-new-root-ca-certificate/"&gt;explained here&lt;/a&gt;. Of course, you can alternatively just trust the svn.agavi.org certificate itself when prompted.&lt;/p&gt;

&lt;p&gt;Note to Mac OS users: after importing the root certificate into Keychain, you might still get warnings at least in Safari. If that’s the case, change the policy for “SSL” to “Always Trust” under “Trust”.&lt;/p&gt;</description><link>http://blog.agavi.org/post/152187791</link><guid>http://blog.agavi.org/post/152187791</guid><pubDate>Thu, 30 Jul 2009 11:13:00 +0100</pubDate></item><item><title>Icinga praises Agavi</title><description>&lt;p&gt;The &lt;a href="http://www.icinga.org/"&gt;Icinga&lt;/a&gt; team posted an “&lt;a href="http://www.icinga.org/2009/07/28/ode-to-agavi/"&gt;Ode to Agavi&lt;/a&gt;” yesterday. All I can say is “Thanks, I feel flattered.” and I’m speaking on behalf of all team members here. This is exactly why we do this and we’ll do our very best to code up your high expectations.&lt;/p&gt;

&lt;p&gt;For those who have never heard the name: &lt;a href="http://www.icinga.org/"&gt;Icinga&lt;/a&gt; is a fork of the popular Nagios monitoring application.&lt;/p&gt;</description><link>http://blog.agavi.org/post/151541734</link><guid>http://blog.agavi.org/post/151541734</guid><pubDate>Wed, 29 Jul 2009 13:30:57 +0100</pubDate></item><item><title>Second Agavi Article on IBM developerWorks</title><description>&lt;p&gt;The second article in the &lt;a href="http://blog.agavi.org/post/141488227"&gt;series on Agavi over at IBM developerWorks&lt;/a&gt; has just been published.&lt;/p&gt;

&lt;p&gt;It focuses on handling of forms and the integration with Doctrine.  Go &lt;a href="http://www.ibm.com/developerworks/library/x-agavipt2/"&gt;read it&lt;/a&gt;, rate it, blog about it and spread the word!&lt;/p&gt;</description><link>http://blog.agavi.org/post/150785382</link><guid>http://blog.agavi.org/post/150785382</guid><pubDate>Tue, 28 Jul 2009 12:18:28 +0100</pubDate></item><item><title>Agavi 0.11.8 released!</title><description>&lt;p&gt;Agavi 0.11.8 is now available for download at &lt;a href="http://www.agavi.org/"&gt;&lt;a href="http://www.agavi.org"&gt;www.agavi.org&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This maintenance release fixes three bugs over Agavi 0.11.7:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;AgaviArraylengthValidator&lt;/code&gt; didn’t work with files&lt;/li&gt;
&lt;li&gt;Arrays that failed validation were not purged from request data&lt;/li&gt;
&lt;li&gt;Memory leak in &lt;code&gt;AgaviTranslationManager::getLocaleIdentifier()&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It also contains minor optimizations in &lt;code&gt;AgaviInarrayValidator&lt;/code&gt; and &lt;code&gt;AgaviArraylengthValidator&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The bundled timezone database was also upgraded to version 2009k.&lt;/p&gt;

&lt;p&gt;As always, the &lt;a href="http://trac.agavi.org/browser/tags/0.11.8/CHANGELOG"&gt;CHANGELOG&lt;/a&gt; has a complete list of changes in this release.&lt;/p&gt;

&lt;p&gt;This release marks the end of maintenance for Agavi 0.11.x, &lt;a href="http://blog.agavi.org/post/101376981"&gt;as previously announced&lt;/a&gt;.&lt;/p&gt;</description><link>http://blog.agavi.org/post/148945525</link><guid>http://blog.agavi.org/post/148945525</guid><pubDate>Sat, 25 Jul 2009 17:19:43 +0100</pubDate></item><item><title>News from The Edge - Improved Build System</title><description>&lt;p&gt;Since some weeks ago, the agavi build system features a set of new nifty features. The build system has always been a great help to me as a developer saving me the tedious, boring work of writing the action, view and model stubs. And now, the build system gets even better:&lt;/p&gt;

&lt;p&gt;The agavi build system now supports&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generation of &lt;strong&gt;execute&lt;em&gt;RequestMethod&lt;/em&gt;()&lt;/strong&gt; methods for action. That saves another hundred keystrokes when generating an action.&lt;/li&gt;
&lt;li&gt;Generation of simple actions. Shaves off even more.&lt;/li&gt;
&lt;li&gt;Generation of &lt;strong&gt;execute&lt;em&gt;OutputType&lt;/em&gt;()&lt;/strong&gt; methods for views.&lt;/li&gt;
&lt;li&gt;Generation of properties and the respective getters and setters for models.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let’s have a lookt at a short example: Before the change, creation of a view went like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&gt; agavi view-create
&gt; Module name: Default
&gt; Action name: Index
&gt; View name: Success
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Done. But the view would only support the default &lt;strong&gt;executeHtml()&lt;/strong&gt; method to handle the html output type. It would always contain this method, even if I only wanted to handle text output. Now this changes&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&gt; agavi view-create
&gt; Module name: Default
&gt; Action name: Index
&gt; View name: Success
&gt; Space-separated list of output types that should be handled. [html]: text
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Done. So now I have one single prompt more, but the view is created with exactly the output type(s) that I want it to have. In this case it only handles text but I could list any number of output types here.&lt;/p&gt;

&lt;p&gt;The generated code to handle the various output types can be controlled by supplying a suitable template. The default template generates the standard code, using a setup method that is named like the output type:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;public function executeText(AgaviRequestDataHolder $rd)
{
    $this-&gt;setupText($rd);

    $this-&gt;setAttribute('_title', 'Index');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If I want that changed for all text output types, I just create a suitable template that changes the code the way I want. All other output types will still use the default template.&lt;/p&gt;

&lt;p&gt;This feature not only saves the developer from writing all that boilerplate code but has other benefits as well. We can now go and integrate the testing system and the build system even further. Now that we generate the methods for you, we have all the information to generate the relevant testcases as well, reminding you that the best way to keep your code bug-free is to automate the testing.&lt;/p&gt;

&lt;p&gt;If you’d like to check this out, have a look at &lt;a href="http://trac.agavi.org/changeset/4155"&gt;changeset 4155&lt;/a&gt; or see &lt;a href="http://trac.agavi.org/ticket/1106"&gt;the relevant ticket&lt;/a&gt; for further information.&lt;/p&gt;</description><link>http://blog.agavi.org/post/145953668</link><guid>http://blog.agavi.org/post/145953668</guid><pubDate>Tue, 21 Jul 2009 09:58:53 +0100</pubDate></item><item><title>Agavi Article Series on IBM developerWorks</title><description>&lt;p&gt;Our dear user Vikram Vaswani has written a series of articles on Agavi for publication on &lt;a href="http://www.ibm.com/developerworks/"&gt;IBM developerWorks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://www.ibm.com/developerworks/xml/library/x-agavipt1/"&gt;first article in this series&lt;/a&gt; has now been published. Please check it out, share it, blog it, tweet it, and most importantly, rate it and leave feedback in comments.&lt;/p&gt;

&lt;p&gt;We’ll keep you in the loop about further releases.&lt;/p&gt;</description><link>http://blog.agavi.org/post/141488227</link><guid>http://blog.agavi.org/post/141488227</guid><pubDate>Tue, 14 Jul 2009 15:54:44 +0100</pubDate></item></channel></rss>
