Tom Sherman's Avatar

Tom Sherman

@tom.sherman.is

Software Engineer in Norwich. he/him Working on @frontpage.fyi https://tom-sherman.com

4,832 Followers  |  364 Following  |  2,999 Posts  |  Joined: 01.06.2023  |  2.4733

Latest posts by tom.sherman.is on Bluesky

@bacon.bsky.social can't find any updates since the SDK 52 release, what's the latest?

06.08.2025 08:44 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

What's the latest on React Server Component support within expo?

05.08.2025 14:02 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

It's also not well supported with data fetching libs right now. swr supports it well, although a bit clunky. React Query's support is also a bit awkward. Both library's have very little docs on how to build this pattern

05.08.2025 10:57 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

It's probably the most advanced because it requires you to prime your client-side data cache with either a promise or the data itself from the server. Meaning you need to understand both the patterns in your article, plus client side fetching

05.08.2025 10:57 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

"Server + client" is useful when you want to refresh the UI separately to refreshing your entire route (by revalidating your server components).

05.08.2025 10:57 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Nice! I think this covers the "server only data fetch" pattern well, but I think there are two other patterns for fetching data with RSCs:

1. Server only
2. Server + client
3. Client only

You covered 1, but 2 and 3 are also crucial. Especially 2 which is another new pattern

05.08.2025 10:57 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0

So I either find a way to use a fake supervisor or find a way to deploy them to separate machines (no thanks). Both require probably more effort than it's worth

02.08.2025 07:08 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Just realised you said "requiring" and "not supporting" pid 1 is tricky. Yeah... It's because the knot server is built as a few separate processes that need to be supervised

02.08.2025 07:08 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Using Containers with Flyctl Previously: Docker without Docker, now with containers - at the time support was limited the to the Machine API and you needed to request access. We quietly lifted the requirement to request access, ...

I think they have a way around this now with container support community.fly.io/t/using-cont...

I'll probably give this a go, should be less effort than trying to get knot to run without pid 1

02.08.2025 06:34 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
Docker without Docker Our users deliver software to us as Docker containers, but we don’t use Docker to run them. We transmogrify container images into Firecracker micro-VMs. Here's how.

It's because they don't actually run docker

fly.io/blog/docker-...

02.08.2025 06:26 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
lexidex

lexidex.bsky.dev

02.08.2025 00:36 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Trying to get the latest @tangled.sh releases to run on @fly.io and it's proving difficult. Lots has changed since I first set it up

The community maintained dockerfile has a bunch of stuff I don't understand, it also requires pid 1 which doesn't work on Fly

02.08.2025 00:15 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

It'll be equivalent in terms of the promises but not using Promise.all is probably preferred because it allows react to start rendering each independent subtree as early as possible

31.07.2025 21:43 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Did you know you can pass a promise to children? So you don't need to split into components just to get a loading boundary, just do

<Suspense>
{promise.then(data => <whatever data={data} />)}
</Suspense>

31.07.2025 12:40 β€” πŸ‘ 19    πŸ” 4    πŸ’¬ 1    πŸ“Œ 3

Or just pass Promise<ReactNode> as children πŸ˜…

31.07.2025 12:41 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Did you know you can pass a promise to children? So you don't need to split into components just to get a loading boundary, just do

<Suspense>
{promise.then(data => <whatever data={data} />)}
</Suspense>

31.07.2025 12:40 β€” πŸ‘ 19    πŸ” 4    πŸ’¬ 1    πŸ“Œ 3

Yeah that was my first thought (or a hash of the metadata doc contents) but not sure if that's reliable across implementations. Also a bit concerned it will show as multiple apps in the Auth server UI or something

30.07.2025 11:58 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Thought about a query string as a cache buster but not sure if that's reliable.

30.07.2025 11:41 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

I'm running into problems with the PDS caching my client metadata document for atproto oauth

If I add a scope, my previous document is cached for some time and PARs fail because the PAR includes the new scope that the cached document doesn't 😩

@matthieu.bsky.team any ideas on a fix?

30.07.2025 11:41 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0

I want it to work but it's just not easy. Am I holding it wrong?

30.07.2025 08:33 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

I just find it so frustrating as a user to pay in crypto. Crypto is difficult to acquire in the UK because of regulations, that makes ad-hoc tx expensive. You could think to solve that by converting large amounts on a regular basis, but then you have huge risk because of holding crypto

30.07.2025 08:33 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

com.atproto.uno.reverse

29.07.2025 21:46 β€” πŸ‘ 6    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

HTTP method seems to be pretty meaningless tbh when the error types are declared in the schema

29.07.2025 19:15 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Pretty sure all bsky APIs do that. XRPC does allow 404 for missing resource though

29.07.2025 19:14 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Gonna need

const backwardsCompatUse = p => semverGreater(React.version, "19.0.0") ? React.use(p) : throw p;

In every library now πŸ˜…

29.07.2025 16:52 β€” πŸ‘ 6    πŸ” 0    πŸ’¬ 1    πŸ“Œ 1

The flow in atproto oauth to request more scopes is simply a case of putting the user through login again with the additional scopes in the metadata doc right? There isn't anything more than that?

Do I need to rotate jwks when doing this?

29.07.2025 14:02 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Yeah we wanna add this, all of the core maintainers are busy with day jobs and life stuff right now tho so work has slowed down quite a bit!

28.07.2025 22:10 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Proposal to add changelogs to the pnpm website & docs

28.07.2025 21:54 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
Proposal: Changelogs Β· Issue #693 Β· pnpm/pnpm.io This issue was spawned from my thread on bluesky here: https://bsky.app/profile/did:plc:2xau7wbgdq4phuou2ypwuen7/post/3lurqp3wf3k25 Problem It's quite hard right now to understand changes being shi...

github.com/pnpm/pnpm.io/iss…

28.07.2025 21:54 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 1

Also, an explanation of what actions to take and a way to know if you're affected by each of the breaking changes would be good. It's really hard to understand as a user right now

28.07.2025 17:23 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

@tom.sherman.is is following 20 prominent accounts