Difference between revisions of "Setting up developer environment"

From MMS Wiki
Jump to: navigation, search
Line 27: Line 27:
One last bit of configuration
One last bit of configuration
  sudo echo " localhost.matchmysound.com" | sudo tee --append /etc/hosts
  echo " localhost.matchmysound.com" | sudo tee --append /etc/hosts
== Internal setup ==
== Internal setup ==

Revision as of 02:59, 10 April 2017

Install packages:

sudo apt-get update
sudo apt-get install -y git-core python2.7-dev curl libfontconfig1-dev libc6 libgc-dev ocaml make xdg-utils libpq-dev \
  postgresql-client libav-tools python-pip fluidsynth graphicsmagick sox libsox-fmt-mp3 s3cmd nodejs npm libjpeg-dev

Install core NPM packages

sudo npm install -g bower grunt-cli cordova

Install HaXe



haxelib setup
haxelib install lime
haxelib run lime setup
# ln -s hxMath.h hxMath.h.h # In the right directory

Docker setup

sudo apt-get install docker.io
sudo groupadd docker
sudo usermod -aG docker macobo # replace with own username
# log out and in again

Download Docker files

docker pull redis
docker pull postgres

One last bit of configuration

echo " localhost.matchmysound.com" | sudo tee --append /etc/hosts

Internal setup

Setup: Clone repo:

git clone https://[USERNAME]@bitbucket.org/velochy/guitar-teacher-frontend.git
cd guitar-teacher-frontend
# clone mms-haxe into guitar-teacher-frontend/haxe/
git clone https://[USERNAME]@bitbucket.org/velochy/mms-haxe.git haxe

Install pip packages

sudo pip install -r matchmysound/requirements.txt

Install bower packages

cd matchmysound
bower install

Install node (build) packages

cd grunt
npm install

Set up DB (need to have ./manage.py start db running in other terminal)

# ./manage.py start db # in another terminal or with &
./manage.py db:create
./manage.py db:sync

Start up the environment (separate windows)

./manage.py start db redis api celery
./manage.py start client

If client isn't acting up, then `python manage.py` should be sufficient!

If you see ENOSPC error, it is a problem with too many inotify watches. Solution:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

if you see sslwrap error, it is a gevent thing. 1.0.2 fixes it for Python 2.7.9 but if you have 2.7.8 that has the bug backported into it, just go to /usr/local/lib/python2.7/dist-packages/gevent/hub.py and change PYGTE279 to True.


Needed to get exercise creation working. Firstly:

 git clone https://github.com/velochy/MuseScore.git

Then do "Install dependencies" and "Compiling the code" at: https://musescore.org/en/developers-handbook/compilation/compile-instructions-ubuntu-14.10-git

Editor (sublime)

Under Project - edit project, set

   "settings": {
       "expand_tabs_on_save": true,
       "trim_trailing_white_space_on_save": true


  • Index project using search in ctrl-shift-p
  • goto definition using ctrl+win+alt+l
  • jump to definition win+ctrl+l

Set user configuration to ignore temporary dirs - Preferences - Package Settings - AngularJS - Settings - User


Install Anaconda for python linting, goodies

Set user configuration in Anaconda to set max length a bit higher (note that you should still strive for 80)

   "pep8_max_line_length": 100

Set Anaconda User Key bindings

   {"command": "anaconda_goto", "keys": ["super+ctrl+alt+l"]},
   {"command": "anaconda_find_usages", "keys": ["super+alt+d"]},
   {"command": "anaconda_doc", "keys": ["alt+d"]},
   {"command": "anaconda_auto_format", "keys": ["super+a"]},
   {"command": "anaconda_goto", "keys": ["g", "d"],
           { "key": "selector", "operator": "equal", "operand": "source.python" },
           { "key": "setting.command_mode", "operand": true },
           { "key": "setting.is_widget", "operand": false }


  • goto definition using ctrl+win+alt+l
  • show docstring alt+d
  • find usages of function win+alt+d
  • autoformat file win+r (this cleans up a lot of the formatting-related pep8 warnings, good when refactoring and cleaning old code)

Mac (incomplete)

  • Install XCode

- Not command line tools. If you installed those, uninstall them and xcode-select -s the Xcode app

brew install graphicsmagick postgresql libsass openssl

brew install python --with-brewed-openssl

  • Install pip

easy_install pip celery

  • Install latest Java JDK to get java command
  • Do steps NPM, Haxelib, Docker files from the main guide
  • Continue to "Internal Setup"

- pip should be done not with sudo, but with --user flag instead, if problems occur

haxelib 3,2,81 version needs to have a symlink like "latest" as cordova plugin xml parser has a bug which dies on commas in path name. Also, XCode project needs "Build settings" -> "Other linker flags" -> '-stdlib=libc++' for compile to work.

You may also occasionally need to do

export IPHONE_VER=10.0

Android Dev

HaXe needs to be at least 3.3.0. You also need Android studio (which in turn requires JDK 1.8). Once that is installed, navigate to "Configuration" -> "SDK manager" -> "SDK Tools" and install:

NDK SDK ver 22 SDK build tools ver 22 SDK and Build Tools of <newest>

You will need to set up haxelib. In haxe root folder do:

 haxelib dev MMSNativeExtension MMSNativeExtension
 haxelib dev mms_native tmp/mms_native


 lime setup android

And say n to everything until it starts asking for paths. Then provide them: Android SDK is ~/Android/Sdk NDK is ~/Android/Sdk/ndk-bundle ANT is ~/Android/Sdk/tools Java SDK is /usr/lib/jvm/java-8-openjdk-amd64 (in ubuntu)

You may need to symlink 4.9 to 4.9.x at ~/Android/Sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/{x86,x86_64}/lib/gcc/arm-linux-androideabi

Also, add this to your .bashrc

 export ANDROID_HOME=/home/velochy/Android/Sdk
 export PATH=$PATH:/home/velochy/Android/Sdk/tools