Difference between revisions of "Setting up your workstation for web development"

From Joomla! Documentation

m (added Bearsampp)
 
(53 intermediate revisions by 10 users not shown)
Line 1: Line 1:
{{underconstruction}}
 
 
 
{{RightTOC}}
 
{{RightTOC}}
  
 
== Introduction ==
 
== Introduction ==
This article provides detailed instructions for setting up your workstation as a PHP development environment, not only for Joomla! it also should work fine for PHP development in general.
+
This article provides detailed instructions for setting up your workstation as a PHP development environment, not only for Joomla! but also for PHP development in general.
  
'''Note''' There are many possible configurations for doing PHP development environments. Any environment that supports the basic AMP stack (Apache, MySql, PHP) and Subversion should work fine.
+
'''Note''' There are many possible configurations for PHP development environments. Any environment that supports the basic AMP stack (Apache, MySql, PHP), Subversion and/or Git should be fine.
  
== Choosing a code editor ==
+
== Choosing a Code Editor ==
 +
The PHP language code represented just by plain text that can be edited with simple text editors like:
  
The PHP language code represented just by plain text that can be edited with simple text editors like:
+
* Gedit (opensource code editor for Linux)
* Geany (opensource cross platform text editor)
 
* Gedit (opensource code editor for linux)
 
 
* Notepad++ (opensource code editor for Windows)
 
* Notepad++ (opensource code editor for Windows)
 
* Apple textEditor (Apple's basic text editor)
 
* Apple textEditor (Apple's basic text editor)
 +
* Komodo Edit (Komodo Edit is a fast, smart, free and open-source code editor for Windows, Mac and Linux)
 +
* [[Visual_Studio_Code|Visual Studio Code]]
 +
 +
The best text editors out there today are among:
 +
*Sublime Text
 +
*Atom
 +
*Brackets
  
 
But when you are about to work in more advanced and complex projects and need some coding assistance there is a handful of development tools called IDEs (Integrated Development Environment) these are some of them:
 
But when you are about to work in more advanced and complex projects and need some coding assistance there is a handful of development tools called IDEs (Integrated Development Environment) these are some of them:
* [[wikipedia:Eclipse_(software)|Elcipse IDE]] (opensource cross platform IDE)
+
 
 +
* [[wikipedia:Eclipse_(software)|Eclipse IDE]] (opensource cross platform IDE)
 
* Netbeans IDE (opensource cross platform IDE)
 
* Netbeans IDE (opensource cross platform IDE)
 
* UltraEdit IDE (closed source cross platform IDE)
 
* UltraEdit IDE (closed source cross platform IDE)
 
* Aptana IDE (opensource cross platform IDE)
 
* Aptana IDE (opensource cross platform IDE)
 +
* Shiftedit IDE
 +
* [[wikipedia:Geany |Geany IDE]] (opensource cross platform editor with basic IDE features)
 +
* [https://en.wikipedia.org/wiki/Komodo_Edit Komodo IDE] (cross platform IDE)
 +
 +
New technologies are available as an alternative to more traditional editors or desktop IDE applications, some of them are:
 +
 +
*Web-based IDEs: editors that run on the web
 +
**Wiode
  
To empathize some of the advantages of the use of IDEs over simple text editors we got:
+
*Cloud-based IDEs: editors that run on the cloud
 +
**Kodingen
 +
**Codeita
 +
**ShiftEdit
 +
**jsFiddle
 +
**PHPanywhere
  
*Some IDEs integrate and/or let you integrate more programming languages under the same tool such as PHP, Javascript, CSS, XML, etc...
+
*Browser-based IDEs: editors that run on your browser
*Some IDEs integrate and/or let you integrate assistive functions to develop code such as code completion, re-factoring, templates, advanced search/replace, syntax check, syntax coloring and more
+
**Cloud IDE (Google chrome extension)
*Some IDEs can analyze the project as a whole and build a map of relationships between the classes in use in your project giving you the opportunity to explore the project in a more comfortable and coherent way
+
**Cloud9 (Google Chrome extension)
*Some IDEs can analyse the current file under edition and give you a map of the different variables, functions and classes present on the file as a shortcut to navigate through the content
+
**ShiftEdit (Google Chrome extension)
*Some IDEs integrate and/or let you integrate PHP debugging client under the same tool
+
**PHPanywhere (Google Chrome extension)
*Some IDEs integrate and/or let you integrate several kind of source code revision control clients under the same tool
 
  
Some of the advantages of simple text editors are:
+
Some of the advantages of using IDEs over simple text editors are:
  
*This kind of editor are usually lightweight
+
*Some IDEs support multiple languages such PHP, Javascript, CSS, XML, etc., within the same environment
*Some of these editors are great to do quick editions
+
*Some IDEs integrate assistive coding functions such as code completion, re-factoring, templates, advanced search/replace, syntax check, syntax coloring and more
*Some of these editors provide syntax coloring and basic code completion
+
*Some IDEs can analyze the project as a whole and build a map of relationships between the classes being used in your project, allowing you to explore the project in a more comfortable and coherent way
 +
*Some IDEs can analyze the current file under edition and give you a map of the different variables, functions and classes present on the file as a shortcut to navigate through the content
 +
*Some IDEs integrate and/or let you integrate PHP debugging clients under the same tool
 +
*Some IDEs integrate and/or let you integrate several kinds of source code revision control clients under the same tool
  
All these advanced tools facilitate the development of PHP code, debugging, and the integration of other tools like SVN or GIT clients for source code version control under the same IDE, but for this article we are going to focus on how to configure '''Eclipse IDE''' for our PHP development environment, feel free to add more editors and document them in the following list.
+
Some of the advantages of simple text editors are:
  
* [[How to configure Eclipse IDE for PHP development]]
+
*Usually lightweight
* [[How to configure Netbeans IDE for PHP development]]
+
*Great for making quick edits
* [[How to configure UltraEdit IDE for PHP development]]
+
*Some of these editors provide advanced features such as syntax coloring and basic code completion
  
 +
There are many options available to develop PHP projects. This article focuses on '''Eclipse IDE'''. Feel free to add more alternatives and document them in the following list.
  
== Choosing a web server ==
+
* [[Configuring Eclipse IDE for PHP development]]
 +
* [[Configuring Netbeans IDE for PHP development]]
 +
* [[Configuring UltraEdit IDE for PHP development]]
 +
* [[Configuring Komodo Edit for Joomla Code Completion]]
  
To develop and test our PHP projects we need to execute the code in a web server capable of interpret PHP code and send the output to our browser, is good to know that we have a nice range of opensource tools to deploy a PHP webservers for our development environment such as:
+
== Choosing a Web Server ==
 +
To test and develop PHP projects we need a web server which can interpret PHP code and send the output to our browsers.
  
 +
Open source options include:
 +
*[[wikipedia:LAMP_(software_bundle)|LAMP]] (AMP stack on Linux)
 
*[http://www.apachefriends.org/en/xampp.html XAMPP] (Cross platform AMP stack implementation)
 
*[http://www.apachefriends.org/en/xampp.html XAMPP] (Cross platform AMP stack implementation)
 
*[http://www.wampserver.com/en/ WAMP] (AMP stack for Windows)
 
*[http://www.wampserver.com/en/ WAMP] (AMP stack for Windows)
*[[wikipedia:LAMP_(software_bundle)|LAMP]] (AMP stack on Linux)
+
*[http://bearsampp.com/ Bearsampp] (Full portable dev stack for Windows)
Also there is other commercial closed-source options such as:
+
 
 +
Closed-source options include:
 
*[[wikipedia:Internet_Information_Services | IIS]] (Microsoft webserver, the PHP and MySQL services got to be installed manually)
 
*[[wikipedia:Internet_Information_Services | IIS]] (Microsoft webserver, the PHP and MySQL services got to be installed manually)
 +
* [[http://www.microsoft.com/web/webmatrix/  Microsoft's Web Matrix]] which installs a development platform for working on Windows.
 
*others
 
*others
  
All these options for web services can be used for the development of PHP projects, but for this article we are going to focus on how to configure a '''XAMPP''' server for our PHP development environment, feel free to add more web servers configuration and document them in the following list.
+
All these options can be used for the development of PHP projects, but for this article we are going to focus on '''LAMP server for Linux''' and a '''XAMPP server for Windows''', feel free to add more alternatives and document them in the following list.
 +
 
 +
* [[Configuring a LAMPP server for PHP development]]
 +
* [[S:MyLanguage/XAMPP|Configuring a XAMPP server for PHP development]]
 +
* [[Configuring a WAMP server for PHP development]]
 +
* [[Configuring an IIS server for PHP development]]
 +
* [https://www.youtube.com/watch?v=PtDc__wd_7w Configuring Bearsampp for php development]
 +
 
 +
== Choosing a Debugging Tool ==
 +
Debugging tools are useful for developing a PHP project. You can study how your code behaves step-by-step as it executed, see the real values of variables and objects, set new values on the fly for testing, and create expressions to check the outcome of them without modifying your code.
 +
 
 +
Advanced PHP programmers may debug their code using traditional methods such as [[php:var_dump]] to display and analyze the output of the PHP code.
 +
 
 +
Some options for PHP debugging are:
 +
*[[wikipedia:Xdebug|Xdebug]] (opensource debugging service for PHP).
 +
*Zend Debugger (commercial debugging service for PHP).
 +
 
 +
Some of the advantages of using debugging tools are:
 +
 
 +
*You can stop (freeze) the execution of your PHP code any time by placing a breakpoint.
 +
*You can inspect the current value of variables and objects without dumping the content.
 +
*You can execute the code step-by-step throughout execution to study how your application behaves under certain circumstances.
 +
*You can set or modify the value of variables and objects on the fly and see the results of your changes without modifying the original code at all.
 +
 
 +
For this article we are going to focus on '''Xdebug'''. Feel free to add more alternatives and document them in the following list.
 +
 
 +
* [[Configuring Xdebug for PHP development]]
 +
* [[Configuring Zend Debugger for PHP development]]
 +
 
 +
== Choosing a Version Control System ==
 +
Don't you hate when you are coding and you accidentally delete a big chunk of text and there are no backups to restore those important lines of code from? Don't you hate when you are working with two or more developers on a project and everyone has a different copy of the project and when it comes time to release the program everyone is on a different page? For all these problems and many more there exists a number of version control systems:
 +
 
 +
*[[wikipedia:Git_(software)|GIT]] (Is a distributed revision control and source code management)
 +
*[[wikipedia:Apache_Subversion|SVN]] (Is a software versioning and revision control system)
 +
 
 +
A Version Control System (VCS) is a very important tool in the development of software projects. It helps you to keep track of all the changes you made in a file over time. It helps you to avoid version conflicts when two or more developers have made changes in the same files. It allows you to review a documents history to see what changes have been made, when they were made and who they were made by.
  
* [[How to configure a XAMPP server for PHP development]]
+
Tools like this make collaborative projects with thousands of developers around the world, such as the Linux project, possible. Take some time to learn how to use this important tool.
* [[How to configure a LAMPP server for PHP development]]
 
* [[How to configure a WAMP server for PHP development]]
 
* [[How to configure an IIS server for PHP development]]
 
  
== Choosing a Debugging tool ==
+
For this article we are going to focus on '''GIT'''. Feel free to add more alternatives and document them in the following list.
  
Debugging tools are quite useful when you are developing a PHP project and you want to study how your code behave step by step on each line execution of your code, also these debugging tools let you see the real values of variables and objects and set new values on the fly for testing purposes, you can also create expression to check the outcome without modify your code.
+
* [[Configuring GIT for PHP development]]
 +
* [[Configuring SVN for PHP development]]
  
Old school and hardcore PHP programmers don't fraternize much with these kind of visual tools and they prefer to debug their code the old way using [[php:var_dump]] and other methods to display and analyze the output of the PHP code, is up to you what kind of tools you want to implement in your development workflow.
+
== Choosing a Project Build System ==
 +
To read the full definition of a project build system you can go [[wikipedia:Build_automation|here]] but in short, the project build systems help you to automate tedious and repetitive tasks such as:
  
There is several alternatives for PHP debugging, some of these are:
+
*Compile source code
 +
*Package (create installers or final compressed files of individual libraries)
 +
*Run tests
 +
*Deploy to production systems (such as automatic upgrades and/or  installation)
 +
*Create documentation or release notes
 +
*Move files from one place to another
 +
*Compress folders with several files
 +
*Upload a final build to a server
 +
*Update metadata within files, such as updating the version fields in XML or PHP files
  
*[[wikipedia:Xdebug|Xdebug]] (opensource debugging service for PHP)
+
For example if you're developing a Joomla! extension you could use a project build system to gather all of the information about the modules in the Joomla! folder structure and create a properly structured package with a simple build command. Otherwise the user would need to map these dependencies manually and create and move the files accordingly.
*Zend Debugger (commercial debugging service for PHP)
 
  
To empathize some of the advantages of the use of this kind of debugging tools we got:
+
Take some time to learn the proper use of project build systems and make them part of your regular development workflow.
  
*You can stop (freeze) the execution of your PHP code any time placing a breakpoint
+
Some options for project build systems are:
*You can inspect the current value of variables and objects without dumping the content
+
*[https://www.phing.info/ Phing Project] (Build tool that uses simple XML build files and extensible PHP "task" classes to describe the build process)
*You can execute the code step by step all the way from the beginning of the PHP code to the end of it and study how your application behaves under certain circumstances
+
*[[wikipedia:Apache_Ant|Apache Ant]] (Build tool that uses simple XML build files to describe the build process, it needs JAVA to run)
*You can set or modify the value of variables and object on the fly and see the results of your changes without modify the original code at all
 
  
All these options for PHP debugging can be used for the development of PHP projects, but for this article we are going to focus on how to configure ''Xdebug'' for our PHP development environment, feel free to add more debugging alternatives and document them in the following list.
+
For this article we are going to focus on '''Phing'''. Feel free to add more alternatives and document them in the following list.
  
* [[How to configure Xdebug for PHP development]]
+
* [[Configuring Phing for PHP development]]
* [[How to configure Zend Debugger for PHP development]]
+
* [[Configuring Apache Ant for PHP development]]
  
 +
== Choosing a Project Management System ==
 +
Any decent project isn't complete without a project management system. Project management systems help developers, users and community to plan, organize and administer resources such as time, developers, tasks. More sophisticated and complete project management systems comes with issue tracking, documents & files management, knowledge bases (wiki), forums, blogs, supply chain management (SCM) integration and more. Some project management tools are:
  
== Choosing a software versioning and revision control tool ==
+
*Web-based applications
 +
**[https://www.projectfork.net/ ProjectFork]
 +
**[https://redmine.org/ Redmine]
  
Don't you hate when you are coding and suddenly by accident you just deleted a big chunk of text and there is no backups of that file to restore those important lines of code?, don't you hate when you are working with 2 or more developers in a project and everyone have a different copy of the project then comes the day of merge all those changes in one final project but everything goes wrong or the project does not want to run properly because some one just overwrite your work?, for all this problems and many more exist some nice tools to bring you the solutions you just need, some of these tools are:
+
*Cloud-based applications
 +
**[https://github.com/ GitHub]
 +
**[https://sourceforge.net/ SourceForge]
 +
**[https://bitbucket.org/ BitBucket]
  
*[[wikipedia:Git_(software)|GIT]] (Is a distributed revision control and source code management)
+
*Desktop-based applications
*[[wikipedia:Apache_Subversion|SVN]] (Is a software versioning and revision control system)
+
**[https://sourceforge.net/projects/openproj/ OpenProj - Project Management]
 +
**[https://www.ganttproject.biz/ GanttProject]
 +
**[https://www.microsoft.com/en-us/microsoft-365/project/project-management-software Microsoft Project]
 +
 
 +
Some of these options listed are general project tools for the administrative part of a project like planning, resources, etc., while others contain features like code tracking, bug tracking and issue tracking. Redmine has a lot of features for small project needs and online services like Github give you lots of features for free without the need of setting up a server.
  
 +
For this article we are going to focus on '''ProjectFork'''. Feel free to add more alternatives and document them in the following list.
  
All these options for software versioning and revision control can be used for the development of PHP projects, but for this article we are going to focus on how to configure ''GIT'' for our PHP development environment, feel free to add more software versioning and revision control alternatives and document them in the following list.
+
* [[Configuring ProjectFork to administrate a PHP development project]]
 +
* [[Configuring GitHub to administrate a PHP development project]]
 +
* [[Configuring SourceForge to administrate a PHP development project]]
 +
* [[Configuring Redmine to administrate a PHP development project]]
  
* [[How to configure GIT for PHP development]]
+
== Considerations for Your Future as Developer  ==
* [[How to configure SVN for PHP development]]
+
If you're planning to develop extensions for Joomla! or any other PHP platform this article gives you nice initial vision on how to configure your workstation, and tools you can use to organize yourself and your project. These tools are very important topics to study in detail to level up your professional skills.
  
 +
There is no excuse to not use one of the tools explained in this article, even for small projects. You should always try to be as  professional as you can and you will see that the amount of problems, building, bug tracking and other common and repetitive issues will be easy to manage with your client and coworker. Remember that all these tools exist to save you time and trouble. While it may seem difficult to learn each tool and find a good workflow, just imagine the alternative disasters you are avoiding with this wise investment of time and energy.
  
== Choosing a project build system ==
+
Some additions considerations for your future as developer:
  
 +
*Do '''not''' use [[wikipedia:Sneakernet|Sneakernet]] to handle the documents of your project.
 +
*Consider the possibility of hosting your project in the cloud with Github, SourceForge, Bitbucket and others. These services come with a lot of nice features such as blogs, issue trackers, version control, forums and more.
 +
*Subscribe to security forums or security mailing lists.
 +
*Collaborating with the documentation effort gives you direct and indirect benefits at short and long term during your career as developer.
 +
*Keep an open mind and always try different and new alternatives for tools as much as you can to help yourself gain knowledge and confidence when you need to chose a tool or solve a problem.
 +
*Consider investing some of your time as a novice developer to help others in support forums or support IRC channels. This will give you an invaluable experience to learn how to deal with real people with real problems from different parts of the world. Someday one of of them could be one of your future clients. In other words this is a win-win situation. You win experience, knowledge and future clients.
 +
*Trash talk is a bad habit. Some novice developers start by saying this or that tool 'sucks' or 'stinks' because they don't know how to use them correctly. It is not fair says that a jackhammer 'sucks' because it is difficult to nail a photo portrait to the wall with it. So try to not emit 'destructive' comments if you don't really understand how the tool operates.
  
 +
== Documentation Support and Discussion ==
 +
For suggestions, observations, report a bug in the code or errors in the configurations or procedures described in this document feel free to post a message in the discussion page or post a message in the following forum boards:
  
 +
*Topics related to the documentation: {{jforum|doc}}
 +
*Any other topic: {{jforum}}
  
 +
[[Category:Tutorials]]
 
[[Category:Development]]
 
[[Category:Development]]

Latest revision as of 09:09, 7 July 2023

Introduction[edit]

This article provides detailed instructions for setting up your workstation as a PHP development environment, not only for Joomla! but also for PHP development in general.

Note There are many possible configurations for PHP development environments. Any environment that supports the basic AMP stack (Apache, MySql, PHP), Subversion and/or Git should be fine.

Choosing a Code Editor[edit]

The PHP language code represented just by plain text that can be edited with simple text editors like:

  • Gedit (opensource code editor for Linux)
  • Notepad++ (opensource code editor for Windows)
  • Apple textEditor (Apple's basic text editor)
  • Komodo Edit (Komodo Edit is a fast, smart, free and open-source code editor for Windows, Mac and Linux)
  • Visual Studio Code

The best text editors out there today are among:

  • Sublime Text
  • Atom
  • Brackets

But when you are about to work in more advanced and complex projects and need some coding assistance there is a handful of development tools called IDEs (Integrated Development Environment) these are some of them:

  • Eclipse IDE (opensource cross platform IDE)
  • Netbeans IDE (opensource cross platform IDE)
  • UltraEdit IDE (closed source cross platform IDE)
  • Aptana IDE (opensource cross platform IDE)
  • Shiftedit IDE
  • Geany IDE (opensource cross platform editor with basic IDE features)
  • Komodo IDE (cross platform IDE)

New technologies are available as an alternative to more traditional editors or desktop IDE applications, some of them are:

  • Web-based IDEs: editors that run on the web
    • Wiode
  • Cloud-based IDEs: editors that run on the cloud
    • Kodingen
    • Codeita
    • ShiftEdit
    • jsFiddle
    • PHPanywhere
  • Browser-based IDEs: editors that run on your browser
    • Cloud IDE (Google chrome extension)
    • Cloud9 (Google Chrome extension)
    • ShiftEdit (Google Chrome extension)
    • PHPanywhere (Google Chrome extension)

Some of the advantages of using IDEs over simple text editors are:

  • Some IDEs support multiple languages such PHP, Javascript, CSS, XML, etc., within the same environment
  • Some IDEs integrate assistive coding functions such as code completion, re-factoring, templates, advanced search/replace, syntax check, syntax coloring and more
  • Some IDEs can analyze the project as a whole and build a map of relationships between the classes being used in your project, allowing you to explore the project in a more comfortable and coherent way
  • Some IDEs can analyze the current file under edition and give you a map of the different variables, functions and classes present on the file as a shortcut to navigate through the content
  • Some IDEs integrate and/or let you integrate PHP debugging clients under the same tool
  • Some IDEs integrate and/or let you integrate several kinds of source code revision control clients under the same tool

Some of the advantages of simple text editors are:

  • Usually lightweight
  • Great for making quick edits
  • Some of these editors provide advanced features such as syntax coloring and basic code completion

There are many options available to develop PHP projects. This article focuses on Eclipse IDE. Feel free to add more alternatives and document them in the following list.

Choosing a Web Server[edit]

To test and develop PHP projects we need a web server which can interpret PHP code and send the output to our browsers.

Open source options include:

  • LAMP (AMP stack on Linux)
  • XAMPP (Cross platform AMP stack implementation)
  • WAMP (AMP stack for Windows)
  • Bearsampp (Full portable dev stack for Windows)

Closed-source options include:

  • IIS (Microsoft webserver, the PHP and MySQL services got to be installed manually)
  • [Microsoft's Web Matrix] which installs a development platform for working on Windows.
  • others

All these options can be used for the development of PHP projects, but for this article we are going to focus on LAMP server for Linux and a XAMPP server for Windows, feel free to add more alternatives and document them in the following list.

Choosing a Debugging Tool[edit]

Debugging tools are useful for developing a PHP project. You can study how your code behaves step-by-step as it executed, see the real values of variables and objects, set new values on the fly for testing, and create expressions to check the outcome of them without modifying your code.

Advanced PHP programmers may debug their code using traditional methods such as php:var_dump to display and analyze the output of the PHP code.

Some options for PHP debugging are:

  • Xdebug (opensource debugging service for PHP).
  • Zend Debugger (commercial debugging service for PHP).

Some of the advantages of using debugging tools are:

  • You can stop (freeze) the execution of your PHP code any time by placing a breakpoint.
  • You can inspect the current value of variables and objects without dumping the content.
  • You can execute the code step-by-step throughout execution to study how your application behaves under certain circumstances.
  • You can set or modify the value of variables and objects on the fly and see the results of your changes without modifying the original code at all.

For this article we are going to focus on Xdebug. Feel free to add more alternatives and document them in the following list.

Choosing a Version Control System[edit]

Don't you hate when you are coding and you accidentally delete a big chunk of text and there are no backups to restore those important lines of code from? Don't you hate when you are working with two or more developers on a project and everyone has a different copy of the project and when it comes time to release the program everyone is on a different page? For all these problems and many more there exists a number of version control systems:

  • GIT (Is a distributed revision control and source code management)
  • SVN (Is a software versioning and revision control system)

A Version Control System (VCS) is a very important tool in the development of software projects. It helps you to keep track of all the changes you made in a file over time. It helps you to avoid version conflicts when two or more developers have made changes in the same files. It allows you to review a documents history to see what changes have been made, when they were made and who they were made by.

Tools like this make collaborative projects with thousands of developers around the world, such as the Linux project, possible. Take some time to learn how to use this important tool.

For this article we are going to focus on GIT. Feel free to add more alternatives and document them in the following list.

Choosing a Project Build System[edit]

To read the full definition of a project build system you can go here but in short, the project build systems help you to automate tedious and repetitive tasks such as:

  • Compile source code
  • Package (create installers or final compressed files of individual libraries)
  • Run tests
  • Deploy to production systems (such as automatic upgrades and/or installation)
  • Create documentation or release notes
  • Move files from one place to another
  • Compress folders with several files
  • Upload a final build to a server
  • Update metadata within files, such as updating the version fields in XML or PHP files

For example if you're developing a Joomla! extension you could use a project build system to gather all of the information about the modules in the Joomla! folder structure and create a properly structured package with a simple build command. Otherwise the user would need to map these dependencies manually and create and move the files accordingly.

Take some time to learn the proper use of project build systems and make them part of your regular development workflow.

Some options for project build systems are:

  • Phing Project (Build tool that uses simple XML build files and extensible PHP "task" classes to describe the build process)
  • Apache Ant (Build tool that uses simple XML build files to describe the build process, it needs JAVA to run)

For this article we are going to focus on Phing. Feel free to add more alternatives and document them in the following list.

Choosing a Project Management System[edit]

Any decent project isn't complete without a project management system. Project management systems help developers, users and community to plan, organize and administer resources such as time, developers, tasks. More sophisticated and complete project management systems comes with issue tracking, documents & files management, knowledge bases (wiki), forums, blogs, supply chain management (SCM) integration and more. Some project management tools are:

Some of these options listed are general project tools for the administrative part of a project like planning, resources, etc., while others contain features like code tracking, bug tracking and issue tracking. Redmine has a lot of features for small project needs and online services like Github give you lots of features for free without the need of setting up a server.

For this article we are going to focus on ProjectFork. Feel free to add more alternatives and document them in the following list.

Considerations for Your Future as Developer[edit]

If you're planning to develop extensions for Joomla! or any other PHP platform this article gives you nice initial vision on how to configure your workstation, and tools you can use to organize yourself and your project. These tools are very important topics to study in detail to level up your professional skills.

There is no excuse to not use one of the tools explained in this article, even for small projects. You should always try to be as professional as you can and you will see that the amount of problems, building, bug tracking and other common and repetitive issues will be easy to manage with your client and coworker. Remember that all these tools exist to save you time and trouble. While it may seem difficult to learn each tool and find a good workflow, just imagine the alternative disasters you are avoiding with this wise investment of time and energy.

Some additions considerations for your future as developer:

  • Do not use Sneakernet to handle the documents of your project.
  • Consider the possibility of hosting your project in the cloud with Github, SourceForge, Bitbucket and others. These services come with a lot of nice features such as blogs, issue trackers, version control, forums and more.
  • Subscribe to security forums or security mailing lists.
  • Collaborating with the documentation effort gives you direct and indirect benefits at short and long term during your career as developer.
  • Keep an open mind and always try different and new alternatives for tools as much as you can to help yourself gain knowledge and confidence when you need to chose a tool or solve a problem.
  • Consider investing some of your time as a novice developer to help others in support forums or support IRC channels. This will give you an invaluable experience to learn how to deal with real people with real problems from different parts of the world. Someday one of of them could be one of your future clients. In other words this is a win-win situation. You win experience, knowledge and future clients.
  • Trash talk is a bad habit. Some novice developers start by saying this or that tool 'sucks' or 'stinks' because they don't know how to use them correctly. It is not fair says that a jackhammer 'sucks' because it is difficult to nail a photo portrait to the wall with it. So try to not emit 'destructive' comments if you don't really understand how the tool operates.

Documentation Support and Discussion[edit]

For suggestions, observations, report a bug in the code or errors in the configurations or procedures described in this document feel free to post a message in the discussion page or post a message in the following forum boards: