Spyke

Posts

My desktop

Details:
Operating system: Debian stable (trixie)
Desktop environment: none
Compositor: sway
Terminal emulator: foot (but you can't see it in the screenshot)
Icon set: none
Wallpaper: #222e45
Shell: bash
Bar: waybar (but I have it on mode hide, so it's not visible unless I'm holding down Super, and isn't visible in the screenshot)
Editor: emacs, but not visible in the screenshot, and I only use the terminal version anyway
Music Player: mpd or emms in emacs
Email Client: mu4e in emacs
File Manager: dired in emacs
Video Player: mpv
Web Browser: Firefox

View original on lemmy.today
58
roguelikes·Roguelike Gamesbytal

[Evan has] been helping out with Roguelike Celebration 2026!

cross-posted from: https://lemmy.world/post/53225203

Hey folks, something a little different today. Over the last few months I've been helping out with organizing this year's Roguelike Celebration, which is happening this weekend!

Roguelike Celebration is a yearly community-generated weekend of talks, games, and conversations about roguelikes and related topics, including procedural generation and game design. It's for fans, players, developers, scholars, and everyone else!

Its tickets are under a pay-what-you-want model, so if that description interests you at all you should check it out: https://www.roguelike.club/event2026.html

There are a bunch of great talks lined up this year, but a few highlights are:

  • Brian Bucklew and Corey Frang are sharing the in-progress text templating framework that has been taking on the huge task of localizing Caves of Qud, with its complicated grammar structures.
  • Dan Stormont and Michael Howk are presenting a 45 minute special feature on how the source code of Hack (one of the oldest Roguelikes) was recovered and what it took to make a game written for the PDP-11 playable on modern hardware.
  • Andrew Plotkin is going to explore the commonalities of mazes across many genres to try and discover what it is about mazes that leaves you feeling lost.
  • Matt Carney is going to explore how to balance procedural generation and authorial intent, using Terry Riley’s minimalist musical composition tool In C (1964), as a template

I've mostly been doing behind-the-scenes work this year, so you won't see me in the actual conference, but if you see the little gameboy chiptune segments during break periods (this time brought to you by my 3DS!), that is streaming from my desk this year.

View original on lemmy.today
4
lemmytoday·Lemmy Todaybytal

It looks like the Alexandrite frontend may be unmaintained

Discussion here:

https://lemmy.today/post/61435040

Lemmy.today currently has it available at:

https://alexandrite.lemmy.today/lemmy.today

Also note: I don't know how many people use the mlmym frontend (which is presently available at https://old.lemmy.today/ though not presently listed in the lemmy.today instance sidebar), but one thing pointed out in that thread and a linked-to thread is that mlmym also appears to be unmaintained, though there are apparently some forks.

Just wanted to provide a heads up to users and to @[email protected], if he's not presently aware.

View original on lemmy.today
6
fediverse·Fediversebytal

Looking up a Threadiverse instance's approximate location

I was curious as to where some Threadiverse instances were hosted, as not all explicitly indicate this. Thought that I'd also mention this here in case someone else has an interest in same.

I'll use lemmy.world as an example, as it's the most-popular Threadiverse instance and doesn't presently declare a location (at least via whatever mechanism is propagated to lemmy.fediverse.observer; I assume that fediverse.observer uses the Lemmy API to query it, though I've not dug into the matter).

Historically, one could resolve a hostname to an IP address and then could get the approximate location of an IP address in a number of ways; using whois will give the location of the netblock owner of the IP of a instance, which is generally good enough if one just cares about the approximate region, to find an instance near one.

However, the increasing use of CloudFlare for various reasons, including caching and DDoS prevention, has meant that often, that just provides the closest CloudFlare server to the requestor:

$ host lemmy.world|head -n1
lemmy.world has address 104.26.9.209
$ whois 104.26.9.209|egrep "^(NetName|Country)"
NetName:        CLOUDFLARENET
Country:        US
$

I'm in the San Francisco Bay Area; that'll just return a San Francisco CloudFlare netblock IP.

It is possible to measure latency to a server, which is often good enough to get a general idea of where that server is, unless the server is severely overloaded. One can't use, say, ICMP to reach a server behind CloudFlare, but one can use HTTPS.

$ httping -c3 -lg https://lemmy.world/
PING lemmy.world:443 (/):
connected to 172.67.71.35:443 (1075 bytes), seq=0 time=452.89 ms 
connected to 104.26.9.209:443 (1081 bytes), seq=1 time=403.00 ms 
connected to 104.26.9.209:443 (1080 bytes), seq=2 time=464.63 ms 
--- https://lemmy.world/ ping statistics ---
3 connects, 3 ok, 0.00% failed, time 4321ms
round-trip min/avg/max = 403.0/440.2/464.6 ms

The minimum time there is what we're looking for, since the server cannot respond before it gets our request. But...this also is setting up a TLS session for each request, which is a lot of overhead that's going to increase the latency. Better to use HTTP keepalives to cut session setup time out of the equation:

$ httping -c3 -Qlg https://lemmy.world/
PING lemmy.world:443 (/):
pinged host 104.26.9.209:443 (1097 bytes), seq=0 time=437.16 ms 
pinged host 104.26.9.209:443 (1084 bytes), seq=1 time=329.65 ms 
pinged host 104.26.9.209:443 (1087 bytes), seq=2 time=332.28 ms 
--- https://lemmy.world/ ping statistics ---
3 connects, 3 ok, 0.00% failed, time 4135ms
round-trip min/avg/max = 329.7/366.4/437.2 ms
$

Okay, but...it also takes time to generate the Web page, which adds overhead. We'd like to use a webpage that is fast to generate to minimize that. Plus, it's impolite to add load to instances by hammering an instance requesting expensive-to-generate pages repeatedly. So we'd like to find a webpage that's pretty cheap to generate and doesn't get cached by CloudFlare.

For example, lemmy.world's server thumbnail is static and CloudFlare can cache it and serve it from a local CloudFlare server, so any latency we measure is just going to be latency to CloudFlare:

$ wget --server-response https://lemmy.world/pictrs/image/0fd47927-ca3a-4d2c-b2e4-a25353786671.png -O/dev/null 2>&1|grep cf-cache-status
   cf-cache-status: HIT
$

I remember seeing some discussion about the /setup URL being exposed on Lemmy instances. It's non-functional once the server has been set up (or it'd be a security risk), but it's not cached by CloudFlare and while I haven't gone and tried to benchmark it, I expect that it's cheap for an instance to generate, as there's virtually no content there:

$ wget --server-response http://lemmy.world/setup -O/dev/null 2>&1|grep cf-cache-status
  cf-cache-status: DYNAMIC
$

So using that, it's possible to get an approximate estimate of how far the instance is away by network distance:

$ httping -c20 -Qlg https://lemmy.world/setup|grep ^round
round-trip min/avg/max = 226.3/260.0/348.7 ms
$

226.3 milliseconds. How about lemmy.today, my home instance (which doesn't use CloudFlare, but is useful as a control)?

$ httping -c20 -Qrlg https://lemmy.today/setup|grep ^round
round-trip min/avg/max = 52.9/61.2/148.9 ms
$

52.9 milliseconds.

In lemmy.today's case, CloudFlare isn't in the picture, so we can check ICMP latency to get a feel for page generation time:

$ ping -c20 lemmy.today|grep ^rtt
rtt min/avg/max/mdev = 40.375/40.884/41.708/0.347 ms
$

40.375 milliseconds. Since we measured the response time for the webpage to be 52.9 milliseconds, figure that one might expect something on the order of 12 milliseconds for the page to be generated (maybe less than this; I don't know whether lemmy.today has other proxy infrastructure in place. One could maybe put tighter bounds on page generation latency by setting up a dedicated instance and measuring time for this to be returned).

So we can figure maybe something like 214 milliseconds to lemmy.world, about the time from US West Coast to Europe. Some other instance network distances from me:

$ httping -c20 -Qlg https://lemmy.zip/setup|grep ^round
round-trip min/avg/max = 211.0/220.2/283.9 ms
$

211 milliseconds. Also probably Europe (IIRC from reading their ToS at one point, they declare that they're subject to Finnish laws, so probably there).

sh.itjust.works says that it's Canada East Coast in their instance sidebar:

$ httping -c20 -Qlg https://sh.itjust.works/setup|grep ^round
round-trip min/avg/max = 117.9/133.0/192.2 ms
$

117.9 milliseconds.

Lemmy.ca (lemmy.ca does declare that it's in Canada already on lemmy.fediverse.observer):

$ httping -c20 -Qlg https://lemmy.ca/setup|grep ^round
round-trip min/avg/max = 42.7/49.3/158.2 ms
$

42.7 milliseconds, significantly closer than the sh.itjust.works Canada East Coast instance. So it'll probably be Canada West Coast.

For my purposes, that's good enough, since I really only care about whether an instance is near me or not. However, if one wanted to know where a distant instance is more than "not very near you" or "near you", one could extend this via "triangulating" an instance's network distance by measuring the latency from several locations; either via having several users in different locations participate and report latencies or setting up a VPS in several known locations around the world.

View original on lemmy.today
19
fountainpens·Fountain Pensbytal

Platinum Chou Kuro ink is not great for filling in areas using a pen with a fude nib

I've watched a couple videos recently showing use of a Majohn Q1—a Chinese knockoff of the long-discontinued Tombow Egg—with a fude nib for sketching. The idea here is that the pen is so short that if unposted, it's practical to to hold it for long periods of time at a low angle to the page, taking advantage of the fude nib to do very broad strokes.

I thought that I'd give a Q1 a shot, see if it could be used to fill in large areas instead of using a brush or brush pen. I'm a sucker for high-contrast black-and-white stuff, and it sounded to me like it'd be great for doing large, filled-in black areas.

Platinum Chou Kuro has a reputation for—while expensive—being the blackest fountain pen ink out there, and sounded like it'd be a great idea to pair it with that pen and nib to fill those areas in, maximizing that contrast.

This wasn't as good an idea as it had initially sounded to me.

The problem is that while Chou Kuro is very black, it's a pigmented ink and dries atop the paper. Using a fude nib and going back over one's strokes causes the ink to be pushed around, varying its thickness and making the pen strokes visible.

Once the ink has dried, the pigment appears to prevent more ink from being wicked onto the paper, so one also can't go back and then darken areas with another coat.

The image of the man with the dog was done with a fude nib Majohn Q1 with Platinum Chou Kuro on Iroful paper.

For contrast, here's an image of the USCG Eagle done with a TWSBI Eco EF nib with TWSBI Black, also on Iroful paper:

https://lemmy.today/pictrs/image/84b808f0-c6b5-40a0-82e3-ed945fb64124.avif

TWSBI Black is a dye-based ink, not a pigment-based ink like Chou Kuro. While you can still see pen strokes, it's much less pronounced and was possible to go back and clean them up. I imagine that it's even possible to use a water brush or something and to smooth it out, since TWSBI Black isn't waterproof; once Chou Kuro dries, water does very little to it. TWSBI Black also isn't particularly prone to shading in online tests that I've seen compared to other blacks, which should also help with uniformity of brightness.

I think that, for filling in areas, having more-consistent lightness within an inked area is more-desirable than having a bit darker ink.

WebP versions of each, for anyone who might be using a client that can't handle AVIF:

Man and Dog WebP

USCG Eagle WebP

View original on lemmy.today
11
fountainpens·Fountain Pensbytal

If you want to use a flex nib, be aware that your script may require you to learn to write at something like a 45° angle from normal

Just a warning to anyone else who thought that flex nibs looked interesting and, like me, didn't realize the requirements of needing to use one with existing scripts. Maybe this is obvious to a number of other people, but it wasn't to me.

I like the look of Spencerian script:

I figured, hey, I'm using a fountain pen, which unlike most other writing instruments, can take flex nibs and with them, do variable-width lines. Why not give Spencerian a shot?

I finally got a nib that has decent line width variation, a Fountain Pen Revolution EF Ultra Flex, and put it on a pen, and started practicing letter forms.

I promptly sliced through the paper. Repeatedly.

I took a closer look and realized what was going on.

Usually, when writing in cursive, the pen is at something like 45° from the line of text. I was doing the same when trying to write in Spencerian.

If you intend to write in Spencerian or Copperplate script, the nib must be perpendicular to the line of text, so that a vertical downward stroke is pulling directly towards the pen.

The calligraphy crowd typically uses dip pens that amount to just a nib, and can stick the thing in an oblique holder, so they can have their hand at a 45° angle to the paper, like normal, but still keep the nib aligned perpendicular to the line of text.

But a fountain pen user can't do that. They'd have a huge, unwieldy fountain pen hanging off an oblique holder. If they want to write in a script that requires that nib alignment, they must rotate their hand relative to the paper, and retrain themselves to write that way.

If you aren't really wanting to retrain yourself to write at a 45° angle from normal, you probably can't use flex-nib fountain pens to do Spencerian or Copperplate or similar.

View original on lemmy.today
12