Experiments with ruby-processing (processing-2.2.1) and JRubyArt for processing-3.0
Showing posts with label jruby_art. Show all posts
Showing posts with label jruby_art. Show all posts
Wednesday, 13 May 2015
Some observations and reflections
It now seem very likely that vanilla processing changes will be very significant (this is a good thing) and such changes will likely take some time to solidify. For that reason there is not much point in ruby-processing (or JRubyArt) trying to keep up. Everything seemed to be pointing toward a LWJGL3 (Andrés Colubri) future (but now it's changed back to jogl update 16 May 2015), and possible javafx integration (Ben Fry). Seems the LWJGL3 project is too unstable? So near term efforts will concentrate on jruby-9.0.0.0 and ruby-2.2 syntax changes/opportunities using the existing processing-2.2.1 release. Possible opportunity for jruby games...?
Labels:
javafx,
jruby_art,
jruby-9.0.0.0,
LWJGL3,
ruby-processing
Thursday, 19 February 2015
ASCII Capture sketch with JRubyArt
To get this sketch to work I placed the processing library jars in an adjacent library folder, also needed font in adjacent data folder. See jruby_art on github. It occurs to me that a library naming convention and library_loader utility like ruby-processing would be nice to have, perhaps with default location '~/.jruby_art/libraries' with a local library alternative (WIP) library_loader since implemented for JRubyArt.
# # ASCII Video # by Ben Fry, translated to jruby_art by Martin Prout. # # # Text chars have been used to represent images since the earliest computers. # This sketch is a simple homage that re-interprets live video as ASCII text. # See the key_pressed function for more options, like changing the font size. # require 'jruby_art' Dir[File.join('library', '*.jar')].each do |jar| require_relative jar end class AsciiVideoCapture < Processing::App attr_reader :bright, :char, :cheat_screen, :font, :font_size, :letters, :video # All ASCII characters, sorted according to their visual density LETTER_STRING = %q{ .`-_':,;^=+/\"|)\\<>)iv%xclrs{*}I?!][1taeo7zjLunT#JCwfy325Fp6mqSghVd4EgXPGZbYkOA&8U$@KHDBWNMR0Q} LETTER_ORDER = LETTER_STRING.scan(/./) def setup size(640, 480) init_video @font_size = 1.5 @font = load_font(data_path('UniversLTStd-Light-48.vlw')) # for the 256 levels of brightness, distribute the letters across # the an array of 256 elements to use for the lookup @letters = (0...256).map do |i| LETTER_ORDER[map1d(i, (0...256), (0...LETTER_ORDER.length))] end # current brightness for each point @bright = Array.new(video.width * video.height, 128) end def init_video # This the default video input, see the test_capture # example if it creates an error @video = Java::ProcessingVideo::Capture.new(self, 160, 120) # Start capturing the images from the camera video.start @cheat_screen = false end def capture_event(c) c.read background 0 end def draw return unless (video.available == true) capture_event(video) push_matrix hgap = width / video.width vgap = height / video.height scale([hgap, vgap].max * font_size) text_font(font, font_size) index = 0 video.load_pixels (0...video.height).each do # Move down for next line translate(0, 1.0 / font_size) push_matrix (0...video.width).each do pixel_color = video.pixels[index] # Faster method of calculating r, g, b than red(), green(), blue() r = pixel_color >> 16 & 0xff g = pixel_color >> 8 & 0xff b = pixel_color & 0xff # Another option would be to properly calculate brightness as luminance: # luminance = 0.3*red + 0.59*green + 0.11*blue # Or you could instead red + green + blue, and make the the values[] array # 256*3 elements long instead of just 256. pixel_bright = [r, g, b].max # The 0.1 value is used to damp the changes so that letters flicker less diff = pixel_bright - bright[index] bright[index] += diff * 0.1 fill(pixel_color) text(letters[bright[index]], 0, 0) # Move to the next pixel index += 1 # Move over for next character translate(1.0 / font_size, 0) end pop_matrix end pop_matrix # image(video, 0, height - video.height) # set() is faster than image() when drawing untransformed images set(0, height - video.height, video) if cheat_screen end MESSAGE = <<-EOS Controls are: g to save_frame, f & F to set font size c to toggle cheat screen display EOS # # Handle key presses: # 'c' toggles the cheat screen that shows the original image in the corner # 'g' grabs an image and saves the frame to a tiff image # 'f' and 'F' increase and decrease the font size # def key_pressed case key when 'g' then save_frame when 'c' then @cheat_screen = !cheat_screen when 'f' then @font_size *= 1.1 when 'F' then @font_size *= 0.9 else warn MESSAGE end end end AsciiVideoCapture.new(title: 'Video Capture Sketch')
Labels:
ascii capture,
jruby_art,
video library
Saturday, 31 January 2015
Installing netbeans ruby-plugin and jruby_art gem
Please note for installation of gems, and some other operations netbeans can be a bit slow:-
Download and unzip the plugin yields ~/arch/build/updates/*.* note location, which you will need to navigate to when installing "downloaded" plugins (from netbeans menu). Select all the *.nbm modules and the jruby.jar. And install see below:-
Then install the downloaded gem as install local (local install required to load --pre gem) and you are good to go a real ide to develop jruby_art who needs a processing mode?
See crude Templates here
To install templates navigate to .netbeans/config/Templates (create a Templates folder if it does not exist) create a sub folder 'Ruby' put the outer .nbattrs file here, create a folder jruby_art and place the other .nbattrs file there along with both ruby sketch files. Templates should now show up in a Ruby sub-folder.
Then install the downloaded gem as install local (local install required to load --pre gem) and you are good to go a real ide to develop jruby_art who needs a processing mode?
See crude Templates here
To install templates navigate to .netbeans/config/Templates (create a Templates folder if it does not exist) create a sub folder 'Ruby' put the outer .nbattrs file here, create a folder jruby_art and place the other .nbattrs file there along with both ruby sketch files. Templates should now show up in a Ruby sub-folder.
Labels:
jruby_art,
netbeans,
ruby plugin
Friday, 30 January 2015
JRubyArt vs ruby-processing
IMPORTANT THIS DOCUMENT IS OUTDATED BUT BY NOW YOU SHOULD ALREADY BE USING JRubyArt or propane
External Dependencies
- ruby-processing requires an installed version of vanilla-processing
- jruby_art includes processings core jars in gem
Runnable from netbeans
- ruby-processing sketches would need a Rakefile or some other script to run
- jruby_art sketches mainly just run (except for bare-sketches), opens possibility of incredibly simple/minimal installation from netbeans (no need for MRI ruby or an installed jruby, might suit windows users)
Core processing libraries (sound, video etc)
- ruby-processing has builtin support
- jruby_art now has built in support (but path to libraries is configurable), can also be modular via gem see pbox2d as exemplar
Contributed processing libraries
- ruby-processing has builtin support for libraries installed by processing ide
- jruby_art does not assume that vanilla processing is installed. Wrapping libraries in separate gem would be ideal see pbox2d and toxicgem
Vec2D, Vec3D, Arcball and DEGLUT
- ruby-processing requires load_library
- jruby_art automatically loaded into jruby runtime
Processing::Proxy module
- in ruby-processing Proxy can be used to mimic processings inner classes, probably v. bad juju convenience isn't everything
- in jruby_art a different Proxy is used to access some processing methods eg "pre", "post", "draw" via reflection
Labels:
jruby_art,
libraries,
netbeans,
ruby-processing
Thursday, 29 January 2015
Netbeans, the perfect ide for jruby_art
The perfect ide for jruby_art is netbeans, because all sketches just run (since the netbeans ruby plugin is using a built in jruby-complete) with the jruby command see below (actually bare sketches need k9 command). It is probably easier at this point to download jruby_art-0.2.0.pre.gem and do a local install. Thus it is quite possible to develop jruby_art without a jruby/ruby install, just using the jruby provided by the jruby netbeans plugin (this might actually make sense on windows). However you won't get the examples so make sure you get them here.
Subscribe to:
Posts (Atom)
Followers
About Me
- monkstone
- I have developed JRubyArt and propane new versions of ruby-processing for JRuby-9.1.5.0 and processing-3.2.2


