Prologue Profiles

Screen_shot_2012-05-27_at_4

My friend Dan Feld, who I've known since I was about 6 years old, is working on a really interesting project called Prologue Profiles. It's tagline is "Twenty-somethings onto something" and its current form is a weekly podcast in which he interviews someone who has given up the normal route through life in favor of trying to create something meaningful of their own. He's interviewed writers, musicians, designers, entrepreneurs, and this week he released an episode in which he interviewed me.

In the 14 minute interview I talk about the path through the world of entrepreneurship over the last four years, and address such topics as finding the right business, and the thin line between struggle and success.

Give it a listen, and be sure to send Dan any followup questions or feedback.

Hyperpublic Developer Challenge Stats and Recap

Last Thursday over at Hyperpublic we launched The Hyperpublic Developer Challenge. It consisted of two programming problems, one of easy/medium difficulty, and one which was slightly harder. We built it for fun, because we’re developers, and we love when there’s a fun problem around to work on if we get bored or need a distraction. The response to the challenge was phenomenal. We had thousands of developers from around the world working on the problems, and hundreds submit correct solutions. Here’s a summary of the response, the problems, the winners, and some observations.

The Response

Screen_shot_2011-03-01_at_9

To our amazement, 5,759 people landed on our challenge start page. From there 2/3rds of them, or 3,856, were feeling brave enough to at least look at the first problem. I’m sure it didn’t hurt that we were giving away free Dropbox and Github accounts, so even the non-programmers who landed on the page at least wanted to take a look at the first problem. The response peaked out with 400+ people viewing/working on the challenge concurrently.

The first problem, summarized below, proved to be a strong filter. Only 446 people, or 11.57% of people who looked at the problem, submitted a correct response. 4,860 incorrect answers were submitted, meaning that the successful submission rate was under 10%.

Problem 2, the more challenging problem, received 231 correct submissions. This means that of the 446 people who made it through question 1, only 51.79% of people made it through problem 2. There were 753 incorrect submission attempts.

All in all, 4.01% of people who viewed the challenge made it through to completing both problems.
Screen_shot_2011-03-01_at_9

The Problems
Problem 1 asked developers to calculate the influence of fictitious users in Hyperpublic based upon the influence of the users which they have added to the system. The data was given as a text file, but it could easily be converted into a 2-D array representing which users added which other users to the system.

The most common approach was to use the input as a matrix representation of a directed graph. For each user in the input, traverse the graph recursively to sum up the number of users that the initial user was responsible for. Then find the three users with the highest scores, and use them to compute your answer to problem 1.

While we won’t be posting code examples here because we’ll leave the contest up for others to try, there are various solutions available around the internet and github, which can be found quite easily be googling/searching github.

Problem 2 assigned point values to various tasks around Hyperpublic and gave 4 users point totals. It asked the developer to compute the minimum number of tasks required in order to reach their exact point totals. This proved a bit trickier, in that many people’s first instinct was the use a greedy algorithm in which they always executed the task with the largest point total before moving on to tasks with smaller point totals. This would lead to an incorrect submission and developers to rethink their solutions.

The best way to write this program for inputs and point values of any size is using dynamic programming. This is analogous to the optimal solution coin changing problem which asks what the optimal way to make change for a given amount of money is using coins of various values. It uses a technique called memoization, where you compute the optimal ways to make change for values 1, 2, 3…up to your highest amount, and you use the previously computed values to compute the next unknown values in k attempts, where k is the number of distinct values of coins.

The other way common way in which people solved this problem efficiently was by solving 4 different linear equations. There were some one line solutions using Mathematica and Matlab linear solvers. 

Fortunately, the problem size was limited enough in that a brute force solution would run quite quickly if people really got stuck as well.

The Winners
From the 231 correct submissions, we randomly selected winners of the following prizes:

Github “Medium” account free for one year – Norbert Fekete. Norbert hails from Mosonmagyarovar, Hungary, and submitted his solutions in C++. He’s new to github, so follow him over there and suggest some repos for him to fork.

Dropbox “Pro 100” account free for one year  – Brian Barthel. Brian is from Memphis, Tennessee, submitted a C# solution, and runs an independent software company called Zoasoft

Free desk for a month for two hackers to work on their own project at Hyperpublic HQ – Martin Czygan. Martin is from Leipzig, Germany, submitted a python solution, and since he can’t take advantage of a free desk in NYC anytime soon he has graciously donated the prize to an NYC based hacker who can use it. You can find him on github and twitter.

Other Observations
The most common language that we saw in submissions was Python. We haven’t run exact numbers, but eyeballing it, Ruby, PHP, Java, and C++ were the next most common. There were submissions in a wide range of languages though including Groovy, Scala, Clojure, L, Ocaml, C, Javascript, Haskell, Matlab, Mathematica, and others. Haskell in particular was popular among people who self identified as students or researchers.

Many people who submitted commented that the problems were too easy, and they would have preferred a harder challenge. We think that judging by the number of people who made it through, the number of people who emailed for help, and the number of people who submitted incorrectly, that the difficulty was about right. The majority of responses were very positive in that they said “this was a fun way to kill an hour or two.” We wanted the problems to take only an hour or two, and as such I think we got the difficulty right. People got to brush up on their dynamic programming or linear solving, they got to construct a graph, or they got to get their hands dirty with a new language. We think people had fun.

The last thought, is that we did this for fun, and we’re glad people enjoyed it. We also wanted to meet more developers and make them aware of Hyperpublic. We’re working on structuring data around every “local object” in the world, which is a big technical problem. If you’re interested in working on this with us, or hearing more about it. Don’t hesitate to contact me.

Looking forward to the next programming challenge.

 

What is Hyperpublic?

Screen_shot_2011-02-17_at_10

As an entrepreneur you frequently get asked what you do, what you're working on, and what your big idea is. Even your closest friends don't always know, since over the years they've observed all of the "pivots", "iterations", and "experiments" that you've conducted in the name of finding that elusive product market fit. I'd like to explain what Hyperpublic, the product we launched two weeks ago, is all about, since there is more to the company than appears on the newly minted Hyperpublic.com

Hyperpublic is a company focused on capturing and structuring local data.

What does that mean? Well, we look at local data as being any object in the world with a location attached to it. These objects can be people, they can be places (like restaurants, shops, and parks), or they can be things (like the West Elm bookcase in your apartment you're trying to sell). After we know what the object is and where it is, we'd like to structure and attach as much data to it as we can. This data may be photos, it may be tags that describe it, it may be pricing data if the item is for sale, it may be contact information. The list goes on.

After you collect and structure all of this data, there are a lot of things you can do with it. You can browse photos of local restaurants, you can find and hire a babysitter in your neighborhood, you can list all of the great comic books for sale in your city. We'd like to make it available to developers in order to find uses that we haven't even dreamed about. As such, the Hyperpublic platform will have an open API where developers can not only pull our data to create and enhance local applications, but they can also push objects, tags, and photos back into the system to distribute through the Hyperpublic ecosystem.

Hyperpublic.com is the first application built on top of the Hyperpublic platform. It exposes some of the data in the system as a local search, discovery, and curation tool for several big cities in the United States. Add yourself to the site if you'd like to be discovered. Tag yourself with "web designer", "freelance", "writer", or "looking for love". Browse your local neighborhood and save your favorite places and items into lists to organize your local world. Share your favorite spots with your friends. Post items you want to sell to the things category. You can join by simply emailing a picture of yourself, a thing, or a place to add@hyperpublic.com from your camera phone. No signup required.

Structuring data and location around every single person, place, and thing in the world and becoming a data provider is certainly a large goal, but it's a goal that our team is incredibly excited about pursuing. We'll have to solve hard problems involving big data, search, mobile product design, API and platform design, and more. If you're interested in working with us on these challenges, I'm hiring. Email me at doug@hyperpublic.com, or hit me up @petkanics.