Factual Featured Partner: Winetaster

Winetaster provides an expansive solution to discovering the best wines for your taste. We spoke with Don Bradford, CTO, and CPO to learn more.

Company: Winetaster
Located: Kyburz, CA
Partner Since: 2014
Website: www.winetaster.com
Name and Title: Don Bradford, Co-founder, CTO, and CPO

 
Q: Introduce readers to Winetaster. What do you do?
A: Our goal has been to create the easiest way for users to discover, remember, locate, and purchase wines that match their taste. We started out building a platform to explore affinity commerce— how users with similar tastes can be influential on each other— and realized that in the complicated world of wine (varietals, vintages, etc.), users wanted quick access to information online and nearby. This extends from recommending which wines to purchase online to helping users explore nearby establishments while out and about on their mobile devices.

Q: Why is location data important for Winetaster?
A: Wine is part of a social experience (most people don’t regularly drink a bottle home alone— not that there’s anything wrong with that). However, many people are challenged to find a restaurant that meets some set of criteria (a certain cuisine, price, parking, location, etc.) and offers a wine list that they can enjoy. This is why we really went into making a mobile “out on the town” experience, which requires as much venue information as we can get.

Q: Why did you choose Factual as your location data provider?
A: Something that makes Factual’s Global Places so powerful is that it offers consistent, rich data (such as address, hours, cuisine, and price) for all different venues— restaurants, bars, retailers, etc.. Additionally, Crosswalk allows us to pull in a wide view of places and show users complete recommendations including elements like, Locu place data, Yelp and Foursquare reviews.

Q: Was your long term plan always to have a desktop and mobile experience or is this something that evolved over time?
A: We always planned on offering both desktop and mobile. When we first started testing with users, we found that they experienced wines across a variety of devices: at home they shop online on their laptops or desktops; when they are out at a store or restaurant, they reference their mobile devices for recommendations and search. Most of our users use at least a smartphone and another device (such as a laptop). With this in mind, we took a design approach for our mobile site that would make it easy to later build out iOS and Android apps. Right now, we’re in the process of launching our website, mobile web app, and first native app for iPhone.

Q: Are there any new features of Winetaster coming up?
A: One of the things we’re building out right now is a menu and wine list database and index to offer the same powerful search and autocomplete that we do for wines. While using our Discovery feature, you can set a series of parameters (for example: unoaked Chardonnay that pairs well with chicken masala) and pull a list of corresponding wines from our index. We’re expanding that to restaurants, so you can ask, “I’m in Mendocino at a place with a great red snapper and am trying to pick a good light Pinot Grigio to go with it,” and get a recommendation. Ultimately we’re going for a holistic experience and plan to continue to build out features to use at restaurants.

Q: How do you provide recommendations for users?
A: Our wine data is pulled from multiple sources— any public information or reviews that we crawl and index goes into it. We condense all of this input data and identify relevant attributes, such as oaking for Chardonnays. We get a lot of interesting cases where people use unconventional ways of describing wine, such as describing a “silky” red. Since we want Winetaster to be approachable to all users, not just professionals who use the same jargon, we approach these cases with a sort of intelligent tagging system that identifies common terms used to refer to different wines in reviews. We also look at user profiles to match users with wines that other people with similar taste suggest, not just recommendations from the general population.

Q: Did you use existing food and beverage or restaurant apps as your inspiration?
A: Actually, I’d say we’re modeled more closely after travel sites, such as Kayak or Trivago, who offer a vertical search experience that pulls all of the relevant information into one place. We offer a blended local experience, integrating Yelp, Foursquare, Factual, and Locu. Most other sites and apps in the wine space are more about a personalized wine experience or pushing inventory. We saw that nobody had really tried to take a customer-centric view of the online marketplace and tie it together with real world experiences in stores or restaurants.

Q: What is a lesson that you have learned while working on Winetaster?
A: One of the primary lessons we’ve learned is the importance of leveraging opportunities with strategic partners at the platform and business levels. We started off doing things on our own, but we determined that we’re better off partnering with different platforms rather than building everything in-house. We’ve definitely lost some time working with platforms that ultimately didn’t meet our needs, but as we’ve become more discerning and developed better relationships, this has been extremely beneficial.

- Julie Levine, Marketing Associate

In Case You Missed It
Check out some other Featured Partners, like social apps Beasy, HelloTel, and Emu, navigation apps Urban Engines and 2GIS, and market research company Infoscout. See more featured partners here.

Bug Du Jour: CDH5 upgrade

We upgraded our Hadoop cluster to YARN/CDH5 last weekend, which brought along the usual flurry of “oops, gotta fix this” commits as various services had hiccups, and in many cases refused altogether to do anything useful. Last week Tom sent me my favorite message: “I just want this to work” (seriously, it’s awesome to get these because you never know what kind of bug it is).

The problem manifested itself as a dreaded classfile verification error:

java.lang.VerifyError: class org.apache.hadoop.yarn.proto.YarnProtos$ApplicationIdProto overrides final method getUnknownFields.()Lcom/google/protobuf/UnknownFieldSet; 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:788) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:447) 
at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at java.lang.Class.getDeclaredConstructors0(Native Method) 
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2483) 
at java.lang.Class.getConstructor0(Class.java:2793) 
at java.lang.Class.getConstructor(Class.java:1708) 
at org.apache.hadoop.yarn.factories.impl.pb.RecordFactoryPBImpl.newRecordInstance(RecordFactoryPBImpl.java:62) 
at org.apache.hadoop.yarn.util.Records.newRecord(Records.java:36) 
at org.apache.hadoop.yarn.api.records.ApplicationId.newInstance(ApplicationId.java:49) 
at org.apache.hadoop.yarn.api.records.ContainerId.toApplicationAttemptId(ContainerId.java:244) 
at org.apache.hadoop.yarn.api.records.ContainerId.fromString(ContainerId.java:225) 
at org.apache.hadoop.yarn.util.ConverterUtils.toContainerId(ConverterUtils.java:178) 
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.main(MRAppMaster.java:1406)

No user code anywhere, which is bad. I googled it and found this thread, which mentioned that there was a Protocol Buffers version conflict. It makes sense; if the access modifiers change from one version to the next and you’ve got a nondeterministic dependency inclusion, then you’d see stuff like this.

No problem; CDH5 uses protobuf 2.5.0, so let’s see which non-2.5.0 version my jar has:

$ lein deps :tree 2>&1 | grep protobuf
   [com.google.protobuf/protobuf-java "2.5.0"]
$

Ah. Ok, so maybe it’s some stray classpath entry on the cluster machines? Let’s see what happens there (SSH access to the hadoop worker nodes is a lifesaver):

$ ssh spencer@datanode
datanode$ locate protobuf | grep jar$
/usr/lib/avro/avro-protobuf-1.7.6-cdh5.4.0.jar
/usr/lib/avro/avro-protobuf.jar
/usr/lib/hadoop/parquet-protobuf.jar
/usr/lib/hadoop/lib/protobuf-java-2.5.0.jar
/usr/lib/hadoop-hdfs/lib/protobuf-java-2.5.0.jar
/usr/lib/hadoop-mapreduce/protobuf-java-2.5.0.jar
/usr/lib/hadoop-mapreduce/lib/protobuf-java-2.5.0.jar
/usr/lib/hadoop-yarn/lib/protobuf-java-2.5.0.jar
/usr/lib/hbase-0.94.0/lib/protobuf-java-2.4.0a.jar
/usr/lib/hbase-0.94.3/lib/protobuf-java-2.4.0a.jar
/usr/lib/parquet/parquet-protobuf.jar
/usr/lib/parquet/lib/parquet-protobuf-1.5.0-cdh5.4.0.jar
/usr/lib/parquet/lib/protobuf-java-2.5.0.jar
/var/dcache/prod/prod_config/runlib_cacheFE/lib/protobuf-java-2.5.0.jar
datanode$

We’ve definitely got some candidates for problems here; all of the 2.4.0a stuff might be on the classpath. I did some digging through the YARN job logs to find out, but it turned out that none of the conflicting jars were included.

Next I started looking at the uberjar itself. The problem shouldn’t be there, but you never know:

$ lein clean; lein uberjar
$ vim target/the-app.jar
the-app.jar:
...
META-INF/maven/com.google.protobuf/
META-INF/maven/com.google.protobuf/protobuf-java/
META-INF/maven/com.google.protobuf/protobuf-java/pom.xml        <- opened this
META-INF/maven/com.google.protobuf/protobuf-java/pom.properties
...

pom.xml:
...
  <groupId>com.google.protobuf</groupId>
  <artifactId>protobuf-java</artifactId>
  <version>2.4.0a</version>                                     <- uh oh!
  <packaging>jar</packaging>
...

So lein deps :tree was lying after all! The fix I ended up with, rather than try to address the underlying problem, was to manually exclude com.google.protobuf/protobuf-java from the dependency tree (just added it to the :exclusions in project.clj), which didn’t cause any problems since v2.5.0 was already on the worker nodes’ classpath.

This wasn’t the most interesting bug I’ve worked on (that honor currently goes to a truly insane Clojure(delay) bug involving locals clearing, something I’ll write up when I get a chance), but the unexpected duplicity from Leiningen added a great twist. If you enjoy devious build tools, life-changingly cool bugs, and other hard problems, then Factual might just have your ideal job. Learn more here.

- Spencer Tipping, Bug Exterminator

Closing out Clojure/West

Clojure is a growing programming language that has gained traction due to its powerful abstractions, well-composed feature set, integration with the JVM and the wealth of available Java libraries. A few weeks ago, two of our engineers had the pleasure of presenting their clojure specialities at Clojure/West, held in Portland. Below you will find the videos for their presentations. Enjoy!

EVERYTHING WILL FLOW
Zach Tellman, Software Engineer

Queues, it seems, are back in fashion. This is exciting, as queues let us explore problem spaces that were unreachable by pure, immutable primitives. But queues, and the execution models that drive them, are very different than what we’re used to. Naive use of libraries like core.async will create brittle, unpredictable systems that fall over when we least expect.

This talk covers the basics of queueing theory, and its practical application in Clojure systems large and small.

WELL I WOULDN’T WANT TO MAKE A *DYS*FUNCTIONAL GAME
Morgan Mullaney, Software Engineer

Perhaps contrary to popular belief, there is a rich history of lisp and other functional languages in game development. How can the choice of programming language inform game design and empower the artist? What properties of lisp, and Clojure in particular, make it suitable for building games?

This talk starts by considering the wisdom of our ancestors before diving into an exploration of the application of functional programming as engineering practice to the art of game design.

- Jaclyn Frattali, Marketing & Events Manager

Goodway Group Partners with Factual to Provide Unparalleled Accuracy for Mobile Ad Targeting

We are excited to announce a new partnership with Goodway Group, an industry-leading digital media company with offices across the United States. Factual is collaborating with Goodway’s digital team on providing a more relevant and personalized ad delivery experience for mobile users worldwide.

Goodway’s media buying arm will now have access to Factual’s custom-built Audience Segments, all of which are based on location patterns of mobile users. These segments include information on geographic, demographic, and behavioral characteristics, affinities to specific retail brands, and the ability to create custom location based segments via Factual’s Tailored Location Segments. This segmented audience access will allow for further fine-tuning of effective mobile ad campaigns.

Goodway partners with regional ad agencies to provide clients with advertising solutions in the mobile, online, video, and social media categories. Current clients include nationally recognized brands such as McDonald’s, General Motors, Porsche, and Subaru.

“By partnering with Factual, Goodway has taken its ad targeting capabilities to the next level of precision,” said John Mellinger, Goodway’s Vice-President of Enterprise Partnerships. “The ad campaigns we intend to create together will significantly move the probability needle toward the ultimate goal – purchasing by mobile users.”

To read the full press release click here.

Contact sales to learn more about Factual’s mobile ad targeting products.

Factual Featured Partner: Glia

Glia is a search and discovery app aimed at helping consumers find businesses (restaurants, stores, etc.) that align with their social and political views, when deciding when to spend their hard earned cash. We spoke with Co-founder Barry Klein to learn more.

Company Name: LAMID Studios
Mobile App: Glia
Located: San Diego, CA
Partner Since: 2014
Website: www.glia.is
Facebook: www.facebook.com/glia.is
Twitter: @glia_is
Tumblr: www.glia-is.tumblr.com
G+ +Glia
App Store: iTunes
Name and Title: Barry Klein, Co-founder

 
Q: Introduce readers to Glia. What do you do?
A: Glia is a platform that empowers people to shop with a purpose by connecting users with businesses based on their social and political values. You can think of it as “Yelp meets eHarmony,” designed to help people with values-based shopping and discovery. Users create a personal values profile in a quick, fun, and simple process where they report and rank their views on social and political issues. Then, while out and about, they can search for businesses (such as retailers or restaurants) and see which businesses align (and don’t align) with their values— making it easier to decide where to spend their hard earned dollars.

Q: Why is location data important for Glia?
A: When first coming up with the concept behind Glia, we asked ourselves how would we want to use it. My initial idea came about when I was trying to figure out where I’d want to go with my wife for a special dinner. I realized how little I knew about the places where I was likely to spend a significant amount of my money and that if I knew the values of the people who owned the restaurants were similar to my own, I’d be more likely to try a place or go there more. We also know how busy people are and how much time we spend out and about, so we wanted a real time, location based application that could be used when out in the world, actually making a spending decision.

Q: Why did you choose Factual as your location data provider?
A: Factual is the premium resource for location data on businesses. Your team provides the most extensive and thorough data for individual businesses. This allows us to not have to worry about that aspect of our app.

Q: How do you determine which companies align (or don’t align) with each issue?
A: We understand that people are not just Democrats or Republicans— they’re more nuanced. The issues that motivate you and me are different. When users sign up for Glia, they’ll find 50+ different values to choose to establish their own profiles. To determine how businesses themselves align with each issue, we are working with the former Heads of Research for the Republican National Committee and the Democratic Governor’s Association. They helped set up our research operation so that we know the right avenues to go down to collect data, not just on what businesses say they support, but also how they actually act. We have our own internal algorithms that deal with complicated situations (such as a business who claims to support a value but spends their money in a contradictory way) and weight different actions by businesses in different ways.

Q: One of the clever things Glia does is gather data on users’ preferences using “yes/no” style quizzes (Should we spend more money on education or prisons?). Where did you get this idea from and how did you design these quizzes?
A: We came up with the idea for the polls during a brainstorming session on how to get meaningful information from users while keeping them engaged and entertained. To design these polls, we added a nationally recognized pollster to our team to help with probing and understanding the nuances of what people think on a given issue. We developed a list of questions to get a more granular level of understanding of what users think. We also keep an eye on the news and know the issues that people are generally interested.

Q: Do you find you get more information from these polls than user profiles?
A: It runs the gamut. We have people that will only respond with 5 values when they’re first on-boarding but will then do 50 poll questions in a session. Just as well, we have people who fill out 18 values and answer no poll questions. We are exploring what drives that behavior so that we can continue developing the app to fulfil our users’ needs. We encourage people to share as much information as possible to get the maximum about of value from Glia.

Q: Why did you choose to build a mobile app (instead of a desktop experience)?
A: This is something that we talk about all the time. It stems from something that I started going down the road on earlier— the idea to give you that “thumbs up/thumbs down” opportunity as you’re walking around. That said, a web app is in our near future with more robust data and features (so you can better understand where the scoring comes from and even get involved in the process).

Q: What’s a great feature about Glia that users aren’t taking advantage of?
A: The main thing that users don’t appear to take advantage of as much as we would’ve thought (and we understand why and try to draw attention to it now) is the User Profile screen. After a user on-boards and swipes in their values, the user profile screen comes up that shows those values and the user has the opportunity to move those selected values up and down (so the most important issues are ranked first). I think what a lot of people do is just hit save right away, since we’re all busy and eager to get to the “wow moment.”

Q: Do you have any advice for aspiring entrepreneurs or app developers?
A: When you have an idea for a new business you have this belief that it’s golden— that it’s unique or a key improvement and will be loved by many. Fellow entrepreneurs that I speak to discuss the high rate of failure and that for all the AirBnBs out there, there are many many many many more failures. I think part of going through this process is embracing the sense of optimism when you first had the idea without going overboard, or spending money that you don’t have, or not paying attention to what you’re seeing in the data that’s coming through to you. This “clear eyed optimism” is important so that you can stay in this business for the long term and become an overnight success that was two or three years in the making.

- Julie Levine, Marketing Associate

In Case You Missed It
Check out some other partners we’ve interviewed, such as social planning app Beasy, navigation app Urban Engines, and power optimization company Opower. See even more Featured Partners here.