Boojum's recent activity

  1. Comment on How many strings must you string from string cheese in order for it to be considered string cheese and not just eating a stick of mozzarella? in ~food

    Boojum
    Link
    I prefer my "string cheese" breaded and fried, with the strings all gooey and stretchy. :-)

    I prefer my "string cheese" breaded and fried, with the strings all gooey and stretchy. :-)

    4 votes
  2. Comment on What games have you been playing, and what's your opinion on them? in ~games

    Boojum
    (edited )
    Link
    I started Clair Obscur: Expedition 33 this weekend after picking it up on the Steam sale. I just finished the second zone after the prologue last night, and so far, I'm enjoying it! As someone who...

    I started Clair Obscur: Expedition 33 this weekend after picking it up on the Steam sale.

    I just finished the second zone after the prologue last night, and so far, I'm enjoying it! As someone who grew up playing SNES-era JRPGs it's been fun seeing a truly modern take on the genre. The last FF that I played was FF8, though for something a bit more recent I've enjoyed the GBA's Golden Sun and Falcom's Trails in the Sky.

    The graphics are gorgeous, and it runs great at 4k on my 4090. Interestingly, I realized that parts gave me Guild Wars 2 vibes -- mostly in terms of the impressionist digital art style with the brushstroke backgrounds in the UI, not to mention the pictures in The Manor. I've also really been enjoying the soundtrack so far. Some of the early battles have had way more epic music than I'd expected.

    I do wish that there was a difficulty setting somewhere between Story and Expeditioner. I've never been great with timing, so I greatly appreciate the more forgiving dodge an parry windows of Story mode. But then the enemy damage feels a little too nerfed and I've been kind of face rolling everything, including optional bosses. I think if I could have the enemy damage of Expeditioner mode (since I'm fairly experienced at managing turns in JRPGs), but the timing window of Story mode it would be just about perfect.

    It does seem pretty linear so far. Mostly a single long winding corridor with the odd path branching off to a dead end with a fight and some loot. That does make it easier to make sure that I explore everywhere and and grab everything without missing anything. But I won't deny that it's become a bit predictable (even when it is prettied up a bit with grapples, ropes, and jump puzzles).

    I've been trying to play cold and avoid spoilers so far, but I'm definitely curious to see where the story goes!

    Soooo many questions so far...

    Roughly in order as I've been playing:

    • Is Lumiere an alternate-world Paris? It seems to be smaller than Paris, but has the Eiffel Tower and the Arc de Triomphe?
    • Or is this Earth in an alternate-timeline where something catastrophic happened to it?
    • What's with all the weird goo in the town? I noticed someone trying to clean it there. (Or later, the goo in the Spring Meadows.)
    • Why does the broken Arc frame the continent (and particularly the Monolith) at the harbor?
    • What is this shield dome thing mentioned as protecting Lumiere, and what's Gustave's involvement with it? Looking up at the skybox I don't see anything like that.
    • Why is everything floating? And why is everything warped and distorted to point toward the Monolith?
    • What's the deal with the mimes? I've found two so far - and if they're like the other non-human enemies, how the heck did one get into Lumiere? Or are they meant more as just hidden Easter eggs?
    • Why is The Paintress counting down? Why purge people by age? What happens if zero is reached and humans are eliminated?
    • If someone dies of natural causes/accidents in Lumiere, do they fade away too like in the Gommage?
    • Is there any significance to 33 being 1/3 of 100 after rounding?
    • Who was the old guy on the beach?
    • How did the survivors from the beach landing get scattered?
    • There's mention of Expedition Zero making it to The Paintress and being the first and only one with any survivors. From the Expedition Journals, all others expeditions seem to have been numbered counting down one ahead of The Paintress instead. Why was Zero different, and why the changed numbering? Early installment weirdness?
    • How do the player characters make things like guns manifest out of thin air (like Gustave at the red tree)?
    • In fact, where do the human's magic abilities come from? From pictos and chroma, I'm guess based on NPC comments in the Prologue. Did they exist in this world originally, or is a post-Fracture thing?
    • And what the hell was the Fracture? What triggered it? What was the world like before?
    • The red trees almost seem like they're drawing blood from the corpses? Why? (And something similar seems to happen to the guy killed in the cut scene when the first main boss, Eveque, shows up.)
    • An early cut scene mentioned people dying different on the continent than in Lumiere - sticking around and becoming these weird manikin/statue-like corpses instead of disentegrating. What's with that?
    • Clair obscur - light and dark, or chroma and luma like in video - clear dualities, but to what end?
    • What the heck are nevrons and gestrals exactly? Some kind of automatons?
    • And what's with the white, friendly-ish nevrons? Or the one guarding the flower?
    • What the hell is The Curator? Why did it help Maelle (did it carry her to the manor from the beach)? And what does it really want?

    Hopefully, I'll get some answers by the end. Though I have a feeling that I'll have loads more questions before then, too.

    ETA: I do also like how there's no magic points to worry about. In other games, MP attrition for spell casters can often feel like the limiting factor for how long you can reasonably spend in a dungeon. The fact that it's all off of action points, and those regenerate in battle is quite nice.

    5 votes
  3. Comment on Share the contents of an old file you've got lying around in ~talk

    Boojum
    Link Parent
    Honestly, I'd say that's not bad for high-schooler-authored code! I've seen worse by people old enough to know better. Oh, I remember those days - also high school for me! Euler angle rotations...

    Honestly, I'd say that's not bad for high-schooler-authored code! I've seen worse by people old enough to know better.

    This was written after I learned trig, but before I learned linear algebra,

    Oh, I remember those days - also high school for me! Euler angle rotations directly on vector components and stuff like that. (Cringe!)

    1 vote
  4. Comment on Share the contents of an old file you've got lying around in ~talk

    Boojum
    Link Parent
    Sometimes the non-noteworthy programs are fun to revisit too, just to see your frame of mind back then and how your style has evolved.

    Sometimes the non-noteworthy programs are fun to revisit too, just to see your frame of mind back then and how your style has evolved.

    1 vote
  5. Comment on Share the contents of an old file you've got lying around in ~talk

    Boojum
    Link Parent
    Yep, looking at my juvenalia here was a fun reminder of the days of unsigned char *scrn=MK_FP(0xa000,0); and scribbling directly into the video framebuffer memory. Despite doing GPU design for a...

    Yep, looking at my juvenalia here was a fun reminder of the days of unsigned char *scrn=MK_FP(0xa000,0); and scribbling directly into the video framebuffer memory.

    Despite doing GPU design for a living now, I've still been tempted to play around with doing gamedev using almost pure SW rendering, just uploading framebuffers to textures for scaling and presentation. Either SW sprite and map blitting, or old-school PSX-era rasterization. Maybe with wobbly fixed-point transforms and non-perspective correct textures, just for veracity.

    3 votes
  6. Comment on Share the contents of an old file you've got lying around in ~talk

    Boojum
    Link Parent
    Could you possibly have been thinking of the DOOM fire effect?

    Could you possibly have been thinking of the DOOM fire effect?

    2 votes
  7. Comment on The 2025 Steam Summer Sale is live (runs June 26 - July 10) in ~games

    Boojum
    Link Parent
    Glad to see Dig Dug mentioned! If we're reaching back to Golden Age games with combat mining, Boulder Dash also comes to mind. It's also a game where you can drop rocks on enemies.

    Glad to see Dig Dug mentioned! If we're reaching back to Golden Age games with combat mining, Boulder Dash also comes to mind. It's also a game where you can drop rocks on enemies.

    3 votes
  8. Comment on Give footnotes the boot in ~design

    Boojum
    Link Parent
    You beat me to it! Tufte's style is by far my favorite solution to this, though admittedly it works much better on big, wide screens than on mobile devices in portrait aspect.

    You beat me to it! Tufte's style is by far my favorite solution to this, though admittedly it works much better on big, wide screens than on mobile devices in portrait aspect.

    3 votes
  9. Comment on Share the contents of an old file you've got lying around in ~talk

    Boojum
    Link
    Oh, this led to some fun spelunking! Here's an old program of mine from my teens, TURB2.C. The date stamp must have gotten corrupted somewhere along the way (it shows as Dec 31 1979), but given...

    Oh, this led to some fun spelunking!

    Here's an old program of mine from my teens, TURB2.C. The date stamp must have gotten corrupted somewhere along the way (it shows as Dec 31 1979), but given that TURB.C is from Nov 30 1996, I probably wrote this some time in early December 1996.

    TURB2.C
    /*========================================================================*/
    #include <stdio.h>
    #include <dos.h>
    #include <stdlib.h>
    #include <mem.h>
    
    /*========================================================================*/
    void main(void);
    void SetVideoMode(void);
    void SetPalette(void);
    void InitNoise(void);
    void CalcTurbulence(float,float,float *,float *);
    void DrawDisplay(void);
    void OutputFile(int);
    void ClearScreen(void);
    void TweekNoise(void);
    void SetTextMode(void);
    
    /*========================================================================*/
    unsigned char tgapal[768];
    float noisex[33][33],noisey[33][33];
    
    /*========================================================================*/
    void main(void)
    {
    	int s;
    	int f,nf;
    
    	printf("Turbulence #2 - By [REDACTED/Boojum]\n");
    	printf("Enter a seed (integer).\n>>");
    	scanf("%u",&s);
    	printf("Enter the number of frames.\n>>");
    	scanf("%u",&nf);
    	srand(s);
    	SetVideoMode();
    	SetPalette();
    	InitNoise();
    	for (f=0;f<nf;f++)
    	{
    		DrawDisplay();
    		OutputFile(f);
    		ClearScreen();
    		TweekNoise();
    	}
    	SetTextMode();
    }
    
    /*========================================================================*/
    void SetVideoMode(void)
    {
    	_asm
    	{
    		mov ax,0x13
    		int 0x10
    	}
    }
    
    /*==========================================================================*/
    void SetPalette(void)
    {
    	short x,z;
    	unsigned pal[768],r,g,b;
    
    	z=0;
    	for (x=0;x<=255;x++)
    	{
    		r=x;
    		g=x>>1;
    		b=x>>2;
    		if (r>63) r=63;
    		if (g>63) g=63;
    		if (b>63) b=63;
    		tgapal[z]=b<<2;
    		pal[z++]=r;
    		tgapal[z]=g<<2;
    		pal[z++]=g;
    		tgapal[z]=r<<2;
    		pal[z++]=b;
    	}
    	outp(0x3c8,0);
    	for (z=0;z<768;z++) outp(0x3c9,pal[z]);
    }
    
    /*========================================================================*/
    void InitNoise(void)
    {
    	int x,y;
    
    	for (y=0;y<32;y++)
    		for (x=0;x<32;x++)
    		{
    			noisex[x][y]=((float)rand()/RAND_MAX)*12-6;
    			noisey[x][y]=((float)rand()/RAND_MAX)*12-6;
    		}
    	for (x=0;x<32;x++)
    	{
    		noisex[x][32]=noisex[x][0];
    		noisex[32][x]=noisex[0][x];
    		noisey[x][32]=noisey[x][0];
    		noisey[32][x]=noisey[0][x];
    	}
    }
    
    /*========================================================================*/
    void CalcTurbulence(float x,float y,float *rx,float *ry)
    {
    	int l,p,t;
    	float a,b;
    	int i,j;
    	float in1,in2;
    
    	*rx=0;
    	*ry=0;
    	t=0;
    	for (l=0;l<7;l++)
    	{
    		p=1<<l;
    		t+=p;
    		a=x/p;
    		b=y/p;
    		i=(int)a;
    		j=(int)b;
    		a-=i;
    		b-=j;
    		i&=31;
    		j&=31;
    		in1=noisex[i][j]*(1-a)+noisex[i+1][j]*a;
    		in2=noisex[i][j+1]*(1-a)+noisex[i+1][j+1]*a;
    		*rx+=(in1*(1-b)+in2*b)*p;
    		in1=noisey[i][j]*(1-a)+noisey[i+1][j]*a;
    		in2=noisey[i][j+1]*(1-a)+noisey[i+1][j+1]*a;
    		*ry+=(in1*(1-b)+in2*b)*p;
    	}
    	*rx/=t;
    	*ry/=t;
    }
    
    /*========================================================================*/
    void DrawDisplay(void)
    {
    	unsigned char *scrn,*p;
    	unsigned int j,sx,sy;
    	float x,y,dx,dy;
    
    	scrn=MK_FP(0xa000,0);
    	for (sy=4;sy<196;sy+=4)
    		for (sx=4;sx<316;sx+=4)
    		{
    			x=sx;
    			y=sy;
    			for (j=0;j<100;j++)
    			{
    				CalcTurbulence(x,y,&dx,&dy);
    				x+=dx;
    				y+=dy;
    				if (x<1||x>318||y<1||y>198) break;
    				p=scrn+((unsigned int)y<<8)+((unsigned int)y<<6)+(unsigned int)x;
    				if (*p<250) (*p)+=5;
    				if (*(p-320)<252) *(p-320)+=3;
    				if (*(p+320)<252) *(p+320)+=3;
    				if (*(p-1)<252) *(p-1)+=3;
    				if (*(p+1)<252) *(p+1)+=3;
    			}
    		}
    }
    
    /*========================================================================*/
    void OutputFile(int f)
    {
    	unsigned char head[]={0,1,1,0,0,0,1,24,0,0,0,0,64,1,200,0,8,32};
    	unsigned char *scrn;
    	char fname[20];
    	FILE *fp;
    
    	scrn=MK_FP(0xa000,0);
    	sprintf(fname,"FRAME%03u.TGA",f);
    	fp=fopen(fname,"wb");
    	fwrite(head,1,sizeof(head),fp);
    	fwrite(tgapal,1,768,fp);
    	fwrite(scrn,1,64000U,fp);
    	fclose(fp);
    }
    
    /*========================================================================*/
    void ClearScreen(void)
    {
    	unsigned char *scrn;
    
    	scrn=MK_FP(0xa000,0);
    	memset(scrn,0,64000U);
    }
    
    /*========================================================================*/
    void TweekNoise(void)
    {
    	int x,y;
    
    	for (y=0;y<32;y++)
    		for (x=0;x<32;x++)
    		{
    			noisex[x][y]+=(((float)rand()/RAND_MAX)-((float)rand()/RAND_MAX));
    			noisey[x][y]+=(((float)rand()/RAND_MAX)-((float)rand()/RAND_MAX));
    		}
    	for (x=0;x<32;x++)
    	{
    		noisex[x][32]=noisex[x][0];
    		noisex[32][x]=noisex[0][x];
    		noisey[x][32]=noisey[x][0];
    		noisey[32][x]=noisey[0][x];
    	}
    }
    
    /*========================================================================*/
    void SetTextMode(void)
    {
    	_asm
    	{
    		mov ax,0x3
    		int 0x10
    	}
    }
    

    Firing up DOSBOX to run the compiled executable, here's the kind of image that it generates.

    27 votes
  10. Comment on The high cost of being low maintenance in ~health.mental

    Boojum
    Link Parent
    In terms of background, I thought that part interesting. I'm also a child 80's, like the author, but in my case I learned to program on an Apple II. No internet, and no one to ask for help. (My...

    In terms of background, I thought that part interesting. I'm also a child 80's, like the author, but in my case I learned to program on an Apple II. No internet, and no one to ask for help. (My dad had learned some light programming to help with his work, but it was only a means to an end and I quickly blew past what he new.) Whenever I got stuck, it was either bash my head on it until I puzzled it out on my own, or research the computer books in the library until I found one that gave me a clue. Either way, it was all self-driven. From that I developed a self reliance through a combination of sheer stubborn persistence (surely this time it will work!), and the self-confidence that I will solve things on my own eventually given enough time.

    The downside is that I find it really difficult to know when to reach out for help. And I find it probably harder than others to give estimates in presence of unknowns. Will another day on this task yield the breakthrough I'm looking for? Or in gambling terms, will another pull at the slot machine payoff? This can lead to the quiet drowning noted in the article. There are two things that I've found help with this:

    1. Timeboxing tasks with unknowns. If I can't get something done by myself with some preset time limit then I'll call out for help. Going back to the gambling analogy, this is like budgeting yourself a fixed amount of money to gamble with, win or lose. Setting a time limit up front really helps to avoid the one more day... one more day... one more day... cycle.

    2. People joke about project managers being useless, but I've found that having a good, intellectually safe one helps immensely, especially with the quiet drowning part. I've had some who have been great about helping me decide on how much to time box things to in consideration of the schedule, prioritize my tasks when there are too many, and redistribute the overflow across the team if I'm starting to feel really overwhelmed. But having a good rapport of trust is key here.

    I'll add one other danger that I've noticed about being the low maintenance type: it can be easy to get overlooked when it comes to promotions or new opportunities when you're just off in the corner, quietly solving problems on your own and getting stuff done without drama. The squeaky wheel gets the grease and all that. I've learned to keep both a brag document and a task journal, as well try to mitigate this effect by making sure to check in with my manager regularly with FYIs about what I'm doing even if I don't need help.

    6 votes
  11. Comment on User-friendly and privacy-friendly LLM experience? in ~comp

  12. Comment on Satisfiers vs maximizers in ~talk

    Boojum
    Link Parent
    I've observed this effect in my own decisions. Weirdly, the larger a decision is, the more likely I am to just "wing it" and go with my gut. At least for me, I'm pretty sure that it's an internal...

    I've observed this effect in my own decisions. Weirdly, the larger a decision is, the more likely I am to just "wing it" and go with my gut. At least for me, I'm pretty sure that it's an internal form of Parkinson's Law of Triviality and Bike-shedding.

    Poul-Henning Kamp's description of bike-shedding

    Parkinson shows how you can go in to the board of directors and
    get approval for building a multi-million or even billion dollar
    atomic power plant, but if you want to build a bike shed you will
    be tangled up in endless discussions.

    Parkinson explains that this is because an atomic plant is so vast,
    so expensive and so complicated that people cannot grasp it, and
    rather than try, they fall back on the assumption that somebody
    else checked all the details before it got this far. Richard P.
    Feynmann gives a couple of interesting, and very much to the point,
    examples relating to Los Alamos in his books.

    A bike shed on the other hand. Anyone can build one of those over
    a weekend, and still have time to watch the game on TV. So no
    matter how well prepared, no matter how reasonable you are with
    your proposal, somebody will seize the chance to show that he is
    doing his job, that he is paying attention, that he is here.

    Except that instead of arguing with others or on a committee, it's an internal, mental debate with one's self over the correct course of action.

    2 votes
  13. Comment on Satisfiers vs maximizers in ~talk

    Boojum
    Link
    For many things (especially electronics), I identify with Calvin's dad buying peanut butter.

    For many things (especially electronics), I identify with Calvin's dad buying peanut butter.

    14 votes
  14. Comment on What's a new skill that you've picked up recently? in ~life

    Boojum
    Link Parent
    Huh! TIL, thanks! I'd not heard of this before, but that's kind of cool. Googling and finding this video to explain it, the little hand twist reminds me a lot of the wrap method of casting on in...

    Huh! TIL, thanks!

    I'd not heard of this before, but that's kind of cool. Googling and finding this video to explain it, the little hand twist reminds me a lot of the wrap method of casting on in knitting that I learned as kid. Something like this, though the variant that I learned involved all four fingers and the upper palm instead of just the index finger, which actually makes it closer to this over-under thing. That should make this easy enough to remember.

    I'll have to start doing it this way, since I love to coil and velcro-tie all my cables to keep them neat.

    2 votes
  15. Comment on ‘How To Train Your Dragon’ fires up franchise best $83M+ opening in ~movies

    Boojum
    Link Parent
    Please tell me they didn't screw up the "Test Flight" sequence! (I worked for a competing animation studio at the time, but thought they absolutely, beautifully nailed that one in the original.)

    Please tell me they didn't screw up the "Test Flight" sequence!

    (I worked for a competing animation studio at the time, but thought they absolutely, beautifully nailed that one in the original.)

    8 votes
  16. Comment on Query: Recommendations on how / where to buy USB cables? in ~tech

    Boojum
    Link
    I'll add JSAUX as a brand that I've had decent success with for USB stuff. I've been using their flat right-angle USB-C adapters to reduce strain on the cable connecting my work laptop to it's...

    I'll add JSAUX as a brand that I've had decent success with for USB stuff. I've been using their flat right-angle USB-C adapters to reduce strain on the cable connecting my work laptop to it's dock. Those adapters seem to have handled power delivery and 4k video just fine for going on two years now, I think.

    (JSAUX first came to my attention as a brand for being one of the first with a third-party Steam Deck dock. The name's admittedly a bit alphabet-soupy, but they've been around for years and have a decent social media presence unlike the XZZTTGs and EIUTOOs of the world.)

    6 votes
  17. Comment on June thunderstorm in Virginia in ~enviro

    Boojum
    Link Parent
    I feel that way about living in the PNW after having spent my formative years in the midwest.

    I feel that way about living in the PNW after having spent my formative years in the midwest.

    3 votes
  18. Comment on How do you celebrate your birthday? in ~talk

    Boojum
    Link
    In my family, our tradition is that the birthday person chooses a cake to order, and the place we all go to eat out at. So I did that. And since my birthday fell on a Friday this year, I took a...

    In my family, our tradition is that the birthday person chooses a cake to order, and the place we all go to eat out at. So I did that. And since my birthday fell on a Friday this year, I took a vacation day and made it a three day weekend. It was wonderful to sleep in, play some video games, and just take things easy while the kids were at school.

    (I'd already got myself a nice, fancy new keyboard the month before, so that was kind of my early present to myself.)

    4 votes
  19. Comment on Layman's escapades with Linux for personal use in ~comp

    Boojum
    Link Parent
    I've switched to Fedora KDE a year and a half ago after having run Xubuntu since about 2013. I've only found it "corporate" in the sense of being fairly vanilla (not unlike Debian, really). But...

    I've switched to Fedora KDE a year and a half ago after having run Xubuntu since about 2013. I've only found it "corporate" in the sense of being fairly vanilla (not unlike Debian, really). But that's a good thing from my perspective. I want my OS to be boring and unsurprising.

    Ubuntu was the one that felt much more corporate to me, in the sense of inflicting their decisions (e.g., snaps) and making me feel like I'd be swimming against the current to try to have things more my way. Kind of a Microsoft/Apple/Google vibe in that sense.

    The one downside was, yeah, Nvidia driver setup was a bit trickier at first.

    7 votes
  20. Comment on The Food Lab's chocolate chip cookies in ~food

    Boojum
    (edited )
    Link Parent
    I usually hate the life stories, but in this case I thought it a hoot when I first read it long ago. And it was specifically that part that I was reminded of on seeing the edgeless brownie guy's...

    I usually hate the life stories, but in this case I thought it a hoot when I first read it long ago. And it was specifically that part that I was reminded of on seeing the edgeless brownie guy's video.

    2 votes