Hunting for Collision Bugs
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:00Welcome to the stream, with a plug of Meow the Infinite: Book Two1 and Consolidated Press printers2
🗩
0:00Welcome to the stream, with a plug of Meow the Infinite: Book Two1 and Consolidated Press printers2
🗩
0:00Welcome to the stream, with a plug of Meow the Infinite: Book Two1 and Consolidated Press printers2
🗩
1:40Problems with spam filtering of Molly Rocket's newsletter
💢
🗩
1:40Problems with spam filtering of Molly Rocket's newsletter
💢
🗩
1:40Problems with spam filtering of Molly Rocket's newsletter
💢
🗩
7:32Determine to handle embedding recovery
🗩
7:32Determine to handle embedding recovery
🗩
7:32Determine to handle embedding recovery
🗩
8:31Demo collision embedding
🏃
8:31Demo collision embedding
🏃
8:31Demo collision embedding
🏃
11:27Reproduce a corner embedding case and rebuild in -Od
11:27Reproduce a corner embedding case and rebuild in -Od
11:27Reproduce a corner embedding case and rebuild in -Od
12:10Rebuild in -Od
12:10Rebuild in -Od
12:10Rebuild in -Od
13:16Step through MoveEntity() while embedded in the corner
🏃
13:16Step through MoveEntity() while embedded in the corner
🏃
13:16Step through MoveEntity() while embedded in the corner
🏃
18:02Rebuild in -O2
18:02Rebuild in -O2
18:02Rebuild in -O2
18:11Compare the recorded Occupied cells with the visible scene
🏃
18:11Compare the recorded Occupied cells with the visible scene
🏃
18:11Compare the recorded Occupied cells with the visible scene
🏃
18:50Rebuild in -Od
18:50Rebuild in -Od
18:50Rebuild in -Od
19:04Step through MoveEntity() while embedded in the corner, and consider the Occupied cells to match the scene
🏃
19:04Step through MoveEntity() while embedded in the corner, and consider the Occupied cells to match the scene
🏃
19:04Step through MoveEntity() while embedded in the corner, and consider the Occupied cells to match the scene
🏃
21:21Step through the collision flood search in MoveEntity()
🏃
21:21Step through the collision flood search in MoveEntity()
🏃
21:21Step through the collision flood search in MoveEntity()
🏃
23:57Fix the logic of the Occupied tests in MoveEntity()
23:57Fix the logic of the Occupied tests in MoveEntity()
23:57Fix the logic of the Occupied tests in MoveEntity()
25:46Embedding is fixed
🏃
25:46Embedding is fixed
🏃
25:46Embedding is fixed
🏃
26:13We appear to tunnel
🏃
26:13We appear to tunnel
🏃
26:13We appear to tunnel
🏃
32:03The collision seems stable otherwise
🏃
32:03The collision seems stable otherwise
🏃
32:03The collision seems stable otherwise
🏃
33:21Reproduce our tunnelling bug
🏃
33:21Reproduce our tunnelling bug
🏃
33:21Reproduce our tunnelling bug
🏃
35:31Consider our tunnelling bug
📖
35:31Consider our tunnelling bug
📖
35:31Consider our tunnelling bug
📖
39:20Augment diagram_group with ResetCounter and make DIAGRAM_Reset() let 16 diagrams pile up
39:20Augment diagram_group with ResetCounter and make DIAGRAM_Reset() let 16 diagrams pile up
39:20Augment diagram_group with ResetCounter and make DIAGRAM_Reset() let 16 diagrams pile up
40:01Our diagrams keep on piling up
🏃
40:01Our diagrams keep on piling up
🏃
40:01Our diagrams keep on piling up
🏃
40:16Fix DIAGRAM_Reset() to reset the ResetCounter
40:16Fix DIAGRAM_Reset() to reset the ResetCounter
40:16Fix DIAGRAM_Reset() to reset the ResetCounter
40:33Reproduce our tunnelling bug
🏃
40:33Reproduce our tunnelling bug
🏃
40:33Reproduce our tunnelling bug
🏃
42:20Consider increasing the wall collision volume height
🏃
42:20Consider increasing the wall collision volume height
🏃
42:20Consider increasing the wall collision volume height
🏃
43:51Reacquaint ourselves with the collision volume code
📖
43:51Reacquaint ourselves with the collision volume code
📖
43:51Reacquaint ourselves with the collision volume code
📖
45:31Increase the wall collision volume height in GenerateRoom()
45:31Increase the wall collision volume height in GenerateRoom()
45:31Increase the wall collision volume height in GenerateRoom()
46:20The wall collision volume isn't much higher
🏃
46:20The wall collision volume isn't much higher
🏃
46:20The wall collision volume isn't much higher
🏃
46:33Increase the wall collision volume height by FullWallHeight in GenerateRoom()
46:33Increase the wall collision volume height by FullWallHeight in GenerateRoom()
46:33Increase the wall collision volume height by FullWallHeight in GenerateRoom()
46:55Reproduce our tunnelling bug with taller wall collision volumes
🏃
46:55Reproduce our tunnelling bug with taller wall collision volumes
🏃
46:55Reproduce our tunnelling bug with taller wall collision volumes
🏃
49:30Some corner wall collision volumes fail to light up for collision
🏃
49:30Some corner wall collision volumes fail to light up for collision
🏃
49:30Some corner wall collision volumes fail to light up for collision
🏃
50:52Toggle on collision volume drawing in UpdateAndRenderEntities()
50:52Toggle on collision volume drawing in UpdateAndRenderEntities()
50:52Toggle on collision volume drawing in UpdateAndRenderEntities()
51:27All wall collision volumes are present
🏃
51:27All wall collision volumes are present
🏃
51:27All wall collision volumes are present
🏃
52:23Consider the collision volume's failure to light up
🏃
52:23Consider the collision volume's failure to light up
🏃
52:23Consider the collision volume's failure to light up
🏃
53:11Toggle off collision volume drawing in UpdateAndRenderEntities()
53:11Toggle off collision volume drawing in UpdateAndRenderEntities()
53:11Toggle off collision volume drawing in UpdateAndRenderEntities()
53:22Reproduce our tunnelling bug
🏃
53:22Reproduce our tunnelling bug
🏃
53:22Reproduce our tunnelling bug
🏃
53:39Consider adding diagram freezing and single-stepping
🏃
53:39Consider adding diagram freezing and single-stepping
🏃
53:39Consider adding diagram freezing and single-stepping
🏃
56:16Scour CollidesAtP(), ShapesCollide() and RefineVoxelPlacement() for bugs
📖
56:16Scour CollidesAtP(), ShapesCollide() and RefineVoxelPlacement() for bugs
📖
56:16Scour CollidesAtP(), ShapesCollide() and RefineVoxelPlacement() for bugs
📖
1:03:37Diagram collision voxel corners coloured by their Occupied status
1:03:37Diagram collision voxel corners coloured by their Occupied status
1:03:37Diagram collision voxel corners coloured by their Occupied status
1:06:36Check out our coloured collision voxel corners
🏃
1:06:36Check out our coloured collision voxel corners
🏃
1:06:36Check out our coloured collision voxel corners
🏃
1:07:34Toggle off PushCube() in UpdateAndRenderEntities()
1:07:34Toggle off PushCube() in UpdateAndRenderEntities()
1:07:34Toggle off PushCube() in UpdateAndRenderEntities()
1:08:07Try to reproduce our tunnelling bug
🏃
1:08:07Try to reproduce our tunnelling bug
🏃
1:08:07Try to reproduce our tunnelling bug
🏃
1:08:32Toggle on collision volume drawing in UpdateAndRenderEntities()
1:08:32Toggle on collision volume drawing in UpdateAndRenderEntities()
1:08:32Toggle on collision volume drawing in UpdateAndRenderEntities()
1:08:46Reproduce our tunnelling bug, with corners oddly coloured black
🏃
1:08:46Reproduce our tunnelling bug, with corners oddly coloured black
🏃
1:08:46Reproduce our tunnelling bug, with corners oddly coloured black
🏃
1:10:24Make DIAGRAM_Reset() let 32 diagrams pile up
1:10:24Make DIAGRAM_Reset() let 32 diagrams pile up
1:10:24Make DIAGRAM_Reset() let 32 diagrams pile up
1:11:44Reproduce our tunnelling bug, and try to capture the diagrams
🏃
1:11:44Reproduce our tunnelling bug, and try to capture the diagrams
🏃
1:11:44Reproduce our tunnelling bug, and try to capture the diagrams
🏃
1:13:00Set Shift-F9 as a hotkey for diagram capturing
1:13:00Set Shift-F9 as a hotkey for diagram capturing
1:13:00Set Shift-F9 as a hotkey for diagram capturing
1:14:45Try to reproduce our tunnelling bug
🏃
1:14:45Try to reproduce our tunnelling bug
🏃
1:14:45Try to reproduce our tunnelling bug
🏃
1:17:00Reproduce our tunnelling bug, and capture the diagrams
🏃
1:17:00Reproduce our tunnelling bug, and capture the diagrams
🏃
1:17:00Reproduce our tunnelling bug, and capture the diagrams
🏃
1:17:05Inspect our tunnelling bug diagrams
🏃
1:17:05Inspect our tunnelling bug diagrams
🏃
1:17:05Inspect our tunnelling bug diagrams
🏃
1:18:19The pink marks are the root-finding ones drawn by RefineVoxelPlacement()
📖
1:18:19The pink marks are the root-finding ones drawn by RefineVoxelPlacement()
📖
1:18:19The pink marks are the root-finding ones drawn by RefineVoxelPlacement()
📖
1:18:54Inspect our tunnelling bug diagrams (cont.)
🏃
1:18:54Inspect our tunnelling bug diagrams (cont.)
🏃
1:18:54Inspect our tunnelling bug diagrams (cont.)
🏃
1:19:21Consider our tunnelling bug
📖
1:19:21Consider our tunnelling bug
📖
1:19:21Consider our tunnelling bug
📖
1:20:15We shouldn't see a great mass of red Occupied corners
🏃
1:20:15We shouldn't see a great mass of red Occupied corners
🏃
1:20:15We shouldn't see a great mass of red Occupied corners
🏃
1:21:30Scour CheckCorners() for bugs in the collision voxel stack push
📖
1:21:30Scour CheckCorners() for bugs in the collision voxel stack push
📖
1:21:30Scour CheckCorners() for bugs in the collision voxel stack push
📖
1:24:06Hypothesis: Maybe RefineVoxelPlacement() can accidentally place you in an embedded position?
🏃
1:24:06Hypothesis: Maybe RefineVoxelPlacement() can accidentally place you in an embedded position?
🏃
1:24:06Hypothesis: Maybe RefineVoxelPlacement() can accidentally place you in an embedded position?
🏃
1:25:20Scour RefineVoxelPlacement() for bugs
📖
1:25:20Scour RefineVoxelPlacement() for bugs
📖
1:25:20Scour RefineVoxelPlacement() for bugs
📖
1:26:12Toggle off the embedded corner occupancy resetting in CheckCorners()
1:26:12Toggle off the embedded corner occupancy resetting in CheckCorners()
1:26:12Toggle off the embedded corner occupancy resetting in CheckCorners()
1:26:37Try to, but never reproduce our tunnelling bug
🏃
1:26:37Try to, but never reproduce our tunnelling bug
🏃
1:26:37Try to, but never reproduce our tunnelling bug
🏃
1:29:02Scour GetClosestPointInBoxConservative() and RefineVoxelPlacement() for bugs
📖
1:29:02Scour GetClosestPointInBoxConservative() and RefineVoxelPlacement() for bugs
📖
1:29:02Scour GetClosestPointInBoxConservative() and RefineVoxelPlacement() for bugs
📖
1:31:33Assert in MoveEntity() that the target cell remains the same after RefineVoxelPlacement()
1:31:33Assert in MoveEntity() that the target cell remains the same after RefineVoxelPlacement()
1:31:33Assert in MoveEntity() that the target cell remains the same after RefineVoxelPlacement()
1:32:41Try to reproduce our tunnelling bug
🏃
1:32:41Try to reproduce our tunnelling bug
🏃
1:32:41Try to reproduce our tunnelling bug
🏃
1:33:30Assert in MoveEntity() that the Corners are not embedded
1:33:30Assert in MoveEntity() that the Corners are not embedded
1:33:30Assert in MoveEntity() that the Corners are not embedded
1:33:54Immediately hit that assertion because the glove begins embedded
🏃
1:33:54Immediately hit that assertion because the glove begins embedded
🏃
1:33:54Immediately hit that assertion because the glove begins embedded
🏃
1:34:07Comment out the Corner not embedded assertion in MoveEntity()
1:34:07Comment out the Corner not embedded assertion in MoveEntity()
1:34:07Comment out the Corner not embedded assertion in MoveEntity()
1:34:18Our glove begins embedded
🏃
1:34:18Our glove begins embedded
🏃
1:34:18Our glove begins embedded
🏃
1:34:25Re-enable the Corner not embedded assertion in MoveEntity() and make AddPlayer() spawn the glove to the side
1:34:25Re-enable the Corner not embedded assertion in MoveEntity() and make AddPlayer() spawn the glove to the side
1:34:25Re-enable the Corner not embedded assertion in MoveEntity() and make AddPlayer() spawn the glove to the side
1:34:51Hit our assertion upon moving
🏃
1:34:51Hit our assertion upon moving
🏃
1:34:51Hit our assertion upon moving
🏃
1:35:25Change that assertion in MoveEntity() to call DIAGRAM_Capture()
1:35:25Change that assertion in MoveEntity() to call DIAGRAM_Capture()
1:35:25Change that assertion in MoveEntity() to call DIAGRAM_Capture()
1:35:47Inspect our embedding-triggered diagrams
🏃
1:35:47Inspect our embedding-triggered diagrams
🏃
1:35:47Inspect our embedding-triggered diagrams
🏃
1:36:27Shrink the hero's head collision volume in AddPlayer()
1:36:27Shrink the hero's head collision volume in AddPlayer()
1:36:27Shrink the hero's head collision volume in AddPlayer()
1:36:55We embed on a corner
🏃
1:36:55We embed on a corner
🏃
1:36:55We embed on a corner
🏃
1:37:30Revert our embedding-triggered DIAGRAM_Capture() call to an assertion in MoveEntity()
1:37:30Revert our embedding-triggered DIAGRAM_Capture() call to an assertion in MoveEntity()
1:37:30Revert our embedding-triggered DIAGRAM_Capture() call to an assertion in MoveEntity()
1:37:56Hit that assertion at the doorway
🏃
1:37:56Hit that assertion at the doorway
🏃
1:37:56Hit that assertion at the doorway
🏃
1:38:04Disable the hero's head collision volume in AddPlayer()
1:38:04Disable the hero's head collision volume in AddPlayer()
1:38:04Disable the hero's head collision volume in AddPlayer()
1:38:17Hit that assertion at the doorway
🏃
1:38:17Hit that assertion at the doorway
🏃
1:38:17Hit that assertion at the doorway
🏃
1:39:51Change MoveEntity() to detect embedding, then perform and capture the collision search
1:39:51Change MoveEntity() to detect embedding, then perform and capture the collision search
1:39:51Change MoveEntity() to detect embedding, then perform and capture the collision search
1:40:38We detect occupied corners where there are no colliders
🏃
1:40:38We detect occupied corners where there are no colliders
🏃
1:40:38We detect occupied corners where there are no colliders
🏃
1:41:53Scour CheckCorners() for bugs
📖
1:41:53Scour CheckCorners() for bugs
📖
1:41:53Scour CheckCorners() for bugs
📖
1:45:14Make CheckCorners() always recompute corner occupation
1:45:14Make CheckCorners() always recompute corner occupation
1:45:14Make CheckCorners() always recompute corner occupation
1:45:28We still detect occupied corners where there are no colliders
🏃
1:45:28We still detect occupied corners where there are no colliders
🏃
1:45:28We still detect occupied corners where there are no colliders
🏃
1:46:02Revert CheckCorners() to only compute corner occupation for CornerCode 0
1:46:02Revert CheckCorners() to only compute corner occupation for CornerCode 0
1:46:02Revert CheckCorners() to only compute corner occupation for CornerCode 0
1:46:08Our options: 1) Testing the wrong TestP; 2) Buggy CollidesAtP()
📖
1:46:08Our options: 1) Testing the wrong TestP; 2) Buggy CollidesAtP()
📖
1:46:08Our options: 1) Testing the wrong TestP; 2) Buggy CollidesAtP()
📖
1:47:02Re-enable the collision diagramming in ShapesCollide()
1:47:02Re-enable the collision diagramming in ShapesCollide()
1:47:02Re-enable the collision diagramming in ShapesCollide()
1:47:13We see a giant jumble of collision diagrams
🏃
1:47:13We see a giant jumble of collision diagrams
🏃
1:47:13We see a giant jumble of collision diagrams
🏃
1:48:01Plan to add diagram single-stepping, debug the incorrect collider points, then handle embedding
🗩
1:48:01Plan to add diagram single-stepping, debug the incorrect collider points, then handle embedding
🗩
1:48:01Plan to add diagram single-stepping, debug the incorrect collider points, then handle embedding
🗩
1:49:44Q&A
🗩
1:49:44Q&A
🗩
1:49:44Q&A
🗩
1:50:30x13pixels Q: The RemedyBG bug seen earlier with the MoveEntity() breakpoint happened because a function breakpoint, currently, is only added to the first valid location found. When hot reloading, two DLLs are loaded in the process: handmade_game_temp.dll and 1_handmade_game_temp.dll. The breakpoint ends up getting added to the DLL that is still loaded but not executing any code. Looks like this is intentional in Handmade Hero (Win32Unloaded doesn't call FreeLibrary). In any case, my apologies for the inconvenience
🗪
1:50:30x13pixels Q: The RemedyBG bug seen earlier with the MoveEntity() breakpoint happened because a function breakpoint, currently, is only added to the first valid location found. When hot reloading, two DLLs are loaded in the process: handmade_game_temp.dll and 1_handmade_game_temp.dll. The breakpoint ends up getting added to the DLL that is still loaded but not executing any code. Looks like this is intentional in Handmade Hero (Win32Unloaded doesn't call FreeLibrary). In any case, my apologies for the inconvenience
🗪
1:50:30x13pixels Q: The RemedyBG bug seen earlier with the MoveEntity() breakpoint happened because a function breakpoint, currently, is only added to the first valid location found. When hot reloading, two DLLs are loaded in the process: handmade_game_temp.dll and 1_handmade_game_temp.dll. The breakpoint ends up getting added to the DLL that is still loaded but not executing any code. Looks like this is intentional in Handmade Hero (Win32Unloaded doesn't call FreeLibrary). In any case, my apologies for the inconvenience
🗪
1:51:54How do breakpoints work on overloaded functions?
🗩
1:51:54How do breakpoints work on overloaded functions?
🗩
1:51:54How do breakpoints work on overloaded functions?
🗩
1:52:31x13pixels Special handling for overloaded functions, yes, but not multiple modules
🗪
1:52:31x13pixels Special handling for overloaded functions, yes, but not multiple modules
🗪
1:52:31x13pixels Special handling for overloaded functions, yes, but not multiple modules
🗪
1:53:06x13pixels Exactly, yes. Overloaded functions have their arguments hashed, etc.
🗪
1:53:06x13pixels Exactly, yes. Overloaded functions have their arguments hashed, etc.
🗪
1:53:06x13pixels Exactly, yes. Overloaded functions have their arguments hashed, etc.
🗪
1:53:18Wrap it up
🗩
1:53:18Wrap it up
🗩
1:53:18Wrap it up
🗩
1:53:57Plug Meow the Infinite: Book Two3
📖
1:53:57Plug Meow the Infinite: Book Two3
📖
1:53:57Plug Meow the Infinite: Book Two3
📖
1:54:15floorislava Q: You have subscriber-only chat on for Q&A
🗪
1:54:15floorislava Q: You have subscriber-only chat on for Q&A
🗪
1:54:15floorislava Q: You have subscriber-only chat on for Q&A
🗪
1:56:57Q&A (now with non-subscriber chat)
🗩
1:56:57Q&A (now with non-subscriber chat)
🗩
1:56:57Q&A (now with non-subscriber chat)
🗩
1:57:16akuma__ Sorry if this has been asked 1000 times, but any news on Star Code Galaxy?4
🗪
1:57:16akuma__ Sorry if this has been asked 1000 times, but any news on Star Code Galaxy?4
🗪
1:57:16akuma__ Sorry if this has been asked 1000 times, but any news on Star Code Galaxy?4
🗪
1:59:06manekenpix Casey, does Star Code Galaxy5 have a subscriber limit number or something? I never get emails from it, and they're not in my spam folder
🗪
1:59:06manekenpix Casey, does Star Code Galaxy5 have a subscriber limit number or something? I never get emails from it, and they're not in my spam folder
🗪
1:59:06manekenpix Casey, does Star Code Galaxy5 have a subscriber limit number or something? I never get emails from it, and they're not in my spam folder
🗪
2:01:44internationalizationist Q: By the way, does live looping still work?
🗪
2:01:44internationalizationist Q: By the way, does live looping still work?
🗪
2:01:44internationalizationist Q: By the way, does live looping still work?
🗪
2:01:51Live looping crashes the game
🏃
2:01:51Live looping crashes the game
🏃
2:01:51Live looping crashes the game
🏃
2:02:56vmttmv Don't know if it's a known thing, but for me at least GMail's spam filters have been dog for the last 12 months or so
🗪
2:02:56vmttmv Don't know if it's a known thing, but for me at least GMail's spam filters have been dog for the last 12 months or so
🗪
2:02:56vmttmv Don't know if it's a known thing, but for me at least GMail's spam filters have been dog for the last 12 months or so
🗪
2:05:23internationalizationist Q: Why doesn't that help? We recorded the entire state of the game every frame, and the replaying would have reproduced the bug
🗪
2:05:23internationalizationist Q: Why doesn't that help? We recorded the entire state of the game every frame, and the replaying would have reproduced the bug
🗪
2:05:23internationalizationist Q: Why doesn't that help? We recorded the entire state of the game every frame, and the replaying would have reproduced the bug
🗪
2:06:12manekenpix Q: I just subscribed to Star Code Galaxy,6 but I didn't get any confirmation email. Not sure if I should expect one
🗪
2:06:12manekenpix Q: I just subscribed to Star Code Galaxy,6 but I didn't get any confirmation email. Not sure if I should expect one
🗪
2:06:12manekenpix Q: I just subscribed to Star Code Galaxy,6 but I didn't get any confirmation email. Not sure if I should expect one
🗪
2:06:41tomisqi Q: I read in email that the Handmade engine is mostly done and that from now, we will be doing gameplay programming? Expect to finish in 2022?
🗪
2:06:41tomisqi Q: I read in email that the Handmade engine is mostly done and that from now, we will be doing gameplay programming? Expect to finish in 2022?
🗪
2:06:41tomisqi Q: I read in email that the Handmade engine is mostly done and that from now, we will be doing gameplay programming? Expect to finish in 2022?
🗪
2:07:14clayfreeman How should I proceed if I use G Suite and your website thinks I'm already subscribed? I never got a confirmation e-mail from you
🗪
2:07:14clayfreeman How should I proceed if I use G Suite and your website thinks I'm already subscribed? I never got a confirmation e-mail from you
🗪
2:07:14clayfreeman How should I proceed if I use G Suite and your website thinks I'm already subscribed? I never got a confirmation e-mail from you
🗪
2:08:12hquil Q: Wouldn't double opt-in through confirmation help? Because the subscriber will fish it out, mark it as trusted and click on a link
🗪
2:08:12hquil Q: Wouldn't double opt-in through confirmation help? Because the subscriber will fish it out, mark it as trusted and click on a link
🗪
2:08:12hquil Q: Wouldn't double opt-in through confirmation help? Because the subscriber will fish it out, mark it as trusted and click on a link
🗪
2:09:06qyxat Q: You should make a DMARC record. Most services reject email from domains without it
🗪
2:09:06qyxat Q: You should make a DMARC record. Most services reject email from domains without it
🗪
2:09:06qyxat Q: You should make a DMARC record. Most services reject email from domains without it
🗪
2:10:35clayfreeman "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s" is ideal
🗪
2:10:35clayfreeman "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s" is ideal
🗪
2:10:35clayfreeman "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s" is ideal
🗪
2:12:41Check SparkPost's support for DMARC7
📖
2:12:41Check SparkPost's support for DMARC7
📖
2:12:41Check SparkPost's support for DMARC7
📖
2:14:19jaythedeveloper SendGrid is 10/10, in my opinion
🗪
2:14:19jaythedeveloper SendGrid is 10/10, in my opinion
🗪
2:14:19jaythedeveloper SendGrid is 10/10, in my opinion
🗪
2:15:08clayfreeman If you intend to send out some mail today, I'll run an analysis on it and @ you via Twitter with what I find out
🗪
2:15:08clayfreeman If you intend to send out some mail today, I'll run an analysis on it and @ you via Twitter with what I find out
🗪
2:15:08clayfreeman If you intend to send out some mail today, I'll run an analysis on it and @ you via Twitter with what I find out
🗪
2:15:36ascentroid With the email provider I use, when I log in to my account it has a section that shows me all the domain stuff I should set up, etc. Dunno if that could help
🗪
2:15:36ascentroid With the email provider I use, when I log in to my account it has a section that shows me all the domain stuff I should set up, etc. Dunno if that could help
🗪
2:15:36ascentroid With the email provider I use, when I log in to my account it has a section that shows me all the domain stuff I should set up, etc. Dunno if that could help
🗪
2:17:44brinktjofzki Did SparkPost know that the mails were rejected? It is possible that Microsoft / Google were silently not delivering mail to end addresses
🗪
2:17:44brinktjofzki Did SparkPost know that the mails were rejected? It is possible that Microsoft / Google were silently not delivering mail to end addresses
🗪
2:17:44brinktjofzki Did SparkPost know that the mails were rejected? It is possible that Microsoft / Google were silently not delivering mail to end addresses
🗪
2:18:48caviar_liberta handmade_hero Isn't there an ack in the outbox?
🗪
2:18:48caviar_liberta handmade_hero Isn't there an ack in the outbox?
🗪
2:18:48caviar_liberta handmade_hero Isn't there an ack in the outbox?
🗪
2:18:59qyxat There is a good chance that your IP is already blacklisted on Google, so changing provider may not help
🗪
2:18:59qyxat There is a good chance that your IP is already blacklisted on Google, so changing provider may not help
🗪
2:18:59qyxat There is a good chance that your IP is already blacklisted on Google, so changing provider may not help
🗪
2:20:26internationalizationist I did get the mail, but didn't get notification that it came
🗪
2:20:26internationalizationist I did get the mail, but didn't get notification that it came
🗪
2:20:26internationalizationist I did get the mail, but didn't get notification that it came
🗪
2:20:37rastapharao Are the emails properly marked as being bulk / list mail?
🗪
2:20:37rastapharao Are the emails properly marked as being bulk / list mail?
🗪
2:20:37rastapharao Are the emails properly marked as being bulk / list mail?
🗪
2:21:03clayfreeman You'd want a List-Unsubscribe header
🗪
2:21:03clayfreeman You'd want a List-Unsubscribe header
🗪
2:21:03clayfreeman You'd want a List-Unsubscribe header
🗪
2:21:11rastapharao Precedence: bulk, List-Id, List-Unsubscribe etc. headers
🗪
2:21:11rastapharao Precedence: bulk, List-Id, List-Unsubscribe etc. headers
🗪
2:21:11rastapharao Precedence: bulk, List-Id, List-Unsubscribe etc. headers
🗪
2:21:35Thoughts on mailing lists
🗩
2:21:35Thoughts on mailing lists
🗩
2:21:35Thoughts on mailing lists
🗩
2:23:35heliumfactory I miss RSS
🗪
2:23:35heliumfactory I miss RSS
🗪
2:23:35heliumfactory I miss RSS
🗪
2:23:50Wrap it up with a plug of Meow the Infinite: Books One (physically) and Two8
🗩
2:23:50Wrap it up with a plug of Meow the Infinite: Books One (physically) and Two8
🗩
2:23:50Wrap it up with a plug of Meow the Infinite: Books One (physically) and Two8
🗩
2:25:32fractalmindmike Q: Is there a backer tier to receive both editions of Meow?
🗪
2:25:32fractalmindmike Q: Is there a backer tier to receive both editions of Meow?
🗪
2:25:32fractalmindmike Q: Is there a backer tier to receive both editions of Meow?
🗪
2:28:31Finish wrapping it up with a glimpse into the future
🗩
2:28:31Finish wrapping it up with a glimpse into the future
🗩
2:28:31Finish wrapping it up with a glimpse into the future
🗩