Tutorial

Things to try:

(click and drag to move this panel)

Close Panel
  
Previous Panel
  
Next Panel
  
End Tutorial
  
Welcome
  
Quick Reference
  
Full API reference
  
Start Tutorial
  
Close Help
  
Close Help and Hide Help Button
Close Help and Show Help Button

Vodka

Release 0.4.2

Release Notes

Vodka is a creative coding environment for music and text.

More info about Vodka can be found at:

Github

There are also help pages and a tutorial/walkthrough accessible by the links above.

Your session ID is 1234.

All data you save via the (_save_) and (_save-file_) builtins is sandboxed to this session.

You can access this session again with this link.

You can leave this session and start a whole new session with this link.

You can create an exact copy of this session (with all the same saved files) with this link.

You can create a read-only copy of this session (e.g. for sharing on social media) with this link.

To have a file load and be evaluated in normal mode at startup when a session link is visited, name the file "start-doc".

Vodka is in alpha and is under active development. I will do my best to preserve your data as much as I can. However:

- Sessions and sandbox contents may need to be deleted at any time without notice.

- Long term persistence of session contents is not guaranteed.

- Uptime or availability is not guaranteed.

- Sessions are not backed up in any way.

In addition, in the absence of problems, I may still periodically go through and delete old, inactive sessions. In other words, if you make something you like, it's probably prudent to capture it in some other way besides storing it here.

Abusive, harmful or illegal content of any kind is not allowed on this server.

The site admin (eeeeaaii) is the sole arbiter of what is allowed.

Disallowed content will be deleted immediately.

Vodka is created by Jason Scherer (eeeeaaii)

You retain all copyright to any creative works you make with Vodka.

Changes to the Vodka framework itself are protected by the GPL.

If you have questions or want to report a problem, join vodka-users@googlegroups.com and send an email.

Basic Usage

Some general notes:

You can insert different sorts of objects (sometimes called "nexes").

Depending on its type, an object will usually have some kind of associated data, like a string value or a number.

Some objects also are containers for other objects. Others are "atoms" and just have associated data, but no child objects.

One (and only one) object can be selected at a time. It will have a red border.

You can use the "movement" hotkeys to change which object is selected, or click to select an object.

The small dot near the currently selected object is the "insertion pip." This tells you where the next inserted object will appear. The insertion pip can be moved around, but it will always be near the selected object.

To edit the data associated with an object, you have to be in "edit mode" (the object will have a pink background). You have to exit edit mode to insert more objects.

Objects with thin borders are immutable, and their associated data can't be edited.

Objects can be evaluated, which causes them to "do something".

Evaluating commands will execute some code.

Objects can be given tags, which are used for various annotation-type purposes.

Atomic types:

!insert a boolean

@insert a symbol

#insert an integer

$insert a string

%insert a float

Container types:

~insert a command

^insert an instantiator

&insert a lambda

*insert a deferred command

(insert an obj

Special types:

_insert a wavetable

{insert a doc

[insert a line

<insert a word

Typing letters inside docs, lines, or words will insert letter objects.

Movement:

rightarrowor downarrowselect next object in this container (to the right or below)

leftarrowor uparrowselect previous object in this container (to the left or above)

tab"go in" -- select first child of selected container (just moves insertion pip if container is empty)

shift-tab"come out" -- select parent of selected object

option-leftarrowor option-uparrowmove the insertion pip to before the currently selected object

option-rightarrowor option-downarrowmove the insertion pip to after the currently selected object

option-tabmove the insertion pip inside the currently selected container

option-shift-tabset the insertion pip to be a rectangle enclosing the currently selected object (only containers can be inserted this way)

) > } ]"close parens" -- move up to nearest corresponding container type and put insertion pip after it

Other:

`activate the tag editor for the selected object

enterevaluate the currently selected object and replace it with the result.

shift-enterevaluate the currently selected nex for side effects, but don't replace it.

deleteenters edit mode for currently selected object

shift-deletedeletes current object completely, including all children if it is a container

shift-spacetoggles direction of current container (horizontal/vertical)

shift-escapetoggle exploded/normal modes for entire document

shift-alt-escapetoggle exploded/normal modes for selected object (and its children)

option-shiftand any of ~&*^({[<wrap-inserts the specified container around the currently selected object

cmd-ccopy

cmd-xcut

cmd-vpaste

cmd-zundo

cmd-zredo

cmd-ssave

In command or symbol editor:

enterleave edit mode

escapeabort editing and restore previous value

Any of a-zA-Z0-9:-_<>=+-/*can be used in names of commands or symbols.

deletedeletes previous character

option-spaceautocomplete

In lambda editor:

enterleave edit mode

escapeabort editing and restore previous value

Any of a-zA-Z0-9_-can be used in names of function parameters. Spaces separate parameters.

deletedeletes previous character

lambda function parameter syntax:

n!n must evaluate to a boolean

n@n must evaluate to a symbol

n#n must evaluate to an integer

n$n must evaluate to a string

n%n must evaluate to a float

n^n must evaluate to a nil

n&n must evaluate to a closure

n*n must evaluate to a deferred value or command

n()n must evaluate to some kind of container

_nn will not be evaluated before passing to function (call by reference)

n...variable number of arguments (only valid as last parameter)

#%or %#either float or integer types allowed

?optional parameter (non-optional parameters cannot follow optional ones)

Multiple parameter specifiers can be combined, for example _n#%...,n()?

If no type is specified, any type is allowed.

In tag editor:

Any object can be tagged. Any character including spaces can be used in a tag.

deletedeletes previous character, or current tag if empty.

leftarrowor rightarrowgo to next tag, or create new tag if no tag there (duplicate tags are deleted).

enteror `finish editing tags and quit tag editor (empty tags are deleted when leaving editor).

In string editor:

Type or paste the desired string in the box. Drag the handle to make the editor larger. All other hotkeys are disabled while you are editing the string. To finish editing the string, click the "done" button.

Help
End Tutorial