[dreamwidth/dreamwidth] d1fab4: Revert self-hosted log shipping, stay on Grafana C...
Apr. 21st, 2026 09:25 pmBranch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: d1fab43e780fd9a699983326b4f82f034763d16d https://github.com/dreamwidth/dreamwidth/commit/d1fab43e780fd9a699983326b4f82f034763d16d Author: Mark Smith mark@dreamwidth.org Date: 2026-04-21 (Tue, 21 Apr 2026)
Changed paths: M .github/workflows/tasks/worker-birthday-notify-service.json M .github/workflows/tasks/worker-change-poster-id-service.json M .github/workflows/tasks/worker-codebuild-notifier-service.json M .github/workflows/tasks/worker-content-importer-lite-service.json M .github/workflows/tasks/worker-content-importer-service.json M .github/workflows/tasks/worker-content-importer-verify-service.json M .github/workflows/tasks/worker-directory-meta-service.json M .github/workflows/tasks/worker-distribute-invites-service.json M .github/workflows/tasks/worker-dw-change-poster-id-service.json M .github/workflows/tasks/worker-dw-distribute-invites-service.json M .github/workflows/tasks/worker-dw-embeds-service.json M .github/workflows/tasks/worker-dw-esn-cluster-subs-service.json M .github/workflows/tasks/worker-dw-esn-filter-subs-service.json M .github/workflows/tasks/worker-dw-esn-fired-event-service.json M .github/workflows/tasks/worker-dw-esn-process-sub-service.json M .github/workflows/tasks/worker-dw-import-eraser-service.json M .github/workflows/tasks/worker-dw-incoming-email-service.json M .github/workflows/tasks/worker-dw-latest-feed-service.json M .github/workflows/tasks/worker-dw-lazy-cleanup-service.json M .github/workflows/tasks/worker-dw-mass-privacy-service.json M .github/workflows/tasks/worker-dw-send-email-service.json M .github/workflows/tasks/worker-dw-sphinx-copier-service.json M .github/workflows/tasks/worker-dw-support-notify-service.json M .github/workflows/tasks/worker-dw-synsuck-service.json M .github/workflows/tasks/worker-dw-xpost-service.json M .github/workflows/tasks/worker-embeds-service.json M .github/workflows/tasks/worker-expunge-users-service.json M .github/workflows/tasks/worker-import-eraser-service.json M .github/workflows/tasks/worker-import-scheduler-service.json M .github/workflows/tasks/worker-incoming-email-service.json M .github/workflows/tasks/worker-latest-feed-service.json M .github/workflows/tasks/worker-lazy-cleanup-service.json M .github/workflows/tasks/worker-paidstatus-service.json M .github/workflows/tasks/worker-process-privacy-service.json M .github/workflows/tasks/worker-resolve-extacct-service.json M .github/workflows/tasks/worker-schedule-synsuck-service.json M .github/workflows/tasks/worker-ses-incoming-email-service.json M .github/workflows/tasks/worker-shop-creditcard-charge-service.json M .github/workflows/tasks/worker-spellcheck-gm-service.json M .github/workflows/tasks/worker-sphinx-copier-service.json M .github/workflows/tasks/worker-sphinx-search-gm-service.json M .github/workflows/tasks/worker-support-notify-service.json M config/update-workflows.py
Log Message:
Revert self-hosted log shipping, stay on Grafana Cloud
With the planned source-side log volume reduction, Grafana Cloud's per-GB pricing becomes negligible and the operational overhead of self-hosting (bandwidth, maintenance, availability) isn't worth it. Points Fluent Bit back at logs-prod-042.grafana.net with the Loki creds from SSM.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Commit: 28416189e56cdbf33dffa19ff486b97ffdad2848 https://github.com/dreamwidth/dreamwidth/commit/28416189e56cdbf33dffa19ff486b97ffdad2848 Author: Mark Smith mark@dreamwidth.org Date: 2026-04-21 (Tue, 21 Apr 2026)
Changed paths: M cgi-bin/LJ/ESN.pm M etc/log4perl.conf
Log Message:
Reduce log volume: trim log4perl layout and drop duplicate ESN rejection log
Two small changes that together cut log bytes substantially:
etc/log4perl.conf: drop %F:%L %M from the conversion pattern. File, line, and function name added ~80 bytes of framing to every line system-wide; they're rarely useful since the trace prefix and message already identify the code path, and esn-trace searches by trace ID rather than file/line.
cgi-bin/LJ/ESN.pm: remove the filter_reject debug log in unique_matching_subs. The callee-side log in JournalNewComment::matches_filter already logs every rejection with strictly more information (reason, wanted_jtalkid), so the caller- side log was pure duplication. The dw.esn.filter metric stays.
Together these eliminate roughly half of every ESN filter-rejection pair plus ~40% bytes on every log line.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Compare: https://github.com/dreamwidth/dreamwidth/compare/005e4d64c9d3...28416189e56c
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
[dreamwidth/dreamwidth] c5763c: Fix stringified site object in extacct stats tag
Apr. 21st, 2026 08:26 pmBranch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: c5763c345a2ef2f8e69074808482cb6361f66c7e https://github.com/dreamwidth/dreamwidth/commit/c5763c345a2ef2f8e69074808482cb6361f66c7e Author: Mark Smith mark@dreamwidth.org Date: 2026-04-20 (Mon, 20 Apr 2026)
Changed paths: M cgi-bin/DW/External/Userinfo.pm
Log Message:
Fix stringified site object in extacct stats tag
DW::External::Site->get_site_by_id returns a blessed hashref, and concatenating with "site:" triggered Perl's default stringification, producing values like 'site:DW::External::Site::DeadJournal=HASH(0x...)'. The hash address was effectively a new label value per process, so every worker restart created a fresh set of unique series that lingered in the active-series count until they aged out. Use ->{hostname} to emit stable values like 'site:livejournal.com'.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Commit: 005e4d64c9d3d9359de4cff0c3232d2887b06632 https://github.com/dreamwidth/dreamwidth/commit/005e4d64c9d3d9359de4cff0c3232d2887b06632 Author: Mark Smith mark@dreamwidth.org Date: 2026-04-21 (Tue, 21 Apr 2026)
Changed paths: M .github/workflows/tasks/worker-birthday-notify-service.json M .github/workflows/tasks/worker-change-poster-id-service.json M .github/workflows/tasks/worker-codebuild-notifier-service.json M .github/workflows/tasks/worker-content-importer-lite-service.json M .github/workflows/tasks/worker-content-importer-service.json M .github/workflows/tasks/worker-content-importer-verify-service.json M .github/workflows/tasks/worker-directory-meta-service.json M .github/workflows/tasks/worker-distribute-invites-service.json M .github/workflows/tasks/worker-dw-change-poster-id-service.json M .github/workflows/tasks/worker-dw-distribute-invites-service.json M .github/workflows/tasks/worker-dw-embeds-service.json M .github/workflows/tasks/worker-dw-esn-cluster-subs-service.json M .github/workflows/tasks/worker-dw-esn-filter-subs-service.json M .github/workflows/tasks/worker-dw-esn-fired-event-service.json M .github/workflows/tasks/worker-dw-esn-process-sub-service.json M .github/workflows/tasks/worker-dw-import-eraser-service.json M .github/workflows/tasks/worker-dw-incoming-email-service.json M .github/workflows/tasks/worker-dw-latest-feed-service.json M .github/workflows/tasks/worker-dw-lazy-cleanup-service.json M .github/workflows/tasks/worker-dw-mass-privacy-service.json M .github/workflows/tasks/worker-dw-send-email-service.json M .github/workflows/tasks/worker-dw-sphinx-copier-service.json M .github/workflows/tasks/worker-dw-support-notify-service.json M .github/workflows/tasks/worker-dw-synsuck-service.json M .github/workflows/tasks/worker-dw-xpost-service.json M .github/workflows/tasks/worker-embeds-service.json M .github/workflows/tasks/worker-expunge-users-service.json M .github/workflows/tasks/worker-import-eraser-service.json M .github/workflows/tasks/worker-import-scheduler-service.json M .github/workflows/tasks/worker-incoming-email-service.json M .github/workflows/tasks/worker-latest-feed-service.json M .github/workflows/tasks/worker-lazy-cleanup-service.json M .github/workflows/tasks/worker-paidstatus-service.json M .github/workflows/tasks/worker-process-privacy-service.json M .github/workflows/tasks/worker-resolve-extacct-service.json M .github/workflows/tasks/worker-schedule-synsuck-service.json M .github/workflows/tasks/worker-ses-incoming-email-service.json M .github/workflows/tasks/worker-shop-creditcard-charge-service.json M .github/workflows/tasks/worker-spellcheck-gm-service.json M .github/workflows/tasks/worker-sphinx-copier-service.json M .github/workflows/tasks/worker-sphinx-search-gm-service.json M .github/workflows/tasks/worker-support-notify-service.json M config/update-workflows.py
Log Message:
Switch to self-hosted log service
I don't really want to pay hundreds/month for storing logs and I have a server hanging out that has fast disks/RAM, might as well just self-host it. It's not production so if it dies, I can always revert/fix.
Compare: https://github.com/dreamwidth/dreamwidth/compare/ad345841bf9b...005e4d64c9d3
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
4 DNFs and a non-DNF!
Apr. 20th, 2026 08:52 pm- A Rome of One's Own: The Forgotten Women of the Roman Empire by Emma Southon (2023): Did not finish, through no active fault of the book's own. The author does her absolute best to present a whole lot of misogyny with humor and clarity, but it does not hide the fact that this is all a lot of misogyny being presented. I skipped around, read a few chapters, and just couldn't stomach it. But what I read of it was good!
- The Lady With the Gun Asks the Questions: The Ultimate Miss Phryne Fisher Story Collection by Kerry Greenwood (2022): Did not finish. These are short stories, some very short. It poses an interesting question to the reader of what, precisely, makes a mystery/detective book. Should we see the process of the mystery being solved? Should we be able to solve the mystery? Do we need interiority in the solving process? This book has none of that! The stories are stories, very short, as we watch Phryne Fisher encounter a crime/confusing event (I hesitate to even call them mysteries) and then relay the solution, with a minimal amount of detectiving. Some stories have more than others. Some are just essentially lists of events. The short stories are not bad, in of themselves. And not all of them are murder mysteries! They are, however, not at all what I want in my quest for "can I please have a mystery book that isn't a murder mystery".
- The Keeper of Magical Things by Julie Leong (2025): I have gotten this out from the library twice and had to return it before getting more than a chapter or two into it. I may have to accept the fact that I don't find it very interesting or gripping. But maybe... maybe the third time out from the library... I'll actually read it.
- The Frugal Wizard's Handbook for Surviving Medieval England by Brandon Sanderson (2023): DNF. Speaking of acceptance of my literary tastes, I likely must also accept the fact that I don't find Brandon Sanderson books entertaining to read. I read some of it. I flipped to the end, and the ending part did not clearly follow at all from the beginning, so I am certain many many things happened in the meanwhile to get from point A to point B. However, I don't really care. I guess I was hoping for something more like the Tough Guide To Fantasyland or Discworld or something, you know... funny, based on the title. It's a shame because this is, iirc, the third Sanderson I was "meh, this is boring" on, and if I could like his stuff, there would be so many books for me to read.
- Strange Houses by Uketsu, translated by Jim Rion (2025): I finished a book! I liked it! This is a "murder mystery" book told via The Author getting interested in a floor plan, talking to someone who is convinced it means the house was being used to murder people, then a bunch of interviews/discussions with people about floor plans of multiple houses and if the floor plans mean that the house must have been used to murder people. This started off as a really convoluted, very "why would they go to all that effort of hiding a child's existence" and then swerved into fantastic "wait so what actually happened" territory, including how much do you trust various sources and various documentary evidence, and ends with a great highlight on "yeah we don't actually know how much of what was presented here is true and what was fabricated and if so by whom and when". There's this hanging plot hole that the epilogue sort of jumps on top of as well, to wit: ( Read more... )
This book is pretty short, which is contributed to by when it refers back to a floor plan, it shows that part of the floor plan, which makes it really easy to follow along but also, frankly, pads the page count. Quick, zippy read, more of a puzzle-that-never-gets-solved book than a murder mystery.
[dreamwidth/dreamwidth] 6dc7b3: Drop high-cardinality username tag from extacct stats
Apr. 20th, 2026 04:11 pmBranch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 6dc7b32ef3eed8378f40270d35c3a0b7a45dd21b https://github.com/dreamwidth/dreamwidth/commit/6dc7b32ef3eed8378f40270d35c3a0b7a45dd21b Author: Mark Smith mark@dreamwidth.org Date: 2026-04-20 (Mon, 20 Apr 2026)
Changed paths: M cgi-bin/DW/External/Userinfo.pm
Log Message:
Drop high-cardinality username tag from extacct stats
The username:$user tag on dw.worker.extacct.{success,failure} tracked each remote external-site user individually, making it the top metric by active series count in Grafana Cloud billing. Site alone is bounded to the DW::External::Site enum and gives the actionable dimension.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Commit: ad345841bf9b424ceb6bf65be2136b88fb612301 https://github.com/dreamwidth/dreamwidth/commit/ad345841bf9b424ceb6bf65be2136b88fb612301 Author: Mark Smith mark@dreamwidth.org Date: 2026-04-20 (Mon, 20 Apr 2026)
Changed paths: M cgi-bin/DW/Controller/Importer.pm M cgi-bin/DW/Logic/Importer.pm
Log Message:
Validate importer hostname against source whitelist
The /tools/importer UI offered a dropdown of three allowed sources (livejournal.com, insanejournal.com, dreamwidth.org), but set_import_data_for_user accepted whatever hostname the POST carried and INSERTed it straight into import_data. A crafted POST could inject arbitrary hostnames, which then flowed into the new hostname: tag on dw.worker.importer.job_completed as a cardinality-injection vector.
Extracts the allowed-source list into DW::Logic::Importer->allowed_sources so the controller's dropdown rendering and the logic layer's validation share one definition, and rejects any hostname not in the list.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Compare: https://github.com/dreamwidth/dreamwidth/compare/00b8f85a98e0...ad345841bf9b
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
Nature
Apr. 19th, 2026 08:21 pm( Read more... )
Notes of Desperation: Skullport
Apr. 19th, 2026 07:58 pmChapters: 2/3
Fandom: Forgotten Realms, The Legend of Drizzt Series - R. A. Salvatore
Rating: Teen And Up Audiences
Warnings: No Archive Warnings Apply
Characters: Zaknafein Do'Urden, Jarlaxle Baenre, Malice Do'Urden, Drizzt Do'Urden, Vierna Do'Urden, Original Drow Character(s)
Additional Tags: Alternate Universe - Canon Divergence, Torture, Escape, Rebuilding, Reunions
Summary:
A winding tale of how three Do'Urdens find family in full.
Notes of Desperation: Skullport
"Rule number one," Zaknafein began as they were situating the few things they had in a shared room. "Don't leave this building without me or someone I designate. Rule two, don't let on that you never went through school. Rule three, tied to that, try to act a little older."
Drizzt twisted up his features in distaste for that last; he didn't know what he was supposed to be like! He'd gone from being a student of Zaknafein to a curiosity in a mercenary band's den!
"I can take most typical fighters," Drizzt reasoned. "I have command of several cantrips now. I don't think anyone would notice I never attended.
"But… what do you mean by acting older?" He took the magical statue his father had given him out and settled on his narrow bed, just tracing the warm lines of the animal shape. Zak had told him it was a surface cat, and he was hopeful he'd see one in this strangely half-lit place.
Zak paused, glancing over. "If you have questions, hold them for me, for when we're alone. Try not to be too amazed at new things you see. And focus on being seen as serious. It will hold others at bay, while we get to know them, and figure out who will actually test us, and our placement here."
Drizzt wanted to ask why that was even a thing, but all of the discussions to this place, and ones he'd had in the other place with the mercenaries, had led him to believe that drow were just… given to being difficult at each other.
He didn't like it, but he still had a lot to learn, to understand what he wanted to be.
"Is there a wizard on staff?"
"No. We'll figure out how to find one to pay to find the thing's name, son," Zak told him. "Just try and be patient. You could live a very long time, now we're away from the women of that city."
Drizzt didn't understand that either, except in all the ways he'd been hurt by Maya and Briza both. Mother hadn't, not often, but Zaknafein had explained that too. Mother had wanted him to be like Zak, in skills, to replace the older man. But also be more pliable, someone she could actually control.
"So pretend to be as sour-faced as possible, and don't talk much? I can do that. It's how I survived Maya."
That got a wince from his father, and then Zak was in his space, folding him into a tight hug.
"Just until we understand where the threats are, son. I prefer your smiles, and I don't mind your questions… even if I don't ever seem to know the answers."
Drizzt hugged him back, and then settled back on the bed, so Zak could finish placing his traps how he wanted them.
Generally, Elkantar was not asked to go into Skullport for any of the bands that wandered the Sword Coast. While it was not spoken of openly, elder members in every group knew he had been rescued there from his enslavement.
The only reason he had volunteered this time was because he distinctly remembered a certain lichen that would benefit them all could be found in the lowest levels, and it was needed to treat an ailment that had settled on their younger members, a rash that thinned the skin and caused sores if it was pressed or abraded too hard.
He did let Laeral be the one to spirit him down inside the subterranean city, rather than risk taking a party with him through the ways they had learned through the Undermountain. She had disguised herself as a half-drow woman, having made the acquaintance of the up and coming sword mistress to Qilué's wanderers.
Elkantar kept his eyes open, his ears attuned to the threats around him, and a light touch on Laeral as he took her all the way down to the lowest levels on their gathering run.
"Fewer drow out and about than Shana said to expect," he murmured to her.
"My sources say that unaffiliated group recently had a leadership change. Wagering that led to a shuffle of power in all factions," she responded just as quietly.
"Hmm, if you hear more, do pass it on to us."
"Of course."
Zaknafein was flat on the roof of a building, his son beside him, as both observed the movement in the compound nearby.
"What do you see?"
"The women and children are frightened, obeying out of fear," Drizzt began, and Zak filed that under 'strange things about Drizzt' for that to be the first observation. "The soldiers are swaggering, being cruel just because they can, but their posture and bearing is arrogance based on perception. Whatever skill is under it is probably not at the level you demand of our fighters.
"The openness of the courtyard implies magical traps. The lack of protections from above could be carelessness, but is likely more magic. There is no obvious ranking officer outside, though, so they do not believe their protections are without weakness."
"Go on," Zak encouraged.
"The wagon boxes are sitting low for those designs. There's already merchandise in them, heavy merchandise. The traces are in place for beasts of burden… probably those large rothe we saw, given it is set up for two beasts per wagon. They mean to move those goods soon."
"Well done," Zak told him, even as he saw violence starting between two men and one of the women, the kind he had no wish for his son to see. "Come." He hoped Drizzt hadn't picked up that part yet, and hopped up into a low crouch. "See if you can beat me back."
There was a flicker of something in his gentle son before the boy obeyed, though not to race.
"Are we planning to attack them?" Drizzt asked.
"No. We were hired to get the information, which will be delivered to our contract holder. We do not provoke those drow, or the ones in the Temple. We merely cause them inconvenience, and promise better service with our own merchants."
Drizzt looked back, and Zak wanted to swear, seeing emotions flicker over that mobile face before Drizzt started in the direction of their own warehouse.
Maybe he had not understood what was happening and only reacted to the rough treatment, Zak hoped.
Drizzt was sitting on his bed when Zak came in, well after the contract had concluded, and saw his son running his hands over the cat figure. He did that a lot when he was thinking heavy thoughts.
"What is it?"
"It's not right that anyone, woman or man, be as scared as they were. It's not right that people take and hurt."
Drizzt's face came up, resolute, but fear in his eyes for voicing the feelings he'd been growing into since coming fully under his father's tutelage in this far off place. He still remembered, vividly, the beatings for daring to ask questions that implied drow ways were wrong.
Zak came and sat beside his son, bringing an arm up around his shoulders. "Power is the way of drow. It also seems to be the way of every species that lives in this city. Fear, from those that have no power, is normal. Power comes by skill, or position.
"I don't know what to tell you, Drizzt, to make this better for you. But that is the truth that was beaten and shaped into me in Menzoberranzan. Here, at least? There are connections between people, to share the burden of not having power. There's the ability to be family, and keep solid alliances to protect what power can be taken."
Drizzt looked at the figure he held, letting the warm magic it emanated soothe him. He didn't have answers to the gentle words, rebuttals to make his case. His heart just knew this was wrong.
After a full minute of silence, Zak stood, leaving the room so that Drizzt could be alone in his safe space… and wishing he knew a better way to help the boy.
Shana immediately put hand to dirk, beneath the view of the stranger approaching her, using the counter she had her offerings spread on to hide them. Other drow in this city were all too often a problem. The two fighters with her were more visibly ready to stop any altercations, both of them on the street side of things.
"I'm told you three follow different ways, something about a goodly goddess," the man said from several steps away. She appraised him fully, taking in the well-made but functional garb, the twin scabbards of equal length, the fact he wore his hair free save for two side braids to pin the mass of it back. Typical red eyes, slightly above average height for a deep drow, and he could be no other type given the polished jet of his skin tone.
"It need not be cause for strife," she said evenly. "We sell and trade to any in good faith."
His eyes did flick over the wares, mostly dried foods and components not found here, but from above.
"I'm actually looking for someone to teach my son," he said as he closed the last of the distance. "Has very un-drow ways of thinking, and I'm told they line up better with your people.
"Zaknafein."
"Shana," she responded to that unprompted offer of name. No bats, no other symbols of Vhaeraun in his clothing, and she'd caught no symbols of the spider either… but surely the clerics would have known if there was a goodly child here!
"He's my only surviving child, and his heart is just not suited to the work I do here," Zaknafein told her. "Do your people offer teachers for such as cannot be practical in their way of living?"
"We accept any who choose to follow ways closer to our goddess, even if they do not accept Her as their patron deity," Shana said. "We also, saer Zaknafein, tend to know when to seek such people."
The man grunted at that, with a grimace. "He's complicated. Third born, in a House of that Bitch's making. My friends say he's not able to be scryed, sent to, and he's always been resistant to divine healing. Only the salves work easily on him."
Third born. That had notorious meaning from a Spider city. And yet the boy lived.
"Meaning he may be touched by Her magic." Shana took a deep breath. "I cannot make these kind of decisions. But if you can keep him safe for a full moon, I can arrange for someone to meet with you and discuss it more in depth."
"He'll stay safe. I will not let harm come to him." Zaknafein's fierce loyalty to his child came through strongly, and Shana smiled a little.
"Are you sure you do not wish to seek our ways, where children are raised with care by their families?" she offered.
He looked at her, a myriad of complex emotions crossing his expressive features before he ruefully shook his head. "I would not fit in other ways, and have commitments here. I will meet your envoy in one month, at the place they call the Dimmed Lantern."
He then looked at her wares again, and produced coins to buy some of the dried fruits. "For taking your time… and because he delights in trying new things," Zaknafein said, before making his way back the way he'd come.
"Things are very unusual this trip," Neerbryn said, having specifically come to get a feel for the differences in the drow factions that Elkantar and Lady Silverhand had mentioned. Lleona would have come herself, but for once they had overruled their bard-leader.
"I know. Well, nothing for it but to finish our selling and buying, then get back to either your folk, or the Sister herself."
Lleona proved closer, with the rest of the Marauders, and listened to both Shana and Neerbryn describe the encounter. She was blessed with the deep memory a true bard found so useful, and from the mention of name and weapons, she was weighing just how to advise Shana.
"Qilué took her band to the southern tip of the mountains, guided by our Lady," Lleona said. "Rylla went with them, but we should find one another by mid-autumn. However, you don't need to seek her for negotiations on this matter."
"I don't?" Shana asked, but she respected Lleona's insights. The woman had one of the highest success rates for going into the Underdark and bringing all of her people out alive. Or at least able to live again.
"Any of you lot have sending on tap today?" Lleona asked her band.
"I do," Mynera offered, without even looking up from the scroll she was reading.
"Ask the other First Sister if she can clear her plate and come here within the next few days. Tell her no rush, as I'll go speak to this man if she can't make it in time, but it will be worth her while."
"You really think it is the same man?" Cirtlari asked, as she pieced together what had Lleona asking for someone from the other side of the continent.
"Well, she's as good as she can be; maybe the man just breeds goodly people," Lleona said cheerfully, before sitting back to let Mynera handle contact.
[dreamwidth/dreamwidth] 00b8f8: Add JSON access log middleware for Grafana Loki
Apr. 19th, 2026 12:35 pmBranch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 00b8f85a98e039eaaf2046ccb2bbc7e1ff07d60e https://github.com/dreamwidth/dreamwidth/commit/00b8f85a98e039eaaf2046ccb2bbc7e1ff07d60e Author: Mark Smith mark@dreamwidth.org Date: 2026-04-19 (Sun, 19 Apr 2026)
Changed paths: M app.psgi M bin/starman A cgi-bin/Plack/Middleware/DW/AccessLog.pm
Log Message:
Add JSON access log middleware for Grafana Loki
Replace Starman's default Apache Combined access log with a DW::AccessLog
middleware that emits one JSON object per line to psgi.errors. Fields include
method, path, status, bytes, duration_ms, host, remote_ip, and user_agent —
all natively parseable by Loki's | json pipeline for dashboards.
Use --no-default-middleware to suppress Plack's built-in AccessLog, and enable ContentLength explicitly in app.psgi to preserve that behavior.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications
Final Fantasy Tactics Liveblog Part 1
Apr. 18th, 2026 09:10 pm
I do sometimes feel I am too narrow-minded in my fandoms, because except for yarncrafts and Final Fantasy, I don't really venture out of those areas? I keep saying I'm going to play more single-player games on my own, but it's so EASY to default to FFXI or FFXIV or replay a comforting game. Earlier this year I was playing Epistory (Typing adventures!) which I was enjoying, and I don't think I have much more left so I should probably finish that. I also played about two hours of Clair Obscur: Expedition 33 and immediately was interested... but the activation energy to do something new to me is hard to find. So easy to just... not do it.
WELL FOLKS! I am away from home watching my sister's dog. My PS5 is back home, so no FFXIV - neither potato computer or mom's laptop can handle it. I could play FFXI on potato computer, but I left its gaming pad at home. Which means either fumbling with keyboard controls (and I am NOT good at them) or seeing if my Switch Pro controller would work.
But that, for once, sounds like too much effort.
So what to do? Well, I brought my Switch along! Now, I could replay FFXII. I was supposed to be doing a random job challenge of it recently, but only played an hour. As much as I like FFXII, I think... I think I don't want to replay a game right now.
Which means I am going to start FINAL FANTASY TACTICS today!
Okay, okay, it's another FF game. But I've never played it. And I have long felt that lack of experience in it as a hole in my gaming knowledge. There's a REASON it's way up there with the Zelda series as a "most wanted to play" game.
I know surprisingly a lot about the game, for not having played it. First, I have an idea of what the gameplay is like, because I've played the shit out of FFT: Advance. Seriously! My game file had like 180 hours put in it.
Second, I know many of the characters already, from them having shown up in first FFBE/WOTV and then when I did the Ivalice raids in FFXIV. This also means I know many of the bigger enemies, too.
I also helped R51 at Caves of Narshe update his FFT section for its recent re-release. This means I know EVERY SINGLE item, weapon, and armor in the game, because I proofread those pages. I know where stuff drops from, or is poached from. I know all the locations, because I checked their map pages for correct links.
My posts will be FULL OF SPOILERS but I ask that you PLEASE not spoil me for anything I haven't talked about yet. Thanks in advance!
( here spoilers start )
Pass the Hat
Apr. 18th, 2026 08:39 pmThis is our former roommate from when I FIRST moved here,
If you can signal boost, great. If you can donate... claim a drabble from me for helping a friend.
MORE PRETTIES!!
Apr. 16th, 2026 03:00 pm( click for pics and descriptions! )
I have really lucked out lately.