2,860 karma · joined November 16, 2013
https://emmanueloga.com
https://lobste.rs/~emmanueloga
https://mastodon.gamedev.place/@EmmanuelOga
https://bsky.app/profile/emmanuel-oga.bsky.social
EDIT: I had the wrong writer. Sheldon Pacotti was the lead writer of the original Deus Ex (2000). He wrote the AI dialogue, so the Morpheus quote is almost certainly his. Chris Todd and Austin Grossman also wrote for the game. Mary DeMarle wrote the later prequels (Human Revolution, Mankind Divided).
Pacotti has more books on his site [2]. Anyone familiar?
EDIT 2: Someone recommended Demiurge in this very post!
The linked article calls Deus Ex "pulp, not prophecy." I think "pulp" is a method, not a statement about quality (not sure if the author of the article has the same thing in mind).
I also love the pulpy/noir dialogue in Max Payne first games (1, 2). What are other games with good writing like this? (not necesary pulp)
--
0: https://www.zojirushi.com/blog/design-explained-our-easy-rel...
1: https://www.mcmaster.com/products/breakaway-magnetic-connect...
--
1: https://lobste.rs/s/tzyslr/reducing_size_go_binaries_by_up_7...
I’ve always wondered whether tighter integration with C# would have led to broader adoption, though that might have changed the character of the language.
* Durable execution: long‑running, resumable workflows with persistence, replay, and timeouts.
* Actors: isolated entities that own their state and logic, process one message at a time, and get concurrency by existing in large numbers (regardless of whether the runtime uses threads, async/await, or processes under the hood).
Combine the two and you get a "Durable actor", which seems close to what the article calls an “async agent”: a component that can receive messages, maintain state, pause/resume, survive restarts, and call out to an LLM or any other API.
And since spawning is already a primitive in the actor model, the article’s "subagent" fits naturally here too: it’s just another actor the first one creates.
A lot of the "simple queue" use cases end up needing extra machinery like a transactional‑outbox pattern just to be reliable. Durable‑execution frameworks (DBOS/Temporal/etc.) give you retries, state, and consistency out of the box. Patterns like Sagas also tend to get stitched together on top of queues, but a DE workflow gives you the same guarantees with far less complexity.
The main tradeoff I can think of is latency: DE engines add overhead, so for very high throughput, huge fan‑out, or ultra‑low‑latency pipelines, a bare‑bones queue + custom consumers might still be better.
Curious where others draw the line between the two.
await page.getStarted(); // what does this actually do?
vs await page.locator('a', { hasText: 'Get started' }).first().click();
await expect(page.locator('h1', { hasText: 'Installation' })).toBeVisible();
The second version is explicit and self-documenting. Tests don't always benefit from aggressive DRY, but I've seen teams adopt POMs to coordinate between SDETs and SWEs.--
const age = 40;
const children = [<div ~ "Moe" />, <div ~ "Larry"/>, <div ~ "Curly" />];
return <div age ~ children />;
Rationale: single child elements are ubiquitous in web dev, but most JSX formatters will require 3 lines of code even if there's a single child.I think this reinforces the idea that is something that could be built into verdaccio.
--
In theory for each package one could:
* npm install pkg
* npm pack pkg
* npm publish --registry=https://verdaccio.company.com
* set .npmrc to "registry=https://verdaccio.company.com/ when working with the actual app.
...this way, one could vet packages one by one. The main caveat I see is that it’s very inconvenient to have to vet and publish each package manually.
It would be great if Verdaccio had a UI to make this easier, for example, showing packages that were attempted to install but not yet vetted, and then allowing approval with a single click.
https://github.com/steveruizok/perfect-freehand/tree/main?ta...
--
<div class={tw(
"block",
"transform transition-all",
"bg-white ring-1 ring-black/5 rounded-xl shadow-2xl",
"max-w-3xl mx-auto overflow-hidden",
"group-data-closed/dialog:opacity-0",
"group-data-closed/dialog:scale-95",
"group-data-enter/dialog:duration-300",
"group-data-enter/dialog:ease-out",
"group-data-leave/dialog:duration-200",
"group-data-leave/dialog:ease-in"
)}>
...
</div>
I currently do this manually but it would be nice to have some tooling to automate that kind of format.--
1: https://en.wikipedia.org/wiki/Linguistic_relativity#Artifici...
Congrats Erv Walter for the launch of v2 and thank you for making the app and source available!
For those who haven't seen this before, this is a free web app that makes it easy to chart a moving average of the weight measured with smart scales (Withings/Fitbit), following the ideas on John Walker's "The hacker diet" [2].
--
--
--
* Clarify relationship with https://hckrnews.com/
* Don't put the settings in localStorage, use URL params. That has a lot of usability improvements including being able to share the state, bookmark it, and heads up the current state. Use Rison [1] for the URL params to make it nice to read.
* The settings overview is too terse. What does something like "Timeline, Top 20, Day, Comments"? Maybe you could turn that into a concise natural language sentence.
--
- J. L. Borges, El Aleph [1]
--1: https://www.goodreads.com/quotes/8699659-comprend-que-el-tra...
--
--
1: https://github.com/munificent/craftinginterpreters/issues/92...
--