spiralsheep: Sheep wearing an eyepatch (Default)
Humph ([personal profile] spiralsheep) wrote in [community profile] flaneurs2025-08-12 05:02 pm

Flanage within Conwy's medieval town walls

I walked first left turn then second right turn then first left &c [not June challenge III. (d) ], beginning from the highest and most landward gate of Conwy's medieval town walls: flanage report at my journal, with architecture and edification, and a bonus quick guide to Conwy.

"DEUWCH O'R NEILLTU, Y MAE I CHWI CROESO,
YR IEUANC I DDYSGU, A'R HEN I ORFFWYSO."
sonia: Quilted wall-hanging (Default)
Sonia Connolly ([personal profile] sonia) wrote2025-08-11 08:56 pm
Entry tags:

Links: Good to know!

Weird Things You Learn About Food When You Garden at Last Word On Nothing by Laura Helmuth. Great gardening tips, and a satisfying turn at the end.

Ratfactor's Illustrated Guide to Folding Fitted Sheets by Dave Gauer. What it says on the tin, with charming illustrations.

What do we know about the Covid-19 virus five years on? by Rachel Hall. A brief summary of basic facts, reassuringly honest.
It’s been five years since the start of the Covid pandemic. Although most of the government mandates, from social distancing to face masks, have been consigned to the past, the virus is still prevalent – and capable of causing real harm.

Although it was initially forecast to become a seasonal illness, the virus is on the rise in the US – making it far from the common-cold-style winter illness that was expected.


Machine Learning—good and bad arguments against by Sandra. From a gut-level hatred of machine learning to an analysis of the arguments against it.

Wingfield Pines in Allegheny County, PA, is a restored wetlands. Good to hear about an environmental success!
It was formerly a site plagued by Abandoned Mine Drainage (AMD); we were able to hire environmental engineer Bob Hedin to implement an aesthetically pleasing passive treatment system that visitors can walk through to watch the water transition from murky orange to natural, clean clear water flowing into Chartiers Creek.
syzygis: (Default)
Syzygis ([personal profile] syzygis) wrote2025-08-11 08:56 pm

Feline

He lies on my legs
I wake up to toss and turn
Is my leg a toy?
-K Royka, 8/11/2025
solarbird: (gun good job)
solarbird ([personal profile] solarbird) wrote2025-08-11 09:31 am

no better satire could be written

Holy hell. The Tesla Truck is such a complete fucking sales disaster that he’s getting a corrupt deal with the military to buy them as targets.

I repeat:

THE TESLA TRUCK IS SUCH A COMPLETE FAILURE THAT THEY’RE SELLING THEM TO THE MILITARY AS TARGETS FOR TARGET PRACTICE.

Only a couple at first. Still, no doubt it’ll be at full price or some shit. Gotta claw those losses back somehow, right? Try this, see who complains.

Regardless, “OFFICIAL US MILITARY TARGET” stickers for Teslas, y/y?

Also, I may need to make yet another new sign for the Tesla Takedown protests because holy shit xD

Posted via Solarbird{y|z|yz}, Collected.

syzygis: (Default)
Syzygis ([personal profile] syzygis) wrote2025-08-10 08:58 pm

Another Rest

Sleep drags
One more step
Close my eyes
Most is done
If forgotten
There's tomorrow
And always
Another one
-K Royka, 8/10/2025
redbird: closeup of me drinking tea, in a friend's kitchen (Default)
Redbird ([personal profile] redbird) wrote2025-08-10 01:10 pm

Too hot

It is too hot here to do much, alas. Friday was OK, but it was too hot yesterday for me to eant to go out—possibly doable, but sitting outside for lunch would have been unpleasant— and it’s not forecast to improve until after I leave.


So mostly I am sitting in the only air conditioned room in the apartment, reading. This isn’t exactly bad, but it doesn’t feel worth the trip, in terms of either dollars or the hassle of traveling.
syzygis: (Default)
Syzygis ([personal profile] syzygis) wrote2025-08-09 09:11 pm

Untitled 8/9/2025

I wanted to nap hours ago
But there was no chance to do so
Instead, we went out
So the twins could both shout
Since if they ask at home, we say no
-K Royka, 8/9/2025
syzygis: (Default)
Syzygis ([personal profile] syzygis) wrote2025-08-08 09:10 pm

Sleep

Cat drapes one way,
Dog another.
If I move, I'll
Surely smother.
Want to breathe but
Trapped in place
Frozen, cramping,
Furred embrace.
-K Royka, 8/8/2025
redbird: closeup of me drinking tea, in a friend's kitchen (Default)
Redbird ([personal profile] redbird) wrote2025-08-08 03:36 pm
Entry tags:

I'm in Montreal

I'm visiting [personal profile] rysmiel for a few days. The trip up was borin, which is good: anything exciting would probably be bad news, or at least make you late for dinner.

It is going to be hot over the weekend, so we went out for a relatively early brunch today, so we could sit almost-outdoors at Juliette et Chocolat and eat crepes. We then walked around Jean Talon market, where I bought plums, blackberries, and a cucumber.

I have np real plans for the next few days, which is fine.
syzygis: (Default)
Syzygis ([personal profile] syzygis) wrote2025-08-07 08:31 pm

Prompt

"We will
Schedule you a
Consult for the other
Specialties you need to see, too."
Next day!
-K Royka, 8/7/2025
redbird: closeup of me drinking tea, in a friend's kitchen (Default)
Redbird ([personal profile] redbird) wrote2025-08-07 10:07 am
Entry tags:

I called RFK Jr about vaccine access

If anyone wants to call RFK Jr. to complain about him not funding vaccines, and specifically about mRNA vaccines, his office phone number is 202-690-7000. I called during office hours (8:30-5 Eastern time) and got voicemail. The message asked for a phone number, and claimed someone would call me back.

If anyone wants a script, my message was:

My name is Vicki Rosenzweig. I’m calling from Boston, to demand that the secretary restore funding for MRNA vaccines. He must make the fall covid and flu boosters available to everyone. I’m immune-compromised, and my safety depends on my family being vaccinated and not giving me a virus. My phone number is [your number here]

I got the idea and phone number from a comment by [personal profile] threemeninaboat on [personal profile] sonia's journal. (I also posted a version of this to [community profile] thisfinecrew)
syzygis: (Default)
Syzygis ([personal profile] syzygis) wrote2025-08-06 08:10 pm

Diagnoses 2

Flexibility is fun
Up until it's not
Those party tricks when young
Made a diagnosis pop

No wonder joints are throbbing
And my mind is in a maze
All my migraines? They're related
Shoulder damage here to stay

Even how fast certain symptoms
Showed up -- all fits in the chart
Of a hypermobile Ehlers-Danlos
Patient's part!
-K Royka, 8/6/2025
syzygis: (Default)
Syzygis ([personal profile] syzygis) wrote2025-08-05 08:48 pm

Categories

Tomorrow
Another appointment
I may get a diagnosis
Or just dismissed.
-K Royka, 8/5/2025
agent_dani: (Default)
Sharp Dressed Dyke ([personal profile] agent_dani) wrote2025-08-05 09:45 pm

Checking in...

This site is kind of odd-man-out for me. It's not really mobile friendly and I am rarely on my personal desktop anymore, in part because I'm on my work laptop all the time. When I am on my personal machine it's usually either for some chore, such as tonight having to fill out a form for my upcoming therapy appointment, or to play an online multiplayer game with my girlfriend (usually Satisfactory; occasionally Scrap Mechanic.)

I had a lot happen in the realm of medical and mental health since I last posted. I had:
A mammogram
An MRI
A NeuroTrax test
A home sleep study
Was formally diagnosed with PTSD

The first was just a routine screening. The next three were ordered by a neurologist because I have been having memory issues - I have been too forgetful for 50! - and I knew better than to wait because some of the possibilities are things that need to be addressed now. I am pleased to report that the nasty ones, such as the early onset of Alzheimer and dementia, have been ruled out and the answer is that I need a CPAP.

The PTSD diagnosis was emotionally difficult even though I had guessed it. No amount of layperson understanding "hey, this really fits my experience" prepared me for going through the process and having it laid out just how badly it affects me. I know having it and the ongoing therapy which is informed by that diagnosis will help and really is the only way to improve things, but I'm definitely happy to be looking back on it.

I happened to be back in North Carolina for a whirlwind less than 24 hours last month. Ostensibly it was for a Stitch 'N Pitch at the Durham Bulls game but I made a greater trip of it, starting with a late breakfast in South Boston, Virginia, and a quick ride over to see the old Norfolk & Western train station, currently offices for the Virginia Division of the Norfolk Southern railroad. I visited with a couple people in Greensboro and finally paid a visit to the International Civil Right Center & Museum - it's in the former Woolworth location where the lunch counter sit-ins protesting racial segregation happened in 1960. On my way back to Norfolk I took a detour to Parker's Ferry, a cable ferry (or chain ferry.)

I'm heading to southwestern Virginia later this week for Wild Wheels Weekend along with my girlfriend. She is going for all 4 days of the even while I am only going for 2 as I cannot be away from my wife for more.

Silliness with my wifey:
Me: “You are just so perfect, my love!”
Wifey: “That’s good because I didn’t come with a warranty.”

Me: “You know, I’m starting to feel that I’m worthy of your love.”
Wifey: “That’s good. What did I do wrong?”


syzygis: (Default)
Syzygis ([personal profile] syzygis) wrote2025-08-04 08:53 pm

Poems

I do not want to write today
I want to rest my head
Forget responsibility
And go the #()@& to bed.
-K Royka, 8/4/2025
Matthew Garrett ([personal profile] mjg59) wrote2025-08-03 08:10 pm
Entry tags:

Cordoomceps - replacing an Amiga's brain with Doom

There's a lovely device called a pistorm, an adapter board that glues a Raspberry Pi GPIO bus to a Motorola 68000 bus. The intended use case is that you plug it into a 68000 device and then run an emulator that reads instructions from hardware (ROM or RAM) and emulates them. You're still limited by the ~7MHz bus that the hardware is running at, but you can run the instructions as fast as you want.

These days you're supposed to run a custom built OS on the Pi that just does 68000 emulation, but initially it ran Linux on the Pi and a userland 68000 emulator process. And, well, that got me thinking. The emulator takes 68000 instructions, emulates them, and then talks to the hardware to implement the effects of those instructions. What if we, well, just don't? What if we just run all of our code in Linux on an ARM core and then talk to the Amiga hardware?

We're going to ignore x86 here, because it's weird - but most hardware that wants software to be able to communicate with it maps itself into the same address space that RAM is in. You can write to a byte of RAM, or you can write to a piece of hardware that's effectively pretending to be RAM[1]. The Amiga wasn't unusual in this respect in the 80s, and to talk to the graphics hardware you speak to a special address range that gets sent to that hardware instead of to RAM. The CPU knows nothing about this. It just indicates it wants to write to an address, and then sends the data.

So, if we are the CPU, we can just indicate that we want to write to an address, and provide the data. And those addresses can correspond to the hardware. So, we can write to the RAM that belongs to the Amiga, and we can write to the hardware that isn't RAM but pretends to be. And that means we can run whatever we want on the Pi and then access Amiga hardware.

And, obviously, the thing we want to run is Doom, because that's what everyone runs in fucked up hardware situations.

Doom was Amiga kryptonite. Its entire graphical model was based on memory directly representing the contents of your display, and being able to modify that by just moving pixels around. This worked because at the time VGA displays supported having a memory layout where each pixel on your screen was represented by a byte in memory containing an 8 bit value that corresponded to a lookup table containing the RGB value for that pixel.

The Amiga was, well, not good at this. Back in the 80s, when the Amiga hardware was developed, memory was expensive. Dedicating that much RAM to the video hardware was unthinkable - the Amiga 1000 initially shipped with only 256K of RAM, and you could fill all of that with a sufficiently colourful picture. So instead of having the idea of each pixel being associated with a specific area of memory, the Amiga used bitmaps. A bitmap is an area of memory that represents the screen, but only represents one bit of the colour depth. If you have a black and white display, you only need one bitmap. If you want to display four colours, you need two. More colours, more bitmaps. And each bitmap is stored in an independent area of RAM. You never use more memory than you need to display the number of colours you want to.

But that means that each bitplane contains packed information - every byte of data in a bitplane contains the bit value for 8 different pixels, because each bitplane contains one bit of information per pixel. To update one pixel on screen, you need to read from every bitmap, update one bit, and write it back, and that's a lot of additional memory accesses. Doom, but on the Amiga, was slow not just because the CPU was slow, but because there was a lot of manipulation of data to turn it into the format the Amiga wanted and then push that over a fairly slow memory bus to have it displayed.

The CDTV was an aesthetically pleasing piece of hardware that absolutely sucked. It was an Amiga 500 in a hi-fi box with a caddy-loading CD drive, and it ran software that was just awful. There's no path to remediation here. No compelling apps were ever released. It's a terrible device. I love it. I bought one in 1996 because a local computer store had one and I pointed out that the company selling it had gone bankrupt some years earlier and literally nobody in my farming town was ever going to have any interest in buying a CD player that made a whirring noise when you turned it on because it had a fan and eventually they just sold it to me for not much money, and ever since then I wanted to have a CD player that ran Linux and well spoiler 30 years later I'm nearly there. That CDTV is going to be our test subject. We're going to try to get Doom running on it without executing any 68000 instructions.

We're facing two main problems here. The first is that all Amigas have a firmware ROM called Kickstart that runs at powerup. No matter how little you care about using any OS functionality, you can't start running your code until Kickstart has run. This means even documentation describing bare metal Amiga programming assumes that the hardware is already in the state that Kickstart left it in. This will become important later. The second is that we're going to need to actually write the code to use the Amiga hardware.

First, let's talk about Amiga graphics. We've already covered bitmaps, but for anyone used to modern hardware that's not the weirdest thing about what we're dealing with here. The CDTV's chipset supports a maximum of 64 colours in a mode called "Extra Half-Brite", or EHB, where you have 32 colours arbitrarily chosen from a palette and then 32 more colours that are identical but with half the intensity. For 64 colours we need 6 bitplanes, each of which can be located arbitrarily in the region of RAM accessible to the chipset ("chip RAM", distinguished from "fast ram" that's only accessible to the CPU). We tell the chipset where our bitplanes are and it displays them. Or, well, it does for a frame - after that the registers that pointed at our bitplanes no longer do, because when the hardware was DMAing through the bitplanes to display them it was incrementing those registers to point at the next address to DMA from. Which means that every frame we need to set those registers back.

Making sure you have code that's called every frame just to make your graphics work sounds intensely irritating, so Commodore gave us a way to avoid doing that. The chipset includes a coprocessor called "copper". Copper doesn't have a large set of features - in fact, it only has three. The first is that it can program chipset registers. The second is that it can wait for a specific point in screen scanout. The third (which we don't care about here) is that it can optionally skip an instruction if a certain point in screen scanout has already been reached. We can write a program (a "copper list") for the copper that tells it to program the chipset registers with the locations of our bitplanes and then wait until the end of the frame, at which point it will repeat the process. Now our bitplane pointers are always valid at the start of a frame.

Ok! We know how to display stuff. Now we just need to deal with not having 256 colours, and the whole "Doom expects pixels" thing. For the first of these, I stole code from ADoom, the only Amiga doom port I could easily find source for. This looks at the 256 colour palette loaded by Doom and calculates the closest approximation it can within the constraints of EHB. ADoom also includes a bunch of CPU-specific assembly optimisation for converting the "chunky" Doom graphic buffer into the "planar" Amiga bitplanes, none of which I used because (a) it's all for 68000 series CPUs and we're running on ARM, and (b) I have a quad core CPU running at 1.4GHz and I'm going to be pushing all the graphics over a 7.14MHz bus, the graphics mode conversion is not going to be the bottleneck here. Instead I just wrote a series of nested for loops that iterate through each pixel and update each bitplane and called it a day. The set of bitplanes I'm operating on here is allocated on the Linux side so I can read and write to them without being restricted by the speed of the Amiga bus (remember, each byte in each bitplane is going to be updated 8 times per frame, because it holds bits associated with 8 pixels), and then copied over to the Amiga's RAM once the frame is complete.

And, kind of astonishingly, this works! Once I'd figured out where I was going wrong with RGB ordering and which order the bitplanes go in, I had a recognisable copy of Doom running. Unfortunately there were weird graphical glitches - sometimes blocks would be entirely the wrong colour. It took me a while to figure out what was going on and then I felt stupid. Recording the screen and watching in slow motion revealed that the glitches often showed parts of two frames displaying at once. The Amiga hardware is taking responsibility for scanning out the frames, and the code on the Linux side isn't synchronised with it at all. That means I could update the bitplanes while the Amiga was scanning them out, resulting in a mashup of planes from two different Doom frames being used as one Amiga frame. One approach to avoid this would be to tie the Doom event loop to the Amiga, blocking my writes until the end of scanout. The other is to use double-buffering - have two sets of bitplanes, one being displayed and the other being written to. This consumes more RAM but since I'm not using the Amiga RAM for anything else that's not a problem. With this approach I have two copper lists, one for each set of bitplanes, and switch between them on each frame. This improved things a lot but not entirely, and there's still glitches when the palette is being updated (because there's only one set of colour registers), something Doom does rather a lot, so I'm going to need to implement proper synchronisation.

Except. This was only working if I ran a 68K emulator first in order to run Kickstart. If I tried accessing the hardware without doing that, things were in a weird state. I could update the colour registers, but accessing RAM didn't work - I could read stuff out, but anything I wrote vanished. Some more digging cleared that up. When you turn on a CPU it needs to start executing code from somewhere. On modern x86 systems it starts from a hardcoded address of 0xFFFFFFF0, which was traditionally a long way any RAM. The 68000 family instead reads its start address from address 0x00000004, which overlaps with where the Amiga chip RAM is. We can't write anything to RAM until we're executing code, and we can't execute code until we tell the CPU where the code is, which seems like a problem. This is solved on the Amiga by powering up in a state where the Kickstart ROM is "overlayed" onto address 0. The CPU reads the start address from the ROM, which causes it to jump into the ROM and start executing code there. Early on, the code tells the hardware to stop overlaying the ROM onto the low addresses, and now the RAM is available. This is poorly documented because it's not something you need to care if you execute Kickstart which every actual Amiga does and I'm only in this position because I've made poor life choices, but ok that explained things. To turn off the overlay you write to a register in one of the Complex Interface Adaptor (CIA) chips, and things start working like you'd expect.

Except, they don't. Writing to that register did nothing for me. I assumed that there was some other register I needed to write to first, and went to the extent of tracing every register access that occurred when running the emulator and replaying those in my code. Nope, still broken. What I finally discovered is that you need to pulse the reset line on the board before some of the hardware starts working - powering it up doesn't put you in a well defined state, but resetting it does.

So, I now have a slightly graphically glitchy copy of Doom running without any sound, displaying on an Amiga whose brain has been replaced with a parasitic Linux. Further updates will likely make things even worse. Code is, of course, available.

[1] This is why we had trouble with late era 32 bit systems and 4GB of RAM - a bunch of your hardware wanted to be in the same address space and so you couldn't put RAM there so you ended up with less than 4GB of RAM
solarbird: our bike hill girl standing back to the camera facing her bike, which spans the image (biking)
solarbird ([personal profile] solarbird) wrote2025-08-04 10:53 am

Maps Release: Greater Northshore Bike Connector, MEGAMAP 2.0.1

Greater Northshore Bike Connector Map 2.0 – 4 August 2025 – is now available on github, as is MEGAMAP 2.0.1.

Mostly small updates this time, but one in particular is very important, and another is pretty important if you’re in Shoreline:

  • ADDED: Alaskan Way Connector linking Elliot Bay Trail to Waterfront Trail with fully separated bikeways. Decades in the making, finally here (MEGAMAP only)
  • ADDED: Painted bike lanes on Meridian Ave N in Shoreline between 155th and 175th streets (both maps)
  • ADDED: “Commonly used” markers on Meridian Ave N throughout Shoreline (both maps) – this is somewhat aspirational, as there has been use of this road as a secondary to tertiary bike arterial but not quite enough to justify marking it as such until now. I am fairly certain that the new bike lanes in the middle of the route will increase its utility enough to justify it (both maps)
  • ADDED: “Commonly used” makers on a section of Fremont Ave in Shoreline, because that section is used a little more than parts of Meridian which now carry that marking, and one should be consistent (both maps)
  • ADDED: A weird little section of bike path I found in Lynnwood north of 196th at Wilcox Park. As 196th loses its sidewalks in that area, even this standalone oddness serves a useful purpose if you’re having to sidewalk-bike on 196th, say, to get to Gregg’s Cycles (MEGAMAP only)
  • ADDED: A few more street names in City of Seattle, along with a couple of small adjustments on difficult streets (both maps)
  • CORRECTION: REI Lynnwood’s icon was placed very slightly left of its actual location, and has been adjusted (MEGAMAP only)
Screen resolution preview of MEGAMAP 2.0.1 - 4 August 2025

All permalinks continue to work.

If you enjoy these maps and feel like throwing some change at the tip jar, here’s my patreon. Patreon supports get things like pre-sliced printables of the Greater Northshore, and also the completely-uncompressed MEGAMAP, not that the .jpg has much compression in it because honestly it doesn’t.

Enjoy biking!

Posted via Solarbird{y|z|yz}, Collected.

syzygis: (Default)
Syzygis ([personal profile] syzygis) wrote2025-08-03 08:15 pm

Spoons

When the grocery stores started to
Offer their pickup service, who knew
That the hours of repose
Gained from shopping the froze
Would translate to less painfulness, too?
-K Royka, 8/3/2025
redbird: closeup of me drinking tea, in a friend's kitchen (Default)
Redbird ([personal profile] redbird) wrote2025-08-03 04:35 pm
Entry tags:

Peach ice cream

Of local interest: JP Licks has fresh peach ice cream.

They didn't make any last year, because there was no local peach harvest, and I'm ery glad to see it this year: they make really good peach ice cream. Not all their flavors are as good as this, and I shop there primarily for this and the cucumber ice cream, when those are available.
syzygis: (Default)
Syzygis ([personal profile] syzygis) wrote2025-08-02 08:39 pm

Shoes

One last shopping trip
T-shirts already too short
And the backup shoes.
-K Royka, 8/2/2025