An open API service indexing awesome lists of open source software.

https://github.com/bemmu/hnbuddies

Hacker News buddies
https://github.com/bemmu/hnbuddies

hackernews ycombinator

Last synced: about 1 year ago
JSON representation

Hacker News buddies

Awesome Lists containing this project

README

          

# Hacker News buddies

## People replying to each other's comments the most:

| Rank | Buddy score | User pair |
| ---: | ----: | --------- |
| #1 | 189 | cperciva<->tptacek |
| #2 | 160 | jbooth<->yummyfajitas |
| #3 | 134 | jacquesm<->tptacek |
| #4 | 116 | patio11<->tptacek |
| #5 | 109 | marshray<->tptacek |
| #6 | 103 | tptacek<->yummyfajitas |
| #7 | 95 | jrockway<->tptacek |
| #8 | 93 | lawnchair_larry<->tptacek |
| #9 | 85 | pg<->tptacek |
| #10 | 81 | rdl<->tptacek |
| #11 | 78 | gruseom<->tptacek |
| #12 | 75 | kenjackson<->rbanffy |
| #12 | 75 | axod<->mattmaroon |
| #13 | 69 | axod<->jrockway |
| #14 | 68 | rayiner<->tptacek |
| #14 | 68 | gojomo<->tptacek |
| #15 | 63 | axod<->tptacek |
| #16 | 60 | tedunangst<->tptacek |
| #16 | 60 | anamax<->jbooth |
| #17 | 59 | rbanffy<->tptacek |
| #18 | 58 | rbanffy<->recoiledsnake |
| #18 | 58 | cperciva<->pg |
| #19 | 57 | michaelochurch<->tptacek |
| #20 | 55 | AnthonyMouse<->rayiner |
| #21 | 53 | davidw<->tptacek |
| #22 | 52 | larrys<->tptacek |
| #22 | 52 | anigbrowl<->tptacek |
| #23 | 51 | sneak<->tptacek |
| #24 | 50 | Silhouette<->tptacek |
| #24 | 50 | ErrantX<->jacquesm |
| #24 | 50 | DanielBMarkham<->tptacek |
| #25 | 48 | davidw<->pg |
| #25 | 48 | betterunix<->rayiner |
| #25 | 48 | Tichy<->tptacek |
| #25 | 48 | Retric<->yummyfajitas |
| #26 | 46 | mindslight<->tptacek |
| #27 | 45 | tptacek<->waterlesscloud |
| #27 | 45 | samstave<->tptacek |
| #27 | 45 | jlgreco<->tptacek |
| #27 | 45 | chc<->tptacek |
| #27 | 45 | _delirium<->yummyfajitas |
| #28 | 43 | rhizome<->tptacek |
| #28 | 43 | btilly<->tptacek |
| #29 | 42 | pg<->rms |
| #29 | 42 | ivankirigin<->pg |
| #29 | 42 | ajross<->tptacek |
| #30 | 41 | guelo<->tptacek |
| #30 | 41 | grandalf<->tptacek |
| #31 | 40 | jlgreco<->rayiner |
| #31 | 40 | jlgreco<->mpyne |
| #31 | 40 | hga<->tptacek |
| #31 | 40 | abstractbill<->axod |
| #31 | 40 | Retric<->tptacek |
| #31 | 40 | 001sky<->tptacek |
| #32 | 39 | dfc<->rdl |
| #32 | 39 | crusso<->rayiner |
| #32 | 39 | angersock<->tptacek |
| #33 | 38 | rayiner<->yummyfajitas |
| #33 | 38 | kragen<->tptacek |
| #33 | 38 | jacquesm<->jrockway |
| #33 | 38 | ChuckMcM<->tptacek |
| #33 | 38 | Alex3917<->tptacek |
| #34 | 37 | yequalsx<->yummyfajitas |
| #34 | 37 | raganwald<->tptacek |
| #34 | 37 | pg<->staunch |
| #34 | 37 | mattmaroon<->unalone |
| #34 | 37 | jbooth<->tptacek |
| #35 | 36 | mechanical_fish<->tptacek |
| #35 | 36 | _delirium<->tptacek |
| #35 | 36 | Natsu<->tptacek |
| #35 | 36 | Alex3917<->tokenadult |
| #36 | 35 | stcredzero<->tptacek |
| #36 | 35 | mindcrime<->tptacek |
| #36 | 35 | joe_the_user<->tptacek |
| #36 | 35 | dragonwriter<->tptacek |
| #36 | 35 | anigbrowl<->jlgreco |
| #36 | 35 | CWuestefeld<->jbooth |
| #36 | 35 | Alex3917<->yummyfajitas |
| #37 | 34 | tptacek<->zedshaw |
| #37 | 34 | tptacek<->tzs |
| #37 | 34 | mattmaroon<->tptacek |
| #37 | 34 | jrockway<->stcredzero |
| #37 | 34 | gaius<->tptacek |
| #37 | 34 | clicks<->rayiner |
| #38 | 33 | run4yourlives<->tptacek |
| #38 | 33 | fallentimes<->mattmaroon |
| #38 | 33 | barrkel<->tptacek |
| #38 | 33 | Tichy<->davidw |
| #38 | 33 | DanielBMarkham<->jacquesm |
| #39 | 32 | thaumaturgy<->tptacek |
| #39 | 32 | swombat<->tptacek |
| #39 | 32 | philwelch<->tptacek |
| #39 | 32 | nostrademons<->pg |
| #39 | 32 | nitrogen<->rayiner |
| #39 | 32 | jdp23<->tptacek |
| #39 | 32 | iuguy<->tptacek |
| #39 | 32 | dragonwriter<->rayiner |
| #39 | 32 | coldtea<->pjmlp |
| #39 | 32 | briansmith<->tptacek |
| #39 | 32 | Alex3917<->pg |
| #40 | 31 | tptacek<->trevelyan |
| #40 | 31 | moe<->tptacek |
| #40 | 31 | jlgreco<->tedunangst |
| #40 | 31 | jerf<->tptacek |
| #40 | 31 | jacquesm<->mpyne |
| #40 | 31 | euroclydon<->tptacek |
| #40 | 31 | curi<->yters |
| #40 | 31 | Retric<->anamax |
| #40 | 31 | DanielBMarkham<->davidw |
| #41 | 30 | steveklabnik<->tptacek |
| #41 | 30 | staunch<->tptacek |
| #41 | 30 | btilly<->yummyfajitas |
| #41 | 30 | anigbrowl<->rhizome |
| #41 | 30 | ThomPete<->tptacek |
| #41 | 30 | JoachimSchipper<->tptacek |
| #42 | 29 | jlgreco<->sliverstorm |
| #42 | 29 | hga<->jbooth |
| #42 | 29 | cperciva<->jacquesm |
| #42 | 29 | coldtea<->tptacek |
| #42 | 29 | acqq<->tptacek |
| #42 | 29 | SwellJoe<->rms |
| #42 | 29 | AnthonyMouse<->tptacek |
| #42 | 29 | AnthonyMouse<->anigbrowl |
| #43 | 28 | rms<->yters |
| #43 | 28 | pg<->robg |
| #43 | 28 | peterwwillis<->tptacek |
| #43 | 28 | pbsd<->tptacek |
| #43 | 28 | nitrogen<->tptacek |
| #43 | 28 | mike-cardwell<->tptacek |
| #43 | 28 | kenjackson<->yummyfajitas |
| #43 | 28 | jacquesm<->pg |
| #43 | 28 | jacques_chester<->vacri |
| #43 | 28 | davidw<->jacquesm |
| #43 | 28 | daeken<->tptacek |
| #43 | 28 | btilly<->jacquesm |
| #43 | 28 | aston<->pg |
| #44 | 27 | tptacek<->wmf |
| #44 | 27 | jacquesm<->swombat |
| #44 | 27 | gte910h<->tptacek |
| #44 | 27 | fnordfnordfnord<->tptacek |
| #44 | 27 | dllthomas<->dragonwriter |
| #44 | 27 | cooldeal<->rbanffy |
| #44 | 27 | baddox<->tptacek |
| #44 | 27 | StavrosK<->tptacek |
| #45 | 26 | timr<->tptacek |
| #45 | 26 | rbanffy<->stcredzero |
| #45 | 26 | jacquesm<->philwelch |
| #45 | 26 | ghshephard<->tptacek |
| #45 | 26 | davidw<->patio11 |
| #45 | 26 | bane<->tptacek |
| #45 | 26 | _delirium<->jacquesm |
| #45 | 26 | MichaelSalib<->tptacek |
| #45 | 26 | Locke1689<->tptacek |
| #46 | 25 | pyre<->tptacek |
| #46 | 25 | palish<->pg |
| #46 | 25 | mattmaroon<->rms |
| #46 | 25 | icebraining<->jiggy2011 |
| #46 | 25 | hga<->rdl |
| #46 | 25 | davidw<->gaius |
| #46 | 25 | burgerbrain<->tptacek |
| #46 | 25 | axod<->swombat |
| #46 | 25 | axod<->jacquesm |
| #46 | 25 | arethuza<->gaius |
| #46 | 25 | anamax<->tptacek |
| #47 | 24 | tptacek<->wglb |
| #47 | 24 | tomjen3<->tptacek |
| #47 | 24 | rayiner<->rdl |
| #47 | 24 | jrockway<->rbanffy |
| #47 | 24 | javajosh<->tptacek |
| #47 | 24 | fnordfnordfnord<->mpyne |
| #47 | 24 | davidw<->rms |
| #47 | 24 | btilly<->rayiner |
| #47 | 24 | aston<->rms |
| #47 | 24 | arethuza<->jacquesm |
| #47 | 24 | Tichy<->curi |
| #47 | 24 | Tichy<->axod |
| #47 | 24 | RiderOfGiraffes<->jacquesm |
| #47 | 24 | MichaelSalib<->yummyfajitas |
| #47 | 24 | Confusion<->tptacek |
| #47 | 24 | ChuckMcM<->jacquesm |
| #48 | 23 | tptacek<->webwright |
| #48 | 23 | saurik<->tptacek |
| #48 | 23 | rms<->tptacek |
| #48 | 23 | rbanffy<->wmf |
| #48 | 23 | rayiner<->twoodfin |
| #48 | 23 | nikcub<->tptacek |
| #48 | 23 | mpyne<->nitrogen |
| #48 | 23 | m0nastic<->tptacek |
| #48 | 23 | jfager<->yummyfajitas |
| #48 | 23 | jbooth<->protomyth |
| #48 | 23 | jacquesm<->patio11 |
| #48 | 23 | icebraining<->tptacek |
| #48 | 23 | huhtenberg<->tptacek |
| #48 | 23 | dragonwriter<->lutusp |
| #48 | 23 | dllthomas<->lutusp |
| #48 | 23 | declan<->tptacek |
| #48 | 23 | dcurtis<->pg |
| #48 | 23 | clicks<->tptacek |
| #48 | 23 | byrneseyeview<->pg |
| #48 | 23 | brlewis<->pg |
| #48 | 23 | brl<->tptacek |
| #48 | 23 | belorn<->tptacek |
| #48 | 23 | anigbrowl<->yummyfajitas |
| #48 | 23 | anamax<->anigbrowl |
| #48 | 23 | Tichy<->yummyfajitas |
| #48 | 23 | Karunamon<->tptacek |
| #48 | 23 | DanBC<->tptacek |
| #49 | 22 | tptacek<->xlnt |
| #49 | 22 | rdl<->samstave |
| #49 | 22 | pg<->run4yourlives |
| #49 | 22 | haberman<->tptacek |
| #49 | 22 | gaius<->rbanffy |
| #49 | 22 | drivebyacct2<->tptacek |
| #49 | 22 | dctoedt<->tptacek |
| #49 | 22 | danielweber<->tptacek |
| #49 | 22 | alecco<->tptacek |
| #49 | 22 | aaronblohowiak<->tptacek |
| #49 | 22 | Nrsolis<->tptacek |
| #49 | 22 | DanBC<->jlgreco |
| #50 | 21 | smokeyj<->tptacek |
| #50 | 21 | sachinag<->tptacek |
| #50 | 21 | rbanffy<->ugh |
| #50 | 21 | protomyth<->tptacek |
| #50 | 21 | paraschopra<->patio11 |
| #50 | 21 | michaelchisari<->yummyfajitas |
| #50 | 21 | jules<->tptacek |
| #50 | 21 | jshen<->yummyfajitas |
| #50 | 21 | jrockway<->wmf |
| #50 | 21 | jerf<->kenjackson |
| #50 | 21 | jacquesm<->jules |
| #50 | 21 | hugh3<->jacquesm |
| #50 | 21 | dllthomas<->dredmorbius |
| #50 | 21 | derefr<->tptacek |
| #50 | 21 | curi<->rms |
| #50 | 21 | caf<->tptacek |
| #50 | 21 | byrneseyeview<->nostrademons |
| #50 | 21 | betterunix<->tptacek |
| #50 | 21 | ars<->tptacek |
| #50 | 21 | _delirium<->philwelch |
| #50 | 21 | Tichy<->mattmaroon |
| #50 | 21 | Tichy<->jacquesm |
| #50 | 21 | Tichy<->ars |
| #50 | 21 | RiderOfGiraffes<->pencil |

[full list](full.md)

## Motivation

The whole Hacker News comments database is [publicly available](https://archive.org/details/HackerNewsStoriesAndCommentsDump), so I wanted to play around with it a bit to see if I could find anything interesting.

Idea: People can reply to each other's comments. Could you tally up who tends to respond to whom, and make a kind of "best friends" list out of that?

## Defining a friendship

A friendship is pairs of people who tend to reply to each other's comments a lot. Friendships need to be two-way. Unrequited love is not counted here, people have to *exchange* messages.

If Alice replies to a comment from Bob, and then later on Bob responds to a different comment from Alice, the Alice<->Bob friendship gains one point. In other words, if there are x comments from Alice to Bob and y comments from Bob to Alice, then their "friendship score" is min(x, y).

## If you want to run the code yourself...

I downloaded HNCommentsAll.json from [here](https://archive.org/details/HackerNewsStoriesAndCommentsDump). That dump seems to be rather old. If you have a newer dump and want to re-run the toplist, here's how to do it.

First you need ijson. It's a JSON parser that works as a stream, so that the entire 9GB comments dump doesn't need to be loaded to memory.

```
pip install ijson
```

Each step builds a file that the next step uses, so that if something goes wrong in the middle you can pick up where it failed.

```
python build_author_dict.py
python replies.py
python best_friends.py
```

Note that this could take hours to run. There are millions of comments, and the code hasn't been optimized. It took about 2 hours on my late 2013 MBP with the 9GB dump file. If you do update the list, please send a pull request so I can include your more up-to-date toplist here.

Thanks for reading!