- immutable data
- pure functions
- lawful monads
- composable agents
- runtime type system
http://max.tunes.org/
client | ||
deps | ||
doc | ||
lib | ||
server | ||
test | ||
.gitignore | ||
build.sh | ||
Dockerfile | ||
entry.sh | ||
max.cabal | ||
README | ||
run.sh | ||
rungui.sh | ||
stack-docker.yaml | ||
stack.yaml |
=== Max 0.4 === http://max.tunes.org/ The Max project aims to give total control of the computer to the user. The current status is an early UI demo, with some backend computational parts that aren't really visible yet. It consists of a client and a server. See doc/INSTALL for the building and running instructions for the server followed by the client. Right now the server runs only on localhost, but you can run multiple copies of the client. Once you launch the client, you enter a 3-D world and can fly around using WASDRF, arrow keys and mouse. You see two cubes and a sphere. The cubes are linked up to the inputs of an OR gate, with the sphere linked to the output. TAB cycles between the cubes, and SPACE toggles the selected cube. Red and green indicate Boolean False and True respectively. Press ENTER to bring up a text entry box. Click in the box and start typing; press ENTER again to accept the text and place it in the world in front of you. There is no way to delete or edit text except to reset the database. Press ESC to quit. If you restart the server and client, the world is still there. It's stored in a database in the folder called 'world'. The database uses the Acid-State library. Client does not detect a down server and reconnect. The OR gate is internally implemented as an abstract virtual machine made up of three NAND gates wired together with separate threads handling each input in parallel. The server facilitates communication with the simulation of the virtual machine. The virtual machine supports arbitrary nesting of machines and runs in the background of the application with inter-thread communication using Software Transactional Memory (STM). Currently there is no UI to edit or view machines other than that provided above. Virtual machines are first constructed with the Interpreter module, then simulated using the Nexus module: Introducing the Interpreter for data flow machine graph specifications. The Interpreter takes a graph, converts it to active components and runs the resulting machine in the Haskell runtime. Interpreter calls upon a new module called Nexus to simplify its logic. The Nexus module provides a context (Monad) to build up a structure with implicit data flow, out of the basic primitive: a pipe (queue) for arbitrary data types. The pipe is a pair of a Source and a Sink, such that that when a value is written to the sink, the source produces the data. Nexus then provides connections between pipes. Nexus handles fan-out distribution of data when multiple sinks connect to the same source. These components are not packaged for easy use outside of Max. Known bugs due to limitations of the HGamer3D framework: - We are missing a way to detect the initial screen resolution. On tiling window managers, you will need to resize the window manually before using the text entry box, or it will appear in the wrong position. Reported as a pull request with code I have no idea if it will work at https://github.com/urs-of-the-backwoods/HGamer3D/pull/21 For detailed list of changes since 0.3, run "git log 0.3..0.4" Bugs and Feedback: E-mail the public mailing list max at tunes dot org. Subscribe to the mailing list for news and discussion at: http://lists.tunes.org/mailman/listinfo/max Follow @tril0byte on Twitter. Open to direct messages.