2.1 Learning Java

If your already pretty familiar with programming, and want a quick, shallow description of the language syntax, the first video on this list may be enough to get up to speed and jump into the framework:


The resources are listed in order by popularity, just try some until you find one that jives well. For a more textual perspective,



are some potential places to start.

2.2 Using Intellij IDEA

Some of the ways in which Intellij may make your life easier include:

  • automatically importing classes as they are first mentioned in the code (right click on the class name and intellij should offer to import it)
  • debugging with the debugger (shocker) when necissary rather than relying on print statements alone (https://www.youtube.com/watch?v=1bCgzjatcr4), HINT: while paused in the debugger right click on anything and click “evaluate expression
  • using refactoring to rename variables, change function signatures, etc. without having to go hunting for every place that the variable/function/class is mentioned. (right click on some code and check out the “refactor” submenu)
  • using “find usages” and “Go To Declaration” to move fluidly around your code base and to see how its pieces connect together. (right clicking on things will get you there, see “find usages” and the “go to” submenu)
  • using Shift-F10 to quickly run the currently open file, and learning other hotkeys to speed up your workflow.
  • tapping Shift twice allows you to search the entire codebase for anything
  • using fori, iter, and sout shortcuts to create a for loop, foreach loop, and print statment respectively

Don’t worry too much about learning all of these up front, but I suggest that you do check them out as you become more comfortable with the platform.

2.3 Understanding HAL

Once you have a basic grasp of Java, I recommend skimming this manual as well as checking out the LEARN_HERE folder. then look at the examples

2.4 Source Code Organization

At the top level, there are 3 folders which hold different framework parts. These are...

2.4.1 Examples

contains models that use the framework as a basis


contains small examples that serve as tests of framework components

2.4.3 Framework

the top level framework source code folder, contains all of the following subfolders that hold various framework components. Descriptions of the 7 subfolders contained within the framework folder are detailed below.

2.5 Framework organization

this folder contains all of the Agent and Grid types that the framework supports. There are 2D and 3D, stackable and unstackable, on-lattice and off-lattice agents and grids to contain them. The base classes that the grids and agents extend are also in this folder.
this folder contains the main UIWindow class, as well as many component classes that can be added to the UI.
this folder contains many useful tool classes, such as a FileIO wrapper, a genetic algorithm class, a multiwell experiment runner, etc. as well as a Util class that is a container of generic static methods. It also contains classes that are used internally by these tools.
this folder contains interfaces that are used by the framework internally. It is useful to reference this folder if a framework function takes a function interface argument, or implements an interface.
contains outside libraries that have been integrated with the framework.
The only file directly on the top level, it’s full of goodies that can be broadly categorized into: color functions, array functions, cellular automata neighborhood functions, and math functions.

The manual from here turns into a glossary that looks at the framework components in some detail (to the extent that I bothered to write about them) and after that a simple but complete model example is provided.

Those looking to dive headfirst into modeling may want to first go to the LEARN_HERE folder for a hands on approach, or check out the last section for an in depth explanation of a model and use the other chapters as a reference. If you like reading dictionaries in your spare time then read this from end to end.