Developer FAQ

 

Why should I participate in ]project-open[? 

Good question!

You are probably an employee or a manager of a ]project-open[ customer or a ]project-open[ partner if you reading these lines. Only a few "independent" open-source developers are willing to spend their free time fiddling with ERP software...something that we are attempting to change.  

As a professional ]project-open[ user you are probably looking here in order to learn how to run ]project-open[ and how to adapt the system to your needs or the needs of your customers. Participating can provide you with several advantages: 


  • Demonstrate and publicize your knowledge as a partner:
    As a ]project-open[ partner, one of the best ways to demonstrate your knowledge is to participate actively in the "Open Discussions" (see "communication" below).
  • Learn about other companies with similar needs:
    As a ]project.open[ customer, posting in the "Open Discussions" forum will make you visible to other customers. There are about 3,000 companies in the world running their business using ]project-open[, so more then 3,000 employees are looking at these discussion forums, more or less regularly, to learn about best practices. But peers will only contact you if you are visible.
  • As an "independent" open-source developer:
    ]project-open[ is one of the largest open-source web-applications available and a successful open-source project which continues to grow.  Participating in this community will make you familiar with the details of professional software development and provide you with a references for your first job.
  • Improve your personal or "corporate" CV:
    Being an active member in an open-source community will increase your sophistication and your market value. The effect is well know for individual contributors. But even companies can  (sometimes) demonstrate their skills when collaborating in creating sophisticated commercial software.

 

 

What can I learn from developing and using ]project-open[?

The answer depends on your personal interests. ]project-open[ is the world's largest open-source application and a successful software product. Here are a few areas that could be interesting:


  • The mechanics of an open-source software community.
  • Efficient software development in a "Network Organization":
    The ]project-open[ team only consists of hand full of persons maintaining a huge application and a large customer base.  There´s ample room for more contributors.
  • Structuring large software applications:
    ]project-open[ is huge - more then a million lines of code. By working with ]project-open[ you will understand the underlying concepts of managing complexity such as modular design, configurability, data-modeling, object-oriented design and much more.
  • Business software - the interface between business and technology:
    Learn the relationship between technology/automation and commerce and how to supply businesses with useful software products.
  • Product Management:
    How to create a single application that suits very different customer organizations ("customer variability")? This question is related to the hyped concept of "Software Product Lines" and similar software engineering concepts.
  • Entrepreneurial skills:
    How to establish a new software application in a specific market? How does marketing and PR work in open-source projects?
  • Technical skills:
    System administration, database administration, SQL, procedural SQL and SQL optimization.

Please post in "Open Discussions" (see below) if you are interested. We can recommend you a lot of books and/or activities within the ]project-open[ community to learn about these areas.

 

How can I contribute to ]project-open[?

There are many ways to contribute to ]project-open[. However, if you want to contribute successfully it is important to find a balance between your learning needs and the attention you will require from others in order become a contributing member, and the value of your contributions on the other side.  On one hand, we would like for everyone to contribute, and on the other we only have so much time to dedicate to newcomers. You can't expect that senior community members will spend much time with you, unless you have saved them time by learning the basics yourself...

Here are a number of areas ordered by increasing "seniority": 


  • Bug reports:
    Did you find a bug in ]project-open[? Please post the bug in our bug-tracker. Please see the "How to contribute a bug report" guidelines on how to post a useful bug report.
  • Bug fixes:
    You found a bug and then you found a way to fix it? Please see the "How to contribute a bug fix" below for guidelines on how to post your fix.
  • Help with documentation:
    Are you able to write reasonable English and would you be willing to contribute to the Project-Open Wiki ? Then you could contribute to the documentation or get in charge of a particular wiki area. If you are not able to write in English or perfer not to, we also welcome anyone wishing to begin contributing articles in their own language.
  • Write about your experience with ]project-open[, write articles about ]project-open[:
    This option could be particularly interesting for ]project-open[ partners. By writing about your own experiences in implementing or developing ]project-open[ you gain visibility for your company while at the same time contributing to the community.
  • Sharing new knowledge and insights about ]project-open[:
    You learned an important trick or a new concept that hasn't been documented anywhere?  Encountered strange and erratic system behavior?  Please post your story in "Open Discussions".  
  • Reports and Performance Indicators:
    Did you create a new and useful report or a set of indicators to monitor a process? Please post your experience here on this Wiki. It doesn't matter whether your report has been written using the ]po[ reporting engine of using an external reporting engine (MS-Access, Crytal Reports, Jasper Reports, PHP, ...)
  • Did you write a new package? Please see below for guidelines on how to contribute code.

 

How can I actively participate in ]project-open[?

    There are several areas where we are actively looking for help:

  • FAQ Manager - someone willing to go through ]project-open[ forums to look for new material, and to improve and build upon the pre-existing FAQs
  • Localization - please see the languages section. Do you want to participate in the translation into your language?
  • Reports and Indicators - did you develop an interesting report or performance indicator that you would like to share with the community?
  • Bug Reports and Patches - If you find a bug please take the time to report it, and if you think you can fix it, go ahead or try and solve another pre-existing bug.
Contributions on the code such as extending functionality or developing new packages is relatively complex. Please see [coding standards] for details.

Where is a good place to start learning ]project-open[?

Please see our "notes tutorial" for a step-by step introduction to ]project-open[. The tutorial isn't finished yet, but the available content may already give you a good idea. For a full comprehension of ]project-open[ there are several areas to explore:
  • SQL and data modeling - ACID transactions, object-oriented data models, procedural SQL, hierarchical queries, ...
  • TCL programming language - you need to understand TCL in order to modify the GUI (no need to understand TCL for reporting, though)
  • Security and access permissions - groups, privileges, permissions, authentication, ...
  • Packages & Configuration - package manager, parameters, DynFields, DynViews, ...
  • Workflows - Petri-nets, business process modeling, ...
  • OpenACS libraries - templates, form builder, list builder, ...
Also, it is important to understand the functionality of each ]project-open[ package and the "corporate reality" behind the functionality, so you should learn a bit about:
  • Project Management - How to organize people to execute project efficiently?
  • Finance - How to account for projects and services
  • Human Resources - managing the people behind the projects and services

 

An important hint that will help your understanding of ]project-open[:

Read the source code. Don't be afraid of looking inside ]project-open[ packages. In particular the "intranet-notes" package is easy to understand (and designed as a learning experience). As a second lesson, the "intranet-expenses" is an interesting introduction to ]project-open[ on an entire system wide level.  

How does ]project-open[ handle software releases?

The ]project-open[ team releases new versions every 12-18 months.  These main releases (for example: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0, ...) include important new features. A jump in the "major number" (i.e. 3.4 - 4.0) indicates an incompatible upgrade, while changes in the "minor number" (i.e. 3.3 - 3.4) indicates that an automatic upgrade is possible.  From time to time there are "update releases" (3.3.1, 3.3.2, 3.3.3, ...) in order to deal with bugs or to release minor improvements.  

The relatively long release cycle of ]project-open[ is due to the fact that businesses that run on our software need stability and can't be asked to continually expend the effort to upgrade with every new release, and there is a relatively high and time consuming effort in creating installers for every desired platform.

Between releases we continuously add features and publish "update installers" for those customers interested in new features.

You may want to read the roadmap for detailed comments on past and future versions.


How do I get a current copy of the ]project-open[ source code?

Please read about CVS access to the latest source code.

Apart from that: The source code is part of every ]project-open[ server. Please go to the /web/projop/packages/ folder and you can explore the ~200 packages that make up ]project-open[.


How can I get the most up to date version of ]project-open[?

Please read about the roadmap for detailed comments on past and future versions.

Please read about CVS access to the latest source code.

The latest stable versions of ]project-open[ and related components, such as VMware images, RHP installers, or Documentation are available on our Source Forge Download Zone .

 

How do upgrades work?

A ]project-open[ version really consists of two parts:

  • The TCL code in the /packages/ directory and
  • The contents of the PostgreSQL database

In order to keep the two parts together, each package contains a sql/postgresql/upgrade/ folder with upgrade scripts. These SQL scripts add new columns to database tables etc. in order to upgrade the data model to support the latest version.

Upgrades within a "minor release" (i.e. 3.3) are automatic and backwards compatible in most cases (you can downgrade your TCL code to 3.3.2.1, even though you have already executed the upgrades from 3.3.2.1 to 3.3.2.2).

The upgrade process is integrated into the "Home" page (if you are logged in as System Administrator). As an alternative, the SysAdmin can use the /acs-admin/apm/ Package Manager to execute upgrade scripts individually. Finally, you can even execute upgrade scripts manually using "psql -f upgrade-x.x.x.x-y.y.y.y.sql".

Please see the upgrade overview for specific updates.

 

How do ]project-open[ developers communicate and network?

Open Discussions Forum at SourceForge

The main communication channel for both developers and users is the "Open Discussions" forum at [SourceForge]  This is the right place for all technical questions, announcements, etc.  We recommend that active users/developers subscribe to forum updates ("Monitor this Forum").  This way, the forum can act as a mailing list.

Bug-Tracker at SourceForge

Please use the Bug-Tracker in order to submit bug reports or patches.

The ]project-open[ core team looks at the open bugs list before all important releases to make sure that no critical bugs are open. Please consult our guidelines for bug submission [Reporting Bugs] to contribute one. 

OpenACS Forums

The OpenACS community meets at http://www.openacs.org/forums/. These forums are useful for ]project-open[ developers when dealing with non-]project-open[ specific issues sich as learning TCL, data-model and libraries etc.

Technically ]project-open[ is based on OpenACS. ]project-open[ consists of an array of packages that can be installed on top of any existing OpenACS installation extending and transforming the functionality of OpenACS, so the original OpenACS platform is inseperably linked to ]project-open[. 

Mailings

]project-open[ sends out mass mailings to all registered users at [http://www.project-open.org/] a few times a year with updates about the product and important security anouncements.  However, this is basically a one-way communication.

OpenACS Developer Conferences

OpenACS (the uderlying platform that ]project-open[ runs on) usually organizes developer conferences in Europe twice a year.  We recommend all active ]project-open[ developers attend these conferences if at all possible.  Please ask around in the "Open Discussions" forum if other ]project-open[ community members are participating as well.

]project-open[ Developer Conferences

The ]project-open[ team organizes a Developer Conference once a year in Barcelona, Spain. For details please see [http://www.project-open.com/en/services/project-open-devcon.html]. The conference is split into a tutorial part (two days) and a practial session (two days) where participants can develop software with help from an experienced tutor.


How can I become an expert ]project-open[ developer?

There is a short PowerPoint presentation on the difference between good developers and [excellent developers].

The single most important factor is probably the capability to learn from code that other people have written. So start today, print out the source code of "/packages/acs-kernel/sql/postgresql/*.sql and consult the documentation at http://www.openacs.org/doc/ for reference.

 

How do I submit a bug report?

Please consult our guidelines on bug submission [Reporting Bugs]. 

 

How do I contribute a patch?

Please consult our guidelines on patch submissions [Contributing Patches].


How do I contribute a translation?

Please consult our localization page for information on becoming a ]project-open[ partner and a step by step tutorial on best practices for localization.  

 

How can I contribute to this Wiki?

Please consult the Wiki Contributions & Standards page.

 

What are the guidelines for code to be accepted into the "product"?

  • Your patch should solve a problem that many users have.
  • Your patch should be in line with the general ]po[ configuration system.

 

How to contribute new functionality, reports etc?

... even if we don't accept your code into the "product" you can get your own Wiki page to present your extensions and link to your download page.

How do I fix "column xxx does not exist" errors?

In many cases one or more update scripts has not been executed correctly. Please search for the script and execute it again. 

Example: 

Database operation "select" failed
(exception ERROR, "ERROR:  column p.menu_name does not exist
LINE 5:    p.menu_name AS menu_name
           ^
")

Search in packages folder:

find . -type f -name 'upgr*.sql' -exec grep -il 'menu_name' {} \;
returns:
./intranet-core/sql/postgresql/upgrade/upgrade-3.3.0.0.0-3.4.0.0.0.sql

upgrade-3.3.0.0.0-3.4.0.0.0.sql:

...

create or replace function inline_0 ()
returns integer as '
DECLARE
        v_count                 integer;
BEGIN
        select count(*) into v_count
        from user_tab_columns
        where   lower(table_name) = ''im_component_plugins''
                and lower(column_name) = ''menu_name'';
        IF v_count = 0 THEN
                ALTER TABLE im_component_plugins ADD menu_name varchar(50) default null;
        END IF;

        select count(*) into v_count
        from user_tab_columns
        where   lower(table_name) = ''im_component_plugins''
                and lower(column_name) = ''menu_sort_order'';
        IF v_count = 0 THEN
                ALTER TABLE im_component_plugins ADD menu_sort_order integer not null default 0;
        END IF;

        return 0;
end;' language 'plpgsql';
select inline_0();
drop function inline_0();



...


So sourcing this sql usually fixes the error:
su - projop
psql -f /web/projop/packages/intranet-core/sql/postgresql/upgrade/upgrade-3.3.0.0.0-3.4.0.0.0.sql



  Contact Us
  Project Open Business Solutions S.L.

Calle Aprestadora 19, 12o-2a

08902 Hospitalet de Llobregat (Barcelona)

Spain

 Tel Europe: +34 609 953 751
 Tel US: +1 415 200 2465
 Mail: info@project-open.com