Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Operating System: what ever floats your boat.
  • IDE: Eclipse commonly used and free
  • Wiki / Issue Tracker / Code Browsing and Reviewing / Automated Builds: we have a Jira Studio subscription  (Nicole Deflaux and Mike Kellen as adminsadmin)
  • Code versioning: SubversionGit, hosted by Atlassian as part of our Jira Studio subscriptionon GitHub.
  • Build System: Maven
  • Build repository manager: see Sage's hosted Artifactory service see jFrog website for info (John Hill and Mike Kellen as admins)

...

MONqrDkXrjMnJciwRtLBAEGFOmnBGjNmbRRWECCaUafBQo
mi2Kehqg3mIlkHdhHlTejumx2KzaGJQIsBkyJf66uTXT7W
NPQQsvpRQnqmPnrRpQPSunQNrOQnnRqMNovXXwssmXtvsW
vSttxsuurRqopnmomUUnovrnuoummmmmUUnovrnuoummmm
mUUJXdbW2flkbqtlohpUUnmmmm

You can also use Jacoco for code coverage. For more information, see Jacoco Code Coverage.

Java

Libraries

At this point we don't have any strict licensing requirements, however to maintain flexibility we have to be careful about licenses for software we choose to incorporate into our system.  The best licenses are open source licenses without copy-left provisions (e.g. Apache License) that give us maximal flexibility in what we later do with the code base.  Some strong copy-left licenses (e.g. GPL) would impose licensing requirements on us (e.g. force us to use GPL ourselves) if we chose to redistribute the code base at a later date. For now, we should just be aware of the mix of licenses incorporated into our projects, and have a bias for open source, non-copy left licenses.

...

Python

...

  1. Make sure you are running the right version of easy_install http://superuser.com/questions/256717/easy-install-the-wrong-version-of-python-modules-mac-os
  2. From the shell:

    Code Block
    
    ~/platform/trunk>easy_install progressbar
    Searching for progressbar
    Reading http://pypi.python.org/simple/progressbar/
    Reading http://code.google.com/p/python-progressbar/
    Reading http://code.google.com/p/python-progressbar
    Best match: progressbar 2.3
    Downloading http://python-progressbar.googlecode.com/files/progressbar-2.3.tar.gz
    Processing progressbar-2.3.tar.gz
    Running progressbar-2.3/setup.py -q bdist_egg --dist-dir /var/folders/h0/h0pR5063FtCMCzzo1bt2WU+++TI/-Tmp-/easy_install-a29dGI/progressbar-2.3/egg-dist-tmp-3Dwzuw
    zip_safe flag not set; analyzing archive contents...
    Adding progressbar 2.3 to easy-install.pth file
    
    Installed /Library/Python/2.7/site-packages/progressbar-2.3-py2.7.egg
    Processing dependencies for progressbar
    Finished processing dependencies for progressbar
    


Python Examples for Perl programmers

  1. Example: empty dictionary, add values to it

    Code Block
    
    layer = {}
    layer["type"] = row[1]
    layer["status"] = row[2]
    layer["name"] = row[3]
    layer["numSamples"] = row[4]
    layer["platform"] = row[5]
    layer["version"] = row[6]
    layer["qcBy"] = row[11]
    


  2. Example: empty two level dictionary, add values to it

    Code Block
    
    layer = {}
    layer['foo'] = {}
    layer['foo']['bar'] = 3
    layer['hello'] = {}
    layer['hello']['world'] = 42
    


  3. Example: create a populated dictionary

    Code Block
    
    CSV_TO_PRIMARY_FIELDS = {
        'name': 'name',
        'description': 'description',
        'Investigator': 'creator',
        'Creation Date': 'creationDate',
        'Status': 'status',
        'date_released': 'releaseDate',
        'version':'version'
        }


  4. Example: create a populated two-level dictionary

    Code Block
    
    MY_FAKE_LAYER = {'foo': {'bar': 3}, 'hello': {'world': 42}}
    


  5. Example: empty array, add values to it

    Code Block
    
    stringAnnotations = []
        stringAnnotations.append("foo")
    


  6. Example: create a populated array

    Code Block
    
    CSV_SKIP_FIELDS = ["db_id","user_agreement_file_path", "readme_file_path"];
    


...

...

Git

For general SVN info see the SVN bookGit info see the Git page.  Or maybe you're interested in our Git Workflow instead.

Moving files and directories

The eclipse plugin for svn generally does a decent job Git is pretty smart about moving files and directories. See also http://svnbook.red-bean.com/en/1.1/re18.html

Here is an example:

svn gets really upset though when you do more complicated things like created a file, delete that file, then make a directory with the same name in the same location as the deleted file. (but that is a pretty odd thing to do anyway)

When in doubt, make a developer branch and try it there first.http://svnbook.red-bean.com/en/1.1/ch04s02.html#svn-ch-4-sect-2.1

Developer branches

Want to make a drastic change and run it by the team before merging it to trunk? Want to check in broken code? Make a branch and do it there.

Resources

How to Set Up Merge Tracking

  1. Download svnmerge.py
  2. Make a branch directory for yourself (you'll only need to do this once)
    Code Block
    
    svn mkdir https://sagebionetworks.jira.com/svn/PLFM/branches/deflaux
    
  3. Make a new branch from trunk
    Code Block
    
    svn copy https://sagebionetworks.jira.com/svn/PLFM/trunk https://sagebionetworks.jira.com/svn/PLFM/branches/deflaux/automatedIntegrationTesting
    
  4. Have both trunk and your new branch on your local hard drive, this assumes you already have trunk checked out in directory ~/platform
    Code Block
    
    cd ~/platform
    svn update trunk
    svn checkout https://sagebionetworks.jira.com/svn/PLFM/branches/deflaux/automatedIntegrationTesting
    
  5. Initialize merge tracking
    Code Block
    
    cd trunk
    svnmerge.py init ../automatedIntegrationTesting
    svn commit -F svnmerge-commit-message.txt
    cd ../automatedIntegrationTesting
    svnmerge.py init ../trunk
    svn commit -F svnmerge-commit-message.txt
    

Alternative: Initialize merge tracking and switch to your new branch

Code Block

cd trunk
svnmerge.py init https://sagebionetworks.jira.com/svn/PLFM/branches/deflaux/sts
svn commit -F svnmerge-commit-message.txt
svn switch https://sagebionetworks.jira.com/svn/PLFM/branches/deflaux/sts
svnmerge.py init https://sagebionetworks.jira.com/svn/PLFM/trunk
svn commit -F svnmerge-commit-message.txt

How to merge

Merge from trunk to your branch

Best Practice: merge changes from trunk to your branch every morning Monday through Friday. This reduces the pain later when you want to merge from your branch to trunk.

  1. Ensure the branch is working and committed to SVN.
  2. To see what changes and/or branches are available for importing, use this command from the branch distribution:
    Code Block
    
    python svnmerge.py avail -l
    
    • Windows Users: One of the results should be '/PLFM/trunk'.
  3. import the changes from trunk into the branch:
    • to merge all changes
      Code Block
      
      python svnmerge.py merge -S /PLFM/trunk
      
    • to merge one or more particular changes
      Code Block
      
      python svnmerge.py merge -r #,#,# -S /PLFM/trunk
      
  4. Resolve conflicts, compile, test and commit EVERYTHING in the branch.
    Code Block
    
    svn ci -F svnmerge-commit-message.txt
    

Merge from your branch to trunk

...

Code Block

python svnmerge.py avail -S <your branch>

...

  1. For all changes
    Code Block
    
    python svnmerge.py merge -S <your branch>
    
  2. For particular changes
    Code Block
    
    python svnmerge.py merge -r <your revisions comma separated> -S <your branch>
    

...

 It can even detect that you've renamed a file without you having to tell it so explicitly.  Basically, you shouldn't have problems.  If you do, write about the solution you found here.

Developer branches

Bottom line.  They're easy in git, so USE THEM!  For more info see the Git page for resources.

Tools To Know About

Pretty-Print JSON

...