Home
Coding Standards
& Conventions
CafeSip Projects
|
Contributor FAQ
You must read this page if you
would like to contribute to a CafeSip project. This page is drafted in
question-answer format. You can see the list of all questions on the
navigation bar to the right.
Topics
- What
is CafeSip?
- How
is CafeSip
distributed?
- How
do I get support?
- What
kind
of contributors is
CafeSip looking for?
- What
kind of skills do I need
in
order to contribute CafeSip?
- What
kind of mind-set do I
need
to have in order to contribute?
- How
do I
get started as a
contributor?
- I
have a
full-time job. What
are
the legal issues that I may have to deal with?
- What
kind
of computer and
software is needed for CafeSip projects?
- What
kind of development
environment and tools are required for CafeSip projects?
- What
kind of development
process
must be followed?
What
is CafeSip?
CafeSip is an organization that
supports the development of open-source SIP application developed using
the Java technology. It offers an
open-source suite of SIP applications from its web site
(http://www.cafesip.org).
Session Initiation Protocol
(SIP) is a popular messaging protocol for establishing and
controlling voice and multi-media sessions between computers. Using
SIP phones and SIP servers, users can make telephone calls over the
Internet – often referred to as Voice Over IP (VoIP). SIP is not
limited to voice calls only. It can be used to establish a variety of
multi-media sessions like video, chat, etc.
CafeSip.org hosts a number of projects aimed at building SIP
applications and tools. CafeSip will host other SIP projects as
well in the future. The projects are in the areas of:
-
SIP platform (framework for
building SIP applications).
-
SIP development and testing
tools.
-
SIP server applications.
-
SIP client applications.
We are open to
other suggestions.
CafeSip is
completely open-source and is distributed as per the terms and
conditions laid out by the Apache Open Source License. Cafesip.org is
non-commercial organization that maintains the CafeSip code and the
cafesip.org web site. It is composed of a group of voluntary software
developers who contribute to the projects. You can be a contributor
too (please read below for more information).
Top
How is CafeSip distributed?
The source code
and the binaries for CafeSip projects are distributed on-line. You
can get hold of them from cafesip.org and sourceforge.net. The software
is distributed as
per the terms and conditions laid out by Apache license. The license
basically says that you can use the software freely in a commercial
or a non-commercial environment. You can freely re-distribute the
software. You can create open-source or closed-source extensions and
distribute them without any restrictions. However, we do not provide
any warranty for the product.
So, it is possible
for you to download the CafeSip software, add some value to it and
offer your “own” product. The value can be in the
form of (1) add new features, (2) install the package in a computer and
sell a turn-key solution, (3) provide paid support.
There are quite a few possibilities. You may be able to explore these
possibilities better if you know the software well, particularly, if
you are a contributor. The bottom line is that you can do anything you
want with the software.
Top
How do I get support?
You can join
the CafeSip mailing lists and discussion forums. You
will also have access to the bug database and can write a problem
report or request a new feature through this tool.
Top
What kind of
contributors is
CafeSip looking for?
There are two types of
contributors:
-
Casual contributors: Individuals or
organizations who find our web site, download the software and try it
out, discover
cool features and figure out new features/applications that can be
added to enhance the product. The contributor contacts the team lead
(emails on the web page) and the lead creates a new branch in the
CafeSip code repository where the contributor can submit his/her code.
The contributor checks out the code, develops and tests
the software and commit the software to the code repository. The team
lead decides whether we would
like to accept the code or not. Once the team lead decides to accept
the code, he/she merges the code into our regular development branch
and create a new release (along with other features that are being
worked on at the same time).
-
Regular contributors: We
make a determination on what features/enhancements we would like to add
to the CafeSip suite of products. We have a set of dedicated people
whom we will
approach and based on their availability, allocate the work to them.
Regular contributors have full access to the repository and normally
submits the code in the main development branch.
Casual contributors may become
regular
contributors over time. In order for this to happen, the casual
contributors need to demonstrate consistent high quality of work and
gain the confidence of the regular contributors.
Top
What kind of
skills do I need
in
order to contribute CafeSip?
-
Software developers: software
developers with extensive experience in: (a) network and system
programming using threads, sockets, etc., (b) developing J2EE services
and applications using J2EE components like EJB, JMX, XML, SOAP, etc.,
(c) developing automated tests using xUnit, developing web-based user
interface using the Google Web Toolkit (GWT), JSP and Servlets,
(d) developing media
applications using audio and video, (e) developing software in
open-source projects like Tomcat, Jboss, Apache Jakarta projects, Ant,
etc. Of course the developers must know Java extremely well including
standard Java conventions and patterns. Other languages like C++ may
also be used. Developers who have experience in UNIX and Windows shell
scripting are also required.
-
Protocol experts with good
working knowledge of VOIP protocols like SIP, SDP, RTP, etc.
-
Business analysts: people who
can identify VOIP applications that are in demand or have a market for.
-
Language translators: people
who can independently translate user interface and documentation into
various languages. The default language is English but we would like to
support French, Spanish, German, Chinese and Japanese languages at the
minimum.
-
Documentation personnel:
people who can write English Howtos & User Guides, create &
manage web sites, etc.
-
Customers and testers: users
who want to be guinea pigs for new and early releases and provide
feedback.
What kind of
mind-set do I
need
to have in order to contribute?
-
First, ask yourself if you are
really interested. You will have to work during weekends and nights.
From our earlier experience we know that if you want to get involved
just
because you want to gain some experience or help finding a new job or a
career, you will soon lose interest. We are really looking for people
who have fun learning new technologies and creating innovative software
solutions.
-
If you think this may
ultimately make you rich, please think again. There is a possibility
that the software may go somewhere and you may gain monetarily from it,
but it is not likely to happen. CafeSip will not be engaged in any
commercial activities. If you want to make money from it, you will have
to do it on your own. In order to make money, you can use or extend the
software because it is free (so can anyone else) and because you may
have the knowledge of the software internals (which others may not).
The only thing that you are assured of gaining from your contribution
is good experience. It is almost certain to boost your software
knowledge and understanding.
-
You have to completely
quality-conscious. Free software does not mean sloppy code. From our
experience, most free open-source software have better quality than
commercial offerings. Remember, you code will have your name and the
whole world will
be able to review it. You must take the time to understand the coding
practices and you must know all the tools thoroughly before you can
start contributing. You must follow the coding standards and
conventions laid out by us and have the patience to write automated
tests for your code. If you decide to contribute a piece of software,
we may not add it to our code base, if the quality is poor. That will
be a waste of time on your part.
-
When you submit your code to
CafeSip, you are basically “open-sourcing” your code. Even though, we
may not accept your code into the code base, we may incorporate parts
of it at any time. You cannot come back later and say that the code is
proprietary and it belongs to you. You
cannot have your code back.
How do I get started
as a
contributor?
-
First send us an email with
your ideas. We will tell you if we know someone is working on the
same/similar idea. You can then collaborate with this person/group.
This step is not required but if we get excited about what your are
doing, we may be able to support you better.
-
If the work requires
significant amount of your time, inform your family and friends that
you will be busy for some time to come to avoid any conflict.
-
Please make sure that you have
the extensive knowledge of the programming language and your working
environment (J2EE, for example). If you do not have it, you need to
acquire it first through hands-on self-training. We may be able to
provide you some directions.
-
Make sure that you have read
and understood the coding standards and conventions.
-
If you have not already done
so, download the source distribution from the code repository and all
the documentation.
-
Download all the required
tools like compilers, IDE, etc. Find out how to set them up using the
information provided with the source distribution and the CafeSip web
site.
I have a full-time
job. What
are
the legal issues that I may have to deal with?
If you work for a commercial
organization that builds SIP products and applications, they may have
a problem with you contributing to CafeSip. You need to make sure
that you are doing nothing illegal.
-
First, read your employment
contract and make sure that you are not in violation. Some companies
have a clause like “whatever intellectual property you create (even
outside the business hours) belongs to us”. If you have a contract like
that, you may want to ask your employers in writing if they have any
problem with it and act accordingly.
-
It is a good idea to inform
your employer anyway. Although a few old-style managers may get
completely freaked out and prevent you from working on the project,
most likely, they will be quite supportive given that you are not
spending time on CafeSip during normal business hours.
-
DO NOT COPY ANY SOFTWARE FROM
A COMMERCIAL PRODUCT. In fact, you should not have the CafeSip
extension that you are developing in your work computer without the
permission of your employer.
-
DO NOT USE AN IDEA THAT IS
PATENTED. If you employer has patented a procedure, formula or a
way of
doing something or have some trade secrets, do not incorporate it in
CafeSip even if you are creating your own implementation.
-
You may copy software from
another open-source project. However, you may want to study the terms
and conditions (license). If the license prevents us from
re-distributing the CafeSip source freely, we will not use it. Some
open-source licenses have such restrictions. If in doubt (because of
all the legal language), contact the organization and clarify. Please
inform us that you are using parts of another open-source product in
your software so that we can look into the license and acknowledge the
contribution.
-
You may need libraries and
other resources that are not open-source (Java libraries , for example)
and you have to include them with the CafeSip distribution. Please
ensure that the library in binary form is freely re-distributable. If
in doubt (because of all the legal language), contact the organization
and clarify. Please inform us that you are using the library in your
software so that we can look into the license and acknowledge the
contribution.
-
Do not research or work on
CafeSip during normal business hours without the permission of your
employer. For CafeSip development, you may need to print web pages,
documents, etc. Do not use your company printers and copiers for this
purpose. Do not use any other company resources (computers, hard-disk
space, telephone, email, etc.) for CafeSip projects.
-
If you think your company can
use CafeSip or parts of it, you are free to use it in compliance with
the CafeSip license. However, you must inform your employer, that you
are using CafeSip and the license terms and conditions.
What kind of computer
and
software is needed for CafeSip projects?
-
You will need a standard
desktop computer for the development. The computer must have a 2GHz CPU
or
higher, 1GB RAM (2-4GB foe J2EE projects) or higher and 500MB free disk
space.
-
Your computer must
run either Linux or Windows although Mac and other computer may also
work out but we have not tried the software on MAC, Solaris, etc. For
some projects, you may need a specific
operating system although we try to keep the software independent of
the operating system.
-
You will need the
Java compiler from Sun and Ant from Apache. Some projects may need
other tools to be installed as well.
-
Some projects may require a
J2EE server. We use Jboss.
-
Some projects may need a MySQL
or other open-source database.
-
We use the Eclipse IDE with a
number of additional plugins. You can also use Netbeans if you like.
-
All our documentations are in
HTML format.
We use the Mozilla Composer for creating web pages. We use Dia and GIMP
for creating diagrams.
What kind of
development
environment and tools are required for CafeSip projects?
Each project will have its own
specific
requirements. A developer creating a new project keep the following
in mind:
-
Every project has a build
script that will generate code (if necessary), compile the sources and
create binary distributions (if necessary). We should be
able to run the build from a command-line shell. We use Apache Ant
build. Please make sure that your project build does not use
tools that require a commercial tool, a GUI-based tool and anything
else out of the ordinary. If there is any special processing required
during the build process, consider creating Ant tasks for that purpose.
The bottom line is that we should be able to build the project using a
free Java compiler and build tool like Ant. For example, a plugin for
the Eclipse IDE may give you some nice tools for creating packages for
deployment but you do not want to use them because it will require the
build process to run Eclipse.
-
All build tools and libraries
must be freely available and it should not cost anything to download.
For all Java projects, we use the Java compiler from Sun and Ant from
Apache. We would not like it to be different for a particular project
unless absolutely necessary. This does not mean that you cannot use
nice tools for the development environment but the build should not
depend on it.
-
Very often you need a special
set of development tools and libraries that is not needed during the
run-time. Make sure that these components are freely available and
freely distributable. If these tools consist of a few files, include
them in the project code tree.
-
If you are using a GUI
builder, please make sure that the tool is freely available. Do not use
Jbuilder, WSAD or other commercial tools. You may want to consider
the GUI builder from Netbeans or Eclipse (preferred).
-
Make every attempt to ensure
that the project can be built using Windows and the Linux environment.
Rarely, this may not be possible because, for example, the project
deliverable may only run on Linux.
-
All libraries required by the
project must be included in the project code tree even if it means
duplication of some libraries among multiple projects. One should be
able to download just the project he/she needs instead of having to
download the entire CafeSip code base.
-
Make sure that the directory
structure for your project follows the conventions laid out by the
CafeSip. For example, all the source packages must be under the “src”
directory, all shell scripts under the “bin” directory, etc.
-
Please include the license
files that explains the license terms and conditions for the CafeSip
project as well as any third party tools and libraries included with
your project.
-
Please include a README text
file that explains how to build and run the project under the root
directory of your project. It should also include the version number
-
Optionally, include a
DEVELOPER-README text file that explains how to setup the development
environment. This document should include instructions on how to setup
the development environment including the IDE project setup.
Alternatively, you can add this information to the CafeSip web site at
appropriate locations.
-
Use tools like Javadoc, EMF
and SchemaSpy for documenting the design. That way, you will be
able to generate the design document anytime. However, if you need to
create
additional documentation and diagrams using a UML tool, use a free UML
tool like Dia or ArgoUML.
-
For some reason, if you decide
to include non-HTML document in your project, use OpenOffice. It will
enable you to publish the document in Microsoft Office and PDF formats.
Do not use Microsoft Office or Front Page because
many of us do
not want to buy it.
What kind of
development
process
must be followed?
Since CafeSip is developed in an
open-source collaborative environment, we have not adopted a
conventional water-fall style development process. Instead, our
regular contributors use some of the principles laid out by various
Agile Methodologies. In particular, the following
principles are followed:
-
Test-driven development: All
projects must include automated tests that tests all aspects of the
system automatically.
-
Coding standards: Make sure
the code follows the coding standard for the CafeSip project. Make sure
that you follow all the conventions, directory structures, standard
design patterns and specific design patterns used by the CafeSip
project. A developer experienced in another CafeSip project must be
completely at ease with your project.
-
Simple design: There is no
need to build a huge cathedral when all we need for now is a simple
chapel. Keep the design simple. Do not spend a lot of time in designing
the system keeping the “future” needs in mind. This does not mean that
we
do a hack job or do not design at all – we just don't over-engineer.
-
Refactoring: If we need to
make changes to the code, go straight ahead. If you see some code that
has got complicated over a period of time, go ahead and re-factor the
code. If you see some bad code, feel free to clean it up. Make sure
that all the automated tests pass after the re-factoring. Do not add
comments to the code unless it is absolutely necessary (for example,
add comments if you want to convey “some catches” to other developers).
The only exception is when you want to document the design using
Javadocs. Make sure that when you re-factor, the Javadoc is updated.
- Team communication: Have regular team meetings in the form
of face-to-face meeting, telephone calls, chats and emails.
-
Pair programming: Program and
design in pairs whenever possible.If it is not possible, please make
sure that you have discussed the design with your team lead or other
members.
|