Venmo Developer Spotlight: Joel Bixby

20 Feb 2015 · By Cassidy Williams and Joel Bixby

This is the third in a series of Venmo Developer Spotlights, where you can get insights on what life at Venmo is really like. If these posts tickle your fancy, head over to our job board and join us!

Joel is a solid backend engineer at Venmo. Joel grew up in Iowa believing his dream job was on the West Coast. After graduating at Iowa State University with a degree in Computer Science, he went the East Coast. In his free time, he enjoys testing new web frameworks and going outside for some fresh air!

How long have you been with Venmo? What do you work on?

I have worked at Venmo for seven months. I am currently on the Scaling team, which helps Venmo’s code keep working as we grow with our user base. I have worked on projects that setup Celery for queue processing, migrated data from MySQL to Redis for extremely fast reads and writes, and also work in Puppet, our infastructure manager for deploying and managing our services.

What is your favorite programming language?

I enjoy many programming languages, but I can’t seem to pick just one. Python and Javascript would definitely be in my favorite programming languages. Both are very informal and have many ways of doing the same thing. I believe this freedom gives them a personality. A personality made of common practices, clever tricks, and some ugly stuff too.

What do you like to do outside of work?

I try to stay active and go to the gym as much as I can. In the Fall, a group of coworkers and I participated in ZogSports dodgeball, which was extremely fun! I definitely plan to join another season of it soon! When I’m at home, I like to investigate new programming languages, frameworks, and software for my own projects.

Are you working on any side projects right now?

I am currently working on a mobile app for skydivers. Skydivers are required to do a lot of jump logging in order to become licensed and it requires a lot of manual labors. With new technology in cell phones, almost all data can be collected automatically.

What is a fun fact about you that you don’t usually get to talk about?

When I was little I took dance classes with my sisters. I took lead roles in many nursery rhymes as a cowboy, a mouse, and a spider.

What advice do you have for aspiring developers?

Learn as much as you can! There are unlimited applications of software development and you can decide how you want to apply it. Pick something that interests you and learn that front to back. The more you know, the more experience you will have to make an educated decision.

Got more questions? Email us at blog@venmo.com!

Awesome Venmo API Hacks

28 Jan 2015 · By Cassidy Williams

Hi friends!

Venmo loves going to hackathons and seeing awesome projects that developers come up with. I recently talked to a few people who made some great ones, and I'm going to tell you about them!

Via

Michigan State students Caitlin McDonald and Erin Hoffman built this project and won the Venmo prize at MHacks V!

Students and families alike love to take road trips across the country. Road trips are a fun way to experience small town America while getting us to our final destinations with minimal expenses. Despite their advantages, however, road trips can involve tedious financial concerns, ranging from finding the cheapest gas along the route to ordering at a drive-thru window with a car full of people. With Via, these issues evaporate to provide a fun, carefree roadtripping experience.

Via provides some helpful roadtripping features while also tracking all of your expenses along the way, allowing for easy reimbursements between roadtrippers.

The team built Via as a mobile web app, using Ruby on Rails and PostgreSQL for the database. The main API used was Venmo (for user login, friend lists, and payments), but they also used the Google Maps API, Google Places API, and the MyGasFeed API. The icons are Twitter emoji, but the rest of the graphics they made themselves.

Take a look at Via on ChallengePost!

Paybble

Purdue students Vipul Nataraj, Drew Ruberson, Josh Foeh, and Zachary Simpson worked on this fun project for the Pebble watch.

Paybble is an application developed for Boilermake Fall 2014 that allows you to pay people on your contact list directly through your Pebble watch. In order to use the service, the user has to have the companion iPhone application installed and allow application access to their Venmo account. Once these prerequisites are complete, the user can then use the Pebble watch to cycle through their contact list and select a contact to pay as well as an amount. After confirmation, the application carries out the transaction and even sends both the payer and the payee notifications via text message. This application is targeted towards people that want to utilize Venmo but are always too lazy to pull out their phones to do it.

Gotta love those lazy piles. <3

If you want to see more about the project, check it out on ChallengePost

The team also wanted to share their favorite joke with you.
Q: Why do Aliens always choose functional programming languages as their main development languages?
A: Because they’re both stateless.

SiriKit

University of Michigan students Janum Trivedi and Noah Shutty built this project for iPhone, and they won the Venmo prize at PennAppsX!

We love Siri--Apple's sassy voice assistant has delighted us since day one. But why can't Siri make one-time and recurring payments to your friends? Find your backpack for you? Activate your Jambox? Control your automated home? Interface with all your IoT devices?

Though Apple has not released a public API for its voice interface, the team found a workaround that allows third-party apps to grab data from Siri and take actions in response. Importantly, this proceeds without any traffic proxying, data limitations (eg, wifi only), or browser trickery.

Siri, plain and simple. And now limitless.

Check out SiriKit on ChallengePost!

They also shared a funny with us, a quote from Mitch Hedburg: "My fake plants died because I did not pretend to water them."

RideShare

At the recent HackTheDrive hackathon run by BMW in San Francisco, Gregor Engelmann and his team of 3 built an iOS application that explored a way of identifying energy/fuel costs per passenger based on local fuel/energy rates at the destination.

The application utilized data like GPS location and power consumption, as well as sensor readings like car door status and passenger location within the car from the BMW i3 to identify how many people are sharing the fuel costs for a certain distance driven, and how much it would cost to refuel the car based on local service point rates at the driving destination. The Venmo and PayPal APIs were used to process in-app money requests from passengers.

Want to see more? Check out this list!
Want to make your own? Go for it!

Thank you, open-source community

12 Jan 2015 · By Ayaka Nonaka

We open-source a lot of things at Venmo, and we also use a lot of open-source libraries. To show some appreciation to all of the open-source maintainers and contributors out there, we thought it might be cool to share a list of open-source libraries and tools that the Venmo iOS team relies on. Thank you everyone out there who has contributed to these projects and other projects out there. Here’s to a great 2015!

  • 1PasswordExtension adds 1Password support to our login. (Psssst... Look out for it in our next release!)
  • AFNetworking is great for all things networking, but we especially like UIImageView+AFNetworking for async image loading.
  • Alcatraz is the package manager that brings XVim, FuzzyAutocomplete, GitGutter, etc. to Xcode. Such a must have.
  • BZGFormViewController is great for simple forms that require validation. We use it in our app for our sign up and edit profile views.
  • BZGMailgunEmailValidation is perfect if you use Mailgun for email validation.
  • BlocksKit because dismissWithClickedButtonIndex:animated: delegate methods are no fun at all. Besides, who “clicks” on an iOS device?
  • Braintree allows our users to pay via Venmo on apps like YPlan.
  • CMPopTipView has been useful when we want to draw attention to a new feature that we added.
  • CocoaPods is how we manage all of our dependencies, including private pods. Can’t wait for their 0.36 release which supports Swift!
  • DAZABTest provides a super simple API to do basic A/B tests.
  • Expecta is a great matcher framework that makes your tests read like English. expect(myTests).toNot.beEmpty()
  • Facebook-iOS-SDK makes it easier our users to sign up and find friends to start using Venmo with.
  • FLEX is built into all of our debug and dogfood builds, and it makes finding and fixing UI bugs so much fun and so much easier.
  • FuzzyAutocomplete because Cocoa API’s is so verbose.
initRecurrenceWithFrequency:interval:daysOfTheWeek:daysOfTheMonth:monthsOfTheYear:weeksOfTheYear:daysOfTheYear:setPositions:end:

anyone?

  • FXBlurView makes it super easy to have your own blurred views to match iOS 7 and 8’s frosty look.
  • FrameAccessor is perfect for the lazy programmer who would prefer to type view.width = 50 intead of CGRect newFrame = view.frame; newFrame.size.width = 50; view.frame = newFrame;
  • GBDeviceInfo tells us useful things about the device our app is running on so we can optimize a little for older devices, etc.
  • GitGutter shows you what lines were changed, added, and removed right in Xcode’s gutter!
  • Godzippa has been immensely helpful when uploading large amounts of data to our API.
  • iRate because we love hearing back from our users. <3
  • JTSImageViewController is what you see when you tap on a picture on a friend’s profile. We love the interaction where you can flick the image off the screen.
  • KGStatusBar is used to show “offline mode” in the status bar for Braintree merchants to test out Venmo integration. Super simple to use!
  • KIF makes writing automated UI tests such a fun experience. It looks like magic!
  • libextobjc provides us with things like @weakify and @strongify, and one of our favorites is EXTKeyPathCoding which lets us avoid @"stringlyTyped". For example, [NSSortDescriptor sortDescriptorWithKey:@keypath([Story new], createdDate) ascending:NO] which gets checked at compile time, as opposed to [NSSortDescriptor sortDescriptorWithKey:@"createdDate" ascending:NO] which is prone to typos and harder to refactor.
  • Mantle makes converting JSON reponses to and from objects a breeze.
  • MCDateExtensions adds some nice additions to NSDate that make it a lot more manageable to do date computations, etc.
  • Mixpanel has a really nice dashboard and handles all of our analytics.
  • MMDrawerController is really easy if you want add drawer navigation to your app. We’re looking to bid farewell to our hamburger button in the near future though.
  • MZFormSheetController brings iPad’s UIModalPresentationFormSheet to iPhone.
  • Nocilla is our favorite HTTP stubbing libary because it has such a simple and elegant API.
  • NSURL+QueryDictionary makes it easy to convert URL query params to a dictionary and vice versa.
  • ObjectiveSugar is exactly as it sounds. Add some sugar to your Objective-C!
  • OCMock because dependencies. Though with Swift and its focus on value types, we might be using fewer mocks!
  • oh-my-zsh because all we can say is, “OH MY ZSHELL!”
  • PSTAlertController provides an API similar to iOS 8’s UIAlertController, and it’s backwards compatible with iOS 7.
  • ReactiveCocoa is a different way of thinking about architecture, and we like it. We’re moving more and more towards FRP.
  • Specta allows our specs to read like English and have better structure. it(@"should allow the user to log in", ^{ ... }); instead of testUserShouldBeAbleToLogIn. We think it’s a lot nicer thanReadingABunchOfCamelCasedSentences.
  • SSKeychain provides an elegant abstraction around Apple’s Keychain Services API.
  • SVProgressHUD is basically every spinning progress loader in our app.
  • TOWebViewController is so nice for the few web views that we have in our app, although we’re slowly but surely moving away from them.
  • TTTAttributedLabel appears over and over in our app. Any stylized, tappable looking sections of UILabel’s in our app is probably a TTTAttributedLabel.
  • Underscore.m is one of my personal favorites. Never write a for-loop again.
  • xcpretty makes our Travis CI build output so much cleaner and prettier.
  • XVim I think I’m the only one who thinks this on my team, but it’s impossible to navigate quickly around Xcode without this.

A huge thank you to everyone who contributes to open-source. It makes development so much more collaborative, faster, and fun.

Giving back

Since we use so many open-source libraries, we wanted to give a little back to the community. We hope you find something that you like!

  • DryDock is basically our internal “App Store” for distributing beta builds to the rest of the team.
  • synx reorganizes your Xcode project folder to match your Xcode groups, because Xcode doesn’t already do that for some reason.
  • slather lets you measure test coverage in your iOS projects and optionally hook it into CI.
  • VENCalculatorInputView is the calculator keyboard for the amount field of a payment flow.
  • VENPromotionsManager is what we use for location / time dependent events, like our SXSW promotion last year.
  • VENSeparatorView is the zig-zaggy line that shows up in your payment feed for cash out events, etc.
  • VENTokenField is the Messages.app style recipients field that we use in our payment and invite flows.
  • VENTouchLock is our Touch ID + pin code integration.
  • VENVersionTracker is what we use to auto-update our dogfood versions. We’re looking to move to using HockeyApp’s equivalent though.
  • Venmo-iOS-SDK lets you build apps that integrate Venmo payments really easily.

Venmo Developer Spotlight: Edmund Yan

04 Dec 2014 · By Cassidy Williams and Edmund Yan

This is the second in a series of Venmo Developer Spotlights, where you can get insights on what life at Venmo is really like. If these posts tickle your fancy, head over to our job board and join us!

Edmund is a great backend engineer at Venmo. A recent Computer Science graduate from UC Davis, he is very excited to put his years of studying to use at Venmo. His life revolves around food, so expect to catch him trying out a new restaurant or cooking his ol' classic of steak and potatoes at home.

How long have you been with Venmo? What do you work on?

Venmo is my first job out of college, and I've been here a little over four months. I'm a platform engineer on the Money team, which owns the systems that deal with handling, you guessed it, money! This includes things like adding and verifying your bank account and the delicate process of actually moving money around Venmo.

What is your favorite programming language?

I'm a big Python fan these days, but I still have a huge place in my heart for C/C++. I did a lot of CUDA in school and although immensely frustrating, I loved the hours spent in the computer lab trying to squeeze out extra FLOPs out of my GPU.

What do you like to do outside of work?

I probably have an unhealthy obsession with Esports, where I log many more hours watching other people play video games than playing the game myself. While some people spend the weekend marathoning Netflix, I'm spending it marathoning a weekend LoL, CS:GO, or SC2 tournament.

Are you working on any side projects right now?

Now that I finally have my own apartment, I've been spending the past month "pimping" it out to be my little tech-oasis I call home. Organizing the miles of wires throughout the room, setting up the HTPC, automatically downloading the latest TV shows/magazines, wirelessly syncing all of it to my phone/tablet, etc. It's been a ton of fun incrementally building the system out and finding places I can write scripts to automate the process.

What is a fun fact about you that you don’t usually get to talk about?

In the 8th grade, I wrote a 70-page report on Jedi in the Stars Wars universe. This went into detail about their history, bios of influential Jedi, descriptions of force powers, lightsaber designs, and even an interview with a random guy I found on a Star Wars forum. I'm cringing but also laughing hysterically remembering it now.

What advice do you have for aspiring developers?

If you're having trouble finding inspiration to do programming on the side, find things in your life (no matter how small) and optimize it! My very first program was an auto-clicking script that pressed two keys over and over again so that I could get a high score in a Flash game on Neopets.
Looking back, some of the most fun and rewarding coding I've done were just small scripts I made to automate and make my mundane life a little easier. Things like auto-clicking video game bots, Excel macros, and web page parsers were just me thinking "hey, a computer can do this way better!"

Got more questions? Email us at blog@venmo.com!

Python Logging Traps

24 Nov 2014 · By Simon Weber

Python's logging framework is powerful, but gives you plenty of ways to shoot yourself in the foot. To make matters worse, logging mistakes are subtle and slip through code review easily.

In my time at Venmo, I've seen logging mistakes cause everything from unneeded debugging to application crashes. Here are the most common culprits:

Manual Interpolation

Bad:

logger.info("My data: %s" % some_data)
# or, equivalently
logger.info("My data: {}".format(some_data))

Good:

logger.info("My data: %s", some_data)

This pushes the interpolation off to the logging framework:

  • interpolation overhead is skipped if info level is not enabled
  • encoding problems will not raise an exception (they'll be logged instead)
  • tools like Sentry will be able to aggregate log messages intelligently

Pylint will detect this antipattern as W1201 and W1202.

logger.error(...e) in exception handlers

Bad:

try:
    ...
except FooException as e:
    logger.error("Uh oh! Error: %s", e)

Good:

try:
    ...
except FooException:
    logger.exception("Uh oh!")

Formatting an exception throws away the traceback, which you usually want for debugging. logger.exception is a helper that calls logger.error but also logs the traceback.

Implicitly encoding unicode data

Bad:

checkmark = '√'.decode('utf-8')
logger.info("My data: %s", checkmark)

Good:

logger.info("My data: %r", checkmark)

Using %s with a unicode string will cause it to be encoded, which will cause an EncodingError unless your default encoding is utf-8. Using %r will format the unicode in \u-escaped repr format instead.