John Harding - Insert Catchy Title Here

Insert witty phrase/saying here.

Sunday, June 29, 2008

No Inbox Thursday

I'm pretty bad about managing my time and staying organized. My company offers a GTD 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 Inbox Zero, 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):
  • Urgent
  • Today/Tomorrow
  • This Week
  • This Month
  • Someday
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.

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.

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 Inbox 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.

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.


Sunday, June 22, 2008

More mencoder for the iPhone; AppleTV coming soon.

I posted previously about my process for transcoding video for the iPhone with mencoder. 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).

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.

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:
mencoder -ovc copy -oac copy -nosound -of rawvideo input.avi -o video.h264
mencoder -ovc copy -oac copy -of rawaudio input.avi -o audio.aac
MP4Box -new remuxed.mp4 -add video.h264 -add audio.aac
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 home server, and had the exact same problems.

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.

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, do properly play back with mplayer), and then re-mux them. Note that a simple remux from mp4 -> mp4 does not work.
MP4Box -raw 1 input.mp4
MP4Box -raw 2 input.mp4
MP4Box -new remuxed.mp4 -add input_track1.h264 -add input_track2.aac -fps 23.976
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).

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.

For reference, here's what my AppleTV encodes look like now (using the dsize option Chris pointed out on in the comments to my last post):
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
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
c:\bin\MP4Box.exe -raw 1 c:\windows\temp\mencoderwrapperkmvuek.mp4
c:\bin\MP4Box.exe -raw 1 c:\windows\temp\mencoderwrapperkmvuek.mp4
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

Hope this helps someone. And if anyone has any idea how to make this stuff format better on blogger, please let me know.

Labels: , , ,

Tuesday, June 17, 2008

Too Darn Hot

I run a server at home, primarily for in-the-house usage - it runs slimserver to power my squeezebox, 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 Athlon XP 2100 on an MSI KT4V-L w/ 768MB of RAM and a collection of mismatched old IDE hard drives.

That part of the hardware is fine, but the case is the first ATX 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.

Flash forward to this Summer. It's been a bit on the warm side in San Francisco lately, and my workstation was hanging a lot. "No problem," I think and install a simple case fan, which does the trick.

While working on video encoding scripts, I ran into some strange 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.

"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 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 new case.

If anyone actually reads this, and either has an Athlon XP 2100 and/or knows the correct operating temperatures, I'd love to hear from you.

Sunday, June 08, 2008

StubHub is grossly incompetent

Yes, they're a ripoff, too, but that's not my issue this time. I bought tickets for a Flight of the Conchords 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! We made our way to our seats, which turned out to be pretty good - 5 rows back in the balcony.

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.

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
real tickets. Usher sends us down to the box office. 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.

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 better tickets - center section, 10th row. Show kicked ass.

Then the fun starts - a few days later, I call StubHub to explain what happened and ask for a refund, under their
guarantee, which states:
If tickets are invalid and are not honored by the venue:

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.
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! 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.

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.

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 #

Update (6/9/08): 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.

Update (6/11/08): 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.