Retrospective: My Internship at LAIKA
Last Friday (October 20, 2017) was my final day as a developer at LAIKA. Here’s a retrospective of what I learned.
Before I get into my retrospective, I want to thank all of my coworkers for being an amazing, supportive group — especially my mentor, Kenny. Derek (the other intern) and I were the first ever Production Technology interns! I hope LAIKA continues this program, because it’s an office filled with senior developers that really know what they’re doing — a perfect environment for a new graduate or soon-to-be graduate to grow and learn.
Me in a meeting: “Behold: a loading gif.”
I’ve bounced around multiple industries this past year, but working within LAIKA’s studio was the most interesting — many aspects of the company were laid out for me to observe at a distance. At the University of Oregon and with my Charter Communications contract, I was only ever around other developers, completely focused on the product at hand. I think the biggest difference in my experience with LAIKA was working among employees unrelated to my position, and seeing their work come to fruition.
Me when working for a different company without the full context of its goals.
With LAIKA, I received a full and complete picture of the company and the work that everybody in the studio accomplished. I got to hear and see their upcoming film in production, which is something truly unique to the film industry. My office was a cordoned-off section of a room next to graphic designers, media services, and the IT department. My mentor was so deeply-rooted in the company that people from all over the studio would ask him questions concerning various topics. Essentially, I got to see a large chunk of the company’s infrastructure in action.
Company culture and mindsets varied, but I can easily speak to how Production Technology or “prod tech” treated its own. In my experience, prod tech was all about supporting the studio and each other. The main priority was crystal clear: get this app out, and let’s see if it helps the studio get some task done more easily, effectively, or efficiently. I learned about my coworkers from lots of lunch outings, and they also shared a lot of knowledge to help me in checking out Portland. All of my talented coworkers treated me with respect and fairness, and I will cherish my experience at LAIKA.
What did I do?
I feel like I accomplished a lot this summer! My initial task was to massage an open source PyQt4 to PyQt5 conversion script, laying some initial groundwork for the rest of the department to update LAIKA’s custom Maya applications for usage in Maya 2017. I added some endpoints to a Django API, and I converted some Python code related to cataloguing and organizing lenses for LAIKA’s cameras.
Me after every converted PyQt module ran in the Maya command line without errors.
My favorite work was taking ownership of a React application that acted as an interactive map of the studio. “LAIKA Map” was built mainly to help the stage crew keep better track of equipment — you’d be surprised how often a forklift gets lost! I’m unable to “show the code” because it would expose things LAIKA isn’t ready to share with the world; however, here’s a quick overview:
- You’ve got an aerial view of the studio.
- Clicking on a unit will reveal a modal.
- That modal details the shot currently scheduled for that unit, along with assigned stage crew members, associated shoot tasks, and a moveable list of the equipment within.
- There’s a side panel for filtering. When filters are selected, units who have matching data get highlighted.
- You can filter by staff name, by equipment, and by WiFi tracker ID(Kenny was working on WiFi spatial locations with Arduino devices).
Me demoing the minimum viable product of LAIKA Map to stage crew for the first time.
There are many plans for the future of the application, and prod tech has high hopes that it’ll inspire a notable increase in equipment tracking reliability. The most inspiring aspect of working at LAIKA was being so close to my “customers”. We demonstrated the map app to stage crew members for direct and immediate feedback; for example, riggers thought of an idea to filter equipment by ownership. While many of my coworkers working on web applications dealt with unique problems related to the performance of rendering many items simultaneously, my obstacles related more to displaying and altering the visual representation of an SVG map in a user-friendly manner. Being able to take feedback in such a pure manner was helpful in overcoming those obstacles.
Three overarching lessons I took away from my internship:
- Don’t try to rock the boat with what you think you know. Work exactly to the specifications your team needs, and eventually you may gain the opportunity to make a steering decision.
- Invest time in reading the entirety of a library’s API before you re-invent the wheel, the rims, and the treads. Lodash is great, but a better foundation in JavaScript will likely save time and decrease your end bundle size. As an additional example, if using Immutable.js — use it!
.toJS()
all over the place isn’t helping anybody, and it’s probably unnecessary. I was guilty of using Lodash as a crutch, and not realizing the complete functionality of Immutable.js, but I look forward to avoiding those mistakes in the future. - Coding without reviews is like writing a book without peer edits. How many mistakes will you miss? Where could you lose readers? Do plot holes exist? It’s tough to figure it all out by yourself — always ask for code reviews. They worked beautifully at LAIKA.
Me vs. Immutable.js half-way through the internship.
Three technicalities I took away from my internship:
- Iterating over an
Immutable.OrderedMap()
will generate a React warning concerning mapping over a map, vaguely mentioning “unexpected results”. In my case, the keys of the data structure showed up unreferenced and untied to any DOM node. In other words, trying to render a grid of the items in theOrderedMap
worked, but I also had the structure’s keys rendered as text next to every item. In my defense, theOrderedMap
prototype has access toList
, so I thought it wouldn’t be a problem! - LESS requires argument escapes when using
calc()
between 2 different unit types. - You can use default arguments in JavaScript with ES6 syntax.
What’s next?
My reaction to having to begin a job search.
I was asked about my next step a lot in the last week at LAIKA, and I jokingly responded that I’d be crying in a corner of my room. In reality, I’ve got a lot of interviews lined up in the next few weeks, and I’m really hopeful that one of them pans out. In the mean time, I’ll be putting out another technical article (recursive, nested components with Vue.js), and I can try to quit caffeine for a day… maybe.