Skip to content
nasser edited this page Feb 17, 2011 · 1 revision

Tuesday, February 15 2011

The first open user test of Zajal went very well! Zach Gage, Matt Ruby, Kurt Bieg, Ryan Raffa, Manuel Iragorri, Brett Burton, Aaron Druck and I met up in the lab to play around with the current build. I got their initial reactions to the language, what worked for them, what didn't and the things they would like Zajal to be able to do. Below is a quick run down of what I took away from their feedback.

Thanks again to everyone for coming out!

Take-aways

Clean up live coding logic – The so-called "settings methods" like rectangle_mode and background that affect the global state of the interpreter need to be implemented differently. When called in the setup event, they should only modify the default settings. Then, at the start of each loop, all settings are reverted to their defaults. This should achieve the expected live-coding behavior of turning changing settings outside of setup.

Alpha blending enabled by default – Suggested as a common source of confusion. Not as big a performance killer as smoothing, and those interested in performance tuning can turn it off.

Color class – Colors will get a Color class that will support color arithmetic, interpolation, conversion and so on along with a use or apply method to set it as the current color.

# this
color 240, 128, 64

# would be the same as
my_red = Color.new 240, 128, 64
my_red.use

Instances of the Color class can be used for advanced color usages, while the color method will serve as a short hand to just set the current color.

HSB Colors – Support for HSB will be added. The syntax is not yet decided, but this OF forum post will serve as a jumping off point.

Named colors – Using names from an established palette like the X11 colors or maybe just the HTML colors. Syntax will use Symbols and possibly class constants of the color class.

# shorthand
color :red
color :purple
color :crimson
color :dark_sea_green

# longhand
my_color = Color.new :red
my_color.use

my_color = Color.new :dark_sea_green
my_color.use

# possible use of class constants. they're a bit chunky.
Color::Red
Color::DarkSeaGreen

Color ranges – Not sure about the syntax, but making color ranges work the way number ranges do with respect to interpolation would be awesome.

c = Color.new(:red)..Color.new(:blue) # ew, clunky syntax

color c * 0.1 # set current color to 10% red, 90% blue
color c * 0.5 # set current color to 50/50 red/blue
color c * 0.9 # set current color to 90% red, 10% blue

Hex color syntax

color 0xff02b8 # easy to implement
color 0xf6b # needs a bit more work

Time methods – Splitting up time into more explicit seconds and milliseconds methods and possibly keeping time which will default to returning milliseconds, but can be overridden with the time_mode setting

time_mode :seconds
text time # displays 15.65

time_mode :milliseconds
text time # displays 15650

A console window – Useful for debugging/printing. Not sure how to approach this one. Something for the longer term.

Triangle overloads

triangle 20, 40, 50 # draws an equilateral triangle centered at 20, 40 with a radius of 50
triangle 20, 40, 50, 30 # draws an isosceles triangle centered at 20, 40 with a radius of 50 and an angle of 30

Range interpolation operator – The * will interpolate over a range instead of %

Animation in reduced mode – This feature is being removed as it causes confusion

Clone this wiki locally