<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6748147</id><updated>2011-12-28T10:10:27.679-08:00</updated><category term='appletv'/><category term='video'/><category term='mencoder'/><category term='iphone'/><category term='stubhub'/><category term='email organization gtd'/><title type='text'>John Harding - Insert Catchy Title Here</title><subtitle type='html'>Insert witty phrase/saying here.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.jharding.org/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6748147.post-2530492880234895834</id><published>2011-10-29T20:06:00.001-07:00</published><updated>2011-10-29T20:12:37.799-07:00</updated><title type='text'>Synchronizing music library in multiple formats</title><content type='html'>Getting a new Sonos player motivated me to clean up some problems in my CD ripping workflow. &amp;nbsp;First, some background:&lt;br /&gt;&lt;br /&gt;I decided a while back to rip all my CDs to FLAC. &amp;nbsp;The need for specific formats and bitrates are dictated by the device(s) you're trying to use, and with everything in FLAC, I can just re-encode my entire collection to a new format and/or bitrate whenever I want.&lt;br /&gt;&lt;br /&gt;I use EAC for ripping. &amp;nbsp;Works fine.&lt;br /&gt;&lt;br /&gt;I wrote my own tool, which I should publish sometime, to handle mirroring a music collection. &amp;nbsp;Conversion is handled by standard command line tools (e.g. lame) with config scripts that control the rules. &amp;nbsp;What's been a nagging problem for quite some time is The Compilation Problem.&lt;br /&gt;&lt;br /&gt;It's remarkably hard to find good write-ups on the "right" way to handle compilations, so for the sake of future searchers, here you go:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Set the artist on individual tracks to be the actual &lt;i&gt;track&lt;/i&gt;&amp;nbsp;artist. &amp;nbsp;So this will be a different artist for every track on a Soundtrack or DJ compilation&lt;/li&gt;&lt;li&gt;Set the album artist ("ALBUM ARTIST" tag in FLAC/Vorbis or "TPE2" in id3v2) to something fixed for the album - "Various Artists" in the case of a soundtrack or the name of the DJ for compilation CDs.&lt;/li&gt;&lt;li&gt;Ensure you set the "TCMP" tag to 1 in the id3v2 tag - this is what flags the tracks as part of a compilation. &amp;nbsp;iTunes will then pick these up and merge into one album, using the Album Artist field.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-2530492880234895834?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/2530492880234895834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=2530492880234895834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/2530492880234895834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/2530492880234895834'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2011/10/synchronizing-music-library-in-multiple.html' title='Synchronizing music library in multiple formats'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-5519716515289103982</id><published>2009-06-07T20:38:00.000-07:00</published><updated>2009-06-07T20:48:00.491-07:00</updated><title type='text'>First android app</title><content type='html'>I frequently worry that I forgot to close my garage door.  When this happens, I can either drive back home just to check, or assume that I closed it and try to move on with my life.  While there are much better solutions to this problem, I decided to solve it by writing an Android app.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jharding.org/androidcam.apk"&gt;The app &lt;/a&gt;periodically takes a picture using the camera in the phone, and uploads it to a site where the picture can be viewed.  At first, this was just a single location on my personal server, but for release, I created a simple Google AppEngine application to receive, list, and display the images.&lt;br /&gt;&lt;br /&gt;Please post any thoughts/feedback in the comments.  Some things I'll probably add:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Configurable # of recent images to be stored&lt;/li&gt;&lt;li&gt;Automatic generation of time-lapse video&lt;/li&gt;&lt;li&gt;Permissions/protection on the posted images&lt;/li&gt;&lt;/ul&gt;Other weird stuff:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It asks for permission to read the phone state - this is used to get the device's IMEI as a unique identifier.  I'm sure there are better solutions, and you can just manually set an identifier in the settings.  Problem will go away when I add permissions.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Dealing with the camera is a pain in the butt.  The emulator camera doesn't behave at all like the real hardware.  Currently, I re-initialize the camera after every picture, which is probably bad.  Focus is flaky.  And sometimes it ends up with a blank image, due to race conditions which I need to fix.  Blah blah blah.&lt;/li&gt;&lt;li&gt;It's ugly.  I know.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-5519716515289103982?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='' href='http://jharding.org/androidcam.apk' length='0'/><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/5519716515289103982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=5519716515289103982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/5519716515289103982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/5519716515289103982'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2009/06/first-android-app.html' title='First android app'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-8726833778309327315</id><published>2009-04-04T16:59:00.000-07:00</published><updated>2009-04-04T17:46:56.971-07:00</updated><title type='text'>Adult-proofing big wheels</title><content type='html'>One of my favorite annual San Francisco events is &lt;a href="http://www.jonbrumit.com/byobw.html"&gt;Bring Your Own Big Wheel&lt;/a&gt;, a big wheel "race" down a steep, winding road (Vermont St in SF's Potrero Hill neighborhood).  Last year, my friend Dave and I rode in the race, and learned some lessons about how badly a stock Big Wheel handles aggressive riding by an adult.  Fortunately, some simple modifications and reinforcement can make a dramatic difference.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mod #1: Remove the pedals&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IMx0FJTq1Fw/Sdf_BKvuZbI/AAAAAAAAAN0/EBvP6ZwC7Ds/s1600-h/IMG_1337.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_IMx0FJTq1Fw/Sdf_BKvuZbI/AAAAAAAAAN0/EBvP6ZwC7Ds/s200/IMG_1337.JPG" alt="" id="BLOGGER_PHOTO_ID_5321001880291009970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Pedaling a big wheel as an adult is just not effective - you're better off pushing with your feet.  In fact, the pedals are most likely just going to smack you in the shins.  For the SF course, they're even more of a liability, as the pedals will hit the ground on sharp turns and lift the front wheel up in the air, eliminating what little steering you had.&lt;br /&gt;Instead, I recommend just putting a bolt through the front wheel, with a cap nut on the other end.  Unfortunately, I didn't write down the proper length and size, but it shouldn't be hard to find them.  I put washers on either side of each prong of the fork, and used loc-tite on the cap nut to make sure it holds together.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mod #2: Tighter steering&lt;/span&gt;&lt;a style="font-weight: bold;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IMx0FJTq1Fw/Sdf5F5dPR7I/AAAAAAAAANM/dtJdQw4oFJQ/s1600-h/IMG_1339.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_IMx0FJTq1Fw/Sdf5F5dPR7I/AAAAAAAAANM/dtJdQw4oFJQ/s200/IMG_1339.JPG" alt="" id="BLOGGER_PHOTO_ID_5320995364479649714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The handlebar setup for big wheels is just not meant for aggressive steering - the plastic buckles easily, and the screw attaching the handlebars to the fork starts tearing up the plastic.  The end result looks like this:&lt;br /&gt;&lt;br /&gt;In an emergency, you can just wedge something in the gap between fork and handlebar (we used torn strips of cardboard during the race last year), but that's not going to last.&lt;br /&gt;&lt;br /&gt;What I ended up doing was picking up a pair of L brackets like &lt;a href="http://www.shortrunpro.com/l_bracket_62108_pc_vhv7738ytw_vhv81ytw_vhv1ytw_vhv20ytw.aspx"&gt;these&lt;/a&gt;, to effectively stiffen up the fork.  Go for thin ones, since there's not a lot of wiggle room between the fork and handlebars. First, attach the L brackets to the fork as shown here.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IMx0FJTq1Fw/Sdf7SnL8OuI/AAAAAAAAANU/jlWQAkwo8GM/s1600-h/IMG_1341.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: inline; text-align: left; cursor: pointer; width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_IMx0FJTq1Fw/Sdf7SnL8OuI/AAAAAAAAANU/jlWQAkwo8GM/s200/IMG_1341.JPG" alt="" id="BLOGGER_PHOTO_ID_5320997781936814818" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IMx0FJTq1Fw/Sdf7pO4inbI/AAAAAAAAANc/Y6_I4SIUQzQ/s1600-h/IMG_1342.JPG"&gt; &lt;img style="margin: 0px auto 10px; display: inline; text-align: right; cursor: pointer; width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_IMx0FJTq1Fw/Sdf7pO4inbI/AAAAAAAAANc/Y6_I4SIUQzQ/s200/IMG_1342.JPG" alt="" id="BLOGGER_PHOTO_ID_5320998170549984690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A few notes on this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It's unlikely you'll be able to remove the fork from the main body of the big wheel with the L brackets on.&lt;/li&gt;&lt;li&gt;Depending on where you originally screwed in the handlebars, you can try to re-use the original holes in the fork.  Make sure you use shorter screws, though - not the long ones that come with the big wheel.&lt;/li&gt;&lt;li&gt;I recommend putting a screw in all four sides.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_IMx0FJTq1Fw/Sdf-IparpFI/AAAAAAAAANk/nF-bFenF50A/s1600-h/IMG_1344.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 150px; height: 200px;" src="http://3.bp.blogspot.com/_IMx0FJTq1Fw/Sdf-IparpFI/AAAAAAAAANk/nF-bFenF50A/s200/IMG_1344.JPG" alt="" id="BLOGGER_PHOTO_ID_5321000909271704658" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Then, slide the handlebars on top of the L brackets.  Depending on shape and fit, you may have to squeeze the brackets together to fit the handlebars over them.  Push the handlebars down as far as you can - down to the heads of the screws holding the brackets to the fork.  Use the original, long screws to attach the handlebars to the L brackets, ideally using the original holes in the handlebars.  The screws will extend into the opening in the handlebars - my next step is to cut a block of wood to fit this gap, which will hold the screws in place.&lt;br /&gt;&lt;br /&gt;The L brackets should pick up most of the pressure for turning the handlebars, such that the &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IMx0FJTq1Fw/Sdf-inMMZSI/AAAAAAAAANs/WjPERdaJUsA/s1600-h/IMG_1349.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 150px; height: 200px;" src="http://4.bp.blogspot.com/_IMx0FJTq1Fw/Sdf-inMMZSI/AAAAAAAAANs/WjPERdaJUsA/s200/IMG_1349.JPG" alt="" id="BLOGGER_PHOTO_ID_5321001355350664482" border="0" /&gt;&lt;/a&gt;handlebar screws are just there to keep the handlebars from sliding up off the bracket.  However, I found that putting a second pair of screws in helps it hold a bit tighter. I recommend drilling small pilot holes for the extra screws - 3/32" for use with #10 screws.&lt;br /&gt;&lt;br /&gt;Unfortunately, my street isn't really steep enough to stress-test this new setup, so I'll have to wait until next week to see how it holds up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-8726833778309327315?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/8726833778309327315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=8726833778309327315' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/8726833778309327315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/8726833778309327315'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2009/04/adult-proofing-big-wheels.html' title='Adult-proofing big wheels'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_IMx0FJTq1Fw/Sdf_BKvuZbI/AAAAAAAAAN0/EBvP6ZwC7Ds/s72-c/IMG_1337.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-6669507590696678173</id><published>2008-11-08T12:45:00.000-08:00</published><updated>2008-11-08T16:23:32.644-08:00</updated><title type='text'>Subtitles on AppleTV and iPhone</title><content type='html'>&lt;span style="font-family: arial;"&gt;I've been trying to keep an eye on the various discussions around getting AppleTV and the iPhone to display subtitles - some of the content in the iTunes store has subtitles, but Apple has no published documentation about how to add your own.  It's kind of a pain to track, as there are a &lt;/span&gt;&lt;span style="font-weight: bold; font-family: arial;"&gt;lot&lt;/span&gt;&lt;span style="font-family: arial;"&gt; of older articles discussing burning subtitles into the video itself.  This has the nice advantage of working directly off the bitmap subtitles ripped from DVDs, but makes it awkward to share a single video file between AppleTV and iPhone.  It also means you can't turn them off, and if you use the zoom feature on the iPhone, you've got to be extra careful where you position them.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;There are a few mentions of the fact that the subtitle tracks are basically just standard 3GP timed text tracks, but with the 'hdlr' atom handler_type set to 'sbtl' intsead of 'text'.  &lt;/span&gt;&lt;a style="font-family: arial;" href="http://gpac.sourceforge.net/doc_ttxt.php"&gt;MP4Box has support for 3GP timed text&lt;/a&gt;&lt;span style="font-family: arial;"&gt;:&lt;/span&gt;&lt;blockquote style="font-family: arial;"&gt;mp4box -add subtitle_track.ttxt video.mp4&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-family: arial;"&gt;They use their own file format for the timed text source, but can covert from &lt;/span&gt;&lt;a style="font-family: arial;" href="http://en.wikipedia.org/wiki/Subrip"&gt;SRT &lt;/a&gt;&lt;span style="font-family: arial;"&gt;or SUB.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;What's bizarre is that quicktime, AppleTV, and iTunes all behave slightly differently and are more or less sensitive to different aspects.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;table style="font-family: arial;" border="3" bordercolor="black"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;File Extension&lt;/td&gt;&lt;td&gt;text vs. stbl&lt;/td&gt;&lt;td&gt;Set Language&lt;/td&gt;&lt;td&gt;Quicktime&lt;/td&gt;&lt;td&gt;iPhone&lt;/td&gt;&lt;td&gt;AppleTV&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;!-- Text handler --&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;mp4&lt;/td&gt;&lt;td&gt;text&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;m4v&lt;/td&gt;&lt;td&gt;text&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td bgcolor="yellow"&gt;Displayed, regardless of subtitle/caption setting&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;mp4&lt;/td&gt;&lt;td&gt;text&lt;/td&gt;&lt;td&gt;lang=en&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;m4v&lt;/td&gt;&lt;td&gt;text&lt;/td&gt;&lt;td&gt;lang=en&lt;/td&gt;&lt;td bgcolor="yellow"&gt;Displayed, regardless of subtitle/caption setting.  Different font than without language set.&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;!-- Sbtl handler --&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;mp4&lt;/td&gt;&lt;td&gt;sbtl&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;td bgcolor="yellow"&gt;Displayed, with subtitle control. Language shows as "undetermined"&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;m4v&lt;/td&gt;&lt;td&gt;sbtl&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td bgcolor="yellow"&gt;Displayed, with subtitle control.  Text not sized appropriately.&lt;/td&gt;&lt;td bgcolor="yellow"&gt;Displayed, with subtitle control. Language shows as "undetermined"&lt;/td&gt;&lt;td&gt;Not displayed. Can bring up Subtitle menu, but language shows as a second "Off" item, with both checked. Selecting has no effect.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;mp4&lt;/td&gt;&lt;td&gt;sbtl&lt;/td&gt;&lt;td&gt;lang=en&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;td bgcolor="green"&gt;Displayed, with subtitle control. Language shows as "English"&lt;/td&gt;&lt;td&gt;Ignored&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;m4v&lt;/td&gt;&lt;td&gt;sbtl&lt;/td&gt;&lt;td&gt;lang=en&lt;/td&gt;&lt;td bgcolor="yellow"&gt;Displayed, with subtitle control.  Text not sized appropriately.&lt;/td&gt;&lt;td bgcolor="green"&gt;Displayed, with subtitle control. Language shows as "English"&lt;/td&gt;&lt;td bgcolor="green"&gt;Displayed, with subtitle control. Language shows as "English"&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;Basically:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;Quicktime only works with .m4v file extension, does not require a language to be set, and handles 'text' differently than 'sbtl'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;AppleTV only works with .m4v file extension, requires a language to be set, and only works with 'sbtl'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;iPhone works with both .mp4 and .m4v file extensions, does not require a language to be set, and only works with 'sbtl'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;I think what's happening with Quicktime is that it's attempting to use positioning information, of which I haven't specified any.  Will look at that next to see if it's possible to make something that plays properly in all 3 cases.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: arial;"&gt;Note: &lt;/span&gt;&lt;span style="font-family: arial;"&gt;The still frames for the text/m4v files show the caption on the iPhone, even though it doesn't display during playback.  I assume this is because iTunes generates the still frame.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;The &lt;/span&gt;&lt;a style="font-family: arial;" href="http://hendrik.kaju.pri.ee/2008/08/24/quicktime-subtitles-revealed/"&gt;linked post&lt;/a&gt;&lt;span style="font-weight: bold; font-family: arial;"&gt; &lt;/span&gt;&lt;span style="font-family: arial;"&gt;indicates that &lt;/span&gt;&lt;span style="font-family: arial;"&gt;you need to change the alternate_group in the subtitle's tkhd atom from 0x0000 to 0x0002.  My testing did not show any change in handling with or without this modification in Quicktime, AppleTV, iPhone (firmware 2.1), or iPod Touch (firmware 2.1)&lt;/span&gt;&lt;span style="font-weight: bold; font-family: arial;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: arial;"&gt;I had to force a software update on my AppleTV to get it to handle the files properly, even though I was already on Take 2.  The symptom was that holding the "play" button would blank the screen.  It worked fine after update.&lt;/span&gt;&lt;span style="font-weight: bold; font-family: arial;"&gt;&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: arial;"&gt;Things work slightly better if you convert the SRT file to ttxt first:&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="font-family: arial;"&gt;mp4box -ttxt subtitles.srt&lt;/blockquote&gt;&lt;span style="font-family: arial;"&gt;It appears that if you just add an SRT file to a video, mp4box makes the text box for the subtitles the same size as the video.  So apparently, iPhone and AppleTV ignore the placement, while Quicktime respects it.  So what you need to do is:&lt;/span&gt;&lt;br /&gt;&lt;ul style="font-family: arial;"&gt;&lt;li&gt;Convert from SRT to ttxt as listed&lt;/li&gt;&lt;li&gt;Modify the &amp;lt;TextStreamHeader&amp;gt; element in the resulting ttxt file: width=[width of video] height=[20% of video height] translation_x=0 translation_y=[video height - height]&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: arial;"&gt;Quicktime appears to disregard the font size, and instead adjusts the font based on the height of the displayed text area - enough to fit 2 lines of text.  This means the amount of text you can fit is basically a function of the width of the text display.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-6669507590696678173?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://hendrik.kaju.pri.ee/2008/08/24/quicktime-subtitles-revealed/' title='Subtitles on AppleTV and iPhone'/><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/6669507590696678173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=6669507590696678173' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/6669507590696678173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/6669507590696678173'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2008/11/subtitles-on-appletv-and-iphone.html' title='Subtitles on AppleTV and iPhone'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-1605980966316156541</id><published>2008-08-16T20:23:00.000-07:00</published><updated>2008-08-17T01:01:00.620-07:00</updated><title type='text'>Tokyo Food Roundup</title><content type='html'>Kimberly and I have been in Tokyo this week, where I've been visiting with our Tokyo engineering team.  We were both a bit apprehensive about the eating situation, as we have somewhat "selective" taste in food (I don't eat vegetables and very little fish, Kimberly doesn't eat mammals).  In San Francisco, we're well-served by &lt;a href="http://www.yelp.com/"&gt;Yelp&lt;/a&gt;, which lets us avoid any bad food experiences, but unfortunately, they don't cover Tokyo.  So, I figured I'd review some of our food experiences:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7-eleven&lt;/span&gt;&lt;br /&gt;7-eleven has been a staple of our Tokyo eating, especially for breakfast.  After careful, scientific experimentation, we've determined that the best combination is 1 Starbucks Espresso Milano coffee drink and 2 halfway-covered-in-chocolate donuts per person.  Kimberly was also a big fan of the shrimp rice ball (triangle of rice with a shrimp inside, all wrapped in seaweed), which was versatile enough to cover all mealtimes.&lt;br /&gt;We've checked out some AM-PMs as well, but they just don't compare.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mochicream.com/"&gt;&lt;span style="font-weight: bold;"&gt;Mochi Cream&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Mochi Cream appears to be relatively new (at least their web site is).  They display their various flavored-filling mochi balls much like a high-end chocolate shop, and serve them frozen so you have to wait for them to thaw.  The outer shell appears to be that of a standard mochi ball, but the inside is filled with flavored creams.  Our favorite was the raspberry, though the chocolate banana was also quite tasty.  There's one in the east-west passage at Akihabara station, and apparently also Tokyu plaza just west of Shibuya station.&lt;br /&gt;I don't think this would do well in the US though - not nearly enough sugar.  Also a bit pricey at 200+ Yen per ball.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Shirube&lt;/span&gt;&lt;br /&gt;Can't find a good link/map for this one, in Shimo-kitazawa.  Both the restaurant (an &lt;span style="font-style: italic;"&gt;izakaya&lt;/span&gt;) and neighborhood are fantastic.  Laid back, not as crowded/touristy as the neighborhoods inside the Yamanote line, and just a really great vibe.  Head south from the station, and take a right at Mister Donut - should be a wall of shrubs along the right hand side of the narrow street.&lt;br /&gt;The restaurant itself was packed and very lively.  In nearly a week and a half in Tokyo, this was the only place we went that had us take off our shoes.  They &lt;span style="font-style: italic;"&gt;do &lt;/span&gt;have an English menu ("eego-menu"), which is always comforting - the fried shrimp from the "favorites" list on the back of the menu was fantastic.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mister Donut&lt;/span&gt;&lt;br /&gt;Speaking of Mister Donut, we checked one out in Shinjuku one evening - very disappointing.  Far too chewey - almost a bit stale.  We tried a green one, thinking it would be green tea, but ended up convinced that it was a seaweed donut.  Blech.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.tokyu-dept.co.jp/foodshow/"&gt;&lt;span style="font-weight: bold;"&gt;Tokyu Food Show&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SKfaOfY9JsI/AAAAAAAAAH4/YaLYZAAnbKY/s1600-h/dessert.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SKfaOfY9JsI/AAAAAAAAAH4/YaLYZAAnbKY/s320/dessert.jpg" alt="" id="BLOGGER_PHOTO_ID_5235393034320684738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In the basement underneath Shibuya station is the Tokyu Food Show - envision an entire floor of a deparment store devoted to take-out food.  Sadly, it's apparently inappropriate to eat there, so you can't really sample as you go.  For some reason, we didn't take pictures, but it's just absolutely overwhelming.  There was a dessert place with a name like "Origines Cicao" or something that had a crazy delicious raspberry chocolate cake.  Mmm..&lt;br /&gt;One thing that was really impressive was the care they take in packing up your food, particularly the desserts.  They put spacers into the box to hold everything in place, and then add disposable freezer packs to keep everything cold.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.muginohousa.com/"&gt;&lt;span style="font-weight: bold;"&gt;Beard Papa's&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Went to the one at Shibuya station.  Meh - tastes about the same as at home, but no flavored fillings and no chocolate covered puffs.&lt;br /&gt;&lt;br /&gt;More to come...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-1605980966316156541?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/1605980966316156541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=1605980966316156541' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/1605980966316156541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/1605980966316156541'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2008/08/tokyo-food-roundup.html' title='Tokyo Food Roundup'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_IMx0FJTq1Fw/SKfaOfY9JsI/AAAAAAAAAH4/YaLYZAAnbKY/s72-c/dessert.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-5235195578586093074</id><published>2008-07-26T18:05:00.000-07:00</published><updated>2008-07-26T18:07:42.352-07:00</updated><title type='text'>s/johnmharding.blogspot.com/blog.jharding.org/g</title><content type='html'>&lt;span style="font-family: arial;"&gt;Now that I've got my fancy new &lt;a href="http://jharding.org"&gt;jharding.org &lt;/a&gt;domain name configured properly, I've moved my blog to &lt;a href="http://blog.jharding.org"&gt;blog.jharding.org&lt;/a&gt;.  The old name, &lt;a href="http://johnmharding.blogspot.com"&gt;johnmharding.blogspot.com&lt;/a&gt;, should continue to redirect indefinitely.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-5235195578586093074?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/5235195578586093074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=5235195578586093074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/5235195578586093074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/5235195578586093074'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2008/07/sjohnmhardingblogspotcomblogjhardingorg.html' title='s/johnmharding.blogspot.com/blog.jharding.org/g'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-9144776299889729357</id><published>2008-07-26T09:52:00.000-07:00</published><updated>2008-07-26T16:57:21.770-07:00</updated><title type='text'>DNS cost optimization</title><content type='html'>&lt;span style="font-family:arial;"&gt;I run a &lt;a href="http://johnmharding.blogspot.com/2008/06/too-darn-hot.html"&gt;home server&lt;/a&gt;, which mainly exists for file serving and some hobby projects, and it's nice to have DNS actually work for it.  When I first set this all up a long time ago, either my DNS registrar didn't offer any decent DNS hosting options, or I somehow missed it.  No matter, as DynDNS offered cheap lifetime custom &lt;a href="https://www.dyndns.com/services/dns/custom/"&gt;DNS service&lt;/a&gt;, and I wanted something like that to deal with my frequently-changing cable modem IP address.&lt;br /&gt;&lt;br /&gt;A bit later, I went to set up a second domain, but DynDNS had stopped offering the lifetime service option, and had switched to charging ~$20/year.  No big deal, signed up, and forgot about it.&lt;br /&gt;&lt;br /&gt;Recently, I was finally able to sign up for jharding.org after someone let their registration lapse, but no way was I going to pay &lt;span style="font-style: italic;"&gt;another&lt;/span&gt; $25/year just to serve a few DNS records, so I finally looked into other options.&lt;br /&gt;&lt;br /&gt;I'd registered the new domain at &lt;a href="http://www.godaddy.com/gdshop/default.asp"&gt;godaddy&lt;/a&gt;, mainly because it was cheap, but they also give you decent control over DNS.  Armed with that, I can actually piggyback all my domains on the single DynDNS lifetime DNS service, since all you really need is a single authoritative A-record for your dynamic IP address.  Everything else can just be CNAME'd to that record.  Duh.&lt;br /&gt;&lt;br /&gt;So, if your domain is hosted at godaddy, you just:&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Go &lt;/span&gt;to &lt;span style="font-family:arial;"&gt;your domain manager interface, and select the domain you're trying to set up&lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;Click the "Total DNS Control and MX Records" link in the upper display area&lt;/li&gt;&lt;li style="font-family: arial;"&gt;Click "Advanced Mode" to get a better UI&lt;/li&gt;&lt;li style="font-family: arial;"&gt;Check the "Delete" box for the default A record and all the lame CNAMEs they set up, then "OK" to wipe those out&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Add 2 new CNAMEs:  One from "www" to your A-record, and one from &lt;your&gt; [your domain] to your A-record&lt;/your&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:arial;"&gt;For the second one, what I mean is if your new domain is "foobar.com", you'll actually set "foobar.com" as the host for the CNAME.  Alter&lt;/span&gt;nately, you can use their HTTP forwarding to have their web servers bounce "http://foobar.com" to "http://www.foobar.com", but that will only work for http, and results in an unecessary redirect, so I prefer the CNAME approach.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update: &lt;/span&gt;Unfortunately, I can't seem to find a cheap, reputable registrar that will accept inbound 3rd-level .name transfers, such as for &lt;a href="http://john.harding.name"&gt;john.harding.name&lt;/a&gt;.  I guess that one is stuck where it is.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-9144776299889729357?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/9144776299889729357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=9144776299889729357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/9144776299889729357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/9144776299889729357'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2008/07/dns-cost-optimization.html' title='DNS cost optimization'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-7529259161350197369</id><published>2008-07-23T19:52:00.000-07:00</published><updated>2008-07-23T19:56:54.540-07:00</updated><title type='text'>Windows pwnage</title><content type='html'>&lt;span style="font-family: arial;"&gt;I use my iPhone on T-mobile (under contract until end of the month), after unlocking 1.1.4 with ZiPhone 3.0 back in March.  Jealous of all the 2.0 excitement, I took the plunge and am in the middle of doing the hacked upgrade described &lt;a href="http://www.iphonehacks.com/2008/07/pwnage2-win-fix.html"&gt;here&lt;/a&gt;.&lt;/span&gt;  &lt;span style="font-family: arial;"&gt;Not sure if it was necessary, after ZiPhone hackage, but back on 1.1.4, I installed BootNeuter from installer.app and re-hacked that way.  What I'm not clear on is what ZiPhone 3.0&lt;/span&gt; &lt;span style="font-family: arial;"&gt;actually did.  &lt;span style="font-family: arial;"&gt;As &lt;/span&gt;far as I can tell, my phone (an AT&amp;amp;T refurb) was already on the 3.6 bootloader, so I don't think anything wacky happened there.  I'm a bit fuzzy on what exactly it was that ZiPhone was forced to downgrade - bootloader or baseband?&lt;br /&gt;&lt;br /&gt;Regardless, my phone just rebooted after the 2.0 update and re-BootNeuter, and everything seems to be working fine.  Kudos to the &lt;a href="http://wikee.iphwn.org/"&gt;iPhone dev team&lt;/a&gt;! &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-7529259161350197369?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.iphonehacks.com/2008/07/pwnage2-win-fix.html' title='Windows pwnage'/><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/7529259161350197369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=7529259161350197369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/7529259161350197369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/7529259161350197369'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2008/07/windows-pwnage.html' title='Windows pwnage'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-5259263156719923351</id><published>2008-07-13T18:07:00.001-07:00</published><updated>2008-07-13T18:13:28.447-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='mencoder'/><category scheme='http://www.blogger.com/atom/ns#' term='appletv'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>Update on encoding videos for iPhone/AppleTV</title><content type='html'>&lt;span style="font-family:arial;"&gt;I've committed some updates to the mencoder-wrapper svn repo (http://code.google.com/p/mencoder-wrapper/).  Notable changes:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Support for AppleTV output, including B-frames (&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;NOTE:&lt;/span&gt; This, unfortunately, requires the use of mp4box, which you can get from the &lt;a href="http://gpac.sourceforge.net/doc_mp4box.php"&gt;gpac project on sourceforge&lt;/a&gt;).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Better (for some definitions of "better") handling of scaling.  Uses mplayer to detect the source size and aspect ratio, and explicitly calculates new dimensions to fit in the target's size constraints.  Currently, this will use black bars to ensure size multiples, but I'll be adding an option to trade black bars for a bit of aspect ratio distortion (e.g. 480x272 vs. 480x270 w/ 1 pixel top and bottom for an anamorphic DVD on iPhone).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;In order to implement the scaling, added an analyzer concept - currently only using "mplayer -identify" but others could be used.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Refactored the code a bit to make it easier to unit test.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:arial;"&gt;Comments, suggestions, and feedback welcome as always.  &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-5259263156719923351?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/mencoder-wrapper/' title='Update on encoding videos for iPhone/AppleTV'/><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/5259263156719923351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=5259263156719923351' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/5259263156719923351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/5259263156719923351'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2008/07/update-on-encoding-videos-for.html' title='Update on encoding videos for iPhone/AppleTV'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-568885164784372261</id><published>2008-06-29T19:14:00.000-07:00</published><updated>2008-06-29T19:31:45.267-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='email organization gtd'/><title type='text'>No Inbox Thursday</title><content type='html'>&lt;span style="font-family: arial;"&gt;I'm pretty bad about managing my time and staying organized.  My company offers a &lt;a href="http://www.davidco.com/what_is_gtd.php"&gt;GTD&lt;/a&gt; course, which I took and really liked, but I struggle to really keep up with it.  Since the majority of my non-meeting work ends up in my inbox, my primary goal is just to effectively manage my inbox.  In rough approximation of GTD and &lt;a href="http://www.43folders.com/izero"&gt;Inbox Zero&lt;/a&gt;, I try to flag everything that I need to read/respond to with labels of different priorities, and archive or forward the stuf I don't need to do myself.  I try to keep five priority queues (which is turning out to be too many):&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li style="font-family: arial;"&gt;Urgent&lt;br /&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;Today/Tomorrow&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: arial;"&gt;This Week&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: arial;"&gt;This Month&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: arial;"&gt;Someday&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: arial;"&gt;In practice, I got to where I wasn't even able to clear out my "Urgent" queue on a daily or even weekly basis.  Part of my problem is I'm not delgating/deleting enough - I'll find stuff in my "Today" queue that's months old and just wasn't really ever worth doing.&lt;br /&gt;&lt;br /&gt;The other big problem, though, is getting distracted from working through my queued up tasks.  Going through my inbox, labeling/archiving mails as needed, is easy on the brain and can be done in small chunks of time; working through queued up tasks is more time- and energy-consuming.  The problem is, 50% of the time I respond to one of the "easy" messages in my inbox, it comes back 5 minutes later with a follow-up, and I spend all my time doing quick exchanges on a low priority item, just because each exchange can be done quickly.&lt;br /&gt;&lt;br /&gt;My solution: No Inbox Thursday.  My company has a standing policy of No Meeting Thursdays, meaning Thursdays are for getting work done and no one should schedule meetings that day, so engineers can have solid, uninterrupted time to work.  No &lt;span style="font-style: italic;"&gt;Inbox &lt;/span&gt;Thursday is the same principle, but applied to e-mail.  I set my e-mail auto-responder to tell people to contact me via phone or IM if their issue was really urgent, and then spent the entire day focusing only on pending tasks that I'd already flagged for follow-up. &lt;br /&gt;&lt;br /&gt;The result was fantastic - for the first time in months, I actually managed to completely clean out the backlog of items in my "Urgent" queue.  I'd been worried about annoying people, but only one person complained, and most people were quite supportive of the idea.  There was definitely a downside, as I had a lot of messages to process on Friday, but I'm convinced it was a net gain in productivity.  I couldn't repeat it this past Thursday, as I unfortunately had too many meetings on No Meeting Thursday to make for an effective No Inbox Thursday, but hope to make this a regular occurrence in the future.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-568885164784372261?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/568885164784372261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=568885164784372261' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/568885164784372261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/568885164784372261'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2008/06/no-inbox-thursday.html' title='No Inbox Thursday'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-5069286202532476889</id><published>2008-06-22T18:37:00.000-07:00</published><updated>2008-07-26T10:27:35.529-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='mencoder'/><category scheme='http://www.blogger.com/atom/ns#' term='appletv'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>More mencoder for the iPhone; AppleTV coming soon.</title><content type='html'>&lt;span style="font-family:arial;"&gt;I posted previously about my process for &lt;a href="http://johnmharding.blogspot.com/2008/05/encoding-video-for-iphone-with-mencoder.html"&gt;transcoding video for the iPhone with mencoder&lt;/a&gt;.  In addition to the base write-up, I started encapsulating that information into a python script to automate some of the settings.  It's quite simple right now, though it does have some basic options for different source types (progressive DVD vs. telecined, etc).&lt;br /&gt;&lt;br /&gt;What you'll see in there as well is the beginning of an attempt to define a target profile for the AppleTV.  What's in svn isn't ready for prime time yet for appletv encoding (should be fine for iphone), though I've got that coming.  The main challenge was the fact that, as mencoder kindly tells you, muxing the output with libavformat (such as used for mp4 output) is broken when using B-frames.  The result is a jittering in the video when played back with something other than mplayer.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;The traditional solution to the problem is to transcode to AVI, dump the raw video and audio streams with mencoder, then re-mux them with something like MP4Box, like so:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;mencoder -ovc copy -oac copy -nosound -of rawvideo input.avi -o video.h264&lt;br /&gt;mencoder -ovc copy -oac copy -of rawaudio input.avi -o audio.aac&lt;br /&gt;MP4Box -new remuxed.mp4 -add video.h264 -add audio.aac&lt;/blockquote&gt;The problem was, this wasn't working for me; the raw h.264 and aac bitstreams dumped by mencoder appeared to be invalid.  If I tried to mux just the h.264, MP4Box gave me "BitStream not Compliant".  Trying to mux just the AAC resulted in a floating point exception.  I wasn't able to play either stream with mplayer, either.  I thought this may have been a problem with the win32 builds of mencoder and MP4Box I grabbed, but I built from source on my &lt;a href="http://johnmharding.blogspot.com/2008/06/too-darn-hot.html"&gt;home server&lt;/a&gt;, and had the exact same problems.&lt;br /&gt;&lt;br /&gt;I considered chucking B-frames and just using a higher bitrate and CABAC for better quality, but B-frames are pretty key for getting better quality.  So I pressed on.&lt;br /&gt;&lt;br /&gt;I still haven't figured out why extracting with mencoder doesn't work, but I discovered that I can encode to mp4 with mencoder, extract the streams with MP4Box (which, conveniently, &lt;span style="font-weight: bold;"&gt;do&lt;/span&gt; properly play back with mplayer), and then re-mux them.  Note that a simple remux from mp4 -&gt; mp4 does not work.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;MP4Box -raw 1 input.mp4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;MP4Box -raw 2 input.mp4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;MP4Box -new remuxed.mp4 -add input_track1.h264 -add input_track2.aac -fps 23.976&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;Note the -fps command line argument - MP4Box can't identify the frame rate from the h.264 file, and assumes 25 fps if you don't tell it otherwise.  This framerate business is part of why I'm doing the wrapper script - you know the framerate when running mencoder to generate the output, so it's easy to pass along.  Another benefit of re-muxing with MP4Box is that it puts the 'moov' atom of the mp4 file up front, which most streaming mp4 players require (e.g. if you want to stream this file to your iPhone).&lt;br /&gt;&lt;br /&gt;I'll update the google code svn project soon, which will have full support for AppleTV via remuxing with MP4Box.  After that, I'm going to work on source type detection, so you won't need to tell it if the video is progressive, interlaced, telecined, etc.&lt;br /&gt;&lt;br /&gt;For reference, here's what my AppleTV encodes look like now (&lt;a href="http://www.blogger.com/comment.g?blogID=6748147&amp;amp;postID=3946219315127294845"&gt;using the dsize option Chris pointed out on in the comments to my last post&lt;/a&gt;):&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;c:\program files\mplayer\mencoder.exe steep_sample.avi -o c:\windows\temp\mencoderwrapperkmvuek.mp4 -vf dsize=854:480:0,scale=-8:-8,harddup -lavfopts format=mp4 -ofps 24000/1001 -faacopts mpeg=4:object=2:raw:br=128 -oac faac -ovc x264 -passlogfile c:\windows\temp\passlogfilejg_rsh.log -sws 9 -x264encopts cabac:level_idc=31:bframes=6:global_header:threads=auto:subq=1:frameref=1:turbo=1:pass=1:bitrate=1500 -of lavf&lt;br /&gt;c:\program files\mplayer\mencoder.exe steep_sample.avi -o c:\windows\temp\mencoderwrapperkmvuek.mp4 -vf dsize=854:480:0,scale=-8:-8,harddup -lavfopts format=mp4 -ofps 24000/1001 -faacopts mpeg=4:object=2:raw:br=128 -oac faac -ovc x264 -passlogfile c:\windows\temp\passlogfilejg_rsh.log -sws 9 -x264encopts cabac:level_idc=31:bframes=6:global_header:threads=auto:subq=5:frameref=6:partitions=all:trellis=1:chroma_me:me=umh:pass=2:bitrate=1500 -of lavf&lt;br /&gt;c:\bin\MP4Box.exe -raw 1 c:\windows\temp\mencoderwrapperkmvuek.mp4&lt;br /&gt;c:\bin\MP4Box.exe -raw 1 c:\windows\temp\mencoderwrapperkmvuek.mp4&lt;br /&gt;c:\bin\MP4Box.exe -new steep_appletv.mp4 -fps 23.976088 -add c:\windows\temp\mencoderwrapperkmvuek_track1.h264 -add c:\windows\temp\mencoderwrapperkmvuek_track2.aac&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Hope this helps someone.  And if anyone has any idea how to make this stuff format better on blogger, &lt;span style="font-style: italic;"&gt;please&lt;/span&gt; let me know.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-5069286202532476889?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/mencoder-wrapper/' title='More mencoder for the iPhone; AppleTV coming soon.'/><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/5069286202532476889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=5069286202532476889' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/5069286202532476889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/5069286202532476889'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2008/06/more-mencoder-for-iphone-appletv-coming.html' title='More mencoder for the iPhone; AppleTV coming soon.'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-787399092036654673</id><published>2008-06-17T20:54:00.001-07:00</published><updated>2008-11-12T19:38:04.880-08:00</updated><title type='text'>Too Darn Hot</title><content type='html'>&lt;span style="font-family:arial;"&gt;I run a server at home, primarily for in-the-house usage - it runs slimserver to power my &lt;a href="http://www.slimdevices.com/pi_squeezebox.html"&gt;squeezebox&lt;/a&gt;, runs some batch jobs to re-publish files as podcasts, and to experiment with some half-baked web site ideas.  It basically gets all the hand-me-down parts when I upgrade my main workstation.  At the moment, it's running an &lt;a href="http://www.amd.com/us-en/Processors/ProductInformation/0,,30_118_756,00.html"&gt;Athlon &lt;/a&gt;XP 2100 on an &lt;a href="http://global.msi.com.tw/index.php?func=proddesc&amp;amp;prod_no=505"&gt;MSI KT4V-L&lt;/a&gt; w/ 768MB of RAM and a collection of mismatched old IDE hard drives.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;That part of the hardware is fine, but the case is the first ATX &lt;/span&gt;&lt;span style="font-family:arial;"&gt;case I bought when building my first machine out of college in 99.  It's gone through several power supplies in the mean time, but is basically the same since then.&lt;br /&gt;&lt;br /&gt;Flash forward to this Summer.  It's been &lt;a href="http://www.wunderground.com/history/airport/KSFO/2008/5/15/DailyHistory.html?req_city=NA&amp;amp;req_state=NA&amp;amp;req_statename=NA"&gt;a bit on the warm side&lt;/a&gt; in San Francisco lately, and my workstation was hanging a lot.  "No problem," I think and install a &lt;a href="http://www.bestbuy.com/site/olspage.jsp?skuId=8498565&amp;amp;st=dynex+case+fan&amp;amp;lp=2&amp;amp;type=product&amp;amp;cp=1&amp;amp;id=1186004520483"&gt;simple case fan&lt;/a&gt;, which does the trick.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;While working on &lt;a href="http://johnmharding.blogspot.com/2008/05/encoding-video-for-iphone-with-mencoder.html"&gt;video encoding scripts&lt;/a&gt;, I ran into some stran&lt;/span&gt;&lt;span style="font-family:arial;"&gt;ge behavior w/ Windows builds of mencoder, MP4Box, etc., and decided to compile from source on my server.  But then I started having bizarre program crashes and hangs on that server, presumably due to the heat.  I don't have a good setup for closely monitoring temperature on the server, but my last check before the most recent crash was 41C on the motherboard and 75C on the CPU.  AMD claims the Athlon XP 2100 should be good up to 90C, but that seems to be bogus.  Can't find any data on maximum operating temperature for the motherboard.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;"I know how to solve this problem," I thought, and picked up two more case fans.  Unfortunately, when I went to install them, I discovered that my case was not designed with such extreme cooling&lt;/span&gt;&lt;span style="font-family:arial;"&gt; needs in mind - no case fan mount points.  I took the ghetto approach of zip tying a fan to the expansion card separators in back, but that clearly didn't help, as the 41C/75C reading was from tonight after that happened.  Guess it's time to buy a n&lt;/span&gt;&lt;span style="font-family:arial;"&gt;ew case.&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SFiLmKPJRII/AAAAAAAAAF8/GEc5z48Fopw/s1600-h/IMG_0786.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SFiLmKPJRII/AAAAAAAAAF8/GEc5z48Fopw/s320/IMG_0786.JPG" alt="" id="BLOGGER_PHOTO_ID_5213070056380515458" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SFiLmqJ3bgI/AAAAAAAAAGE/mz0dSYUyj30/s1600-h/IMG_0787.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SFiLmqJ3bgI/AAAAAAAAAGE/mz0dSYUyj30/s320/IMG_0787.JPG" alt="" id="BLOGGER_PHOTO_ID_5213070064948309506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;If anyone actually reads this, and either has an Athlon XP 2100 and/or knows the &lt;span style="font-weight: bold;"&gt;correct&lt;/span&gt; operating temperatures, I'd love to hear from you.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-787399092036654673?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/787399092036654673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=787399092036654673' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/787399092036654673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/787399092036654673'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2008/06/too-darn-hot.html' title='Too Darn Hot'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_IMx0FJTq1Fw/SFiLmKPJRII/AAAAAAAAAF8/GEc5z48Fopw/s72-c/IMG_0786.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-3956312756918662296</id><published>2008-06-08T15:45:00.000-07:00</published><updated>2008-11-12T19:38:05.085-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stubhub'/><title type='text'>StubHub is grossly incompetent</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_IMx0FJTq1Fw/SExnHGgguAI/AAAAAAAAAF0/McdnwuCp6Qo/s1600-h/IMG_0779.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_IMx0FJTq1Fw/SExnHGgguAI/AAAAAAAAAF0/McdnwuCp6Qo/s320/IMG_0779.JPG" alt="" id="BLOGGER_PHOTO_ID_5209652240664541186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Yes, they're a ripoff, too, but that's not my issue this time.  I bought tickets for a &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.hbo.com/conchords/"&gt;Flight of the Conchords &lt;/a&gt;&lt;span style="font-family:arial;"&gt;concert in San Francisco last month.  I hadn't bought tickets from StubHub before, and they turned out to be computer print-out tickets, which seemed a bit sketchy.  When we got to the auditorium, I was fully prepared for the tickets to be invalid, but they scanned at the door and we were in!&lt;/span&gt;  &lt;span style="font-family:arial;"&gt;We made our way to our seats, which turned out to be pretty good - 5 rows back in the balcony.&lt;br /&gt;&lt;br /&gt;So we're sitting there for a while, and then some guy comes and says we're in his seats.  We do the whole ticket-check thing, and -doh!- we were one section over from where we were supposed to be.  So we go over, to even better seats, but there's a coat on one of our seats.  The people next to us say that there are two girls sitting there, and that there'd already been a conflict over their seats, too.&lt;br /&gt;&lt;br /&gt;The opening act starts (which was pretty lame), and I go talk to the usher to see what's up.  The usher remembers the two girls, who happen to walk up as we're talking, and yep, they've got &lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;real &lt;/span&gt;&lt;span style="font-family:arial;"&gt;tickets.  Usher sends us down to the box office.&lt;/span&gt;  &lt;span style="font-family:arial;"&gt;So we go down to the box office, and they explain that the guy who bought the tickets had the order invalidated, because he bought over the limit (why did TicketBastard sell him tickets over the limit? one might ask), and that the tickets had been invalidated the day after they were bought, long ago.  Well, that sucks.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;I ask what our options are, and they tell me we can actually just buy two new tickets on the spot (strange, since it sold out in about 30 seconds).  I'll take two guaranteed tickets vs. telephone customer service any day, so we buy the tickets and head in.  Turned out to be even &lt;/span&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;better&lt;/span&gt; &lt;span style="font-family:arial;"&gt;tickets &lt;/span&gt;- &lt;span style="font-family:arial;"&gt;center section, 10th row.  Show kicked ass.&lt;br /&gt;&lt;br /&gt;Then the fun starts - a few days later, I call StubHub to explain what happened and ask for a refund, under their &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.stubhub.com/fanprotect-guarantee-legal#buyers"&gt;guarantee&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, which states:&lt;/span&gt; &lt;blockquote style="font-family: arial;"&gt;If tickets are invalid and are not honored by the venue:&lt;br /&gt;&lt;br /&gt;In the event the Buyer encounters any problems at the venue, the Buyer is encouraged to call StubHub Customer Service immediately at 1.866.StubHub (1.866.788.2482) for assistance. If the Buyer contacts StubHub from the venue at the time of the event, StubHub will attempt to locate comparable replacement tickets for the buyer. If replacement tickets cannot be found, or if the Buyer was not able to contact StubHub before the event, StubHub will provide the Buyer with a prepaid FedEx shipping label to use in returning the tickets to StubHub along with a Ticket Return Form. Upon confirmation by the venue that the tickets were invalid, StubHub will issue the Buyer a refund for the full cost of the tickets, including service fees and shipping and handling charges.&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-family:arial;"&gt;Great - I can ship the tickets back at no cost, and get a refund.  Good thing I paid a premium for such a reputable ticket scalping service!&lt;/span&gt;  &lt;span style="font-family:arial;"&gt;When I call (5/31/08), they explain the same story that the auditorium box office did - the guy's order was invalidated.  Then it gets interesting - they tell me they contacted me several times to try to issue replacement tickets, and that I called them on May 22nd (concert was May 27th) as well, so they're not going to issue me a refund.  Except, they didn't contact me, and I sure as hell did not contact them.  They wouldn't tell me how they "contacted me several times," refusing to even list the means of contact (they had a correct phone number and e-mail address, and the order confirmations had come through just fine).  After explaining to the rep that there had been no contact, she admitted that someone had made those notes on the wrong account, and that they had had no contact with me.  She said she'd escalate my issue to their resolution department, who would call me within 24-48 hours.&lt;/span&gt;  &lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;Three days later (6/3/08), and no phone call, so I call back.  I get another rep, who goes through the same "tickets were invalidated," "we contacted you several times," crap, but doesn't budge when I explain that their information is wrong.  I ask for a supervisor, and after sitting on hold for a while, she comes back and says it's going to be a very long wait for her supervisor and I should just wait for the resolution department to contact me.  "Fine," I say, and explain that I'll start the dispute process w/ my credit card company and hopefully they'll get in touch with me before that finishes.&lt;/span&gt;  &lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;Sunday, 6/8/08, and still no call, so I call back.  Rep says she can't do anything but send yet another request for their resolution department to contact me and mark it urgent.  Great - that's been working so well for the last week.  Fortunately, my credit card company's dispute department has much better customer service.  I also filed a dispute with the Better Business Bureau (case #&lt;/span&gt;&lt;span style="font-family:arial;"&gt;57121767).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update (6/9/08): &lt;/span&gt;Got a call from StubHub customer service today saying they'd found my blog post and wanted to resolve the issue quickly.  They said they posted the refund this morning, but it hasn't shown up on my credit card yet.  I guess the lesson is a blog post is more effective than calling customer service.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update (6/11/08):&lt;/span&gt; The refund finally came through today!  The customer service rep I talked to on Monday said their resolution department has had a high workload lately and hasn't been able to get to issues in their normal timeframe.  Still no good explanation of the incorrect notes about multiple contacts on my account, but I'm glad I've got my money back.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-3956312756918662296?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/3956312756918662296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=3956312756918662296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/3956312756918662296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/3956312756918662296'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2008/06/stubhub-is-grossly-incompetent.html' title='StubHub is grossly incompetent'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_IMx0FJTq1Fw/SExnHGgguAI/AAAAAAAAAF0/McdnwuCp6Qo/s72-c/IMG_0779.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-3946219315127294845</id><published>2008-05-24T11:05:00.001-07:00</published><updated>2008-07-26T10:28:38.569-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='mencoder'/><category scheme='http://www.blogger.com/atom/ns#' term='appletv'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>Encoding video for iPhone with mencoder</title><content type='html'>It's surprising how hard it is to find good, solid information about mencoder settings for the iPhone.  I finally got a decent script that takes care of a few common scenarios I care about, and figured I'd share.&lt;br /&gt;&lt;br /&gt;First, you need to get a decent build of mencoder.  If you're working on linux, head over to the &lt;a href="http://www.mplayerhq.hu/design7/dload.html"&gt;mplayer download page&lt;/a&gt;, grab the source, and build your own.  I'm doing this on Windows, so I grabbed the binaries from &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=205275&amp;amp;package_id=248631&amp;amp;release_id=592082"&gt;sourceforge&lt;/a&gt; (svn rev 26446), since I didn't feel like monkeying with msys.&lt;br /&gt;&lt;br /&gt;Now, let me start you with something that should definitely work, and then we'll talk about customizing:&lt;br /&gt;mencoder INPUT -o output.mp4&lt;br /&gt;-vf scale=480:-10,harddup&lt;br /&gt;-oac faac -faacopts mpeg=4:object=2:raw:br=128&lt;br /&gt;-of lavf -lavfopts format=mp4&lt;br /&gt;-ovc x264 -x264encopts nocabac:level_idc=30:bframes=0&lt;br /&gt;&lt;br /&gt;Breaking it down:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;-vf scale=480:-10 - Scale width to 480, set height appropriately, but keep a multiple of 16.&lt;/li&gt;&lt;li&gt;-vf harddup - Insert duplicate frames to maintain frame rate (Note: not sure if this is really needed - can the iPhone handle variable framerate?)&lt;/li&gt;&lt;li&gt;-x264encopts nocabac - iPhone only supports baseline profile, which does not allow CABAC&lt;/li&gt;&lt;li&gt;-x264encopts level_idc=30 - iPhone only supports up to level 3.0&lt;/li&gt;&lt;li&gt;-x264encopts bframes=0 - Baseline profile does not allow B-frames&lt;/li&gt;&lt;/ul&gt;Here's what I'm currently using, for a bit higher quality:&lt;br /&gt;mencoder.exe input.avi -o output.mp4 -vf scale=480:-10,harddup -lavfopts format=mp4 -faacopts mpeg=4:object=2:raw:br=128 -oac faac -ovc x264 -sws 9 -x264encopts nocabac:level_idc=30:bframes=0:global_header:threads=auto:subq=5:frameref=6:partitions=all:trellis=1:chroma_me:me=umh:bitrate=500 -of lavf&lt;br /&gt;&lt;br /&gt;The extra options:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;-sws 9 - I think I just grabbed this from somewhere - wtf?&lt;/li&gt;&lt;li&gt;global_header - Uses single global header instead of repeating every IDR - saves space&lt;br /&gt;&lt;/li&gt;&lt;li&gt;threads=auto - Enables multi-threaded encoding (faster, gives up a touch of quality)&lt;/li&gt;&lt;li&gt;subq=5 - Quarterpixel motion estimation&lt;/li&gt;&lt;li&gt;framref=6 - Use up to 6 reference frames&lt;/li&gt;&lt;li&gt;partitions=all - Consider all macroblock partition sizes&lt;/li&gt;&lt;/ul&gt;Other things I do, to come in a future blog post:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Two-pass encoding&lt;/li&gt;&lt;li&gt;Different settings for progressive DVD content, telecined DVD content, interlaced content, etc.&lt;/li&gt;&lt;li&gt;Manage this all via a python script&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Thanks to Chris Prince for his encoding settings, which helped me find my original braindead mistake of poor scaling target size.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-3946219315127294845?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/3946219315127294845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=3946219315127294845' title='25 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/3946219315127294845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/3946219315127294845'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2008/05/encoding-video-for-iphone-with-mencoder.html' title='Encoding video for iPhone with mencoder'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>25</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-3526747914062553007</id><published>2008-05-18T17:58:00.000-07:00</published><updated>2008-05-24T11:04:03.984-07:00</updated><title type='text'>Bug in appengine's urlfetch</title><content type='html'>Unfortunately, I wasted about an hour assuming I was doing something wrong before realizing I could dig into the development app server and debug.  The issue is that, at least with the development app server on Windows, urlfetch.fetch(url) will discard any query parameters in the url passed in.  This works fine on the actual hosted service.&lt;br /&gt;&lt;br /&gt;I filed a a &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=369"&gt;bug &lt;/a&gt;on google code, but you can fix it locally in the meantime.  The relevant file is in your appengine install folder, in google/appengine/api.  Edit urlfetch_stub.py, search for "connection.request" and fix it.  I modified mine to:&lt;br /&gt;&lt;br /&gt;        # Up to request, then s/path/path+query/&lt;br /&gt;        path_and_query = path&lt;br /&gt;        if len(query) &gt; 0:&lt;br /&gt;          path_and_query = path_and_query + '?' + query&lt;br /&gt;        connection.request(method, path_and_query, payload, adjusted_headers)&lt;br /&gt;&lt;br /&gt;Which still leaves off the fragment, but I'm OK with that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-3526747914062553007?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/googleappengine/issues/detail?id=369' title='Bug in appengine&apos;s urlfetch'/><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/3526747914062553007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=3526747914062553007' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/3526747914062553007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/3526747914062553007'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2008/05/bug-in-appengines-urlfetch.html' title='Bug in appengine&apos;s urlfetch'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-5303728612508650471</id><published>2008-05-03T17:59:00.000-07:00</published><updated>2008-11-12T19:38:06.875-08:00</updated><title type='text'>Replacing the LCD on a Canon SD850 IS</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;A few weeks ago, I dropped my new camera, a Canon SD850 IS, on the sidewalk, and cracked the LCD.  The camera still worked - you could still take pictures - but the LCD screen was solid white with obvious cracks in it.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;After doing some research, I turned up a few options for fixing it.  Most useful was a &lt;a href="http://photography-on-the.net/forum/showthread.php?t=7839&amp;amp;pp=20"&gt;long-lived&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt; thread (http://photography-on-the.net/forum/showthread.php?t=7839&amp;amp;pp=20) detailing a number of people's experience with replacing LCD screens on their own.  Another option was &lt;a href="http://www.thefotogeeks.com/lcd_repair.htm"&gt;The Foto&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.thefotogeeks.com/lcd_repair.htm"&gt; Geeks&lt;/a&gt;, who will repair the LCD for you, or sell you a replacement LCD.  My first plan was to just ship them the camera for repair, but my inner geek got the best of me.  I ordered the replacement LCD screen (&lt;a href="http://shop.thefotogeeks.com/index.asp?PageAction=VIEWPROD&amp;amp;ProdID=5967"&gt;CM1-4030&lt;/a&gt;) in order to do the replacement myself.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;I searched a bit further trying to find someone's write-up of repairing an SD850, but all the write-ups I could find were for different models (&lt;span style="text-decoration: underline;"&gt;SD400&lt;/span&gt;, &lt;a href="http://cannonlcdrepair.blogspot.com/"&gt;SD600&lt;/a&gt;).  Undaunted, I forged ahead.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:130%;"&gt;Step 1: Remove the battery.&lt;/span&gt;&lt;br /&gt;Just to be safe.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Step 2: Open the case.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are 7 screws you'll need to remove in order to get at the LCD screen:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Two on the left hand side of the camera (as you're looking at the LCD, not the lens)&lt;/li&gt;&lt;li&gt;Two on the bottom of the camera&lt;/li&gt;&lt;li&gt;One inside the battery compartment&lt;br /&gt;&lt;/li&gt;&lt;li&gt;One inside the A/V plug section&lt;/li&gt;&lt;li&gt;One underneath the loop for the wrist strap (this one is tricky).&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_IMx0FJTq1Fw/SB0PzpQrBlI/AAAAAAAAAEc/wBBJyZgrChQ/s1600-h/Battery+Screw.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_IMx0FJTq1Fw/SB0PzpQrBlI/AAAAAAAAAEc/wBBJyZgrChQ/s320/Battery+Screw.jpg" alt="" id="BLOGGER_PHOTO_ID_5196326924978947666" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SB0PzZQrBkI/AAAAAAAAAEU/CBrdAgqBXeU/s1600-h/Side+Screws.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SB0PzZQrBkI/AAAAAAAAAEU/CBrdAgqBXeU/s320/Side+Screws.jpg" alt="" id="BLOGGER_PHOTO_ID_5196326920683980354" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_IMx0FJTq1Fw/SB0PzpQrBmI/AAAAAAAAAEk/3NZMNM4hxx4/s1600-h/AV+Screw.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_IMx0FJTq1Fw/SB0PzpQrBmI/AAAAAAAAAEk/3NZMNM4hxx4/s320/AV+Screw.jpg" alt="" id="BLOGGER_PHOTO_ID_5196326924978947682" border="0" /&gt;&lt;/a&gt;You won't really be able to get to the last screw until you start getting the front cover off the camera.  Unscrew the first six and set them aside (note that at least the battery compartment screw is a different length).  I kept the battery compartment door open, but not sure if this was really necessary.&lt;br /&gt;&lt;br /&gt;I used a small, slotted screwdriver to gently try to pop open the case.  The write-ups for other camera models made it seem like the workings were attached to the front cover, and the back would just pop off.  Not for the SD850 - first, you've got to work the front of the camera loose a bit.  Then you'll be able to get to the screw underneath the wrist strap loop.  Note that something holds the front cover to the inner working of the camera - &lt;span style="font-weight: bold;"&gt;do not try to pull it completely off.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SB0QsZQrBnI/AAAAAAAAAEs/xGq_4-0v_hg/s1600-h/Wrist+Loop+Screw.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SB0QsZQrBnI/AAAAAAAAAEs/xGq_4-0v_hg/s320/Wrist+Loop+Screw.jpg" alt="" id="BLOGGER_PHOTO_ID_5196327899936523890" border="0" /&gt;&lt;/a&gt;I don't have much advice for getting the cover off - there are clearly tabs at the top that hold things together, so just go slow and be careful.  One thing that was very tough, though, was a long arm underneath the wrist strap loop.  I had to grab the wrist strap loop and pull sideways away from the camera to work this arm loose - see the green arrow here.&lt;br /&gt;&lt;br /&gt;Once you've got that last screw out, it's time to work on getting the back cover off.  I found it helpful to put one of the bottom screws back in to hold the front cover on.&lt;br /&gt;&lt;p style="clear: both;"&gt;&lt;span style="font-size:130%;"&gt;Step 3: Remove the damaged LCD&lt;/span&gt;&lt;br /&gt;Once you've got the back cover off, you'll have access to the LCD.  There are three screws to remove in order to take out the retaining clip.  The one in the top left was extremely hard to remove, as the head was very shallow.  After removing those screws, you should be able to remove the retaining clip that holds the screen down.  There's a second small part of the clip on the right of the LCD that came loose for me as well.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SB0TEZQrBoI/AAAAAAAAAE0/uu58jFHq6zI/s1600-h/LCD+Screws.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SB0TEZQrBoI/AAAAAAAAAE0/uu58jFHq6zI/s320/LCD+Screws.jpg" alt="" id="BLOGGER_PHOTO_ID_5196330511276639874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Unlike the other models, with the SD850, the backlight and LCD are a single assembly, so no worries about separating the two.  You'll need to slide the LCD to the left a bit to get it out from under a tab in the top right of the housing.  I made the mistake of just pulling out the two ribbon cables, but what you should do is lift the clips that lock them in place.  For the large cable, slide a small slotted screwdriver over the ribbon cable, into the clip and lift up.  For the small cable, slide the screwdriver into the &lt;span style="font-weight: bold;"&gt;back&lt;/span&gt; of the clip (opposite the ribbon cable) and lift up.  Remove the damaged LCD.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;p style="clear: both;"&gt;Step 4: Connect the new LCD screen.&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SB0TEZQrBpI/AAAAAAAAAE8/5FCsOcjaEBM/s1600-h/LCD+Connections.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_IMx0FJTq1Fw/SB0TEZQrBpI/AAAAAAAAAE8/5FCsOcjaEBM/s320/LCD+Connections.jpg" alt="" id="BLOGGER_PHOTO_ID_5196330511276639890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Reverse the steps above to connect the two ribbon cables.  Pull the LCD a bit to the left, slide under the tab in the top right of the housing, and press down to seat it into place.  Replace the two parts of the retaining clip, and screw it back down.&lt;br /&gt;&lt;br /&gt;At this point, you should theoretically be able to&lt;br /&gt;put the battery in, power up, and test.  I tried, but was unable to trigger the power button.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both;"&gt;&lt;span style="font-size:130%;"&gt;Step 5: Close up the case.&lt;/span&gt;&lt;br /&gt;This was actually a lot harder than I expected&lt;span style="font-size:100%;"&gt;.  If you screwed the front cover back on, remove &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_IMx0FJTq1Fw/SB0Ua5QrBrI/AAAAAAAAAFM/0zJyhnPz05Q/s1600-h/Cover+Clips.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_IMx0FJTq1Fw/SB0Ua5QrBrI/AAAAAAAAAFM/0zJyhnPz05Q/s320/Cover+Clips.jpg" alt="" id="BLOGGER_PHOTO_ID_5196331997335324338" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;those screws at this point, and re-loosen the front cover.  Start working the back cover back into place, taking care with the tabs on the top of the camera.  There's one tab, right near the shutter control, that has two stops - you'll need to lift it past the first stop to get all the way in.  Screw in the under-the-wrist-strap-loop screw.&lt;br /&gt;Work the front cover back into place, which should snap into those clips on the top of the camera.  Put all the screws back in, and you're done!&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-5303728612508650471?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/5303728612508650471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=5303728612508650471' title='27 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/5303728612508650471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/5303728612508650471'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2008/05/replacing-lcd-on-canon-sd850-is-few.html' title='Replacing the LCD on a Canon SD850 IS'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_IMx0FJTq1Fw/SB0PzpQrBlI/AAAAAAAAAEc/wBBJyZgrChQ/s72-c/Battery+Screw.jpg' height='72' width='72'/><thr:total>27</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-1058962350656343261</id><published>2007-07-19T08:38:00.000-07:00</published><updated>2008-05-24T11:05:01.990-07:00</updated><title type='text'>Custom players on YouTube</title><content type='html'>Testing out custom YouTube players:&lt;br /&gt;With playlist:&lt;br /&gt;&lt;object height="445" width="780"&gt;&lt;param name="movie" value="http://www.youtube.com/cp/vjVQa1PpcFMyKv6sLeCBZ2KQN-_0UptSjxmoYlAnU2s="&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/cp/vjVQa1PpcFMyKv6sLeCBZ2KQN-_0UptSjxmoYlAnU2s=" type="application/x-shockwave-flash" wmode="transparent" height="445" width="780"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;Without playlist:&lt;br /&gt;&lt;object height="430" width="500"&gt;&lt;param name="movie" value="http://www.youtube.com/cp/vjVQa1PpcFMyKv6sLeCBZwtA_4B9nQMZVw9sYshC8qk="&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/cp/vjVQa1PpcFMyKv6sLeCBZwtA_4B9nQMZVw9sYshC8qk=" type="application/x-shockwave-flash" wmode="transparent" height="430" width="500"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-1058962350656343261?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.youtube.com/my_players' title='Custom players on YouTube'/><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/1058962350656343261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=1058962350656343261' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/1058962350656343261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/1058962350656343261'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2007/07/custom-players-on-youtube-testing-out.html' title='Custom players on YouTube'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-115483810148563625</id><published>2006-08-05T20:54:00.000-07:00</published><updated>2008-05-24T11:04:50.649-07:00</updated><title type='text'>Wall Plates</title><content type='html'>Next up for the wiring improvements: wall plates. At the moment, I have the following wires all coming into the equipment area:&lt;br /&gt;5x Bose jewel cube speaker wires (see earlier post)&lt;br /&gt;5x 14 gauge speaker wire&lt;br /&gt;1x 3-RCA Component Video + 2-RCA Analog Audio&lt;br /&gt;1x S-Video&lt;br /&gt;1x HDMI&lt;br /&gt;&lt;br /&gt;I would like to add an additional set of wires, assuming I can open up some walls and run them:&lt;br /&gt;1x Cat-5 Ethernet&lt;br /&gt;2x 14 gauge speaker wire&lt;br /&gt;1x 3-RCA Component Video&lt;br /&gt;1x 2-RCA Analog Audio&lt;br /&gt;1x S-Video&lt;br /&gt;1x HDMI&lt;br /&gt;&lt;br /&gt;Currently, all this stuff basically just comes out of 2 separates holes in the shelving unit, and some of the wires don't quite reach all the way to where I want to put my equipment. On top of that, some of the cables (the video ones, primarily) have about 10-15 feet of extra slack that I'd really like to get rid of, or at least organize better. Wall plates seem like the way to go.&lt;br /&gt;&lt;br /&gt;Found the following at &lt;a href="http://www.ramelectronics.net/html/home-wiring.html"&gt;RAM Electronics&lt;/a&gt;:&lt;br /&gt;&lt;a href="http://www.ramelectronics.net/html/home-wiring.html"&gt;Standard wall plate units: &lt;/a&gt;&lt;br /&gt;HDMI @ $39.15 (WTF?!)&lt;br /&gt;Component Video @ $7.28&lt;br /&gt;S-Video + Analog Audio @ $17.95&lt;br /&gt;4-pair 5-way binding posts @ $19.35&lt;br /&gt;2-pair 5-way binding posts @ 9.90&lt;br /&gt;3-gang wall plate @ 2.25&lt;br /&gt;2-gang wall plate @ 2.00&lt;br /&gt;1-gang wall plate @ 1.00&lt;br /&gt;&lt;a href="http://www.ramelectronics.net/html/keystone.html"&gt;Keystone modular units: &lt;/a&gt;&lt;br /&gt;RCA jack @ 3.15&lt;br /&gt;S-Video jack @ 3.90 or 8.10 - not sure what the difference between them is.&lt;br /&gt;Cat-5 Ethernet jack @ 7.65&lt;br /&gt;1-, 2-, 3, 4-, and 6-port wall plates @ 2.10&lt;br /&gt;1-, 2-, and 3- port wall plate inserts @ 1.00, 1.10, and 1.20, respectively.&lt;br /&gt;&lt;br /&gt;Clearly, the Keystone Modular stuff is more expensive, but I don't think I've got a choice for the Cat-5, at least at Ram Electronics.&lt;br /&gt;&lt;br /&gt;On the speaker front, there's also this &lt;a href="http://www.lenexpo-electronics.com/product.php?productid=16221&amp;amp;cat=284&amp;amp;page=1"&gt;5-pair binding post plate &lt;/a&gt;for 17.49, though I'm not familiar with the store/manufacturer.&lt;br /&gt;&lt;br /&gt;Not seeing too much else that's reasonably priced...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-115483810148563625?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/115483810148563625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=115483810148563625' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/115483810148563625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/115483810148563625'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2006/08/wall-plates-next-up-for-wiring.html' title='Wall Plates'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-115458110681916079</id><published>2006-08-02T21:46:00.000-07:00</published><updated>2008-05-24T11:04:39.373-07:00</updated><title type='text'>Bose Blows</title><content type='html'>&lt;span style="font-family:arial;"&gt; &lt;/span&gt;After moving in, I finally started investigating the messed up speaker wiring that the previous owners had done in our place, and it turns out it's even crazier than I thought. The living room had 3 Bose Jewel Cube speakers (blech) mounted on the walls in approximately the right positions for Left Front, Left Surround, and Right Surround speakers. Great, I thought - just add one more and I've got everything solved! I had my contractor move a mysterious speaker wire from the adjoining room into a reasonable spot for the Right Front speaker and thought I was set, but I was Wrong.&lt;br /&gt;&lt;br /&gt;The Left Front and Left Surround speaker locations have Bose's funky RCA-&gt;Custom speaker wires pulled to them. The Right Surround speaker location had regular speaker wire pulled, but fortunately I found &lt;a href="http://www.4electronicwarehouse.com/products/bose/ac2-adapter.html"&gt;adapters &lt;/a&gt;that will let you connect regular speaker wire to the Jewel Cube speakers. Groovy.&lt;br /&gt;&lt;br /&gt;Problem #1: You can't buy just a single Jewel Cube speaker. Bose and their authorized resellers only want to sell you complete kits, or at least, a set of 5 cubes. Funk that. Turns out there are plenty of singles on eBay, but they're still going to run you about a benny.&lt;br /&gt;&lt;br /&gt;Problem #2: The stupid Bose custom wire. The all-knowing internets seem to think that it's basically just 18 gauge lamp cord with an RCA jack on one end and their custom connector on the other. I'm going to cut off the RCA jacks and see if the internets are correct.&lt;br /&gt;&lt;br /&gt;Problem #3: Assuming you've solved problem #1, apparently the speakers don't come with wall mounts. Fortunatley, that's an easier problem to solve either &lt;a href="http://www.4electronicwarehouse.com/products/bose/ub-20.html"&gt;here&lt;/a&gt; or &lt;a href="http://www.crutchfield.com/S-4mssQCbMpup/cgi-bin/ProdView.asp?search=bose+bracket&amp;amp;i=018UB20B"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For entertainment purposes only:&lt;br /&gt;I briefly entertained the idea of running the pre-out for the Left Front and Left Surround channels out from my receiver and into the Bose receiver, running it in stereo mode with the speakers hooked up accordingly. Not good - lots of hum - maybe due to mismatches in line levels or too much volume monkeying? Blech.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update:&lt;/strong&gt; Yep - 18 gauge lamp core inside an outer jacket. I'm a bit concerned about whether or not 18 gauge is thick enough to handle the power I want to put through there, though I guess it's moot until/unless I get a new receiver. Now I just need to splice on an extension to reach the location of my receiver.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-115458110681916079?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/115458110681916079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=115458110681916079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/115458110681916079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/115458110681916079'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2006/08/bose-blows-custom-speaker-wires-pulled.html' title='Bose Blows'/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-115403332940126163</id><published>2006-07-27T13:39:00.000-07:00</published><updated>2006-07-27T13:48:49.416-07:00</updated><title type='text'></title><content type='html'>Need to replace my exploded receiver (Rotel RSX965), but not sure what to get.  I'm considering going the separates route, just to be able to independently upgrade; everything is controlled by a programmable universal remote, so having to control multiple components really isn't a problem.&lt;br /&gt;&lt;br /&gt;Must have features:&lt;br /&gt;= Good DAC - this was one of the things I really liked about my Rotel&lt;br /&gt;= Flexible digital audio inputs, and lots of them.  The Rotel only had digital audio inputs for video sources (wtf?), and you couldn't mix and match 2 video sources (just video and audio).  This meant no squeezebox audio w/ DVD video, etc.&lt;br /&gt;= Component video switching (Need 4+ component inputs - ReplayTV, DVD, Xbox, Room to grow)&lt;br /&gt;= Dolby Digital, Pro Logic, etc.  Can you even get receiver or pre-processor w/out this stuff?&lt;br /&gt;= Line-level outputs (for driving a second TV setup)&lt;br /&gt;= On-screen display (equipment is in a separate room from the TV)&lt;br /&gt;&lt;br /&gt;Nice to Have:&lt;br /&gt;= Multi-zone speaker support - would like to drive some extra speakers; would be nice to do with the same system, but I've got an old receiver that could do the job if needed&lt;br /&gt;= Multiple video outputs, so the second TV setup could be using a different source than the primary&lt;br /&gt;= Component video up-conversion&lt;br /&gt;= HDMI switching&lt;br /&gt;&lt;br /&gt;Don't Care:&lt;br /&gt;= Crappy DSP make-you-sound-like-you're-in-a-cathedral modes&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-115403332940126163?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/115403332940126163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=115403332940126163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/115403332940126163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/115403332940126163'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2006/07/need-to-replace-my-exploded-receiver.html' title=''/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6748147.post-108146131469726423</id><published>2004-04-08T14:54:00.000-07:00</published><updated>2004-04-08T14:59:03.576-07:00</updated><title type='text'></title><content type='html'>testing?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6748147-108146131469726423?l=blog.jharding.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jharding.org/feeds/108146131469726423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6748147&amp;postID=108146131469726423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/108146131469726423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6748147/posts/default/108146131469726423'/><link rel='alternate' type='text/html' href='http://blog.jharding.org/2004/04/testing.html' title=''/><author><name>John Harding</name><uri>https://profiles.google.com/102736140524142066494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-QivMrT2O3MI/AAAAAAAAAAI/AAAAAAAABUQ/ntNZR3iQLAk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
