= Rhizi =

A collaborative editor for organizing, communicating, and analyzing data in graph form.

= Requirements =
* Neo4J DB server
* Python 2.7
* Flask
* Apache Ant
* python-gevent
* python-gevent-websocket
* python-socketio

= Use =

== requirements ==
=== Server ===
==== neo4j ====
Install [neo4j](http://neo4j.com/download/)

==== python libs ====
Install all of:
# [gevent-socketio](https://pypi.python.org/pypi/gevent-socketio/)
# [flask](http://flask.pocoo.org/)
# [flask-mail](https://github.com/mattupstate/flask-mail)

Or install it all via pip:
<code>
 pip install gevent-socketio
 pip install flask
 pip install flask-mail
</code>

=== Client ===
All of the following are already bundled but noted here for reference:
# [feedback](https://github.com/ivoviz/feedback) (it also bundles [html2canvas](http://html2canvas.hertzen.com/))
# jquery
# d3
# FileSaver

== Running Rhizi Locally ==
To run Rhizi locally:
For testing locally run neo4j locally on the default 7474 port and then launch run-local.sh:<br><code>./run-local.sh</code>

Or perform the following tasks by hand:
# Update css files from scss sources using <code>make</code>
# Invoke the local deployment Ant target:<br><code>$ cd ./rhizi && ant -f build.ant deploy-local</code>
# Assert Neo4J is running and listening on it's default port
# Run rhizi-server.py:<br><code>$ cd deploy-local && python bin/rz_server.py --config-dir=etc</code>

Command line use documentation can be view with:
:$ python rz_server.py -h

== Installation ==

=== Setup user password file ===
The following works in conjunction with run-local.sh, for real deployment place the resulting htpasswd file in the location matching the config you use.
# put a SECRET_KEY entry in the config file:
  echo SECRET_KEY=mysecret >> res/etc/rhizi-server.conf
# create an initialization file with email/password separated by a comma:
  echo test@example.com,test > res/etc/htpasswd-init-file
# create the htpasswd file:
  python src/server/rz_server.py --init-htpasswd-db --htpasswd-init-file res/etc/htpasswd-init-file

= Development =

To update the css files you need [sass](http://sass-lang.com/)

The build tool is [make](https://www.gnu.org/software/make/)

To rebuild the css files issue make from the top level directory:

 $ make
 
 For dev mode(debbuging, manual file load) use `?debug=1` at end of URL: e.g. `file://rhizifolder/html.index?debug=1`

== Neo4J DB management ==

* Use <code>$ neo4j-shell -file reset-db__single_link.cypher</code> to bring the DB to an empty state, excluding two nodes and a single link.

== Running server tests ==

Test code makes use of Python's unittest - run by invoking them with python,
or by creating a launch configuration in your IDE of choice.

Note: server test-cases do not yet support pre-run DB state validation and are
likely to leave DB side-effects.

== Installing on windows (WIP) ==
mingw doesn't have python support, so using mingw (I want a unix native python)
# www.cygwin.com setup-x86_64.exe
# use correct mirror (i.e. mirror.isoc.org.il)
# defaults (c:\cygwin64)
# python + gvim + vim + python-six + git + git-completion + tig + ruby + ruby-sass + make + gcc-core + autoconf + automake
# start cygwin shell
# cd to directory of install
# git clone (using alon's local right now, to clone from github you need to first create a public private key pair and add your public key to your account)
# cd rhizi
# install neo4j from neo4j.com community eddition (neo4j-community_windows_2_1_6.exe)
# install python prerequisites:
# download get-pip.py from http://pip.pypa.io/en/latest/installing.html
# $ python get-pip.py
# install JDK: java SE development Kit 8 jdk-8u31-windows-x64.exe
# install ant: winant.googlecode.com/files/winant-install-v7.exe
## specify JDK install directory, i.e. C:\Program Files\Java\jdk1.8.0_31
# Current ant bug: /usr/bin/rhizi is translated by ant to \usr\bin\rhizi and so it fails to find rhizi.
## solution 1: replace /usr/bin/rhizi with rhizi, it will find rhizi in PATH
## solution 2: ?
# pip install flask
# pip install gevent-websocket
## pip install gevent never completes setup.py stage
### solution 1: pip install cython git+git://github.com/surfly/gevent.git#egg=gevent
### didn't complete.


Unused notes on mingw:
# Install github for windows
# Alternative: download Mingw
# choose mingw-developer-toolkit
# choose python
# pip
# git
# ssh

