bustle/README.md

116 lines
3.7 KiB
Markdown

# bustle
being an ambient activity feed for tilde.town
## development plan
- [ ] skeletal server
- [ ] skeletal client
- [ ] proof of concept inotify handler
- [ ] manually created proof of concept spool files for a few users
- [ ] basic `bustle update <something>`
- [ ] seeing the update on the server
- [ ] writing audit log
- [ ] writing to bustle.log
- [ ] basic `bustle` command
- [ ] bbj integration
- [ ] event aggregation, sampling, and throttling
- [ ] ...honestly if you can even get to here you can worry about what is next then.
## motivation
it's quiet. you've shelled into tilde.town but until you take one of the following actions you will have no idea what else is happening on the server:
- run chat
- run bbj
- run feels
all of these have different problems.
chat:
- it requires energy and social grace
- it might be empty; worse, it might /seem/ empty when you join
- it can get addictive
- it can get heated
- you don't see people that don't like chat. some of those people might be your new best friends.
bbj:
- the pace is slow
- it's hard to tell what conversations are already going
- admin can't figure out how to unsticky stuff
feels:
- the pace is slow
- it's read-only in that you can't respond to people
instead, what about a new command `bustle`:
```
$ bustle
you hear faint noise in the chat room
~endorphant is moving around in their home directory
~vilmibm just added to their public_html
some things are knocking around on bbj
~selfsame just created a new file
there is a rattling sound in ttbp
someone shouts, 'HI WORLD'
~archangelic shouts, 'HELLO BACK'
```
## architecture brainpuke
I am not sure how to do this without a daemon process. Something needs to be listening to inotify
events, listening for shouts, and ready to receive API hooks.
### How should the daemon work?
all updates are written to a ~/.bustle.spool file. bots will need a corresponding user account to
house this file. alternatively, in the future, bustled can be told about bot spool files in a
particular spot; for now there is a one to one between `/home/*/.bustle.spool` files and entities
that can tell bustle about stuff.
these updates are picked up via inotify, which we're already using to aggregate ambient file
activity.
#### (pre-bed thought)
I'm going through the trouble of setting up inotify. For every user. Instead of doing a socket
connection, how about:
- .bustle.spool in each user's directory
- the `bustle` command just writes to it
- i notice those updates by filename and handle them specially
what are the race conditions here? i think it's ok? if it's inotify based...the bustle client
command is just adding to an existing file. the server doesn't care until it's saved and
communicated and will only ever read from it. i think this might work D:
### How should user clients work?
when you run `bustle` with no arguments, it enters a loop. at some interval, messages print. should a connection be
maintained with bustled waiting with recv? I don't think so, since the log is not personalized. what
if `bustle` is just a fancy `tail -f` on a file, `/town/bustle/bustle.log`? i think that's fine. i
want running bustle to be exciting and cute, animating the messages in various ways. someone who
just wants the log is free to read `/town/bustle/bustle.log`.
### How should API clients work?
I'd like to be able to report on irc, bbj, and feels events. feels can be a special case of just
users editing in their home dir, but bbj and irc are more special. i think to start those services
will just get a spool file like a normal user and then write to it programmatically. this will
require modification of bbj and hooking into an irc bot run as some user.