developer

Developer may refer to: read more at WikiPedia

  • There are numerous GIT workflow floating around like Centralized Workflow, Gitflow, Forking flow and Feature Branch Workflow

    Over the last 10 years, I have followed this really simple workflow, similar to the forking flow.
    • it allow Parallel Development, features branches can be merged to any release branches or ideally Master
    • Collaboration Feature branches also make it easier for two or more developers to collaborate on the same feature

    We consider Master the stable version of the product, this branch should be deployed automatically using continuous delivery

  • Agile testing is a software testing practice that follows the principles of agile software development. Agile testing is built upon the philosophy that testers need to adapt to rapid deployment cycles and changes in testing patterns. Providing and getting feedback early, fast and regularly is one of the testers main task.

    AgileTestingPoster

    From http://bbv.ch/images/bbv/pdf/downloads/poster/bbv12_poster_agile_testing_1.0_web.pdf

    You can order a print version at http://www.bbv.ch/de/posterbestellung.html

    Find more at http://bbv.ch/de/unternehmen/publikationen.html

  • Separate the construction of a complex object from its representation so that the same construction process can create different representations.



    Source Code

    /**
     * The interface Product defines interface to create parts of the
     * Product.
     */
    public interface Builder {
    
        /**
         * Construct part of the complex Product.
         */
        public void buildPart();
    
        /**
         * Construct the Product.
         *
         * @return the constructed product
         */
        public Product getProduct();
    }
    
    /**
     * The ConcreteBuilder is the product of a concrete builder.
     *
     */
    public class ConcreteBuilder implements Product {
    }
    
    
    /**
     * The ConcreteBuilderBuilder creates and assembles parts of
     * the Product.
     *
     */
    public class ConcreteBuilderBuilder implements Builder {
    
        /**
         * Reference to Product being constructed
         */
        private ConcreteBuilder concreteBuilder;
    
        /**
         * Construct part of the complex Product.
         */
        public void buildPart() {
            // put your code here
        }
    
        /**
         * Construct the Product.
         *
         * @return the constructed product
         */
        public Product getProduct() {
            return concreteBuilder;
        }
    }
    
    
    /**
     * The ConcreteBuilderClient initialized the Director with a
     * Concrete Bulder to create the Product and gets result from the Builder.
     *
     */
    public class ConcreteBuilderClient {
    
        /**
         * Use the Builder to create the Product.
         */
        public void createProduct() {
            ConcreteBuilderBuilder builder = new ConcreteBuilderBuilder();
            new Director(builder).construct();
            Product product = builder.getProduct();
        }
    }
    
    
    /**
    * The class Director manages Product creation using Builder.
    */
    public class Director {
    
        /**
         * Reference to Builder currently used
         */
        private Builder builder;
    
        /**
         * Create a new Director instance.
         *
         * @param builder the builder which will create the product
         */
        public Director(Builder builder) {
            this.builder = builder;
        }
    
        /**
         * Construct the Product using the Builder.
         */
        public void construct() {
            builder.buildPart();
        }
    }
    
    
    /**
     * The interface Product defines a complex object that is
     * constructed part-by-part with Builder.
    
     */
    public interface Product {
    }
    
    
    
    
    
    
    
  • CedThumbnails has been updated to version 2.6.0 and contains 4 new features and correct 1 bug for Joomla 2.5. For existing users the update will display in the Extensions Managerunder Updates. If you do not have this currently installed, you can click the link below and install like you are use to via the Extensions Manager.

  • Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.



    Source code

    /**
     * Handles request it is responsible to.
     */
    public class ConcreteHandler extends Handler {
            /**
      * Handle request or delegate it.
      */
            public void handleRequest() {
                    boolean canProcessThisRequest = false;                if (canProcessThisRequest) {
                            // handle request if possible
                    } else {
                            // pass it to the next in chain
                            super.handleRequest();                }
            }
    
    }
    
    /**
     * Defines interface for request handling
     * @role __Handler
     */
    public class Handler {
            private Handler successor;        /** Default request handling */
            public void handleRequest() {
                    if (successor != null) {
                            successor.handleRequest();                }
            }
    
            public Handler getSuccessor() {
                    return this.successor;        }
    
            public void setSuccessor(Handler successor) {
                    this.successor = successor;        }
    
    }
    
    
    
    
    
  • joomla_cms

    I am fully committed to Joomla! 1.5 and will migrate my homepage and all my open source components to the latest Joomla! version as soon as it get final.

    A new Download category Joomla! 1.5 has been created in my download section.

    I am using the following links to ease the migration:


  •   I am  currently in the process of  moving all my open source project (7!) in CVS Head to the latest Joomla API 1.1.X. I've tried to summarize in the following table some conversion rules

    In Joomla 1.0.Xhas to be converted in Joomla 1.1.XWhere
    mosMenuBar::startTable();
    JMenuBar::startTable();PHP code
    defined('_VALID_MOS') or die('Direct Access to this location is not allowed.');defined( '_JEXEC' ) or die( 'Restricted access' );PHP code
    require_once( $mainframe->getPath( 'toolbar_html' ) );require_once( JApplicationHelper::getPath( 'toolbar_html' ) );PHP code
    <?xml version="1.0" encoding="iso-8859-1"?>
    <mosinstall type="component" version="1.0.0">
    ....
    <?xml version="1.0" encoding="iso-8859-1"?>
    <install type="component" version="1.0.0">
    ....
    Installer XML file
    More to come...

    Bad news
    • New code wont work in Joomla 1.0.X or latest
    • New code wont work in Mambo 4.X or latest

    Some links which may help also Help You:

    {mosgoogle}

  • random_number

    Don't forget to click Read More ;-)

    PM_Build_Swing

    dilbert&160;

    exploits_of_a_mom

  • As Git Bisect is not clear a lot of people, here is a nice PDF to look at Enjoy Fighting regressions with git bisect, LinuxCon EU 2013.pdf

    it is about "Linux" combinational explosion... Bug software have the following properties (not desired):

    • has many different "configurations"
    • may fail under one configuration but not another

    N configurations, T tests and C new commits means that a release needs:

    C * N * T tests performed

    where N and T, at least, are growing with the size of the software.

    Git Bisect help find a first bad commit and use a binary search algorithm for efficiency if possible.

  • joomlaloveRAD

    Rapid application development (RAD) is a software development methodology that uses minimal planning in favor of rapid prototyping. Something that was really slowing me a lot and making any builds or changes in my extensions a real pain to maintain was the packaging of code spread in the joomla tree. I did create numerous custom Phing builds to automate and reduce these pains (Phing is heavily derived from Apache ANT) and  2 months ago  Joomla-packager was born!

    My Joomla-packager is a generic Phing build script to build any Joomla 3rd extension, being a set of components, modules, plugins and or libraries, packages in a simple way.

    Audience

    Developers of 3rd party extensions for Joomla

    Convention over configuration…

    • A single script to rule all your need of Joomla packaging: multi modules/ multi plugins/multi components/multi library is supported,
    • If you respect Joomla conventions, this packager will be able to create a build of any of your extensions or set of extensions,
    • just configure one file (like for example in buildCedThumbnails.xml), mainly listing what your extension is made of and run with minimal efforts,
    • Packaging Joomla extensions will always look look the same = repeatability = convention over configuration

    Usage

    1. Download https://raw.github.com/cedricwalter/joomla-packager/master/joomla-packager.xml locally
    2. Download a copy of buildCedThumbnails.xml You only need to rename and touch this file, it is self documented.
    3. Download a copy of pkg_cedthumbnails.xml You only need to update this file if you alter the structure. (later Joomla-packager will create this file on the fly)
    4. Run the main target build of buildCedThumbnails.xml

    How it is working?

    This script implement ALL standard Joomla conventions to perform the packaging, and offer reusable Phing targets to package any number of extensions. Here is what is implemented:

    Modules

    • 1. Code is located in /modules/mod_${xxxxx} and self contained
    • 2. Languages files are optional but if they exist are located at /language/xx-yy/mod_${xxxxx}.ini /language/xx-yy/mod_${xxxxx}.sys.ini
    • 3. Media files (css,js,images) are optional but if they exist are located at /media/mod_${xxxxx}
    • 4. name of zip files as follow:
      • mod_{yourextension1}.zip

    Plugins

    • 1. Code is located in /plugins/${type}/${xxxxx} and self contained
    • 2. Languages files are optional but if they exist are located at /plugins/${type}/${xxxxx}/language/ or anywhere else in directory at step 1.
    • 3. Media files (css,js,images) are optional but if they exist are located at /media/plg_${type}_${xxxxx}
    • 4. name of zip files as follow:
      • plg_${type}_{yourextension}.zip

    Components

    • 1. Code is located in /administrator/components/${xxxxx} and /components/${xxxxx} and is self contained
    • 2. Languages files are optional but if they exist are located at /administrator/language/xx-yy/${xxxxx}.ini and /language/xx-yy/${xxxxx}.ini and
    • 3. Media files (css,js,images) are optional but if they exist are located at /media/${xxxxx}

    Packages

    • 1. one zip file which contains 1 to n other zip file + a manifest file named pkg_{yourextension}.xml
    • 2. manifest file named pkg_{yourextension}.xml has to be written manually for now and place beside your build{yourextension}.xml
    • 4. name of zip files as follow:
      • com_{yourextension}.zip

    You can browse numerous examples (for Joomla 2.5/3.0/3.1 at the project page (GitHub)

    • TCPviewerdsplay TCP connections in realtime and ProcessXPshows all processes and their dependant dll loaded into memory...
    • GIMP www.gimp.org can replace photoshop, open source free, it can replace any graphic editor
    • TCP proxy is a tool part of Soap AXIS, useful to show SOAP request and response or any process using TCP connection.
    • Jedit, the BEST text editor ever written!!!!
    • Beyond Compare for comparing directories, files. Do a lot of things, you will never forget this name!!!!
  • At Google, we want to help developers build better web applications. That's why we’ve created APIs and tools to quickly enhance those applications, integrate with Google products and reach millions of users.

    That’s also why we’re holding Google Developer Day.

    Google Developer Day is a chance for programmers around the world to meet Google’s developer product teams and learn something new – be it an introduction to GData or a deep dive into KML. It’s also an opportunity for us to listen to you and hear about what you’re doing today, what you’d like to do in the future and how we can help make that happen.

    Whether you’re writing an AJAX application with the Google Web Toolkit, integrating Google services through GData or using Google Maps to create geo applications, we hope you’ll leave Google Developer Day with a new set of building blocks to use in your next project.

    Mountain View, California
    São Paulo, Brasil
    London, United Kingdom
    Paris, France
    Madrid, España
    Hamburg, Deutschland
    &1052;&1086;&1089;&1082;&1074;&1072;, &1056;&1086;&1089;&1089;&1080;&1103;
    &26085;&26412; - &26481;&20140;
    Sydney, Australia
    &21271;&20140;,&20013;&22269;



    Elsewhere Google Summer of Code have been announced! Google accepted over 900 student applicants from a pool of nearly 6,200 applications, more info and list of projects here
  • In this series of post I will outline some common techniques to help Joomla extensions development.

    As you know Joomla is shipped with Mootools library which assign $ also to Ajax. Here is 2 tips that will allow you to use jQuery scripts without any modifications (most of the time you will find tips to assign jQuery to something else than $ and rewrite your scripts)

    First it is recommended to include always mootools first to avoid jQuery conflict issues

    JHTML::_('behavior.mootools');
    $document = JFactory::getDocument();
    $document->addScript(JURI::root() . "media/com_cedtag/js/jquery.1.7.2.min.js");

    then to run jQuery in noConflict mode. Note that here I do not assign jQuery to any alias.

    $document->addScriptDeclaration("jQuery.noConflict();");

    Till here, this is what you will find on all Joomla forums, posts over the internet. The last tips is what make the difference!

    Instead of using a different alias for the jQuery object (when using noConflict), you can write your jQuery code by wrapping it all in a closure. This can be done in the document.ready function

    $script = "jQuery(function($) { $();

    });"; $document->addScriptDeclaration($script);

    This way you are not force to rewrite your scripts to use another alias (replacing $ with jquery alias for example in all your scripts). This make inclusion of jQuery really easy!

    Happy Coding!

  • joomla_cms

    jocomment I did install yesterday evening the latest version of !JoomlaComment

    !JoomlaComment is one of the first extensions for Joomla,that let you comment under articles.

    The !JoomlaComment system can be installed on any joomla website within seconds! Make
    your website more interactive!

    Main Features:

    • ajax-based
    • captcha protection
    • akismet support
    • ubb code support
    • threathed/nested comments
    • multilanguage support
    • mail, website input
    • See more features here

    Joomla support templates, depending on which templates you use

    • MTdefault-emotop, these templates MTxxxx use mootols 1.11
    • JQdefaut-emotop, these templates JQxxxx use Jquery
    • ..

    You may behind the scene include another additional AJAX library in Joomla!® frontend, this lead to performance issues:

    If !JoomlaComment use JQuery 1.1.4 and not the AJAX library of Joomla!, aka Mootools 1.11. Another huge JavaScript files that make my server busier!

    Since any static files can be offloaded to another server to gain more speed. For example, any static images, JavaScript or CSS files can be moved to a different server for more speed.

    In order to be able to offload this JavaScript library to Google code, you’ll have to do the following:

    In the template you are using, for example in components/com_comment/joscomment/templates/JQdefault-emotop/index.html

    Search for

    {library}
    <script type="text/javascript" src="components/com_comment/joscomment/jscripts/jquery-1.1.4.pack.js"></script>
    <script>jQuery.noConflict();</script>
    {/library}

    and replace with

    {library}
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <script>jQuery.noConflict();</script>
    {/library}

    Note that I use here the latest JQuery version (1.3.2) and not the default version of !joomlaComment (1.1.4), here is why

    • This version 1.1.4 is not available at jquery">http://code.google.com/apis/ajaxlibs/documentation/jquery :-)
    • I did test the frontend of !JoomlaComment 4.0 with JQuery 1.3.2 and it work great



  • I am searching such a solution since 2 months...
    It is not a graphics card. Rather it is a palm-sized box that sits outside of your system. DualHead2Go takes the existing single monitor display output (i.e. external VGA output) from your system and expands it into dual display outputs, allowing you to run your Windows desktop at up to 2560 x 1024 resolution stretched across two displays. Using DualHead2Go in conjunction with the built-in display of your laptop, you actually benefit from 3 displays at a time.

    read the detailled presentation at Matrox.com



  • Whaaaaaouuuuuuuhhhhh!!!!!!

    Matrox is proud to present TripleHead2Go, a palm-sized box that uniquely allows you to add three 19" monitors with a combined resolution of up to 3840 x 1024 and an incredible 45" of total diagonal to your workstation, gaming system or laptop, even if that system only supports a single display output.
    Read more at the Matrox Site


  • "For more than 50 years software has been a troublesome discipline. Software's problems are numerous and include cancelations, litigation, cost overruns, schedule overruns, high maintenance costs, and low levels of user satisfaction. The problems with software occur more often than not. My company's research indicates that more than half of large software projects will encounter some kind of delay, overrun, or failure to perform when deployed. But software does not have to be as troublesome as it has been. Some complex software projects do achieve their delivery schedules and cost targets, and behave properly when used. Throughout my career in software I've been interested in what distinguishes successful software projects from failures and disasters. It happens that the main factors leading to software success are easily identified when side-by-side comparisons of similar projects are performed, where one set was successful and the other set was troublesome. The successful software projects achieve excellence in software quality control, and they are able to do this because of excellence in software quality measurements. Although it might be thought that excellent software quality control is expensive, it turns out to yield a very positive return on investment. When canceled software projects and disasters are studied by means of "autopsies," they all have similar patterns: Early phases of troubled projects are handled carelessly without adequate requirements analysis or design reviews. After rushing through the early phases and seeming to be ahead of schedule, problems begin to mount during coding and testing. When testing begins in earnest, serious problems are detected so that schedules and cost targets cannot be achieved. Indeed, some software projects have so many serious problems—termed bugs or defects—that they are canceled without completion. By contrast, successful projects are more thorough at the start. The requirements are carefully analyzed and the designs are formally inspected. This takes some time and adds upfront costs, but once coding and testing begin, the value of careful quality control allows the projects to move rapidly to a successful conclusion. Stephen Kan and I both learned the importance of software quality control and good software quality metrics at IBM. Even though Stephen and I worked in different IBM labs during different decades, we have some common viewpoints. We have both been convinced by empirical evidence that without excellent software quality control, large system development is hazardous and likely to fail. We also both know that effective software quality control is built on a foundation of careful measurements using accurate metrics."

    A free metrics plugin for eclipse is also available on sourceforge "Provide metrics calculation and dependency analyzer plugin for the Eclipse platform. Measure various metrics with average and standard deviation and detect cycles in package and type dependencies and graph them." http://sourceforge.net/projects/metrics/
  • More sites using Google maps:

    And If You have a good idea and want to develp our own application  using Google Maps, You may ask How it works...

    Google maps is using Javascript, XML, XSLT, and CSS to create a web application that behaves more like a desktop application. With normal web programming, the user is presented with a form, the user inputs its data, the user submits the form, and finally the entire web page reloads with new content. AJAX, as this type of programming has been coined,  does not require the reloading of the entire interface.  The Javascript is able to make calls back to the server to get the required information and update only those parts of the interface that needs to change.

    You can start by registering for a key HERE, and start reading all blogs describing hacks an tips, for example:

    • Google Maps Mania: An unofficial Google Maps blog tracking the websites, ideas and tools being influenced by Google Maps.

    And for finishing, the most beautiful hacks I've found: Google Maps Transparencies  and extended box zooming function


  • google_logospeedapache_logo

    mod_pagespeed is the latest addition to our family of products, performing on-the-fly optimization in the Apache™ 2 HTTP Server. It provides webmasters and web developers that manage their Apache 2 configuration with technology that applies Page Speed performance best practices automatically. Webmasters can get the benefits of the optimizations without having to manually going back and fixing the performance issues that Page Speed detects.

    This solution is valid if you do not want to carefully optimize your site, and it come for now at huge initial CPU costs till the cache is filled up. The load on my server has proven to be unacceptable (for me) and I was forced to switch it off. But it may work on your server depending on the page size, number of visitors. Authors are working hard and communicating a lot on the official mailing list to reduce that load and improve the code in the coming weeks

    If you trust me, you can download the library module libmod_pagespeed.so for Apache 2.2

    from http://drivers.waltercedric.com/

    Check before installing the MD5 keys of this file

    # md5sum -b mod_pagespeed.so
    187995e3623a222ec5b54c331ee7ffaa *mod_pagespeed.so

    If it matches, drop it into your Apache library folder /usr/lib64/apache2/

    Build Apache module mod_pagespeed yourself

    On my OpenSuSE system, I was forced to install first

    zypper in gcc-c++

    Then read  http://code.google.com/p/modpagespeed/wiki/HowToBuild

    you should get after a successful build

    • ./out/Release/libmod_pagespeed.so
    • ./out/Release/install/common/pagespeed.conf

    Install the module library

    cp ./out/Release/libmod_pagespeed.so  /usr/lib64/apache2/mod_pagespeed.so

    Configuration

    After installing mod_pagespeed, it can be customized and configured by editing the Apache configuration file

    /etc/apache2/conf.d/pagespeed.conf

    so you can run

    # cp ./out/Release/install/common/pagespeed.conf /etc/apache2/conf.d/pagespeed.conf

    Create some directories

    # mkdir /var/mod_pagespeed/
    # mkdir /var/mod_pagespeed/cache/
    # mkdir /var/mod_pagespeed/files

    Has to be writtable by apache

    chown -R wwwrun:www /var/mod_pagespeed/

    and finally restart apache

     apache2ctl restart

    There is a lot of available settings that are all well explained in this page http://code.google.com/speed/page-speed/docs/using_mod.html

    Here is my /etc/apache2/conf.d/pagespeed.conf stripped of all comments as an example:

    LoadModule pagespeed_module /usr/lib64/apache2/mod_pagespeed.so
    
        SetOutputFilter MOD_PAGESPEED_OUTPUT_FILTER
        ModPagespeed on
    
        ModPagespeedDomain www.waltercedric.com
        ModPagespeedUrlPrefix                "http://www.waltercedric.com/mod_pagespeed/"
        ModPagespeedFileCachePath "/var/mod_pagespeed/cache/"
        ModPagespeedGeneratedFilePrefix "/var/mod_pagespeed/files/"
        ModPagespeedRewriteLevel CoreFilters
        ModPagespeedEnableFilters collapse_whitespace
        ModPagespeedEnableFilters extend_cache
        ModPagespeedEnableFilters combine_css
        ModPagespeedEnableFilters rewrite_css
        ModPagespeedEnableFilters rewrite_javascript
        ModPagespeedEnableFilters rewrite_images
        ModPagespeedEnableFilters remove_comments

    # This page lets you view statistics about the mod_pagespeed module. Order allow,deny # You may insert other "Allow from" lines to add hosts you want to # allow to look at generated statistics. Another possibility is # to comment out the "Order" and "Allow" options from the config # file, to allow any client that can reach your server to examine # statistics. This might be appropriate in an experimental setup or # if the Apache server is protected by a reverse proxy that will # filter URLs in some fashion. Allow from localhost SetHandler mod_pagespeed_statistics

    Troubleshooting

    You may be forced to remove mod_deflate

    You can disable mod_pagespeed by adding in the url  ?mod_page_speed=0

    Some mod_pagespeed filters

    Links

  • AgileRequirementEngineeringPoster

    From http://bbv.ch/images/bbv/pdf/downloads/poster/bbv11_poster_agile_re.pdf

    You can order a print version at http://www.bbv.ch/de/posterbestellung.html

    Find more at http://bbv.ch/de/unternehmen/publikationen.html

  • joomlalovexsd

    Full support for Joomla 3.1 has been added to the project “Schema Validation for Joomla Extensions” (GitHub), tested with all 113 manifests of Joomla 3.1.5! (components, modules, plugins and templates)

    Without them, Joomla accept any entry in manifest xml and never complains about

    • Mistyping, like a valid xml but that the Joomla installer do not understand or only partially,
    • Wrong constructs, xml tag child misplaced,
    • Invalid data type, like a path not being a valid path, an expected integer being a text and so on…

    Joomla just silently die during install or install only partially extensions. These days are over and all developers with any decent IDE will be able to

    • Validate while typing,
    • Enjoy auto completion.
    • Have an up to date documentation of all possibilities in Joomla’s manifest.

    What’s new

    see https://github.com/cedricwalter/joomla-xsd/commit/8b315332e8c0fa515da19f15a4c547f446850024

    component / module / plugins

    • add in <menu> support for attribute value img="class:banners">
    • add in <menu> support for attribute value view="anyString"
    • add in <menu> support for attribute value alt="anyString"
    • add to type="cmsVersionType" version 3.1
    • add support for <menu link="option=com_finder">COM_FINDER</menu> (finder.xml)
    • In <extension> attribute valuemethod="" is now optional
    • add new <help key="ANY_STRING" />
    • add in <field> support for attribute value first="anyNumber"
    • add in <field> support for attribute value last="anyNumber"
    • add in <field> support for attribute value step="anyNumber"
    • add in <field> support for attribute value published="" (mod_articles_category.xml)
    • add in <field> support for attribute value format="%Y-%m-%d %H:%M:%S"
    • add in <field> support for attribute value disable="separator" (mod_login.xml)
    • add in <fields> support for attribute value addfieldpath="validPath" (mod_finder.xml)
    • in <field> validate css class names class="btn-group" or class="btn-group btn1 blue" orclass=""
    • Allow empty without fieldset (vote.xml) <fields name="params"> </fields>
    • In <authorEmail> consider N/A as a valid email
    • Attribute &39;label&39; now optional on element &39;field&39;. <field name="spacer3" type="spacer" hr="true" />
    • Support for validate <field> type="url" (sef.xml)
    • in <fieldset> allow Attribute value label="" to appear in element (debug.xml)
    • allow <field> to have type attribute value category (contactcreator.xml)
    • allow <field> to have new attribute extension=com_* (contactcreator.xml)
    • In <media> attribute destination value is now optional
    • In <fieldset> add optionaladdfieldpath="" and validate that it is a valid path
    • In ```<option value="" empty values are now allowed
    • <updateservers> is now available in plugins manifests
    • In <field> type now support type="modal_article" or from enum (using xsd union)

    Plugins only

    • in <file plugin="weblinks">weblinks.php</file>

    Template only

    • In <extension> attribute value method="" is now optionnal
    • In <extension> addattribute value client=""
    • add <languages></languages>

    These files will be hopefully soon merged into Joomla CMS  (GitHub project) and officialy supported by Joomla

  • Joomla! Doc has a great documentation online that explains how to set up your development environment

    This article provides detailed instructions for setting up your workstation for Joomla! development. Note that there are many possible configurations for doing Joomla! development. Any environment that supports Apache, MySql, PHP, and Subversion should work for writing Joomla! code and extensions.

    This document provides step-by-step instructions for setting up and working with the Eclipse IDE. The example used and screen shots are for Windows XP, but the basic steps are the same for Linux.

    The part 1 mainly explains how to install technical components

    The part 2 is even better as it explains how to create patches for Joomla! along with some eclipse tips and tricks.

  • Since I did not find any clear how to on the internet how to run test cases for 3rd party extensions that use Joomla CMS, here is my version of it.

    Prerequisites

    Having PHPUnit properly install, if you use XAMPP you may want to read this post.

     

    How to use PHPUnit in Joomla

    At the root of your Joomla installation directory, make a checkout of https://github.com/joomla/joomla-cms/tree/master/tests/unit

    You’ll need at least the following file

    • ${joomla_root}\tests\unit\bootstrap.php
    • ${joomla_root}\tests\unit\config.php
    • ${joomla_root}\tests\unit\JoomlaDatabaseTestCase.php
    • ${joomla_root}\tests\unit\JoomlaTestCase.php
    • ${joomla_root}\tests\unit\phpunit.xml
    • ${joomla_root}\tests\unit\readme.txt

    config.php is a custom or a copy of your configuration.php

    For your convenience, I provide a zip file (joomla_phpunit_testing.zip), unpack in your Joomla root and you’re done.

    Note when using PHPUnit 3.6 , Joomla should not need to include/require anything PHPUnit related since (at least) PHPUnit 3.6. This create errors otherwise.

    In PHPStorm

    Set Up PHPUnit

    Go to Settings, using CTRL+ALT+S, under PHPUnit, select the option “Use Bootstrap file” and use as value ${joomla_root}\tests\unit\bootstrap.php

    Set Up PHPUnit Skeleton Generator

    Go to Settings, using CTRL+ALT+S, under “Skeleton Generator”

    • Enter for “Path to phpunit-skelgen” the value is  ${xampp_root}\php, for example C:\xampp\php
    • Enter for “use bootstrap file” the value ${joomla_root}\tests\unit\phpunit.xml

    Your first Joomla test case

    Create a test case from any of your Joomla classes, by hitting CTRL+SHIFT+T, this will let you select the method you want to test and generate a runnable albeit incomplete test classes.

    It is only the beginning of testing your Joomla extensions, there is a lot now to learn

    • Mocking objects in Joomla, Stubbing of Joomla classes
    • Invoking protected method using TestReflection::invoke
    • How to create integration tests using the database
    • How to test the user interface using PHPSelenium
    • and more…

    These links may interest you

     

  • Bug Tracking Tool
    Work in progress

    or Why it is not possible to manage any software development without a bug tracking tool

    A bug tracking system is basically a database linked to  a frontend:
    • The frontend can be a FAT client, understand a windows or application running on your pc and that need to be install by each developer/client, or may be
    • Adhering to a light client server model: HTML frontend which submit queries to a server.

    Provide

    Tracability

    When was the bug open, and closed, what is its status now. Who has reported it (login is required and all system support profile (user, tester, manager, developer, administrator) and/or isolation of project). Did It already existed in a previous version (regression in code), etc...

    Responsability

     Easily dispatch responsability or find quickly who was reponsible for solving it, how  much time was needed to close this bug, some system may send email automatically to developer to inform them... etc...

    Effort

    How difficult will it be to solve this issues, (can be a bugnote add by other developer). Most of the time, technical leader decide of the value of this field together with developers.

    Priorities

    How many bugs are still open at a date "t", how do I determine the order in which I will solve them...etc

    Standardisation of records

    By forcing tester/customer to enter some mandatory fields in a graphical forms. It may avoid You to hear some ridiculous statement like: "the application is not printing, working". It force the user talking a language You have decide together, having agreed on a "bug category" list is a very good and common example.

    Customization

    All modern bug tracking tool let You define and customize some part of the system according to your need.

    Addition of information

    A screenshot is better than thousand word, a file create by the application, a memory dump, anything that will help developer to reproduce the bug.

    Statistics/Reporting

    A lot of very powerful queries can be executed. It is always interesting to know, how many improvement were done in the next/past releases, or if a team has use more power to develop new functionnalities (also changes request which interest the customer the most) or loose time tracking some low level bug priority.
    In case of reporting, Bugzilla support the following:
    • Tabular reports - tables of bug counts in 1, 2 or 3 dimensions, as HTML or CSV.
    • Graphical reports - line graphs, bar and pie charts.

    Al of the above will have a positive result on:
    • communication among the team of developers and customers,
    • It will improve the product quality by several magnitude,
    • Developer will be more productive as the will know what to concentrate on or what is worth to do.
    AND Your customers will be happier!!

    Golden rules

    1. A bug that can be reproduce can be analysed/corrected.
    2. Correcting a bug is not always trivial, a correction may introduce new bugs.
    3. The intrinseque quality of a software is always improved with a tracking tool over time

    Some open source software:


    Bugzilla (http://www.bugzilla.org/) is the more famous, use in a lot of open source application (Mozilla, Apache, and even eclipse) version 2.19.2 (MySQL+PHP, Solaris, Linux, Win32, MacOS X, BSD) 370 companies are currently using it. (Nasa, IBM, Mozilla and others)- Wikipedia has a very brief article on it, Features are listed here

    Mantis. (http://mantisbt.sourceforge.net/) A very simple bug tracking tool with limited search functionnality compared to bugzilla, a strong community but not so much stable release as expected.

    Buggit (http://www.matpie.drw.net/PBSystems/products/buggit/Buggit.html) no new release since 2000 and bounded to MS access, aka running only unde windows. Listed Here because I use to play with it in 2001.




     
  • There's a new version of Xdebug released which fixes a major bug where inspecting static properties caused Xdebug to crash in XAMPP 1.8.0.

    Unfortunately, you’ll need to update manually the version of Xdebug shipped with XAMPP to Xdebug 2.2.1 rather than 2.2.0:

    Simply download the correct Xdebug binary (VC9 threadsafe PHP 5.4 VC9 TS (64 bit) (MD5: 81cacc87168c99c7f65ba202dc12c4b2)) and copy it in your XAMPP installation at xampp\php\ext\php_xdebug.dll

    restart Apache and you can continue debugging!