Final report
As it is the last week of Google Summer of Code, this post is also my final project report, summarizing what I have worked on during the past 3 months, what I have learned, and what is left to do.
The result
I worked on developing Nighres — a Python package for processing of high-resolution neuroimaging data. It provides a Python framework for the Java-based CBS High-Res Brain Processing Tools, aiming to make those tools easier to install, use and extend.
-
Github repository (168 commits, 290,780+/207,108- lines of code)
The experience
It is cool to have built a software package. But even more satisfying to know that every step to get there meant learning something I had never done before. Without a course, or a book, simply by doing it. I have written about most of these steps in previous posts, but here is an overview with links:
-
Making software design choices (blog: Wisdom of the crowd, Nighres, Documentation)
-
Distribution (blog: To Docker or not to Docker, Distributing)
-
Creating a PyPI package (blog: Brainhack Vancouver, Manifesting, code: setup.py, MANIFEST.in)
-
Building Java classes and wrappers (blog: Brainhack Vancouver, code: build.sh )
-
Continuous integration and deployment with Travis (blog: Travis CI, code: travis.yml)
-
Using docker and virtualbox for platform testing (blog: To Docker or not to Docker, code: test_docker_trusty.sh)
-
Hosting example data on NITRC (online: NITRC project)
-
-
Documentation
-
Docstring styles (blog: A documentation for documentation)
-
Creating a documentation with Sphinx and writing in ReStructuredText(blog: Sphinx, code: doc)
-
Rendering illustrative examples with sphinx gallery (blog: Sphinx Gallery, code: conf.py, examples, online: Nighres usage examples)
-
Hosting documentation on readthedocs (blog: Read the docs, online: readthedocs)
-
-
Using Github for project management (blog: Github project management, online: GSoC project)
-
Creating a blog using hubpress and writing in AsciiDoc (blog: Like a real blog , code: gsoc2017)
-
Writing good Python code
-
Writing good docstrings
-
Using Git and Github
-
Using virtualenv for clean Python environments
-
Raising exceptions, errors, warnings in Python
The future
Open issues can be found on the Github issue tracker. In my opinion, these are the most crucial next steps:
-
Writing unittests and testing against different versions of Python, Numpy and Nibabel on Travis
-
Supporting different platforms and architectures
-
Becoming part of the Nipy community of practice
-
Writing instructions for developers to make contributing easy
-
Wrapping more CBS Tools modules and writing the interfaces for them
-
Adding more examples and make them executable on readthedocs (currently too big)
-
Providing a docker image