In general
----------

The idea is to make the project as simple as possible and the dev cycle 
as efficient as possible, for this reason only one lib manager is used 
(npm), only one build system (make) and any translation layers are 
avoided (less is likely to be phased out).

With this approach for most cases and for testing in the browser after 
the initial setup only refreshing the page is required to load most of 
the changes (./css/layout.less being the only exception).



General environment
-------------------

ImageGrid will require the following installed and in path:
	- bash
	- make (GNU Make)
	- git
	- wget
	- zip / unzip / zipnote
	- grep / egrep / fgrep
	- sed


Some more dependencies will be installed by make via npm locally.


Dependencies can be checked with:

	$ make check



Then the build system/process is generally the same on all platforms:

- Clone the repository:

	$ git clone https://github.com/flynx/ImageGrid.git


- Build the dev envioronment (bash):

	$ make dev


- Run in-place:

	$ make run


- Build a distro:

	$ make dist



Windows environment
-------------------

This will require a UN*X-like build environment to run make and friends.


One way to go about this is (admin PowerShell):

- Install Chocolate

	> Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))


  For more info see: https://chocolatey.org/install


- Install git-bash based env:

	> choco install git nodejs wget zip sed grep


Now we can proceed with the normal build.



The Makefile
------------

For make help to work make requires: bash, sed, grep/fgrep and printf to 
be available in the path, run this to double check:

	$ make check-help


To check the full list of dependencies run:

	$ make check


The make file is largely self-documented so run this for more info:

	$ make help



Sharp and other native modules for nw/electron
----------------------------------------------

And for electron (done by make):

	electron-rebuild


To build sharp for a specific version of node and nwjs (outdated):

	cd ./node_modules/sharp/
	nw-gyp rebuild --target=0.17.4 --arch=x64



Chromium flicker issue (nw/outdated)
------------------------------------

The UI sometimes flickers -- at first blanks out to black then re-draws,
this is most noticeable on white or gray backgrounds. 

This appears to be GPU related.

package.json:
	"chromium-args": "--disable-gpu-compositing",

This will fix the issue temporarily, but we still need a better solution.



Remote debugging via DevTools (nw/outdated)
-------------------------------------------

Set this in package.json:
  "chromium-args": "--remote-debugging-port=9222",

Then open http://localhost:9222 in chrome.
	


Speedup loading of app (nw/outdated)
------------------------------------

One of the ways to speed up the load times when packed is to store Node's
modules ./node_modules in a separate location, outside of the app.zip
or package.nw
To enable require(..) to find them:
	- > npm install --save app-module-path
	- when building the zip move all the modules out to a new location
	  *except* app-module-path
	- add this line to all root js modules *before* any other 
	  require(..) is called:
	  	if(process.__nwjs){
			var path = require('path')
			require('app-module-path')
				.addPath(path.dirname(process.execPath) 
					+ '/node_modules/') }




