Git Product home page Git Product logo

nCoda Development

The nCoda development is focusing on three areas

  • Binary releases for use on Linux, Mac or Windows platforms (specific requirements not yet published)
  • Binary pre-release (current builds of the development environment)
  • Development codebase (Continuous Integration testing CircleCI)

The nCoda application operates as a web based, client/server model, with the server (a python socket) operating as on localhost. Additional architecture documentation pending development.

We are approaching our MVP (Minimum Viable Product), basic functionality of opening a project, rendering an engraving, changing the score, saving and reopening the project; with simplified install and minimal bugs.

This repository is the development codebase, with development specific components (not required for regular nCoda use).

(Phabricator and our git master require account approval, email and ssh key authentication.)

Bootstrapping the Development Environment

Supported platforms: we develop on CentOS 7, test formally on Ubuntu 14.04, and less often on several macOS versions. See manual dependencies below for help on other platforms. We would like to support additional platforms and operating systems, please contact us if you can help.

After you have cloned this repo, bootstrap the development environment as a regular user (not root) with the following steps:

  1. Install manual dependencies (libffi and openssl, see below).
  2. ./init.py
  3. ./nc init
  4. ./nc test
  5. Run ./nc to see what other commands you can run.

Note that you should not handle the virtualenv yourself since ncoda handles this automatically.

Note that you must run init.py with a CPython 2.7 interpreter to bootstrap Ansible---no other Python interpreters or versions will work.

To use another Python interpreter for development, provide the lychee_python commandline flag:

$ ./init.py --lychee_python "/usr/bin/pypy"

Activate Lychee's Virtualenv

We use virtualenv to manage our Python dependencies. It can be useful to activate Lychee's virtualenv when you're working on nCoda. Run the ./nc activate command.

We added some extra goodies to the virtualenv:

  • The node and npm commands will use the NodeJS and NPM version installed for nCoda. This is matched to the same version of NodeJS that Electron uses when you start nCoda. The setup program automatically upgrades NodeJS when we upgrade Electron.
  • The nc and ncoda commands are also added to the PATH, available from any directory without the silly ./ bit. You won't be able to use netcat when the virtualenv is activated.

Type exit to leave the virtualenv.

Manual Dependencies

The ncoda program uses Ansible to automate software installation and configuration. Unfortunately, Ansible itself has some dependencies, and we have not automated their installation yet. Please install the following software in your usual way:

  • libffi
  • openssl

For macOS computers, maybe brew install libffi && brew install openssl will work.

For Fedora-like computers, try yum install libffi-devel openssl-devel.

For Debian-like computers, consider apt install libffi-dev libssl-dev.

There's no need to guess whether you've installed these correctly: if the init.py script succeeds then the dependencies were installed!

Troubleshooting

When problems arise, we try to automate the solution so nobody will run into them again. Not every problem has been found, and some are not solved properly yet.

  • If ./nc init fails and the error message includes the text "password required," this may be a problem with sudo. We're considering our options to resolve this properly. Currently, you must either add the "NOPASSWD" option to the relevant place in /etc/sudoers, or make sure the no-password timeout hasn't elapsed yet. (E.g., run a sudo command just before ./nc init).
  • On macOS, sometimes init.py fails while installing "pycrypto" due to a years-old bug in that library. You can resolve this by installing "pycrypto" from source:
    1. Activate the ansible-venv virtualenv.
    2. Install "pycrypto" from source.
    3. Deactivate the virtualenv.
    4. Continue with init.py.

Manual Dependencies

These steps are only required for non-supported platforms.

Using CentOS 6.x or Python 2.6 requires a newer python. Latest python on CentOS 6 requires:

  1. yum update
  2. yum groupinstall -y "development tools"
  3. yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel expat-devel wget
  4. mkdir -p /usr/local/dist /usr/local/src
  5. cd /usr/local/dist
  6. wget http://python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz
  7. cd /usr/local/src
  8. tar xf ../dist/Python-2.7.14.tar.xz
  9. cd Python-2.7.14
  10. ./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
  11. make && make altinstall
  12. mkdir /usr/local/bin/python2.7-bin
  13. ln -s /usr/local/bin/python2.7 /usr/local/bin/python2.7-bin/python
  14. PATH=/usr/local/bin/python2.7-bin/:$PATH

Contact

Find contact information on our website at https://ncodamusic.org/.

nCoda's Projects

amazeui icon amazeui

Amaze UI, a mobile-first and modular front-end framework.

flatpak icon flatpak

Flatpak files to build nCoda for Linux.

fujian icon fujian

Browser-to-Python bridge for nCoda.

linux_bundles icon linux_bundles

Files to build the Linux distribution bundles for nCoda, including for Ubuntu-on-Windows.

lychee icon lychee

Lychee is an engine for MEI document management and conversion.

macos icon macos

The scripts that create an installable production build of nCoda for end users.

mei-tools-atom icon mei-tools-atom

Package for the Atom text editor that provides on-the-fly music notation rendering for MEI with Verovio

ncoda icon ncoda

nCoda Development Environment Setup Program

windows icon windows

The scripts that create an installable production build of nCoda for end users.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.