Building VTS

The Official VTS Engineering Blog

The Great Engineer Dashboard

By Phil Fishbein

I’ve been an intern at VTS for almost two months and about half way through my time, a Raspberry Pi and a flat screen TV arrived in the office specifically for the engineers. The possibilities were endless but eventually, we decided that a unified place for all of the important statistics should be created. I took that on as a side project.

What to Put

I polled the team on what statistics they felt would be important to be able to glance at and see our performance. We came to a consensus with some New Relic metrics, open GitHub pull requests, and Sidekiq Queue count. These values, we decided, were important to showing us how our application is performing in real-time.

Enter Dashing.io

Shopify wrote a fantastic little tool to create a customized dashboard, so I got right to work on playing around and trying to get an MVP to put up. Dashboard

VTS Engineering Values (Rough Draft)

By Andrew Lin

As our team continues to grow, we decided that it’d be a good idea to write down the core ideas of what makes a good engineer at VTS. As part of the exercise we asked everyone on the team to submit a handful of answers.

Below is an unedited view of what everyone submitted. Repeated bullet points mean that more than one person submitted that same answer.

If you like what you see, please apply! https://angel.co/view-the-space/jobs

Passion

  • Passion
  • Passion for Learning
  • Passion for the job
  • Enthusiastic about learning our technologies
  • Driven
  • Enthusiasm
  • Enthusiasm

Engineering Craftsmanship - subset of passion

  • Passion for engineering. You would do it even if we didn’t pay you. The fact that we all share this value allows us to have an enormous level of trust in one another; we know that everyone is doing their finest work without the need to be micromanaged.
  • Engineering feels like a hobby
  • Enthusiasm for the craft
  • A true passion for software engineering, in and outside of work - tangible by things like side projects, reading technical books, trying out new open source libraries, etc
  • Gratitude (contributions back to the community e.g. worked in OSS)

Collaborative

  • Collaboration over competition. We don’t hesitate to put our own projects on hold to help a teammate in need. It definitely feels like we’re all on the same team, reaching for the same goal.
  • Team player
  • Willingness to help and learn
  • Open to teaching/collaborating
  • Everyone on our team has a voice
  • Willingness to help others
  • Willingness to treat and help everyone like a peer
  • Selflessness
  • Patience for Teaching

Character Encodings, Nul Bytes, and Changing Appetites

By Alex Wheeler

Character encoding works seamlessly in today’s world of modern computing. Until it doesn’t, and you find yourself staring at a screen of complete gibberish, wondering how you landed yourself in the matrix.

image

If you do find yourself staring at such a screen of random characters whatever you do don’t panic!  You haven’t entered the matrix.  You’ve simply come across the work of a developer who most likely didn’t have an understanding of character encoding! And today, in 2015, with more than 7 billion persons speaking just over 7000 languages character encoding is a very important concept for any developer to at least have a high-level understanding.

Computers are dumb

While there may be over 7000 languages spoken across the globe1, our fancy computers, stacked with gigabytes of RAM, terabytes of storage capacity, and capable of executing billions of calculations per second only speak one - binary.

1 or 0, true or false, on or off.  Binary is really just a way for us humans to represent electrical signals computers use to communicate.  Your computer has no idea, nor cares, what a number, letter, or symbol is - all it truly knows is on or off.

Just because my knowledge of Japanese is non-existent doesn’t mean I can’t hold a conversation with a Japanese speaker.  On my trip to Tokyo I could always pack an English - Japanese dictionary and translate word-for-word what I’d like to say2.  Encoding schemes or encodings work the same way, translating bits to characters just as my dictionary translates English to Japanese.  And with this, let’s dicuss our first encoding - the American Standard Code for Information Interchange or ASCII.  ASCII encodes 128 characters into 7-bit binary integers (8 bits total, with most significant bit always 0)

Smooth Shared Android Transitions

By Jack Mann

Our group recently introduced shared Android transitions between activities in the VTS application. Most shared transitions were easy to implement and impressive in keeping the user focused on key elements of the application between primary views. When we tried to accomplish the same with downloaded image files, we encountered unreasonable delays and inconsistent presentation of shared views. For instance, the destination image would contain only a portion of the target image. The following is a recipe for shared transitions between ImageView’s that use downloaded png or jpeg files.

Benefits of VTS Approach The VTS approach is elegant. It produces an image overlay of the first activity’s thumb image that overlays each window and moves to the final image location in the destination activity. The eye stays focused on this key element providing clarity and the addition of newly requested information. When the first transition is complete a low resolution image is smoothly transitioned to its full resolution counterpart. And the same occurs in the reverse direction for consistency.

Everyday I’m TMUXin’

By Gustavo Matias

One of the problems I had when using terminals was being organized and stay on top of everything that was happening throughout all terminal tabs: logs, jobs, SSH connections, Text Editor (if you’re into terminal-based editors), and the list goes on..

Even though we can only do one thing at a time, there are times where we just want to have a glance at what’s happening in another terminal tab, and the fastest and most effortless way to do that is by moving your eyeballs just a liiiiiiittle bit, without bothering touching your keyboard or mouse.

If you wish you could have all of that in a single terminal window, look no further! Fortunately there is TMUX!

The Joy of Acceptance Testing

By Gustavo Matias

Testing is one of those practices that although people are becoming more conscious about, still rare to see in the majority of projects.

This might even be true for startups where the pace is incredibly fast. The team needs to be shipping feature after feature and dealing with a number of complicated and time consuming bugs that who knows when someone will be able to fix it.

However, it won’t be fair to generalize that. VTS is one of those dream places where we can sit and watch all the production code being automatically tested without a single click. Testing is taken very seriously and appreciated by everyone here, from CEO to the product team, tests are golden to all of us.

Our code has coverage throughout the entire stack, which is what really amazes me. Back-end, front-end, mobile apps, you name it. We got that covered to make sure our products are stable, robust and tested before every deployment.

Testing Your AngularJS App

By Alexander Frankel

Front-End Testing

Ever have the feeling that you have written some code that may or may not work some of the time? …wait, what?

Gustavo: “Oh Alex, what did you work on today?” Me: “I created this new angular service that ensures only one dropdown is open at a time. It’s awesome!” Me: “Come check it out.”

Imgur

Gustavo: “Wait, so it makes sure that there can be two open at the same time?” Me: “crap”

That’s why we write tests…even on the front-end. Maybe you currently don’t test front-end functionality in your app, maybe you dont test your server-side code, maybe you hate testing in general.Well… try Karma dude (it’s good for the soul)!

Karma is a javascript test-runner and works like magic with your Angular app. You are relieved from setting up lots of configuration and are provided with instantaneous feedback. And we all know feedback === productivity === creativity === happiness :)

Finding Lost Git Commits

By Dan Ubilla

We move fast around here. As such, I’m usually juggling a number of branches at a given time. I usually have one branch building on a CI server, when I create a branch to start a new feature in. Sometimes, something even more pressing will come up, and I’ll have to drop that new feature to work on a bug. This leads to lots of git stashing, git popping, and hopping between branches as fast as my machine will let me. While I’m normally good about paying attention to the branch I’m on and committing work appropriately, I’ll occasionally lose a commit. Here’s how I go about finding it.

How I Built an 844 Emoji Dictionary ☺️

By Andrew Lin

Emoji Searcher

Demo: http://lifmus.github.io/emoji/

Source: https://github.com/lifmus/emoji

The Slow Way

Initial Prototype

I was browsing through github’s showcases when I stumbled upon something that really caught my eye: the emoji section. I browsed through the top project (https://github.com/muan/emoji) and thought about how the demo (http://emoji.muan.co/) could be improved to be translate to emojis in a more real time manner.

Our Brand New Shiny Domain

By Karl Baum

We did it! We were finally able to nab the vts.com domain. In this post we are going to focus on some of the technical steps we took when changing over to vts.com.

One SSL Certificate Per Heroku App

First, I want to point out an important requirement. Unsurprisingly all of our old links to viewthespace.com had to continue to work properly. Since all of our requests were done over ssl, we now needed to support both vts.com and viewthespace.com over ssl. Here is where we ran into our first speed bump as Heroku only supports one ssl end point per application. Luckily for us, there was a simple workaround. SSL endpoints from one Heroku app can route to another Heroku app. So the solution was to create an additional empty Heroku app for the vts.com ssl endpoint and route requests for that endpoint to our original Heroku app. Here are the specific steps:

  1. Created an additional heroku app called vts-ssl
  2. Installed the heroku ssl add-on on the vts-ssl app
  3. Installed our new *.vts.com wildcard certificate on vts-ssl
  4. Added the domains www.vts.com and vts.com to our original vts app using the heroku domains:add command
  5. Added a cname for the www subdomain to point to our ssl endpoint. SSL endpoints can be viewed by running the heroku certs command