Jay McGavren's Journal

2010-08-02

Ruboto On Acid - Multitouch

Ruboto 0.3 added TouchListener to its event handlers. Here’s my experiment with adding multitouch input to the Ruby On Acid demo…

When it starts up (or the factory resets), all attributes are controlled by an ExampleFactory, meaning they’ll randomly be assigned to LoopFactories, SineFactories, RandomWalkFactories, etc. Touch the screen, though, and control of the drawing x/y position will be given to the touchscreen. Touch in a second place, and control of random attributes will go to your second finger: r/g/b channel, opacity, width, or height.

Read more...
2010-07-24

Screencasting checklist...

I’ve recorded one too many screencasts in an unreadably small font. I thought I’d made a pre-recording checklist, but I seem to have lost it. So here we go again, and this time I’ll share it with the Web at large:

Ensure iShowU is on "Rails Demo" preset:
  Record microphone, system audio off
  Normal frame rate: 5
  Compression: Apple Animation
  Capture Size: 800 x 600
  Show capture guide whether recording or not
  Follow mouse cursor: false
  Edit recording area so it's in upper left, touching underside of system menu
Set iShowU keyboard shortcuts:
  Start capture: Cmd-Opt-Ctrl-3
  Pause capture: Cmd-Opt-Ctrl-4
Size windows to fit within capture area:
  Web browser
  Shell(80 columns x 30 rows)
  Editor
Increase font size to 20-point or larger:
  Web browser ("Zoom In" x 2)
  Shell
  Editor
Plain background as desktop
Close all possible apps

Read more...
2010-07-22

Pat Maddox - I Love Ruby

From Pat’s MountainWest RubyConf talk. I’m giving a presentation on Rails at work (a JEE shop), and I figured this would help convince my audience. But it also says what many in the Ruby community already feel, so I figured I’d share it.

Like the original, this is released under the Creative Commons Attribution-ShareAlike license.

Pat Maddox - I Love Ruby

Read more...
2010-06-12

A challenge!

30 minutes ago, I got this comment on my Ruboto on Acid post:

LSD makes letters on a computer screen look as if they’re dancing around and have a mind of their own. It’s also entirely impossible to think logically enough to code while on it. I recommend you buy some acid and see how it’s nothing like this at all. ;)

And here is my answer. :)

screen-shot-2010-06-12-at-94231-pm.pngscreen-shot-2010-06-12-at-94109-pm.png

screen-shot-2010-06-12-at-93947-pm.pngscreen-shot-2010-06-12-at-93537-pm.png

video

#!/usr/bin/env ruby

require 'rubyonacid/factories/example'
require 'tk'

#This factory will be in charge of all drawing coordinates, colors, etc.
f = RubyOnAcid::ExampleFactory.new

#A skip factory, in charge of randomly resetting the meta factory.
resetter = RubyOnAcid::SkipFactory.new(:odds => 0.99)

#The window to draw to.
canvas = TkCanvas.new(:width => 400, :height => 400)
canvas.pack

#The line objects we create will be stored here.
shapes = []

letters = "woah, trippy, dude!".split(//)

#Create a thread to update the window while it's displayed.
Thread.abort_on_exception = true
Thread.new do
  loop do
    
    #Get red, green, and blue values for a color from the factory.
    #Format is #RRGGBB in hexadecimal (like HTML).
    color = sprintf("#%02x%02x%02x",
      f.get(:red, :max => 254).to_i,
      f.get(:green, :max => 254).to_i,
      f.get(:blue, :max => 254).to_i
    )
    
    #Create and store a line of the chosen color.
    #Get width and locations of the endpoints from the factory.
    shapes << TkcText.new(
      canvas,
      f.get(:x1, :max => 400),
      f.get(:y1, :max => 400),
      :text => f.choose(:text, letters),
      :font => TkFont.new(
        :size => f.get(:size, :min => 1, :max => 72).to_i,
      ),
      :fill => color
    )
    
    #If the resetter returns true, tell the ExampleFactory to reassign
    #its source factories to different keys.
    f.reset_assignments if resetter.boolean(:reset)
    
    #Delete the oldest line if we have accumulated too many.
    shapes.shift.delete if shapes.length > letters.length

  end
end

#Display the window.
canvas.mainloop

Read more...
2010-06-11

MP3 conversions of Ruby conference videos...

I’ve got a sizable commute, so I’ve taken to downloading conference videos and converting to MP3 to play in the car. Most work reasonably well as speech-only, I’m finding. In hopes of helping others, I’m posting them here.

Many thanks to Confreaks, the conference organizers, and to the generous speakers, who released their speeches under a Creative Commons license. In accordance with the license of the original videos, these MP3s are also released under a Creative Commons Attribution-ShareAlike license.

Download MP3 conversions of Confreaks conference videos here.

You can automatically download the lot with wget if you have it installed:

wget --recursive --no-parent --accept mp3,ogg,MP3,OGG http://jay.mcgavren.com/files/conference_mp3s

Conversions were done with ffmpeg. Here’s the script I used:

#!/bin/sh
for filename; do
    ffmpeg -i "${filename}" -acodec libmp3lame -ab 96k -ac 2 -ar 44100 "${filename}.mp3"
done

My chief complaint was wild variation in volume levels; I haven’t blown a speaker yet but loud noises have made me jump sometimes. I’ve processed all these with “mp3gain” (which I thought was only available as a Windows GUI app but have since learned has a Linux command-line version) in an effort to correct this, but I make no guarantees there won’t be sudden jumps or drops in volume.

Many tweaks are still possible, and I will look into them if there’s demand:

  • Remove the periods of silence on each track (where Confreaks originally showed sponsor logos).
  • Convert remaining videos (these were hand-picked).
  • Lower-bitrate versions for the space-conscious.
  • See if The Levelator produces better results than mp3gain.
  • ID3 tags with speakers, titles, and other metadata.
  • An actual podcast feed.

Enjoy, and leave a comment with the improvements you’d like to see!

Read more...