Skip to end of metadata
Go to start of metadata

What this page is

This page is for developers new to OOI CI, and attempts to collect information to get you started and productive. It's a wiki, so please feel free to edit it as you learn.

Get Connected

Confluence/LDAP and dev mailing list

If you have not received a login as part of the sign-up process, send email to to get a login. This process will give you access to the Confluence wiki, Jira, FishEye and the other Atlassian tools via an LDAP server. It will also subscribe you to the (all CI development related announcements) and (CI developer topics) mailing lists and other important mailing lists for your subsystem or team.


We run an XMPP/Jabber chat server (an ejabberd daemon), connected to our LDAP server. You should be able to join as soon as you have a Confluence login. Instructions for clients are at Jabber client setup.

Mac users should use Messages or Adium. On Windows, Pidgin is a very usable client.

GoogleDoc shared documents

We use GoogleDoc for a lot of collaboration between the teams, such as to work on iteration task lists and to draw designs. You need a Google/Gmail login. Send the login to Tim A/Michael and ask to be added to the OOI-CI shared folder. This gives you instantaneous access to many shared documents and any new document will automatically be shared with you. Don't explicitly manage GoogleDoc sharing settings unless you really have to.

Google Calendar

We use the Google Calendar to schedule shared meeting times. Once you have a Google ID, ask Paul to be added to the calendars for the relevant teams (CI developers, your subsystem etc).

You can share your personal calendar with others if you so wish to make it easier for them to see your schedule.

Get Help

For all support issues for underlying tools and computer infrastructure, send email to This will result in a Jira support issue being generated, using your subject as the summary (please make it issue-specific) and the body of your text as the issue. The helpdesk account should be heavily monitored by the Operations support team. Contact the System Development Manager or Operations Manager if you do not see a timely response.

For issues with the actual CI developed software, send email to the mailing list, or to the Integration Engineer ( if you don't want to bother the entire development team with it.

Set up Git and version control

Download and install git (there is a MacOS DMG installer).

  1. Create a free GitHub ID, if you don't already have one, at
  2. Generate an SSH key on your laptop using

    Do not enter a filename, just hit enter when it asks for a file to save the key.  GitHub expects the default file name.

  3. Edit the ~/.gitconfig and change your full name (such as John Doe - please use full name and capitalization) and email address.  This file may not exist; create it if it doesn't.
  4. Upload your SSH public key (located at ~/.ssh/ following instructions on GitHub, if you have not done so.
  5. You are set to fork any repo at OOI-CI source code repositories on GitHub. You can submit a pull request when you have a code delivery.
  6. In general, the fork and pull request model is preferred so your code can be properly reviewed by your subsystem lead before merged. Your subsystem lead can also grant you direct push access if needs be.
    A useful utility is the GIT tab completion script for bash. Install via:

and add the following to your .profile or .bash_profile:

Recommended GIT reading:

Prepare Directory Structure

YOUR_DEV_DIR will be ~/Documents on Mac, anything you like on Linux.

Execute the following commands in the terminal:

The directory structure should look like as follows. Modify/refine as you please.

To create all the directories at once, execute the following command from YOUR_DEV_DIR:

Install Code Dependencies

When building or developing software for the OOI Integrated Observatory Network, a number of basic dependencies need to be installed. Follow the steps on this page on Installing dependencies. In general, if you are using a Mac, install git first and then use homebrew for all your package management. You can even reinstall git using homebrew after you have done the initial setup.

Specific installation instructions:

See Python and Virtualenv Mac Troubleshooting in case of installation troubles

Set up Python development environment

Install virtualenv and virtualenvwrapper

If you haven't already as part of the above dependencies install, get virtualenv and virtualenvwrapper. See this article (this link no longer exists) to learn more on these tools.

Mac users:

On Ubuntu and Linux:

Configure virtualenvwrapper

Add the following to your shell profile; the profile you need to edit will vary depending on your OS:

  • Mac: ~/.profile
  • Ubuntu: ~/.bashrc
  • Linux (general): ~/.bash_profile

Add the following lines:

Changes will be automatically applied at the start of your next shell session, but for now, update your current shell with the changes:

Here are some useful Bash Profile settings dot_profile

Set up code editor

Pycharm 2 is the preferred IDE for the Mac environment. See Working with Pycharm and Pycharm Quick Reference Guide

All of the following editors are currently in use, and are all acceptable:

  • Pycharm, which has VIM/Emacs modes for those who are so inclined. The group now has an open-source license for PyCharm, so it's free to use.
    • The PyCharm license is located on this restricted-access page: PyCharm License
    • See Working with Pycharm
    • If you need access to the license but are restricted from the page, contact any developer for assistance
  • Vim (tutorial 1, tutorial 2)
  • Komodo. Note there is also a free editor only version with Komodo. Use whatever makes you happy.
  • Emacs (Python Tutorial)
  • Netbeans (Python Tutorial)
  • Eclipse (see Eclipse as a Python IDE by BrianF)
  • Geany (X11, GTK2, cross-platform).
  • Wing IDE is pretty clean, snappy, X11-based, and cross-platform with a decent debugger...but is python only.


Get Project Code

Install OOI Network/ION Release 2

The OOI Network system's code is primarily located in the coi-services repository on GitHub. It pulls in several GIT submodules automatically. Please follow the README instructions in here:

Please refer to the following pages for additional details:

Install the Presentation Layer (ion-ux)

Git clone the repository into your Dev directory.

Please refer to the installation notes in README.txt on Github.


If you have any installation or execution troubles, please see here for potential help. Please add any solutions to problems you have solved to the documentation and make sure to make the integration team aware of any documentation issues:

Working with GitHub/Git

OOI-CI is hosting source code in GitHub code repositories. Here's the original migration steps sent to the developer when we migrated our in-house Gitosis repository late 2011. Not everything is relevant to a new developer, but in it you will find useful git commands and collaboration workflows as you work day-to-day with GitHub/Git.

Git Submodules

OOI repositories rely on GIT submodules. A submodule defines a dependency between two code repositories. In OOI, the container and its services depend on definition YAML files which define objects and services. Pyon and coi_services each have submodule links to the ion-definitions repository, which which must be kept up to date in each of the parent repositories.

Git Bash Prompt

In the bash shell, add the following to your .profile to get a git command prompt such as "user@host ~/code/coi-services (master)$". Modify as you like.

Git Submodule Hooks

A git hook is a script that executes during various points of using git. Some simple hooks have been written to help automate dealing with submodules for most people. See the steps here:

They do require an initial setup. Simple instructions:

Clone this repository:

Use the provided install script:

The install script does the following (you can also do it manually):

Now, when checking out a branch, pulling, merging etc, git will prompt you to automatically update
if it notices a change to the commit that your supermodule points to.

The pre-commit script is so you don't forget to push changes to the submodule BEFORE you push changes
to the supermodule.

If you have more than one remote defined for git you will see messages like this where your git hook fails because it does not know how to fetch the latest ion-definitions:

Here are some customized git hooks that fetch from all submodule remotes when you run checkout or merge:
Customized git hooks

Using Gerrit for code reviews

Please see Setting up and Using GerritHub for Code Reviews for instructions on setting up and using GerritHub for code reviews.

Big Picture

Please see the Overview for New Developers for more information on the project, the CI technology choices, and the engineering processes we use. The CIAD AV Glossary may also be useful as you get up to speed.


dev dev Delete
noob noob Delete
tutorial tutorial Delete
training training Delete
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.