odbol

Technical and Philosophical Musings of a New Media Artist

Thomas Jefferson's Elegant Argument Against Patents

Stable ownership is the gift of social law, and is given late in the progress of society. It would be curious then, if an idea, the fugitive fermentation of an individual brain, could, of natural right, be claimed in exclusive and stable property. If nature has made any one thing less susceptible than all others of exclusive property, it is the action of the thinking power called an idea, which and individual may exclusively possess as long as he keeps it to himself; but the moment it is divulged, it forces itself into the possession of every one, and the receiver cannot dispossess himself of it. Its peculiar character, too, is that no one possesses the less, because every other possesses the whole of it. He who receives an idea from me, receives instruction himself without lessening mine; as he who lights his taper at mine, receives light without darkening me. That ideas should freely spread from one to another over the globe, for the moral and mutual instruction of man, and improvement of his condition, seems to have been peculiarly and benevolently designed by nature, when she made them, like fire, expansible over all space, without lessening their density in any point, and like the air in which we breathe, move, and have our physical being, incapable of confinement or exclusive appropriation. Inventions then cannot, in nature, be a subject of property.

- Thomas Jefferson (quoted in Where Good Ideas Come From by Steven Johnson, pp. 241)

How to get the Facebook ID of any URL using Open Graph and Javascript SDK

I wanted to post custom comments to my Facebook page using Facebook's dialog. You need the Page's UID to be able to post to it, and there's no way in the Open Graph protocol to get the ID of a given URL. Here's how you do it using the Javascript SDK and FQL:

function facebookGetIdForUrl(url, callback) {
    //see http://developers.facebook.com/docs/reference/fql/object_url/
    FB.api(
          {
            method: 'fql.query',
            query: "SELECT id FROM object_url WHERE url = '" + url + "'"
          },
          function(response) {
            callback(response[0].id);
          }
        );
}

facebookGetIdForUrl("http://facebook.com",
     function (id) {

        alert("Facebook ID = " + id);

    });

 

Filed under  //   code   javascript  

Amazon App Store Developer Account: Sketchiest License Agreement EVER?

I just signed up for an Amazon Android App Store developer account, because it's free for the first year! (and $99 for each year after that! Yikes!)

Some things in the agreement are pretty sketchy though (Disclaimer: I am not a lawyer! These are my layman's interpretations):

  1. "DRM; Usage Policy. You will apply to the Apps the digital rights management technology we make available, and will not incorporate any other digital rights management technologies into the Apps." I wonder if this means you won't be able to use Google's in-app billing? I don't want to have to write several versions of the software to use different billing mechanisms!
  2. "Delivery Commitment for Apps. You will deliver electronically to us (and continue to make available during the Term all versions of all software applications, games or other digital products (including any special or collector’s editions)... that you or your affiliates make available directly or indirectly to any Similar Service". As in, you have to submit your apps to both Google's App Market and Amazon's App store, and keep them up to date on both. You're not allowed to make an app available on the Google Market only. It seems that this encompasses all the apps you sell; does that mean Amazon is requiring you to give them all future apps you make? (Note it doesn't go the other way around - you can release apps on the Amazon store and nowhere else. U mad, Google?)
  3. You also have to release it to Amazon 14 days before you put it on any Similar Service, like the Google Market. Does this apply to just putting it on your website as well?
  4. Amazon reserves the right to charge less for your app than what you are asking. If they do, you may only get 20% of the price you set. So basically, the Wolfram Alpha app that is available for free today (normally $1.99), is only paying poor Wolfram 40 cents, instead of the $1.40 he wanted. Bummer!
But yeah, since it's free for now I am deciding to try it out. I just submitted my Pocket Looper VJ app! We'll see if it gets accepted...

VJ Equipment Kit for the Prepared Performer

As a VJ, you need a lot of different connectors to hook up to different projection systems, etc. Here's my VJ kit that I take to every venue:

20110225-dsc_7685

  • Macbook Pro with Resolume Avenue
  • Wii remote and DIY USB-powered sensor bar for WiiJ Video
  • VJacket (wearable wireless MIDI/OSC controller)
  • extra rechargable batteries for above devices!
  • LaCie d2 1TB external drive (quite a hefty block to lug around but the speed of the Firewire 800 and RAID 0 are great when playing 3-4 video clips at a time.)
  • 4GB USB thumb drive to transfer videos if the band brings their own
  • DVI to VGA adapter
  • DVI to RCA/S-video adapter (discontinued - unfortunate because they are incredibly useful - a lot of clubs still use analog video inputs. Also, it works as a video splitter if you have two projectors!)
  • VGA cables: 50 foot and 4 foot
  • RCA cables and female-to-female connectors to chain them together.
  • 1/8 inch to RCA splitters for cameras, iPods, or piping your videos' sound through the sound system.
  • Projectors:
    • Panasonic PT-AX200U (5000 lumens and an adjustable lens makes this perfect for guerrilla set ups in small venues)
    • Optoma Pico: battery powered and handheld for secondary stage lighting. I usually connect it to my Samsung Galaxy S running Pocket Looper for Android and point it at the kick drum, a band member in a white shirt, or whatever else. One time, the band Battlehooch started the show playing in the middle of the audience with acoustic instruments, so I followed them into the crowd with the handheld and projected on the accordion player!  
  • Power Strip
  • Gaffer's tape! Way better than duct tape. I cannot stress how many times this has saved me. Often the club will have some, but it's good to have your own, for instance to secure your projector to less-than-stable surfaces.
  • Video camera and Gorillapod, extra SD cards
  • Projector screen on tripod and white sheet when there's not enough room onstage for the tripod.
  • Zip ties (good for attaching white sheet to stage)
  • Thin rosin-core solder. In a pinch, you can use a lighter to heat it and solder any components that may have broken. Could be handy for that last-minute hangup!

Filed under  //   vj  

Windows Program Files as Audio Data - New Form of "Rhythmic Compression" Algorithm?

Ben Goldacre just posted audio of the Windows MSPaint executable interpreted as a wave file.

Windows 7 x64 MS Paint EXE Interpereted as PCM Data by R2Bl3nd

 

Near the end, the amount of repetition is crazy. I was wondering why they don't compress these files, but on closer listen, the sound modulates kind of like through a wah pedal... so the numbers are indeed different even though the rhythmic patterns are similar.

This makes me wonder about a whole new compression scheme based on the "rhythm" of numbers in code, instead of the straight text patterns like ZIP and RTE. Does anyone know of a compression scheme that could handle that?

Final Cut Pro: Sharing Multiple Camera Formats Among Multiple Editors with Offline Proxy Clips

We recently had a music video project with four screens simultaneously, where each screen was the domain of a different editor. To coordinate everyone so I could combine their separate scenes into a 4-screen layout easily, (make sure everyone was cutting on the same beat, divvy up the scenes, etc), I decided to share a single FCP project file with the whole group.

All the editors were working from Macbook Pros, so we needed a low-res, quick-and-dirty editing codec so we could render as fast as we can while making those edits. I decided to use the OfflineRT codec as a proxy: we would edit using the fast, low-res clips, then do the final render with the hi-res original versions. Apple recommends using their new ProRes codec for editing, but it took up so much filespace (more than the original clips!), that it was better to transfer the tiny OfflineRT files to everyone.

Since we filmed the video with a motley camera setup with different framerates, resolutions and codecs (one Canon 5D, one Nikon D90, and several tiny Kodak PlaySports), it was quite a pain to import them all into Final Cut. Final Cut is not designed for the consumer cameras we had to work with, so you have to hack it in several places to get it to work.

First of all, the Log and Transfer function that is supposed to make it so easy never recognizes any of our cameras' files. If you rename them, you will confuse FCP to the point of futility. Here are the steps I took to make a decent proxy editing setup:

  1. The 60fps footage that the Kodak PlaySport records is unrecognizable by Final Cut. Use MPEG Streamclip to convert the 60fps clips to the ProRes 422 codec (720p @ 59.97fps).
  2. Use MPEG Streamclip to convert the rest of the footage (24fps, 30fps, etc) to the OfflineRT HD codec (Apple Photo JPEG [384x216]):
      
    Unknownname

    Yes, you can also transcode the footage to OfflineRT using the Media Manager in FCP itself, however it will take a LOT longer. (FCP: estimated 36 hours. MPEG Streamclip: 45 minutes)
  3. Make sure these files are in separate folder called "OfflineRT". The original clips + converted 60fps clips will be in a folder called "Originals". Make sure they have a similar directory structure and identical file names.
  4. Make a new project in FCP and import the original files from "Originals" folder into it.
  5. Place any beat markers, cut markers, etc on the audio file so everyone is cutting on the same beat.
  6. Create a new sequence with the Apple ProRes 422 1080p 30p settings and add the audio file to it.
  7. Save. This is your original project file. Make a backup if you want.
  8. Now you will create an "offline" version of the project where all the original, hi-res media files are disconnected. You will then reconnect them to the low-res files for faster proxy editing:
  9. Highlight all the files and sequences in your project. Right click and choose "Media manager".
  10. Choose "Create Offline".
  11. Set sequences to "OfflineRT HD" - same as the clips you converted earlier in step 2.
    0unknownname
  12. It will ask you to save your new project file with the low-res footage. It will resize everything for you (if it feels like it. Prepare for some fiddling with the scale for the upconversion later).
  13. Now you can send the project file to someone with the low-res OfflineRT clips, and they can reconnect them on their own drive to make quick edits:
  14. If you just opened the file, it will tell you the files are missing. Forget the render files but find the clips. Or cancel that window, highlight all your clips and sequences, right click and choose "Reconnect Media".
  15. Now is where the trick comes in: you will point FCP to your low-res OfflineRT clips so you can proxy edit with near-instantaneous render times:
  16. Choose a new "Search single location" folder - point it to the "OfflineRT" folder.
  17. Click "Search..."
  18. It will hopefully find the files that are named the same. Make sure "Reconnect all files in relative path" is checked and click "choose".
  19. It may warn you about in/out points. Hopefully this won't matter but be wary anyway for Murphy's sake. Click "Continue".
  20. You may have to repeat steps 16-19 until all the files are found. For some reason it doesn't always find them the first time.
  21. Edit away!
  22. Save the project file, share it, etc.
  23. Now you can email the .FCP file back to your master rendering machine. 
  24. Repeat steps 8-12 to create a new offline project, but this time setting sequences to the Apple ProRes 422 codec at 1080p to match your originals.
  25. Repeat steps 14-20 to reconnect the media clips, but this time to the hi-res "Originals" folder.
  26. Now you can render your project from the originals at full quality! Why isn't this easier?

Filed under  //   final cut pro   how to   video editing  

HTML5 Video on Android Phones

I have been trying to get an Android phone to work with LSD, the VJ application I wrote for HTML5 (see my earlier LSD post), so I can hook it up to my pocket projector and have a handheld VJ device for street and guerrilla performances!

However, despite the Android 2 feature list boasting it supports HTML5 video, it has a lot of holes in the implementation. I found this great post from Peter Gasston on making your video work on Android phones, which is a big help. I've implemented his recommended workarounds, like removing the "type" attribute on the source tag and manually playing the video with Javascript. If it works, this link should play a test video that is known to work on Android. Then we will see if it actually loads into the canvas, or if Android only supports playing one video at a time, fullscreen in the media player. I guess iPhone is ahead in this regard, but I still have yet to see it play all videos at once.

iPhone: 1 / Android: 8,543,341,231,324,212,378

Filed under  //   html5   programming  

VJing in Your Web Browser with LSD (Layer Synthesis Device)

I just spent a weekend coding a little proof-of-concept VJ application to test the live video mixing capabilities of HTML5, called LSD (Layer Synthesis Device). You can use LSD to VJ video clips on the web! Choose video clips and images and blend them together using the mixer controls or the interactive mouse mode. Create your customized hallucination directly in your browser and share with your friends!

Picture_7

I wrote LSD to try out the new video and 2D rendering capabilities of HTML5 and the Canvas element (and also to prove to myself that HTML5+jQuery is SOO much easier to work in than a language like Max/MSP or Processing). It worked surprisingly well. Use it on a fast browser like Safari or Chrome and you will see UI responsiveness and smoothness comparable to professional VJ software (eh, at low resolutions). Of course, the browsers still have a long way to get up to the speed of a native application, but it is a promising start. (You can even VJ on your phone! Come on, this must be the future already!)

Try LSD Now!

Supported on Firefox 3.5+, Safari 4+, Chrome, iPhone, Android (no IE, what a surprise...)

All the VJ clips and images are from my personal collection, licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. The code is licensed as open source under the GPL, so feel free to play with the code and share it!

Filed under  //   applications   html5   lsd   video   vj  

Ink - A Majestic Poem Amongst the Regurgitated Prose of Hollywood

Just saw Ink last night. Seems like one of those movies where you either love it or hate it; for me it is my new favorite movie! You will never see a movie like this come out of Hollywood - it throws their rules away and builds its own unique visual language, a majestic poem amongst the regurgitated prose of cookie-cutter movies today . It thrusts you into its tale in a beautifully multi-layered, metaphorical way, and the photography and low-budget special effects are dazzing (even if he went a little overboard on the post-processing filters - Winans thinks like a VJ, using colors and filters to alter the mood of the scene or signify a change in worlds - and it works really well!)

It is the first movie I've seen where the fabula and the sujet actually follow the same linear progression (mostly), even though it doesn't seem that way for most of the movie. Winans fools you into thinking it is a Nolan-esque sujet with the ending at the beginning, but then the ending totally twists it around into a Zen-like cyclical plot which leads to the most powerfully moving character development I've ever seen.

The acting is slightly flimsy at the beginning but strengthens quickly. Keep watching! It will all make sense. The characters, the costumes, the cute low-budget props and the fantastic ethereal world Winans creates has all the markings of a cult classic. This is the first movie I've actually wanted to physically own for a long time.

Watch Ink on Netflix!

Procedural Painting with HTML5

I just made this rather Carebear-colored painting straight in my browser, no Flash required, with an HTML5 app called Harmony! It was nice and fast too in Firefox. Mr. Doob does it again, with his pure HTML5 + Javascript genius!

Seeing this makes me want to bring back my master's thesis, Doodler. It was a social network based on drawing games, kind of a mash-up between Harmony and Facebook. I originally programmed it all in Flash, but it never really progressed past the beta (mainly for my pure hatred of Flash, secondly because I graduated and it was TIME FOR SUMMER! WOOO!). An HTML5 implementation though.... hmmmm...

Filed under  //   doodler   drawing   html5   javascript