all posts tagged 'television production'

October 2024 Observations

originally shared here on

  • It's amazing how fast my mental health torpedoes when I get a terrible night of sleep.

  • One parenting tip that's helped me cope with big emotions: reframe the situation from "you versus me" to "us versus the problem." It's not "why did you clog the toilet and let poop water overflow over the edge," it's "how can we make it so our toilet doesn't get clogged with an entire roll of toilet paper anymore?" Ask me how I came up with that specific scenario!

  • Focus remains a challenge for me. I would love nothing more than to be able to set a schedule and stick to it, but when I go to sit down and honor the schedule, my body does everything in its power to stop me in my tracks. I can't tell why... maybe there's something more wrong with me, maybe I'm not disciplined enough. Maybe it's something else.

  • Much of my 2024 experience involved adding a new entry to the list of questions that cycle in my inner monologue: "are these feelings just a part of the human experience, or is there a way to better way to process and cope with these feelings?"

  • There's a quote by Yohji Yamamoto that goes, "Start copying what you love. Copy, copy, copy, copy. And at the end of the copy, you will find yourself." I wrote that down nearly two decades ago, and it's only in the last few months that I've started to understand what it means.

  • My inability to manage tasks is what likely led to me getting sick going into my anniversary trip to New York. Everything is a choice, and sometimes, you gotta be okay with the consequences of the choices you make. I decided to spend an entire afternoon shopping and playing pull tabs at our old neighborhood bar with my wife instead of building graphics for a show I worked on. Then I had to stay up until 11pm building those graphics. Was it worth it? ...absolutely.

  • If you ever want to see a masterclass in problem solving, go sit in the booth during a live television broadcast.

  • Of all the terrifying places on earth, the one which still frightens me the most is sleeping in an unfamiliar bed.

  • I'd like to further explore the intersection of fear and confidence.

  • I spent a few days in New York, and it was fascinating to see the role that selfishness plays in that culture. In the midwest, cooperativeness is a necessity... if you were a dick to your neighbor in the summer, he might not wanna lend you firewood when you're freezing to death in the winter. In New York, everyone's selfishness stands in as a proxy for respect. People are curt not out of hostility, but as if to say "I won't take up any more of your time than I need to."

  • I've known my wife for nearly 14 years now, and it took all this time to feel like I understand her. And now that I do, I love her even more, and I'm so lucky to have been married to her for a decade.

  • I watched the entire "Mr. McMahon" docu-series on Netflix in a couple days (thanks Covid lol), and there was a moment in there where Shawn Michaels was talking about the kickback they were receiving from parents in the late 90s. His philosophy at the time was "if you don't like it, be a parent and ban your kids from watching it." Now that he has kids, he's realizing that you can't exactly do that. We can't shelter our kids from the realities of our society. There's so much good and so much bad that we are exposed to in our lives, and it's our job as parents not to shelter our kids from it, but help them learn how to navigate it.

  • That being said: I loved the attitude era. I loved the campy stories of irreverent punks beating up their bosses, sticking up for themselves, meting out their own brand of vigilante justice. It is (and was) also super messed up. It can be both of those things.

  • In the past, starting something new meant I should make huge, sweeping changes to my entire life. New job? That must also mean new exercise routine, new meal habits, and new hobbies. 36 year old Tim realizes that I can only bite off so much, and it would be more sustainable to focus on doing well at my new job, and then taking on new challenges once I am settled in.

  • I like to think that if the famous writers throughout history had the same tech as us, they'd have their own RSS feeds and publish their own thoughts frequently on their blogs.

  • There was a moment last week where I was grilling wings and watching my wife try to get our new moped running, my son argue about being outside (it was gorgeous out and I made him get off of Minecraft to enjoy it lol), and my daughter raise hell with the neighbor kids. I was listening to a new album, and reflecting on how much fun I had at work learning new stuff all week. That's when it dawned on me: "I've made it."

  • I don't think my parents and teachers growing up were wrong to focus on teaching us skills we need to survive in this world. I just wish they'd also have taught us how to enjoy things, too.

  • Dreamworks is more than capable of serving as stiff competition to the Disney empire. The Wild Robot was really good! I wish there were more studios cranking out enjoyable, emotionally-charged stories catered toward a family audience in animated form.

  • RuPaul often says, "if you can't love yourself, how in the hell are you gonna love someone else?" I find it difficult to love myself. All the techniques I've used to address my debilitating impostor syndrome involve some variant of tough love, and believe it or not: that never really helped me much. What's working for me currently is talking to myself the way I talk to my kids. Be positive. Focus on what you can change. Be humble and admit when you need help. And be there for others when they need you, too.

  • I've struggled most of my life with feeling art. I look at a painting and can only see it at a purely technical level, as if knowing why an artist used a specific brand of acrylic paint explains the motivation behind the work. I've typically been more fascinated with how people do things rather than what message they're trying to convey. All this to say: I watched Jumanji again for the first time in years last week. I've seen that movie at least two dozen times, and I was legitimately spooked by it. Mid-20s Tim would watch that movie and think "I wonder how they pulled off that stampede shot inside the house?" Early-30s Tim would watch that movie and think, "were people in the 60s so into themselves that they didn't notice a child wandering into an active construction site and retrieving a treasure chest that was there in plain sight?" This time, I just felt myself as each of the characters. How it would feel to lose my parents in a car accident. How it would feel as a busy aunt who suddenly has to deal with two children. How it would feel to be a hunter whose only motivation is to murder the person who rolled the dice.

  • I was raised to understand that love is showing someone how to avoid mistakes. As I reflect on that, I'd amend that belief to say that love is helping someone learn from their own mistakes and being there for them with firm support when they do screw up.

  • Alexi Pappas once said, "Whenever you’re chasing a big dream, you’re supposed to feel good a third of the time, okay a third of the time, and crappy or not great a third of the time, and if you feel roughly in those ratios, it means you are in fact chasing a dream." I've been slowly working my way back into running shape, and I can confirm that I feel that way in those ratios.

  • Running at 5:30a means I get to wander through my neighborhood and see everyone’s festive and spooky Halloween decorations instead of everyone’s political signs.

  • One of the hardest aspects of being a software engineer is that the implementation details of your job change all the time. Did you know that in Ruby, if you pass variables into a method with the same name as the method is expecting (like a_method(property_1: property_1, foo: foo)), you can shorthand it to be like a_method(property_1:, foo:)? I learned that this week!

  • If art is finding a way to express what is rattling around in your head to others, then maybe writing code is actually my artistic expression.

  • When it comes to empathy, I've never struggled with the "getting into someone's mind" part. What I've struggle with is accepting that the other person's point of view is valid. And I'm still working on that.


The Death of Touchstone Pictures


🔗 a linked post to youtu.be » — originally shared here on

I love videos like these because it highlights just how few major players there are in Hollywood.

I knew Disney was responsible for a large part of my childhood, but until this video mentioned movies like “Sister Act” and “3 Ninjas”, I didn’t realize the full extent.

🫡 to one of the greats.


A Coder's Sprint: Behind The Scenes of the Twin Cities Marathon Graphics

originally shared here on

a road along a river with full fall foliage where many people are running a race

(Editor's note: That graphic is Midjourney's interpretation of what the Twin Cities Marathon looks like. Can you imagine if the Twin Cities Marathon actually looked like that? Running on top of the Mississippi River lmao)

Growing up, I took every chance I could get to be around live TV production.

The thing that keeps drawing me back to the medium is that you basically get one chance to tell a story to which there is an uncertain conclusion. The pressure to get it right is exhilarating.

Even though I haven't been part of a live production in roughly a decade, I had a unique opportunity this past weekend to be part of the live coverage of the Medtronic Twin Cities Marathon.

My role was to be the liaison between the marathon and the production crew who was filming, directing, and producing the show that was to ultimately be broadcast on KARE 11 (the local NBC station). I was to watch the race unfold and keep the crew informed of any interesting moves that we should mention on air.

I also was the liaison between the production crew and the timing crew. I would take periodic data dumps from the timing team, run them through a script I wrote, and pump out some graphics to help keep the audience up to date with the current leaders.

As you may or may not know, the race itself was unfortunately cancelled, so our collective efforts were not able to be showcased.

But even though we didn't get to try out our system live, I wanted to share some of the behind the scenes process for how I was able to get all this stuff to speak to each other. I'm mostly writing this for myself for the coming year, as I'd like to keep improving this process so the 2024 version of the race is chock full of awesome graphics that help to tell the story of the race.

The final product

Every good post should show the results first, right? Well, here's the two graphics I was able to get built in about 72 hours:

A large leaderboard graphic for television

This is a leaderboard intended to be a full-screen graphic, likely to be used with a blurred static shot under it.

A small leaderboard graphic for television

This is a leaderboard intended to be used while on top of a single shot with the leader in full frame.

The timing data

I was fortunate to spend the beginning part of my career working with the crew at Mtec Results. They are the team that helps time many of the major races around the country, most notably the Twin Cities Marathon and Grandma's Marathon, but they also are often called on to help out with other high-profile races like the marathons in Boston and New York City.

It took about 3 minutes of explaining the idea of using "real time data"[^tcm-2023-recap-1] to the team before it was met with a resounding "how can we help?"

We went back and forth around file formats and specs, and after we worked our way through uninteresting technical challenges[^tcm-2023-recap-2], we ultimately settled on a CSV format that looked something like this:

BIB,FIRST NAME,LAST NAME,GENDER,AGE,CITY,STATE,NATIONALITY,TEAM,TEAMTYPE,TIME OF DAY FINISH,GUN TIME,NET TIME,5K,10K,15K,20K,HALF,25K,30K,35K,40K,FIRST_HALF,SECOND_HALF,5 MILE
103,Rosalynne,Sidney,F,31,Burnsville,MN,USA,,,10:33:07.73,2:33:09,2:33:09,18:10,36:24,54:43,1:12:48,1:16:51,1:30:56,1:48:57,2:07:38,2:25:40,1:16:51,,

We decided given our time constraints, we would just keep that CSV in a shared Dropbox folder, and that file would get periodically updated throughout the race.

The graphics

The production team at Freestyle Productions uses an open source tool called SPX Graphics to generate and play back graphics during broadcasts.

SPX Graphics is a fascinating tool that uses HTML, JS, and CSS along with layers to help display all sorts of useful graphics like bugs, lower thirds, and crawls.

It took a little troubleshooting to understand the template structure that SPX uses, but in conjunction with ChatGPT, I was able to build out some basic HTML to create a table that I could dynamically populate:[^tcm-2023-recap-3]

<body>
  <div id="viewport">
    <div id="spxTable">
      <header>
        <div class="logo" id="marathon-logo">
          <img src="./TCM/tcm-logo.png">
        </div>
        <div class="logo" id="ten-mile-logo" style="display: none;">
          <img src="./TCM/ten-mile-logo.png">
        </div>
        <div id="title-container">
          MEN-FINISH
        </div>
      </header>

      <section class="table-body">
        <div class="table-row">
          <div>1</div>
          <div>Rosalynne SIDNEY</div>
          <div>USA</div>
          <div>🇺🇸</div>
          <div>2:33:09</div>
          <div>--</div>
        </div>
        <!-- Add more table-row divs as needed -->
      </section>
    </div>
  </div>
</body>

Hooray, we now have a basic table for a full screen leaderboard! If you throw a little fancy CSS on top of it, you have a really nice looking table.

...but how do we populate it?

Translating the timing data

The CSV that I showed above contains some great data, but it's not particularly useful at the moment.

For starters, if I want to show the current leaders at 25K, do I use the values in the 25K row or do I use the values in the gun time row?

If I want to show how far back each racer is from each other (the time differential between each person), how do I generate that?

What happens if the racer's last name got entered in ALL CAPS instead of Title Case?

I figured I needed to write a tool that helped me transform this data into something a little easier to manipulate from the leaderboard template... so I did!

Behold, csvToJson.html in all its glory!

A screenshot of my rudimentary JSON generator

Because I know I'm going to forget what all these fields are for come next year, here's an explanation of what each field does:

  • CSV File: This is a basic input field to grab the CSV file from a local disk.
  • Header row: This is the name of the header row for which I want to pull the timing value (e.g. GUN TIME, which would pull 2:33:09 from the CSV example above)
  • Race: This allows me to tell the front end template which race to style it as
  • Title: This is the title in the top right corner for the full screen version or the first title on the smaller version
  • Subtitle: This is the second title on the smaller version (basically the name of the race)
  • Mile Split: In the smaller graphic, there's a little notch in the top right corner that contains the mile split for the most recently passed timing mat. This field lets me fill that in with the split.
  • Show time difference: On the full screen graphic, we may (or may not) want to show the time difference (e.g. +2:09).
  • Max number of elements: This should've probably said "max number of rows" because that's what this field controls. The full screen version of this graphic looks best with 10 entries, whereas the smaller version of the graphic looks best with 5.

Once you click "Load CSV", I fire off a Javascript method which loads the CSV and converts each row into a JSON object that looks something like this:

{
  "race": "marathon",
  "title": "Women's Leaders - 25K",
  "subtitle": "MEDTRONIC TWIN CITIES MARATHON",
  "mile_split": "25K",
  "show_time_difference": true,
  "table_data": [
    {
      "position": "1",
      "name": "Rosalynne SIDNEY",
      "time": "2:33:09",
      "difference": "--",
      "state": "MN",
      "country_name": "USA",
      "country_flag": "🇺🇸"
    },
    // More entries here
  ]
}

I would then take that JSON and paste it into a file stored on a remote server.

Now that I have both a beautiful-looking template and a beautiful-looking source of data, I was able to whip up some Javascript on the template side to read that file on page load and populate the table with all the customizations included on it.

What's next?

It was truly a bummer that the race didn't get started. As someone who has gotten heat stroke at mile 21 of a marathon, I know that the organizers of the race did the right thing by cancelling it outright.

As someone who was in charge of building and displaying these graphics, though, I am a bit relieved that I get another year to iterate on this foundation.

Here are the obvious areas for improvement:

Automate the fetching of the data from Dropbox

If it wasn't clear, this process was brittle and prone to human error. I was having to load Dropbox from the web, download a CSV, manually sort it in Numbers based on the gun time, remove all but the top 10 or so rows of data, and then save a sanitized version.

There could be a tool written to automate this process so it is continually polling for updates to the file, and once it finds updates, it automatically does the sorting and converting so I don't need to touch it.

Automate the creation of the JSON from that timing data

Similar to above, I shouldn't need a csvToJson.html file. Because I'm sharing the data between the two templates, I should hard code the number of rows I want each template to read, and then I can fully automate the creation of the JSON it uses to populate the table.

Also, because of how SPX works, I need to host that JSON file somewhere remotely that the graphics system can access whenever the director calls for the graphic. That process should be similarly automated.

Improve the flag display

The Twin Cities Marathon attracts professional marathoners from all over the world, but it's not uncommon to see Minnesotans and other Americans finish in the top 10. It might be cool to use state-level flags instead of the US flag for the top athletes.

Another little annoying thing: I only had five countries hard-coded in my JSON creator because that was what I had from the representative data sample (USA, Canada, Mexico, Kenya, and New Zealand). I should probably support more flags because you should always be prepared for an unexpected performance from someone not from one of those five countries, right?

MOAR GFX PLZ KTHX

This leaderboard only scratchs the surface with what's possible.

With the timing data we're getting, I should be able to have a permanent graphic built that shows the top 10 runners at all times.

I should also have more graphics that you see in most professional marathon broadcasts:

  • An omni-present clock[^tcm-2023-recap-4]
  • Biographic slides that show a runner's photo along with some of their professional highlights
  • Slides with historical facts (course record holders and whatnot)
  • A map showing where runners are along the course

But I want more!

If we start planning now, we could attach biometric gear to some of the runners and show things like current heart rate, current pace, current stride count, and more.

Even if we aren't able to pull that off, we could still use the existing data to tell interesting stories like how the hill on Summit Avenue affects pace and how many runners are actually hitting "the wall".

Gearing up for 2024

I am so pleased with what we were able to pull together in basically a week.

Now that we have a better understanding of the technology that powers the graphic system, I am beyond excited at the possibilities ahead of us next year.

The team at Twin Cities in Motion truly care about putting on a best-in-class event for runners. Their commitment and investment in this broadcast are evidence of this, and I am honored to be part of the team responsible for telling the story of the two races that take place that day.

Mark your calendars for next October. It's gonna be an exciting race to watch live!

[^tcm-2023-recap-1]: For our purposes, we basically mean up to date within a minute or two of capturing the data. Getting updates to the leaderboard within milliseconds of a racer crossing a timing mat is not yet technically feasible. Besides, time is an arbitrary construct, right, maaan? [^tcm-2023-recap-2]: The software used to capture timing/scoring data for races is necessarily archaic. I say "necessarily" because it's both a feature and a bug; you don't want to put your trust in some fancy pants, brand new, untested Javascript framework to calculate results for an event that depends on those results for attracting big name runners, sponsors, and money. Of course, you can wrap all sorts of transforming layers on top of the data you collect from the timing systems, which is what Mtec does to power their results pages. But creating an API on top of that layer was not really feasible in the time we had. [^tcm-2023-recap-3]: You might notice in that HTML that I have two logos: one for the marathon and one for the ten mile. This allows me to reuse the same leaderboard graphic but style it orange or green to fit the relevant race. Also, stop judging my HTML! [^tcm-2023-recap-4]: Do you know how hard it is to get an accurate clock to display on screen? The homies that create professional football graphics are insanely talented. Again, time is an arbitrary construct.


An Oral History of MTV’s Unhinged, Eerily Prescient ‘Wonder Showzen’


🔗 a linked post to theringer.com » — originally shared here on

I remember first watching Wonder Showzen during a band trip to Ireland in 2005. I thought it was the weirdest and coolest thing I’ve ever seen.

This retrospective was really fun to read (if you were a fan like me), and it made me want to go back and watch the whole series.

Continue to the full article


The Footage the NFL Won't Show You


🔗 a linked post to online.wsj.com » — originally shared here on

For decades, NFL TV broadcasts have relied most heavily on one view: the shot from a sideline camera that follows the progress of the ball. Anyone who wants to analyze the game, however, prefers to see the pulled-back camera angle known as the "All 22."

While this shot makes the players look like stick figures, it allows students of the game to see things that are invisible to TV watchers: like what routes the receivers ran, how the defense aligned itself and who made blocks past the line of scrimmage.

Continue to the full article