#!/usr/bin/env ruby require 'cucul' require 'V4l' require 'socket' SHRINK_X = 5 SHRINK_Y = 10 Thread::abort_on_exception = true current = '' current_lock = Mutex.new Thread.new { vid = V4l.new('/dev/video') cucul = Cucul::Canvas.new(vid.width / SHRINK_X, vid.height / SHRINK_Y) d = Cucul::Dither::new(24, vid.width, vid.height, 3 * vid.width, 0xff, 0xff00, 0xff0000, 0) d.antialias = 'prefilter' d.algorithm = 'fstein' d.brightness = 0.5 d.gamma = 1.2 loop do f = vid.get_frame cucul.dither_bitmap(0, 0, vid.width / SHRINK_X, vid.height / SHRINK_Y, d, f) current_lock.synchronize { current = cucul.export_memory('ansi') } end } s = TCPServer.new(2323) while (c = s.accept) puts "accepted #{c.peeraddr.inspect}" Thread.new { begin loop do current_lock.synchronize { c.puts "\e[2J#{current}" c.flush } sleep 0.5 end rescue Errno::EPIPE rescue Errno::ECONNRESET end } end [[Category:Ruby]] {{Rübÿ Spëëd Mëtäl Cödïng}}