Riley

A few days ago, I finally graduated high school.

But that's not the point of this post. Graduation is usually at a big concert venue, but due to the pandemic, it had to be done “drive-thru style” in the bus loop of my high school. This meant that extended family and friends wouldn't be able to attend. I offered to volunteer and live stream the graduation, and the school administration happily agreed.

I had never live streamed an event like this, so learning where to start and how to overcome logistical challenges was an interesting quarantine task.

Streaming software

The first thing I had to figure out was what software to use to actually stream. Whatever software I used had to do these things:

  • switch between at least two cameras
  • stream for hours at a time (the event would be 5.5 hours)
  • show overlays

I found Switcher Studio, an app for iOS, which supported multiple cameras but they had to be either iPhones or iPads. I ended up going with OBS, the standard open-source software for streaming on desktop. I found an app called OBS Camera that let me plug my iPhone in via USB and get a low latency camera input in OBS.

Getting power

Choosing where to put the computer that would run OBS was difficult. I needed power. I could put it on the side of the stage, but getting a wired connection to the camera facing the stage would be impossible because the cable couldn't go in the road. Putting the computer on the sidewalk across from the stage was preferable, but there were no power outlets on that side of the road.

The school ended up parking an empty van on the side of the road across from the stage, leaving the engine running all-day and hooking an extension cable into the car battery. Not the best solution, but it worked and was reliable.

Internet connection

The school building was too far away to get a wired Ethernet connection, so it had to be wireless. The school gave me a Verizon hotspot to try, but Verizon service was unreliable in that location. The T-Mobile service on my phone gave around 4 Mb/s in upload speed, which was good. I tested both a few days before in the spot I would setup at.

Finishing touches

I bought a few extra long USB extensions cables. I got my sister and some of our friends to help out, so one of them would hold an iPhone on a monopod. The iPhone would be plugged into a PC on the long USB extension cable. They would run into the road once the car parked. The graduate would get out of the car, cross the stage, and the camera would follow them across. Once they exited, the cameraperson would get out of the way of the car, and repeat.

Another camera would be zip-tied to a flagpole to get a wide overhead shot of the entire stage.

I also wrote a script to scrape the school website, download each student's senior picture, and generate a transparent overlay of each student and their name. This overlay would be shown on the stream as they crossed the stage. Because everyone had to wear a mask and their cap, I thought showing a picture with no mask would be a nice touch.

The day of

I started setting everything up 1.5 hours before the graduation started. The network speed on my T-Mobile hotspot was <0.1 Mb/s, an external mic I was hoping to use wasn't recognized by my PC, and only one camera was working at a time in OBS. Time flew as I was trying to fix all of this, and graduation was about to start.

I got the mobile hotspot to work just in time. Putting it on the second-to-last rung on a ladder was the solution (but not the top rung). I started the stream with just one super-zoomed-out camera. During the course of the day, the service would randomly drop, but moving my phone to a new spot or height usually fixed the problem.

I thought each student would be called up in alphabetical order, but because the cars arrived in jumbled order, this was not the case. At first I was squinting across the road to see who was about to be called next, and searching through a folder to find their overlay. Eventually, one of my friends helping stood next to the announcer and told me through phone call who was about be called next. This helped a lot.

During a break, I got the second camera working and fixed the angle and zoom of the original one. During the course of the 5.5 hour event, the production value really shot up as stuff started to click into place.

The recorded version of the stream uploaded to YouTube after the event. Some parts were dropped during the stream, but the recording has everything.

I was one of the last students to graduate, and my dad took over the OBS streaming when I left. To say the least, he had some trouble but made it work.

Things I would do differently

  • Use a wired internet connection
  • Get everything set up 3+ hours before to make sure there are no problems

Over 3,000 people watched live, and the average watch time was around 8 minutes. The recorded version is live on YouTube for many more to watch after the fact.

Since the coronavirus isn't really going anywhere, it's a possibility that graduations next year will still have limited attendance. If so, I'm aiming to reach out to surrounding school districts and offer to do paid work live streaming their graduations, using the work I did at my school as an example.

A story about impersonation, election integrity and being in the media

In my high school history class, we learned about election integrity and how phishing campaigns and social media bots affected the US election in 2016. This got me thinking, could something like this happen again in 2020?

In December, Twitter changed its policy on verifying candidates. Previously, congressional and gubernatorial candidates needed to win their party's primary before their Twitter accounts could get verified. Now, any candidate running in a primary could have their account verified. Just like during the midterm elections in 2018, Twitter would also be partnering with Ballotpedia, a non-profit political encyclopedia, to identify candidates to verify.

I wanted to test if Ballotpedia and Twitter would verify a completely non-existent candidate. I remember telling my sister about my idea, and we both laughed. I had the idea in the back of my mind for a while and finally asked myself, “Why don't I just do it?” It was the middle of Christmas break, my girlfriend was out of town and I was kind of bored. I made a website and Twitter account for a fake candidate, named “Andrew Walz,” running in Rhode Island's 1st Congressional District. The site took me around 20 minutes to make with a website builder and boilerplate copy.

The candidate's profile picture was generated with thispersondoesnotexist.com, a website that produces images of non-existent people using artificial intelligence.

I submitted the fake candidate's information to Ballotpedia, and within a week (around January 1st), the information was on their website, and Andrew Walz had his own entry.

On February 7, Twitter sent an email saying they were going to verify the account, but needed it to have a header photo first.

This was simple enough to do, so I added a header photo and sent a reply saying what I had done.

On February 9, the account was verified.

First off, I was surprised that Twitter was proactive in reaching out to Andrew Walz. I didn't do anything to get their attention. Second, I was concerned because Twitter never asked for documents to prove Andrew Walz's identity, such as a government-issued ID. Because this candidate is fake, I never filed anything with the Federal Election Commission to register to get on the ballot. Twitter or Ballotpedia could have checked public FEC records to see whether this candidate was official (it is illegal to file false information with the FEC). This fake candidate also never received any press or mentions in media outlets, which should be an additional red flag.

If I could do this with little time and money, imagine what a highly-skilled team of people looking to do actual damage could do. Knowing full-well that I shouldn't have been able to do this, I decided to reach out to reporters. Why didn't I go directly to Twitter or Ballotpedia? They likely wouldn't have done enough to fix this in the long-term. I think that they would have suspended the account and moved along. With the story being out there in the open, I hoped that both organizations would be forced to do something to prevent this from happening again.

I reached out to CNN's Donie O'Sullivan, who interviewed me about the incident at my high school in mid-February. It went smoothly, and I'm thankful for the crew's attention to detail.

CNN published the story on February 28. My name was withheld because my family wasn't sure what the response to the story would be. I didn't want my college applications to be negatively affected. Almost all of the reactions about the story were positive, though.

Twitter suspended the account but didn't say much in their statements to news outlets about what happened.

On the other hand, Ballotpedia had a very transparent response and outlined everything that happened on their end and what policies they were changing in a page titled Legitimacy of Andrew Walz 2020 election candidacy and Ballotpedia profile. They updated their definition of a candidate to have a FEC ID number before they are included in Ballotpedia's database of candidates. Ballotpedia's CEO later published a statement and overview of the events that happened in an article called The Andrew Walz hoax candidacy. I admire their response and how they handled this situation. If more companies and organizations responded to controversy transparently like this, the world would be a better place.

Seeing the response from other media outlets and social media was a fascinating experience. Other outlets, like the New York Post, Insider, and Engadget covered the story. Barstool Sports called me a “random ass teenager,” a Canadian news show for kids talked about it, a podcast called me a “well-to-do internet troll,” and a research paper from Google Brain and the University of California, Berkeley called it a “fairly innocuous prank.”

This was a big lesson in ethics and the media for me. While I was debating whether to come forward, I didn't want to regret my decision later. Ultimately, I'm happy with what happened and am glad that some change came from it.

I was flipping through news channels last night when Chris Cuomo was wrapping his show up on CNN.

Listen, this is a time to be honest with one another. We are in a new normal, and we don't know how long it's going to last.

But as the President told you tonight, it's going to change, and there is going to be limited travel from Europe for the next 30 days. There will be some exceptions. Obviously, if you are a United States resident, it's different.

But the NBA cancelled games. You're going to see more of it. Schools are going to close. You're going to see more of it. Your ability to do what you want to do, when you want to do it, how you want to do it, no matter where you live, it's going to change. But remember why.

If we do the right things now – I know we got a late start. I know there is blame for that. You got to put it to the side because you've got to get better now. If you do it now, you won't be Italy. You will get better faster. That's the hope.

Now, I have been following news about the coronavirus over the last few months. But at that moment, it really struck me just how big of a deal this is. I know I have nothing to be worried about if I get sick, but my way of life will change in a way that it never has before. I was overcome with anger, fear and emotion. I imagine it's what people feel as they enlisted to fight in wars, except there is no war in that sense now. It's humanity versus a virus.

As a senior in high school, I'm taking every single school day like it could be my last. School and sports will likely be cancelled soon, but there's no telling when.

As a high school runner, we go to indoor track meets during the winter when it's too cold to race outside. These indoor tracks are often really short, usually only 161 meters, and in tiny buildings. The air quality is horrible. At the end of a tough race, my throat is so dry that I feel sick. The many parents and siblings watching us narrowly fill in on the outside. But often, people (usually not athletes) cross the track in the middle of a fast race without looking, and unfortunately, get hit.

Read more...

Apple has always been one of my favorite companies, and being able to attend WWDC in 2019 was a dream come true. I had a fantastic time, and it's a week I'll never forget.

Read more...

After winning a video contest a few months ago through Mentor Foundation USA that was covered on the Ballston Journal, I was finally on my way to Los Angeles as part of the first place prize.

Read more...

I am building a new website now. It's called Routeshuffle. It will be a simple site for generating random routes for running, biking and walking. I'm really excited about it. Here's some stuff about it that I've been thinking about.

Competition

There are really only two other sites that are similar, but I think that Routeshuffle will be better than them.

  • Routeloops hasn't been updated in years. There isn't much design and it lacks key features such as sign in and exporting to other platforms, like Google Maps for example.
  • MapMyRun's Route Genius is only for paying members and the features are directly pulled from Routeloops, so they are basically the same product.

Harsh, but seems true at the moment. This probably won't be a service that people are thinking they need even before it's made, but it will help them get out the door and make it easier to generate routes for exercise. I'll have to make something that seems really awesome.

Building

I am using just Node.js to build it. It will be my first Node experience, so I'm learning a lot. I'm making it on a Chromebook, and Node has worked just as well on there than on our iMac. It was surprising. I'm also using Express, Sendgrid and Stripe.

Will keep this post updated as I go on. Expect it to be out early next year.

Enter your email to subscribe to updates.