How to reveal a time limit without videogaming it?

I am under the impression (so correct me if I’m wrong) that having a close time limit on objectives could be fun if there is not an abuse of the game mechanic.

So one hand, I want my players to find out about this time limit in the right moment:

Oh no, the truck where we hid the MacGuffin just left west, that’s the direction of the bridge that was blown up! And in the foggiest day! Let’s us hurry up pals!

But on the other hand I don’t want to video-game the event1 or spoonfed them the info. The truck is going to leave at 9, and crash at 11 if nothing is done. Only the guard and some employees know this. If my players think getting a drink after a rough day is more important than taking care of the MacGuffin, that’s part of TRPG.

Still I’d like to give my players as many chances as possible to find out there is a time limit, or to connect the dots.

DM: So the guard tells you that truck just left to another town via West Street, the unique, long street that reachs out of the city.

Player: (Doesn’t remember the bridge is west) Mm okay, maybe we could find out tomorrow where it’s headed.

This is even trickier for events the party doesn’t know about, BBEG plans, rituals, man-made catastrophes ("Hey let’s open this cursed ancient tomb in the name of archeology"). In this case it’d feel even more unfair, as the players didn’t get to make any decision, they were just slow or oblivious, and we completely miss on the adrenaline rush .

How can I improve the odds of players finding out about time-sensitive events at the right moment? Better even if they are slow or dense that day.


1Where the event doesn’t happen if the player character is not there.

LIMIT and OFFSET a complex query

I have a query generated by a ORM (Sequelize), i ran into an issue where sequelize fails, look at those issues. https://github.com/sequelize/sequelize/issues/7344

https://github.com/sequelize/sequelize/issues/12200

Postgres Query:

 SELECT "feeds"."id",     "feeds"."title",     "feeds"."likes",     "feeds"."description",     "feeds"."files",     "feeds"."allowComments",     "feeds"."readConfirmation",     "feeds"."isDraft",     "feeds"."createdAt",     "feeds"."updatedAt",     "feeds"."companyId",     "feeds"."createdById",     "reads"."id" AS "reads.id",     "reads->feeds_reads"."createdAt" AS "reads.feeds_reads.createdAt",     "reads->feeds_reads"."updatedAt" AS "reads.feeds_reads.updatedAt",     "reads->feeds_reads"."feedId" AS "reads.feeds_reads.feedId",     "reads->feeds_reads"."userId" AS "reads.feeds_reads.userId",     "createdBy"."id" AS "createdBy.id",     "createdBy"."firstName" AS "createdBy.firstName",     "createdBy"."jobTitle" AS "createdBy.jobTitle",     "createdBy"."lastName" AS "createdBy.lastName",     "createdBy"."profilePicture" AS "createdBy.profilePicture",     "bookmarks"."id" AS "bookmarks.id",     "bookmarks->feeds_bookmarks"."createdAt" AS "bookmarks.feeds_bookmarks.createdAt",     "bookmarks->feeds_bookmarks"."updatedAt" AS "bookmarks.feeds_bookmarks.updatedAt",     "bookmarks->feeds_bookmarks"."feedId" AS "bookmarks.feeds_bookmarks.feedId",     "bookmarks->feeds_bookmarks"."userId" AS "bookmarks.feeds_bookmarks.userId",     "units"."id" AS "units.id",     "units"."parentId" AS "units.parentId",     "units->feeds_units"."createdAt" AS "units.feeds_units.createdAt",     "units->feeds_units"."updatedAt" AS "units.feeds_units.updatedAt",     "units->feeds_units"."feedId" AS "units.feeds_units.feedId",     "units->feeds_units"."unitId" AS "units.feeds_units.unitId",     "units->users"."id" AS "units.users.id",     "units->users->users_units"."createdAt" AS "units.users.users_units.createdAt",     "units->users->users_units"."updatedAt" AS "units.users.users_units.updatedAt",     "units->users->users_units"."userId" AS "units.users.users_units.userId",     "units->users->users_units"."unitId" AS "units.users.users_units.unitId",     "units->descendents"."id" AS "units.descendents.id",     "units->descendents"."parentId" AS "units.descendents.parentId",     "units->descendents->unitsancestor"."unitsId" AS "units.descendents.unitsancestor.unitsId",     "units->descendents->unitsancestor"."ancestorId" AS "units.descendents.unitsancestor.ancestorId",     "units->descendents->users"."id" AS "units.descendents.users.id",     "units->descendents->users->users_units"."createdAt" AS "units.descendents.users.users_units.createdAt",     "units->descendents->users->users_units"."updatedAt" AS "units.descendents.users.users_units.updatedAt",     "units->descendents->users->users_units"."userId" AS "units.descendents.users.users_units.userId",     "units->descendents->users->users_units"."unitId" AS "units.descendents.users.users_units.unitId",     "teams"."id" AS "teams.id",     "teams->feeds_teams"."createdAt" AS "teams.feeds_teams.createdAt",     "teams->feeds_teams"."updatedAt" AS "teams.feeds_teams.updatedAt",     "teams->feeds_teams"."feedId" AS "teams.feeds_teams.feedId",     "teams->feeds_teams"."teamId" AS "teams.feeds_teams.teamId",     "teams->peoples->teams_users"."createdAt" AS "teams.peoples.teams_users.createdAt",     "teams->peoples->teams_users"."updatedAt" AS "teams.peoples.teams_users.updatedAt",     "teams->peoples->teams_users"."userId" AS "teams.peoples.teams_users.userId",     "teams->peoples->teams_users"."teamId" AS "teams.peoples.teams_users.teamId",     "comments"."text" AS "comments.text",     "comments"."id" AS "comments.id",     "comments"."likes" AS "comments.likes",     "comments"."parentId" AS "comments.parentId",     "comments"."createdById" AS "comments.createdById",     "comments"."createdAt" AS "comments.createdAt",     "comments"."updatedAt" AS "comments.updatedAt",     "comments->createdBy"."id" AS "comments.createdBy.id",     "comments->createdBy"."firstName" AS "comments.createdBy.firstName",     "comments->createdBy"."lastName" AS "comments.createdBy.lastName",     "comments->createdBy"."jobTitle" AS "comments.createdBy.jobTitle",     "comments->createdBy"."profilePicture" AS "comments.createdBy.profilePicture",     "peoples->feeds_peoples"."createdAt" AS "peoples.feeds_peoples.createdAt",     "peoples->feeds_peoples"."updatedAt" AS "peoples.feeds_peoples.updatedAt",     "peoples->feeds_peoples"."feedId" AS "peoples.feeds_peoples.feedId",     "peoples->feeds_peoples"."userId" AS "peoples.feeds_peoples.userId" FROM "feeds" AS "feeds"     LEFT OUTER JOIN (         "feeds_reads" AS "reads->feeds_reads"         INNER JOIN "users" AS "reads" ON "reads"."id" = "reads->feeds_reads"."userId"     ) ON "feeds"."id" = "reads->feeds_reads"."feedId"     LEFT OUTER JOIN "users" AS "createdBy" ON "feeds"."createdById" = "createdBy"."id"     LEFT OUTER JOIN (         "feeds_bookmarks" AS "bookmarks->feeds_bookmarks"         INNER JOIN "users" AS "bookmarks" ON "bookmarks"."id" = "bookmarks->feeds_bookmarks"."userId"     ) ON "feeds"."id" = "bookmarks->feeds_bookmarks"."feedId"     LEFT OUTER JOIN (         "feeds_units" AS "units->feeds_units"         INNER JOIN "units" AS "units" ON "units"."id" = "units->feeds_units"."unitId"     ) ON "feeds"."id" = "units->feeds_units"."feedId"     LEFT OUTER JOIN (         "users_units" AS "units->users->users_units"        LEFT OUTER JOIN "users" AS "units->users" ON "units->users"."id" = "units->users->users_units"."userId"     ) ON "units"."id" = "units->users->users_units"."unitId"     LEFT OUTER JOIN (         "unitsancestor" AS "units->descendents->unitsancestor"         LEFT OUTER JOIN "units" AS "units->descendents" ON "units->descendents"."id" = "units->descendents->unitsancestor"."unitsId"     ) ON "units"."id" = "units->descendents->unitsancestor"."ancestorId"     LEFT OUTER JOIN (         "users_units" AS "units->descendents->users->users_units"         LEFT OUTER JOIN "users" AS "units->descendents->users" ON "units->descendents->users"."id" = "units->descendents->users->users_units"."userId"     ) ON "units->descendents"."id" = "units->descendents->users->users_units"."unitId"     LEFT OUTER JOIN (         "feeds_teams" AS "teams->feeds_teams"         INNER JOIN "teams" AS "teams" ON "teams"."id" = "teams->feeds_teams"."teamId"     ) ON "feeds"."id" = "teams->feeds_teams"."feedId"     LEFT OUTER JOIN (         "teams_users" AS "teams->peoples->teams_users"         INNER JOIN "users" AS "teams->peoples" ON "teams->peoples"."id" = "teams->peoples->teams_users"."userId"     ) ON "teams"."id" = "teams->peoples->teams_users"."teamId"     LEFT OUTER JOIN "comments" AS "comments" ON "feeds"."id" = "comments"."feedId"     LEFT OUTER JOIN "users" AS "comments->createdBy" ON "comments"."createdById" = "comments->createdBy"."id"     LEFT OUTER JOIN (         "feeds_peoples" AS "peoples->feeds_peoples"         INNER JOIN "users" AS "peoples" ON "peoples"."id" = "peoples->feeds_peoples"."userId"     ) ON "feeds"."id" = "peoples->feeds_peoples"."feedId" WHERE (         "peoples"."id" = 11         OR "feeds"."createdById" = 11         OR "teams->peoples"."id" = 11         OR "units->users"."id" = 11         OR "units->descendents->users"."id" = 11     )     AND "feeds"."companyId" = 4     AND "feeds"."isDraft" = false     AND "feeds"."createdAt" < '2020-12-09 12:59:34.017 +00:00' LIMIT 20; 

Here the limit is not applying to the feeds, i want 20 feeds but it’s giving me same feed 20 times.

Is there a limit on the number of Proficiency Swaps as part of Customizing Your Origin in Tasha’s?

Tasha’s has a section on replacing proficiencies granted by race in the section on customizing your origin and provides the example of swapping elven proficiency with a longbow for a tool proficiency. Does that mean you could swap all 4 weapon proficiencies from Elven Weapon Training for any 4 weapons or 4 tool proficiencies instead?

Evaluate the limit of a subsequence: Compute the limit $ \lim_{n\to\infty} \cos\left( \pi \sqrt{4n^2 + 5n + 1} \right) $ Integer $n$ on Mathematica

I want to compute the limit $ $ \lim \limits_{n\to\infty} \cos\left( \pi \sqrt{4n^2 + 5n + 1} \right) $ $ for integer $ n$ . By completing the square, we can determine that this limit is equal to $ – \tfrac1{\sqrt2} \approx -0.7071 $ .

But if we don’t restrict $ n$ to an integer, then the limit is indeterminate / does not exist. And can be easily found by typing it on WolframAlpha. Or in Mathematica:

However, I do not know how to compute the limit (on Mathematica) with the original constraint that $ n$ must be an integer.

I know that we can plot a graph on Mathematica:

But what is the exact value of the limit?

The graph suggests that the limit is equal to $ -\tfrac1{\sqrt2} $ . However, this doesn’t look like a convincing result because we can’t know that the limit is exactly equal to $ -\tfrac1{\sqrt2} $ .

Question: Is there a way to compute this limit in Mathematica where it spits out a single numerical value (of $ -1/{\sqrt2}$ )?

Why limit password length?

This question is inspired by Is there any security risk in not setting a maximum password length?.

Specifically the accepted answer https://security.stackexchange.com/a/238033/9640 says limits are recommended to avoid exhausting the server.

Also it seems to me that if the server is hashing your password to a n digit hash, there is no security advantage to having a password that is longer than n digits. An entity that could reasonable brute force the n digit space, would not have to brute force the (n+1) digit space to brute force your (n+1) digit password. In practical terms, a 1000 digit password is not really more secure than a 500 digit password.

However, what about double hashing the password.

  1. The user enters a password of arbitrary length.
  2. The client hashes the password to a fixed length.
  3. The server can reject the client’s hash if it is not the fixed length (protecting the server from resource exhaustion).
  4. The server otherwise treats the client’s hash as the password and proceeds in the usual manner (it re-hashes it).

In this way, if you want a 10,000 character long password go for it. Your browser will invisibly to you, transform your 10,000 character long password to a 128 character long password (still very secure) and the only change in the server is that now the server knows that all passwords must be exactly 128 characters long so it can reject some logins more easily.

The primary benefit of this scheme is that no user will ever be told "your password is too long". I personally find this message to be disheartening. But I concede that this benefit is not monumental. So if there are any security holes that I am not seeing, this scheme is probably not worth it.

Is there a limit on the “detection range” of Glyph of Warding’s trigger?

The conventional usage of a glyph of warding spell, exemplified by the “explosive runes” variant, is something like a magical land mine: step on or near it and it explodes, dealing damage in a small radius around the glyph itself. However, if one stores a spell with a long range and uses an appropriate trigger condition, it seems that the spell glyph form of glyph of warding could be used more like a single-shot turret. Consider these examples:

  • One could create a spell glyph containing a fireball spell (range 150 ft) with a trigger of “when a small or larger creature approaches within 150 feet” and place the glyph in the center of a room 300 feet across to effectively ward the entire room with a single glyph.

  • Going even further, one could imagine using a spell glyph as a magical alarm system, storing a loud spell (e.g. thunderwave or shatter) with a trigger of “when a drow approaches within 1 mile”. Such a glyph could act as an early warning system covering an entire castle or dungeon. (For bonus points, exploit the fact that the stored spell will be aimed in the direction of the triggering creature by placing bells of different pitches in the cardinal directions around the glyph, then determine the direction of approach based on which bell(s) ring the loudest.)

Either of both of these examples seems like they could be outside the intended power level for this 3rd level spell, but as far as I can tell, the spell’s text doesn’t explicitly rule out either example. In fact, I’ve intentionally phrased the above triggers to conform to the specific examples of “typical triggers” in the description (highlighted in bold):

You decide what triggers the glyph when you cast the spell. For glyphs inscribed on a surface, the most typical triggers include touching or standing on the glyph, removing another object covering the glyph, approaching within a certain distance of the glyph, or manipulating the object on which the glyph is inscribed. […]

You can further refine the trigger so the spell activates only under certain circumstances or according to physical characteristics (such as height or weight), creature kind (for example, the ward could be set to affect aberrations or drow), or alignment.

The lack of any apparent range limit is especially notable given that some spells with similar triggering mechanics do given an explicit range limit. For example, magic mouth requires the triggering circumstance to be observable within 30 feet:

The triggering circumstance can be as general or as detailed as you like, though it must be based on visual or audible conditions that occur within 30 feet of the object.

So, what, if anything, limits the “detection range” of the trigger for glyph of warding? Do either of the above examples work, or is there some part of the spell’s text, or some applicable rule, that prevents the glyph from detecting the triggering condition at that range? Is this entirely up to the DM’s discretion?