# I am the Watcher. I am your guide through this vast new twtiverse.
#
# Usage:
# https://watcher.sour.is/api/plain/users View list of users and latest twt date.
# https://watcher.sour.is/api/plain/twt View all twts.
# https://watcher.sour.is/api/plain/mentions?uri=:uri View all mentions for uri.
# https://watcher.sour.is/api/plain/conv/:hash View all twts for a conversation subject.
#
# Options:
# uri Filter to show a specific users twts.
# offset Start index for quey.
# limit Count of items to return (going back in time).
#
# twt range = 1 33
# self = https://watcher.sour.is/conv/g67crtq
My feed just got rotated as well. Let me know if it broke something. 🥴
My feed just got rotated as well. Let me know if it broke something. 🥴
My feed just got rotated as well. Let me know if it broke something. 🥴
@movq Do you truncate your feed on rotation? yarnd
does this too and its a bit problematic 😅
@movq Do you truncate your feed on rotation? yarnd
does this too and its a bit problematic 😅
@movq Do you truncate your feed on rotation? yarnd
does this too and its a bit problematic 😅
@movq Do you truncate your feed on rotation? yarnd
does this too and its a bit problematic 😅
@prologic I do. But didn’t we work out some logic to cover this case? 🤔 I forgot. Something like: “If the current file does not contain the twt hash that we’ve seen on the last run, then traverse back through archived feeds until you find it.” 🤔
@prologic I do. But didn’t we work out some logic to cover this case? 🤔 I forgot. Something like: “If the current file does not contain the twt hash that we’ve seen on the last run, then traverse back through archived feeds until you find it.” 🤔
@prologic I do. But didn’t we work out some logic to cover this case? 🤔 I forgot. Something like: “If the current file does not contain the twt hash that we’ve seen on the last run, then traverse back through archived feeds until you find it.” 🤔
@prologic I do. But didn’t we work out some logic to cover this case? 🤔 I forgot. Something like: “If the current file does not contain the twt hash that we’ve seen on the last run, then traverse back through archived feeds until you find it.” 🤔
@movq Oh, you rotate it entirely. I only cut off the top section, aka the oldest messages. This helps compatibility with clients that do not support archiving, like the original twtxt client. The most recent stuff is still available in the main feed. Since I still haven't found the time to incorporate fetching into tt
, I rely on the old client for that and now miss all your twts from the rotated feed. :-) Good thing you announced it, so I could check your archived feed manually for the time being. ;-) Maybe today's project will be to get rid of the original client.
@movq I _think_ so, but so far I haven't implemented this as its more "complex" and "more code" and well yeah... I _tried_ to come up with some other ways, but so far yeah we're kind of stuck with this behaviour 😅
@movq I _think_ so, but so far I haven't implemented this as its more "complex" and "more code" and well yeah... I _tried_ to come up with some other ways, but so far yeah we're kind of stuck with this behaviour 😅
@movq I _think_ so, but so far I haven't implemented this as its more "complex" and "more code" and well yeah... I _tried_ to come up with some other ways, but so far yeah we're kind of stuck with this behaviour 😅
@movq I _think_ so, but so far I haven't implemented this as its more "complex" and "more code" and well yeah... I _tried_ to come up with some other ways, but so far yeah we're kind of stuck with this behaviour 😅
@lyse Oof. 😅 Yeah, maybe I souldn’t truncate it entirely … let’s see if I can conjure up the motivation to implement that. 😅
@lyse Oof. 😅 Yeah, maybe I souldn’t truncate it entirely … let’s see if I can conjure up the motivation to implement that. 😅
@lyse Oof. 😅 Yeah, maybe I souldn’t truncate it entirely … let’s see if I can conjure up the motivation to implement that. 😅
@lyse Oof. 😅 Yeah, maybe I souldn’t truncate it entirely … let’s see if I can conjure up the motivation to implement that. 😅
@lyse How do you logically and atomically do this? I have a bit of a problem with designing yarnd
like this since a feed could be written to at any time. Do I lock the feed whilst this process is happening so I can do this? 🤔
@lyse How do you logically and atomically do this? I have a bit of a problem with designing yarnd
like this since a feed could be written to at any time. Do I lock the feed whilst this process is happening so I can do this? 🤔
@lyse How do you logically and atomically do this? I have a bit of a problem with designing yarnd
like this since a feed could be written to at any time. Do I lock the feed whilst this process is happening so I can do this? 🤔
@lyse How do you logically and atomically do this? I have a bit of a problem with designing yarnd
like this since a feed could be written to at any time. Do I lock the feed whilst this process is happening so I can do this? 🤔
@prologic I don't know what you're discussing but please do not go down the road of locking the entire feed! Besides mutexes causing a world of pain in any concurrent system (prone to deadlocks), the full feed is in general a large unit that grows through time. Locking at the feed level will lead to very poor concurrent performance that degrades over time. Databases do row locking, not full table locking, for concurrent writes when they can (and when they need to use locks).
A strategy I like a lot is the one that the pijul source control system uses. They designed a representation of patches where you can apply almost all patches (change sets/feed edits) in any order without generating conflicts, and when conflicts do arise you can detect and localize them and then ask the user to figure themselves out.