1st Demoscene Card Exchange

category: offtopic [glöplog]
by Soundy:
First, thanks Starchaser for this wonderful initiative, and for the efforts you're putting to create more links between demosceners. I'm surprised to read there's a heuristic, and imagined matching was pure random. So what's best? Matching people with other people that share common points (e.g. Amiga demomaking), which helps sharing common passions but increases the chances they already know each other IRL (which happened to me with 1 of my 4 assignments), or allow people to discover new fields, taking also the risk of a lack of interest. That being said, I believe that people getting involved in this initiative are open minded by definition and find interest in demoscene globally. Finding a proper algorithm must have been a total headache!
Ahhh I hope I didn't give the opinion I did anything super impressive. It was mostly random but it does have to ensure people don't get assigned the same person twice, deal with varying request counts, and give priority to requests for local cards.

Roughly, what I wrote works to prioritize those who asked for local cards so they have the best chance of getting someone near them and of that from least to most requested cards.

For local cards, I tried to match within their country first, but some requested more than could be filled that way so as it said on the sign-up page I also matched against their wider area (US -> Canada; European country -> Europe, etc.) I'm open to changing this based on feedback.

I also ensured everyone gets a fair shot at cards, taking passes giving every person a card, taking them out of the senders or recipients list when they're full. This avoids the problem of one person asking for a lot, taking all the cards, and being unable to match anyone else. :)


This might be too much detail, but...

The algorithm is still a bit of a mess, and there's certainly improvements to be made since even after the tweaks I made this year I still found the result wasn't quite perfect according to my "best fit" rules, but quite close. After finding I could easily fix those by hand, I looked and still found some people who weren't matched but could have been, under the same metric, so I added those in too.

I'm happy to clean up my debug bits and push the latest if anyone wants a look. It's in Python, but not currently public. There's nothing magic about it though.

The criteria I want but haven't completely managed to get into code is this:

  1. Local requests should be prioritized. (To avoid someone taking it first as one of their global matches.)
  2. Those who ask for more cards should get more cards, but not at the expense of someone who asked for less. (Fair distribution.)
  3. Nobody should be sending more cards than they receive. (Worst case, getting more than you send is acceptable but not preferable.)

This basically means that in a second separate exchange I also held this year where only 18 people participated, I asked for 12 but only got 6. I could have gotten 12, without violating rule 3, but it violated rule 3. Other people who asked for six might have gotten the same as someone asking for four. That's not OK.

This is all very much not a problem the more people we get and a lesser concern if I eliminate the local option (still a work in progress, as above; feedback welcome), but I'm trying to make it so it does as best it can when I get small participant counts, like 18. I could also lower the max cap on cards sent, and that would likely help too, but for now I don't see a reason to.
I could have gotten 12, without violating rule 3, but it violated rule 3.
This should have read:
"I could have gotten 12, without violating rule 3, but it would have violated rule 2."

I should also point out I was able to completely satisfy both parts of rule 3 in this exchange. Nobody is sending more than they receive or receiving more than they send. I don't know if I was able to maximize the number of cards sent, but I would guess I'm not hugely far off either.

I would hope some day I can satisfy rules 1, 2, and 3, while also maximizing the number of cards sent. That's my real goal. Whether I can get that done in an algorithm capable of finishing in under an hour or so when presented with 40+ people, I'm still not sure yet.
under an hour

But it doesn't take that long right now, or does it?
added on the 2020-11-18 03:20:43 by wertstahl wertstahl
@Starchaser, I get it now, thanks for the explanation, and thanks again for the dedication!
added on the 2020-11-18 10:40:54 by Soundy Soundy
under an hour

But it doesn't take that long right now, or does it?
It doesn't. :) I did end up hand adding five or so matches to balance requests and only a few more after that to maximize cards sent. For some reason my code didn't notice them. Considering there was something like 260 cards being sent before that, having to only do ten or less matches by hand is alright and didn't take long.

However I do want to get to the point that I don't have to do that, and I know the results I get from the algorithm are optimal or quite close. As above I don't think I'm there yet though.

The hour bar is just a note to the fact that in theory I could always get the best result by trying every possible combination of matches, but for even as few as 45 people this would probably take longer than my lifetime to calculate. :)
However I do want to get to the point that I don't have to do that, and I know the results I get from the algorithm are optimal or quite close.
Bad grammar.

I do want to get to the point where I don't need to do any hand matching and I know the results from the algorithm are already optimal or quite close.
This is trivial to solve if it's a superset of a "secret Santa" where everyone requests the same number of assignments, since you can guarantee fulfillment. However I like sending and receiving more than one card, and additionally don't want to force people to send three cards, for example, if they're not comfortable with that. 7 people asked for less than 3 cards and 14 people asked for 10 or more cards.
Well, it'll be useful for next year I guess... I finally added a "hidden" stats page.

It doesn't tell you how many cards have actually been sent so far, but I'll add that later. It's also not the most useful metric since some people may not be using the checkboxes, and that's fine too. It was just there for those who would find it useful.

Also if you've had the header image disappearing on you in Firefox, I'm trying to track down why that is so I can fix it. It doesn't affect using the site other than making it look less plain, so it shouldn't be a bother.
Thanks a lot for the card StarChaser, we found it in the mail yesterday and had a big grin on our face when we pulled it out of the envelope! Not going to say more, as to spoil it for the others.
Also we have never seen round post stamps, so that was a good surprise as well! =)

Thanks a lot, and we're currently enjoying coffee and started to draw the first cards! :)
added on the 2020-11-29 15:43:09 by mog mog
Sent out the cards bound for other continents last week, since they take longer. Australia wasn't on the postal service's approved country list but they accepted it anyway, I hope it works out.
added on the 2020-11-30 10:59:25 by Nosferatu Nosferatu
Oh! Sorry. :( I should have checked all those before doing matching. The lists seem to vary all over. I didn't think Australia would have been on a forbidden list. I hope it makes it too, but If it gets returned, let me know and we can see about working something out.

@mog Glad you liked it. :)
I eagerly awaiting ze cards
added on the 2020-11-30 21:46:47 by DaD1916 DaD1916
by DaD1916:
I eagerly awaiting ze cards
Yeah I've only gotten two from a different exchange so far. I think many people are still making/sending theirs, which is seems OK. :)

If people are using the app sent checkboxes, the stats page should show how far along things are, but again it's just self-reported. I only added it for those who might want it.

I just usually end up being one of the early ones because I send out early for international recipients. I also make all my cards at once because aside from what I write inside, they're all made the same and it's easiest just to get all the pieces made in one go.

I think next year though I'm going to reduce that. I sent 36 total cards this year, 39-40 were for card exchanges (12 in this one). Oof. :)

Also whether people make their own cards or not, I appreciate all the participation and effort doing this. It's always fun.
sorry, haven't been sending out mine yet, first I was slacking off (yeah sorry) and now it's uni deadline season /o\
added on the 2020-12-01 02:45:03 by porocyon porocyon
by porocyon:
sorry, haven't been sending out mine yet, first I was slacking off (yeah sorry) and now it's uni deadline season /o\
Well get to it! (both ;) ) heh

Joking aside, the rules just sort of vaguely suggest "mid-December" for a target to have things sent by, but if you have any in Australia, US, or Canada I would at least maybe do those first since they have further to go. :)

I try to keep things pretty relaxed. I got mine out early but I'm not expecting anyone else to be that fast.
Starchaser, it's more a matter of that they can't guarantee the letters will get to the destination any time soon because international plane traffic everywhere has been reduced by a lot. But since it's christmas and I was pretty early it will probably work out.

Anyway, christmas cards should arrive when it's closer to christmas, I don't want them to arrive like a month before. That's just a waste of christmas mood :)
added on the 2020-12-01 08:47:34 by Nosferatu Nosferatu
judging from my experience with online-compos on csdb (i know this is neither csdb nor a compo!), i expect nothing less than release-numbers habitually being shifted towards the deadline ;-)

mini-stats: a card from the US (actually letter) took about 8 days to germany to arrive, but i also expect the delay in delivery to go up exponentially towards xmas (though i have no statistical proof here).

also, what nosferatu said.
added on the 2020-12-02 09:42:50 by wertstahl wertstahl
Sent all cards today; I asked for as many stamps as possible! There was a long queue behind me sighing aloud as the lady was stamping each one of them and looking up the prices for all the different countries :)

One is bound for Canada; the post office said 4-8 days, but apologies already in advance if it still does not make it. Hope you all like them!
added on the 2020-12-02 12:43:12 by pestis pestis
w00t. I got my first mail addressed to my scene name in over two decades! This will go under the Christmas tree and be opened on Christmas Day!

Thanks to the sender who resides in Switzerland!
added on the 2020-12-04 13:50:42 by DaD1916 DaD1916
I got a very nice card from somebody in Ireland saying something about needing disks for Amigas, and the same day I got a letter from Finland that included a disk for an Amiga. You all rock!
added on the 2020-12-04 14:19:54 by Bombe Bombe
Yeah I got one from Daddy Freddy yesterday and I think I'm up to 3 of 12 supposedly received. :)

I could add the ability to track received counts next year on the assignments page. Some do seem to be using the self-reported sent checkboxes. (There's a stats page now, if you missed it.)
3 of 12 sent cards received. Daddy Freddy was my first incoming card. I posted a photo to Twitter.
my three are on their way to Europe as of an hour ago :) hopefully the recipeints enjoy them :)
added on the 2020-12-04 18:02:46 by spiny spiny
*all sent* :-D
added on the 2020-12-07 12:49:36 by wertstahl wertstahl
all right, I finally got around finishing mine as well. they'll be posted tomorrow if all goes well
added on the 2020-12-08 17:14:41 by porocyon porocyon