[-] Die4Ever@programming.dev 23 points 2 years ago

some forums that use NodeBB, will be interesting to see if they enable federation

https://nodebb.org/showcase/

4
3

IMPORTANT FLASHING WARNING FROM 4:17 TO 4:26

This run has a raw recording version here (no commentary): https://www.youtube.com/watch?v=wJ3HC2VCDIY

Finally a 45 in this category and a good one despite a few rough spots, no plans to improve further without some major strat changes or somehow stumbling across new tricks.

Doom 64 (2020) speedrun leaderboard: https://www.speedrun.com/doom_64_2020

20

spoiler: "Suigi‬ now holds all 5 world records in Super Mario 64. He is the greatest speedrunner ever."

Suigi's current Mario 64 world records:

120 Star https://youtu.be/JoX7RDKRG7Q

70 Star https://youtu.be/zP-GOoGqA8w

16 Star https://youtu.be/ngMFEeDoX54

1 Star https://youtu.be/GqscP1F_P80

0 Star https://youtu.be/rdx0TPjX1qE

1
submitted 2 years ago* (last edited 2 years ago) by Die4Ever@programming.dev to c/starcraft@lemmy.world

Stream A: https://www.twitch.tv/taketv

Stream B: https://www.twitch.tv/cranky_ducklings

Results: https://liquipedia.net/starcraft2/HomeStory_Cup/26

TL Discussion: https://tl.net/forum/sc2-tournaments/633311-homestory-cup-26-nov-29-dec-1

November 29: RO24 Groups A & B (6 player round-robin)

November 30: RO24 Groups C & D (6 player round-robin)

December 1: Playoffs (8 player single elimination)

1
submitted 2 years ago* (last edited 2 years ago) by Die4Ever@programming.dev to c/starcraft@lemmy.world
1

S03E10 Revelations: Chapter Two IMDb

November 24th 2024

Season 3 Trailer

S03E10 Trailer

0

From is set to return to production in Nova Scotia in 2025, and premiere in 2026.

Minor spoiler for the season 3 finale inside the article? The finale for Season 3 will be this Sunday.

10
submitted 2 years ago* (last edited 2 years ago) by Die4Ever@programming.dev to c/speedrun@sh.itjust.works

Absolutely insane, still the only person to do a 1:35. And he's playing in the tournament this weekend at PACE https://programming.dev/post/21309528

3
4
1

I guess we'll see this updated patch in action in Wardi's PTR tournament this weekend lol

https://programming.dev/post/21132602

4
[-] Die4Ever@programming.dev 22 points 2 years ago

ReVamped is such an obviously good name lol

[-] Die4Ever@programming.dev 22 points 2 years ago

I'm still most excited about the ongoing work on plugin support

https://github.com/LemmyNet/lemmy/pull/4695

would you say this belongs in the 0.20.0 milestone? or is it too soon?

[-] Die4Ever@programming.dev 24 points 2 years ago* (last edited 2 years ago)

On Reddit we had r/hardware which was great for this

Here we have !hardware@lemmy.ml but I haven't checked it out much yet

[-] Die4Ever@programming.dev 23 points 2 years ago* (last edited 2 years ago)

ok maybe not my biggest or cleanest optimization, but an interesting one

I made the WCS Predictor for StarCraft 2 eSports, which would simulate the whole year of tournaments to figure out the chances for each player qualifying for the world championship (the top 16 players by WCS Points), and it would also show the events that would help/hurt the players. It was a big monte carlo simulation that would run millions of iterations. (My memory is fuzzy here because this was 2013 to 2014)

Originally I did a data-based approach where each Tournament object had a vector of Round objects (like round of 32, or semifinals, etc) which had a vector of Match objects (like Soulkey vs Innovation, or a 4 player group). The Round class had a property for best_of (best of 3, best of 5, etc). This was really inflexible cause I couldn't properly simulate complex tournament formats that didn't fit my data, and it required a lot of if statements that could cause branch prediction misses.

A tournament definition looked something like this:

older code example

		Round ro32("ro32");
		ro32.best_of=3;
		ro32.points_for_3rd=150+25;
		ro32.points_for_4th=100+25;
		Match ro32GroupA;

		ro32.matches.push_back(ro32GroupA);
		ro32.matches.push_back(ro32GroupB);
		ro32.matches.push_back(ro32GroupC);
		ro32.matches.push_back(ro32GroupD);
		ro32.matches.push_back(ro32GroupE);
		ro32.matches.push_back(ro32GroupF);
		ro32.matches.push_back(ro32GroupG);
		ro32.matches.push_back(ro32GroupH);

		GSL.rounds.push_back( ro32 );

When I rewrote it for the following year, I ditched the data-driven approach to try to get more efficiency and flexibility, but I definitely didn't want virtual functions either, so I decided to use templates instead and a custom class for each tournament. Now creating a tournament looked like this:

newer code example


template
class Round : public RoundBase
{
public:
	MatchType matches[num_matches];
// ... more stuff ...
};

class CodeSBase : public TournamentBase
{
public:
	Round<32, SwissGroup, 8, RandomAdvancement<16, 16>, true > ro32;
	Round<16, SwissGroup, 4, A1vsB2<8, 8>, true > ro16;
	Round<8, SingleMatch, 4, StraightAdvancement<4, 4>, true > quarterfinals;
	Round<4, SingleMatch, 2, StraightAdvancement<2, 2>, true > semifinals;
	Round<2, SingleMatch, 1, StraightAdvancement<1, 1>, true > finals;

	void init(vector &prev_matches, vector &upcoming_matches)
	{
		quarterfinals.best_of = 5;
		semifinals.best_of = 7;
		finals.best_of = 7;
		ro32.points_for_placing[3] = 100;
		ro32.points_for_placing[2] = 150;
		ro16.points_for_placing[3] = 300;
		ro16.points_for_placing[2] = 400;
		quarterfinals.points_for_placing[1] = 600;
		semifinals.points_for_placing[1] = 900;
		finals.points_for_placing[1] = 1250;
		finals.points_for_placing[0] = 2000;
		finals.match_placing_to_tournament_placing[0] = 1;
	}


	void predict(Simulation &sim, array &top8, array &bottom24, array &finalists, Rand64 &rng)
	{
		RandomAdvancement<16, 16> Ro32toRo16;
		A1vsB2<8, 8> Ro16toRo8;
		StraightAdvancement<4, 4> Ro8toRo4;
		StraightAdvancement<2, 2> Ro4toRo2;
		StraightAdvancement<1, 1> finalsadv;

		ro32.predict(sim, t_id, Ro32toRo16, rng);
		ro16.AcceptAdvancements(Ro32toRo16.advancing_players);
		ro16.predict(sim, t_id, Ro16toRo8, rng);
		quarterfinals.AcceptAdvancements(Ro16toRo8.advancing_players);
		quarterfinals.predict(sim, t_id, Ro8toRo4, rng);
		semifinals.AcceptAdvancements(Ro8toRo4.advancing_players);
		semifinals.predict(sim, t_id, Ro4toRo2, rng);
		finals.AcceptAdvancements(Ro4toRo2.advancing_players);
		finals.predict(sim, t_id, finalsadv, rng);

		top8 = Ro16toRo8.advancing_players;
		for (uint i = 0; i<8; i++) {
			bottom24[i] = Ro32toRo16.falling_players[i * 2];
			bottom24[i + 8] = Ro32toRo16.falling_players[i * 2 + 1];
			bottom24[i + 16] = Ro16toRo8.falling_players[i];
		}
		finalists[0] = finalsadv.advancing_players[0];
		finalists[1] = finalsadv.falling_players[0];
	}

All data had very good locality using arrays instead of vectors, everything could be inlined and branch predicted and prefecthed, complex tournament formats could be built even properly handling high placements from one tournament granting you seeding into a different tournament. I think I gained like 3x to 5x speedboost from this alone, I also made it multithreaded and work in batches which improved performance further, which allowed me to get updated results more quickly and with a higher number of samples. I also made it so it could output the results and then keep processing more batches of samples to refine the numbers from there. I wouldn't normally suggest these kinds of optimizations but it's a very unusual program to have such a wide hotloop

The website is gone, but here's a working archive of it (which I didn't know existed until writing this post, I thought there were only broken archives)

archive links, me reminiscing on old times, get ready for stats and graphs overload

home page: https://web.archive.org/web/20150822091605/http://sc2.4ever.tv:80/

a tournament page: https://web.archive.org/web/20160323082041/http://sc2.4ever.tv/?page=tournament&tid=27

a player's page: https://web.archive.org/web/20161129233856/http://sc2.4ever.tv/?pid=73

a general checkup page: https://web.archive.org/web/20161130055346/http://sc2.4ever.tv/?page=checkup

a page for players who must win tournaments to qualify: https://web.archive.org/web/20161129235740/http://sc2.4ever.tv/?page=must_wins

page showing the simulations history: https://web.archive.org/web/20161130055230/http://sc2.4ever.tv/?page=simulations

FAQ page: https://web.archive.org/web/20160323073344/http://sc2.4ever.tv/?page=faq

the fantasy league WCS Wars: https://web.archive.org/web/20161130055233/http://sc2.4ever.tv/?page=gamehome

my WCS Wars user page https://web.archive.org/web/20160704040152/http://sc2.4ever.tv/?page=user&uid=1

[-] Die4Ever@programming.dev 25 points 2 years ago

will get outdated and needs dealer updates

I thought Android Auto and Apple CarPlay both handle updates on the phone side, not the car side?

[-] Die4Ever@programming.dev 23 points 2 years ago* (last edited 2 years ago)

Primary Display Resolution: 1920x1080 60.75% -0.72%

Multi-Monitor Desktop Resolution: 3840x1080 60.70% -0.36%

maybe the "Multi-Monitor Desktop Resolution" is excluding single monitor setups, so it would make sense that there is no 1920x1080 in there

I don't see any common single monitor resolutions in that list so they're definitely excluding single monitor setups from that list, which is good

[-] Die4Ever@programming.dev 24 points 2 years ago

I don't think this is entirely true, I think the number of subscribers is just not perfectly synced. My instance doesn't even allow signups, I just have my single admin account on there, but the communities have quite a few subscribers

https://lemmy.mods4ever.com/communities

[-] Die4Ever@programming.dev 22 points 3 years ago* (last edited 3 years ago)

I think forking might be an overreaction at this point, a better idea would be to work on plugins/extensions support

https://github.com/LemmyNet/lemmy/issues/3562

And also new frontends can be made without touching the backend, so you could fork just lemmy-ui or one of the phone apps or one of the many web uis

[-] Die4Ever@programming.dev 23 points 3 years ago

Normie is gross but it's mainly just dismissive and having too high an opinion of one's own taste/interests.

Really? I always thought it was supposed to be self deprecating, like saying "people who aren't fucking weirdos like myself"

[-] Die4Ever@programming.dev 24 points 3 years ago* (last edited 3 years ago)

well my Lemmy backups did exceed 10MB, but the 0.18.3 database optimizations brought me under 10MB again lol

11M Jul 28 22:35 bak-lemmy-2023-07-28_22.35.52.zip
8.8M Jul 28 22:39 bak-lemmy-2023-07-28_22.38.59.zip

(hosting an instance with communities but no users doesn't need much hardware at all btw)

[-] Die4Ever@programming.dev 25 points 3 years ago

I think ActivityPub states that you must follow a user for their posts to federate, but Lemmy currently doesn't give a way to follow users only communities, so it will probably eventually work

(I think technically communities are fake users that retweet/boost the posts to them?)

view more: ‹ prev next ›

Die4Ever

0 post score
0 comment score
joined 3 years ago
MODERATOR OF