Video: How To Produce A Live Music Event Recording: Post-Production

To help answer the question of why it takes so long to get an event recording on disc, even for small events, I’ve put together this high-level, high definition (720p) behind-the-scenes walkthrough of the post-production editing, mixing, mastering, replication and packaging processes used for the ahCOOTstic Rock event (and others) brought to you by the Phoenix Independent Musicians’ Project (PIMP Google Group) and Sonic Binge Records.

Enjoy and please share this video!

If you’re in Phoenix and want to be part of hot event productions like this, join the Phoenix Independent Musicians’ Project!

iCal Domain Account Errors For New Events

Over the past couple weeks I’ve had issues getting my OSX 10.5 iCal client to continue working properly with our centralized CalDav server. I stopped being able to invite other domain users to my events as well as reserve “locations”, despite all my personal (non-domain) calendars continuing to work properly. I noted these iCal errors in Console.app…
*** -[NSConcreteTextStorage attributesAtIndex:longestEffectiveRange:inRange:]: Range or index out of bounds
CalDAVOperationQueue tried to dequeue operation <CalDAVScanDropBoxQueueableOperation: 0x174eb6a0> but it was not at the front of the queue.
When I tried to delete my domain account within iCal’s preferences, the application hung. When restarted I could no longer bring up the preference dialog and saw this error repeated in Console…
*** -[NSURL initWithString:relativeToURL:]: nil string parameter
Apparently deleting everything in ~/Library/Calendars and starting fresh is one solution. I have years worth of notes and interesting tidbits that I need to keep, however, so simply deleting all my data was not an option. With some educated guesswork, trial and error, I discovered that the following steps seems to make everything work without apparent data loss or corruption..
Quit iCal.
Go to ~/Library/Calendars and backup the entire directory, just in case.
Delete all “Calendar Cache” files as well as any directory ending in “.caldav”
Start iCal. It may give you a progress dialog about “Upgrading Calendars”. I think this means it’s rebuilding the cache file.
Go to “iCal -> Preferences…” and delete/readd your domain account.
Wait for the domain account to resync and you should be go to go.
Hope this helps!

appleOver the past couple weeks I’ve had issues getting my OSX 10.5 iCal client to continue working properly with our centralized CalDav server. I stopped being able to invite other domain users to my events as well as reserve “locations”, despite all my personal (non-domain) calendars continuing to work properly. I noted these iCal errors in Console.app…

*** -[NSConcreteTextStorage attributesAtIndex:longestEffectiveRange:inRange:]: Range or index out of bounds

CalDAVOperationQueue tried to dequeue operation <CalDAVScanDropBoxQueueableOperation: 0x174eb6a0> but it was not at the front of the queue.

When I tried to delete my domain account within iCal’s preferences, the application hung. When restarted, I could no longer bring up the preference dialog and saw this error repeated in Console…

*** -[NSURL initWithString:relativeToURL:]: nil string parameter

Apparently deleting everything in ~/Library/Calendars and starting fresh is the easiest solution. I have years worth of notes and interesting tidbits that I need to keep, however, so simply deleting all my data was not an option. With some educated guesswork, trial and error, I discovered that the following steps seems to make everything work again without apparent data loss or corruption..

  1. Quit iCal.
  2. Go to ~/Library/Calendars and backup the entire directory, just in case.
  3. Delete all “Calendar Cache” files as well as any directory ending in “.caldav”.
  4. Start iCal.
  5. It may give you a progress dialog about “Upgrading Calendars”. I think this means it’s rebuilding the cache file.
  6. Go to “iCal -> Preferences…” and delete/readd your domain account.
  7. Wait for the domain account to resync and you should be go to go.

Hope this helps!

How To Prepare For Ignite

ignite_phoenixI recently had the pleasure of speaking at Ignite Phoenix 4, and thought I’d share my perspective to those presenting in the future.

See, all my life I’ve been in performing musical groups–rock bands, solos with larger concert bands, marching bands etc.–so despite being introverted to a fault, I’m not easily intimidated by anything in the “performing arts” category, and am usually up for giving things the old college try. Within the past couple years I’ve become accustomed to speaking regularly at various city events, local tech groups, conferences etc., so I initially shrugged off the preparation as something I could bust out in an hour or two over a Heineken… or two.

I was wrong.

Now, I’m not dumping this information on you because you need to know my life history, but to strongly emphasize that even if you took Public Speaking in college, have performed literally hundreds of times in public, and have plenty of real-world speaking experience…

Preparing for Ignite is different.

It’s a wonderfully unique and fun experience, but I put more effort into my five minutes of Sun Tzu: The Art of…Business? than I usually do for 30-45 minutes of less creative informational content. Let’s look at why…

(1) Delivery timing is your biggest risk of failure.

Ignite fully automates the progression of slides; you cannot control advancement to give yourself even +/- 1 second. Also, for Phoenix at least, there’s neither a warning for how much time remains on the current slide, nor a preview of the next slide. If you’re accustomed to board-room style speaking with a forgiving remote, secondary screen full of notes/widgets, and 5-10 minutes of “padding” at the end, the Ignite format is a cold glass of water to the nether regions.

With a remote, keeping your verbal momentum lined up with slide advancement is relatively easy. You know exactly when your verbal punchline is going to come, and just hit the remote a split second before you say it. But in Ignite, the only way to get your voice and slides anywhere even remotely in the same synchronization ballpark is to practice the bloody hell out of it way ahead of time.

And when you’re done practicing, take a break and practice some more. Practice going slower and having to catch up. Practice going too fast and having to ad lib a few extra sentences here and there to fill “dead air”. Practice without any “next slide” or timing aids. Lather. Rinse. Repeat.

This is not to say that you should script the entire thing. Scripting sounds unnatural and dull. You should, however, know the subject matter inside and out, and know the outline and “story arc” of the presentation so that when you stumble on words or get out of sync, you’ll be able to recover.

For the audiences standpoint, your level of preparation will be abundantly clear. It’s obvious who didn’t have a verbal outline prepared; who didn’t practice for pacing; who did prepare but can’t handle being over/under time; how generally hard it is to time yourself versus a computer.

And much of this practicing should occur before your slides are due.

(2) Your slides need to be completed waaaay in advance.

Ignite isn’t the only event that requires final decks to be submitted in advance, but I know that many of you are in the habit of staying up ’til 4am day-of putting the (hopefully) finishing touches on slides. You can’t do that. The Ignite superheros need your slides early to prepare their technical voodoo, and asking them to update a few slides at the last minute would be very, very lame of you. Getting your slides prepared and finalized early is critical since you can’t practice delivery without them, and once they’re submitted you should assume that you can’t change them.

Get peer feedback before you submit your slides. My thanks goes out to Erica, Ben and Marc at OpenRain for providing the “you’re trying to say way too freakin’ much” feedback … it made the end result much better than it would have otherwise been. Peer review is always difficult to do, but discovering why you’re epically fail-sucking is the only gateway to improvement.

(3) You don’t get to rehearse in the venue.

The Ignite (Phoenix) folks want to keep your delivery fresh, natural, and full of adrenaline to showcase your passion. This is a good thing. Just be aware that you probably can’t walk out on stage beforehand for a quick run-through by yourself.

(4) Your bar is high.

In general public speaking, the audiences wants you to succeed. And when you’re speaking to an audience that is present for your message–such as Ignite–they’ve already built expectations of how awesome your message and delivery will be. If the message(s) couldn’t sell, there wouldn’t be an audience. You are expected to be awesome.

I’ve yet to meet anyone that says “Ignite sucks”, but have heard plenty of “Oh, it was awesome, but remember that one guy/gal? He/She was horrible.” Don’t be that guy/gal whose idea of originality is to do zero preparation and just “wing it” or divert from the slides in a otherwise distracting, unprofessional mess. People come to see great ideas from passionate, knowledgeable people, and it’s going to take some work to get that across in Ignite’s concise format.

Ignite preparation checklist. (Sorted by due date.)

  1. Well thought out proposal submitted.
  2. Talk accepted.
  3. Slide draft and verbal outline complete.
  4. Peer rehearsal and feedback.
  5. Adjust.
  6. Final sanity check.
  7. Submit final slides.
  8. Practice.
  9. Sit in parking lot for 15 minutes before event practicing by yourself. (Strange looks from passers by expected!)
  10. Be excellent.

You have the idea and the passion. Now go show us! (Just keep it brief.)

How To Change A WordPress Permalink Structure While Preserving SEO

permalink_redirect

I’ve been putting off changing my blog permalink structure for about 2 years for fear of getting SEO-smacked by Google. No joke. WordPress allows you to easy change the permalink structure with a few clicks, but doesn’t generate permanent redirect (HTTP 301) responses for visitors using the old link structure. Non-redirection link changes for established blogs extremely unwise since you lose all the SEO goodness with search engines such as Google, so I sat down tonight to figure out how to safely make the change.

The easiest solution is to use the Permalink Redirect WordPress Plugin by Scott Yang. This creates a “Permalink Redirect” page under “Settings” in the WordPress admin area where you may specify the old permalink structure from which to redirect. Incoming visitors to the old URLs will automatically 301 permanent redirect to the new URL structure as expected. Thanks, Scott!

I also tried the redirection features of the Platinum SEO and Advanced Permalinks plugins. Platinum SEO can handle post-specific permalink changes, but not site-wide permalink changes. Advanced Permalinks is no longer maintained and did not work for me within WordPress 2.7.

Photography Is A Lie: Creating Compelling Event Photos

When it comes to “good” event photography, it’s a misconception that a given photo is representative of the entire event condensed down to a few well-framed shots. My process is both equal and opposite: to mislead the viewer into believing a few highly manipulated fleeting moments reflect the larger context by pleasing the eye with consciously undetectable lies. Flat-out, bold-faced, deception.

Photography is about contorting perceptions of reality. We want to believe the handful of infinitesimally small glorious moments at our weddings, birthdays and holidays represent the way people felt the entire time, when they really only capture less than 1% of the entire event. Don’t believe me? Watch a wedding video. The whole thing. Booooooring. No one really cares about the 45 minute toast or 15 minute car processional out of the parking lot. We do care, however, about the idea of the toast and vehicle processional and enjoy remembering the initial excitement, just not the long tail of boredom. You, as a photographer, thus have tremendous power to influence others perception of events if you teach your camera to lie.

For example, take this photo..

Yuck. It’s your typical crap run-of-the-mill shot you’d see on flickr, and I don’t feel anything special when I view it. It’s true to reality, which isn’t interesting. Now take this next shot…

Not fine art, but much better: not because the situation or environment changed, but because we’ve lied about several things..

Movement. Look closely for “lines” formed by different objects in the first shot. It’s a chaotic mesh wherein the eye does know what to focus on. I don’t know what I should be looking at so my eyes are jumping all over the place. Am I supposed to be looking at the water jug? ..the dog? I have no idea. But in the second shot, notice how the diagonal line formed by the bottom of the house and the ground is mimicked by the step up to the door; by the dogs front feet; by the direction the dog is looking and moving; by the orientation of the two dogs. The movement of the entire shot eminates from the top right corner and radiates outward towards the other three. I know what I should be looking at and feel like something is happening because we’re created artificial movement.

White balance. The first photo is fairly accurate in terms of of the ambient light quality. The light was slightly bluish, which also happened to match the physical temperature of being very cold. But I don’t want you to feel cold. I want you to feel warm and fuzzy and giddy about the purdy doggy. The second shot feels warm, like a bright, sunny summer day, even though it was nearly freezing and about to rain.

Color. We’re pushed the saturation levels in the second shot to the extreme, but not quite so far as to detect our fib. Skies are not this blue, grass not this yellow/green, and adobe not this orange. Notice how every object has a distinct complementary color theme which is not intruded upon, as well as the exclusion of purple and red in the central theme.

Framing and cropping. By removing unnecessary distractions, we’re left with only the photos core concept to dwell upon. The negative space of the barren wall, sky and ground have distinct textures but are mostly devoid of objects which would steal our focus from the subject. We’ve tried to frame the dogs according to the rule of thirds, and all unnecessary concepts which could have been removed in the moment, have been.

Conclusion

Good photos are in the eye, not the technology, so you should strive to get great images straight out of the camera rather than rely on post-processing as a crutch. All of these concepts can be executed on a modern SLR and often only require post-processing for fine tuning.

Extra Credit Update! Spot the lie in this photo. (Hint: there’s an object in the room which shouldn’t be there!)

Speaking Twice At ABLEconf: Saturday, September 20th, 2008

I’ll be giving two sessions this Saturday, September 20th, 2008 at ABLEconf: Arizona Business and Liberty Experience hosted at the University of Advancing Technology. The first will be a ~50 minute getting-started-with-ruby-on-rails type session aimed at developers similar to the one I’m giving this Wednesday for Joe Developer. The second will be a plug-heavy talk over how OpenRain does F/OSS-friendly web development in the commercial space using F/OSS software and tools, targeted for a business-minded crowd.

ABLEconf is a new event so I’m not sure what to expect, though I’d put my money on a lot of systems-level event content since much of the participation seems to be from local Linux groups.

Installing The MySQL Ruby Gem When Using The Official MySQL .dmg

If you installed MySQL using the official .dmg package provided by MySQL AB/Sun and are trying to install the native MySQL gem, you’ll need to pass a bunch of flags to the gem install process to get the thing to compile. Try this..

sudo gem install mysql — –with-mysql-config=/usr/local/mysql/bin/mysql_config

..if you still have issues (check your /opt/local/lib/ruby/gems/<ruby_ver>/gems/mysql-<gem_ver>/mkmf.log file), try this instead..

sudo gem install mysql — –with-mysql-dir=/usr/local/mysql –with-mysql-include=/usr/local/mysql/include/ –with-mysql-lib=/usr/local/mysql/lib/ –with-mysql-config=/usr/local/mysql/bin/mysql_config

Run `sudo gem install mysql` and definitely recheck the log file again as the gem install process sometimes reports false positives even if native components fail to install.

Rails attachment_fu/Kropper Scaling Fix: attachment_fu_skip_resize

I recently integrated Kropper into a custom RoR application for OpenRain affiliate img surf. A fundamental flaw in the upload-save-crop-save process used by Kropper is that attachment_fu automatically scales down the image on first save to :resize_to dimensions. After the subsequent crop–which may result in a significant drop in resolution–the image is scaled back up to :resize_to dimensions: an ugly lossy operation.

The attachment_fu_skip_resize plugin gives attachment_fu the ability to temporarily bypass resizing of the full-size original image, thus allowing your final cropped photos to be of the highest quality as possible.

  1. Install the plugin.
  2. In your attachment_fu image class, add..
    attr_accessor :skip_resize
  3. Any time you want to save an image without invoking resizing on the original image..
    image.skip_resize = true
    image.save

    Thumbnails will be generated at their defined resolutions regardless of the skip_resize flag.

Dynamically Generating SSL Certificates with Ruby on Rails

OpenRain had a couple projects recently need to programmatically generate private keys and SSL certificates in Ruby. To contribute back to the community, we’re releasing several small things today.

  • SSLsicle.com A simple form which does the OpenSSL grunt work and pop outs an SSL certificate ready to use with Apache (or whatever). SSLsicle uses..
  • eassl_fix A Rails plugin which patches a small but critical bug in the eassl v0.1.1643 gem which makes OpenSSL object manipulation a bit less dense. I’ve submitted a patch (included) to the author, but as of today he hasn’t applied it. (Also, props to the JumpBox guys.)

If you need to write your own code to generate SSL certificates in Rails..

  1. sudo gem install eassl
  2. Install the eassl_fix plugin
  3. Bust out a view for the user to enter the information that gets baked into the cert and then write a few lines in your controller…
    require 'eassl'
    key = Key.new
    options = {
    :country      => params[:csr][:country],
    :state        => params[:csr][:state],
    :city         => params[:csr][:city],
    :organization => params[:csr][:organization],
    :department   => params[:csr][:department],
    :common_name  => params[:csr][:common_name],
    :email        => params[:csr][:email]
    }
    name = CertificateName.new(options)
    csr = SigningRequest.new(:name => name, :key => key)
    ca = CertificateAuthority.new(:password => nil)
    cert = ca.create_certificate csr
    @pem = key.private_key.to_s
    @pem += cert.to_pem
  4. @pem.to_s will contain an unencrypted private key as well as a signed certificate suitable for deployment.