**
🧮 USERS:3 FEEDS:6 TWTS:524 BLOGS:0 ARCHIVED:103566 CACHE:2512 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:524 BLOGS:0 ARCHIVED:103566 CACHE:2512 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:523 BLOGS:0 ARCHIVED:103459 CACHE:2487 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:523 BLOGS:0 ARCHIVED:103459 CACHE:2487 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
The thing is I don’t know how to search the web logs on Codeberg or even if they are public. That is the issue with just regular text files. The thing with having the follower list in the twtxt file is that then it knows to track friends of friends like with yarn.
If not having www is an issue when I will add it in. Good to know its something I have to change
@movq@uninformativ.de Do you know how I would find people that reply to my posts or replies or even mention my users? Prologic tried to contact me and unless I found him on the yarn pod then I would not know he exists and wants to talk to me. The user agents would work but I don’t know if I can view my web server logs from codeberg pages and I don’t know how to monitor my logs for mentions. What about the way yarn does it by added people you follow to your twtxt file and having friends of friends like yarn does it be a thing for jenny. Just an idea
**
🧮 USERS:3 FEEDS:6 TWTS:522 BLOGS:0 ARCHIVED:103343 CACHE:2434 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:522 BLOGS:0 ARCHIVED:103343 CACHE:2434 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
@prologic@twtxt.net I do think the post about how to setup jenny + mutt over on the uninformativ.de blog is still a great post. I used that post to see the steps to set it up and it works fine. Though I can write some blog post with some more documentation for things like auto publishing. The big issue with plain twtxt is that I would have not seen your post unless I looked on twtxt.net when I was looking at yarn a little bit more. Twtxt does overcome the issue by introducing the registry but I can’t figure out any way to use them for Jenny and almost no one uses them in the first place. So I can’t see anyones replies or mentions unless I am following them. Yarn does overcome the issue by friends of friends as you would know as the creator of yarn.
**
🧮 USERS:3 FEEDS:6 TWTS:521 BLOGS:0 ARCHIVED:103270 CACHE:2431 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:521 BLOGS:0 ARCHIVED:103270 CACHE:2431 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:520 BLOGS:0 ARCHIVED:103169 CACHE:2406 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:520 BLOGS:0 ARCHIVED:103169 CACHE:2406 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:519 BLOGS:0 ARCHIVED:103091 CACHE:2429 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:519 BLOGS:0 ARCHIVED:103091 CACHE:2429 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:518 BLOGS:0 ARCHIVED:103027 CACHE:2432 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:518 BLOGS:0 ARCHIVED:103027 CACHE:2432 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:517 BLOGS:0 ARCHIVED:102942 CACHE:2421 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:517 BLOGS:0 ARCHIVED:102942 CACHE:2421 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:516 BLOGS:0 ARCHIVED:102879 CACHE:2438 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:516 BLOGS:0 ARCHIVED:102879 CACHE:2438 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:515 BLOGS:0 ARCHIVED:102785 CACHE:2423 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:515 BLOGS:0 ARCHIVED:102785 CACHE:2423 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:514 BLOGS:0 ARCHIVED:102707 CACHE:2407 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:514 BLOGS:0 ARCHIVED:102707 CACHE:2407 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:513 BLOGS:0 ARCHIVED:102607 CACHE:2441 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:513 BLOGS:0 ARCHIVED:102607 CACHE:2441 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:512 BLOGS:0 ARCHIVED:102541 CACHE:2464 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:512 BLOGS:0 ARCHIVED:102541 CACHE:2464 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:511 BLOGS:0 ARCHIVED:102473 CACHE:2457 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:511 BLOGS:0 ARCHIVED:102473 CACHE:2457 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:510 BLOGS:0 ARCHIVED:102397 CACHE:2476 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:510 BLOGS:0 ARCHIVED:102397 CACHE:2476 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:509 BLOGS:0 ARCHIVED:102326 CACHE:2474 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:509 BLOGS:0 ARCHIVED:102326 CACHE:2474 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:508 BLOGS:0 ARCHIVED:102240 CACHE:2463 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:508 BLOGS:0 ARCHIVED:102240 CACHE:2463 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
🧮 Users: 2, Feeds: 6, Twts: 1026, Archived: 1116347, Cache: 89202, Followers: 29, and Following: 701.
**
🧮 USERS:3 FEEDS:6 TWTS:507 BLOGS:0 ARCHIVED:102165 CACHE:2455 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:507 BLOGS:0 ARCHIVED:102165 CACHE:2455 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
👋 Hello @burglar@txt.sour.is, welcome to txt.sour.is, a Yarn.social Pod! To get started you may want to check out the pod’s Discover feed to find users to follow and interact with. To follow new users, use the ⨁ Follow button on their profile page or use the Follow form and enter a Twtxt URL. You may also find other feeds of interest via Feeds. Welcome! 🤗
**
🧮 USERS:3 FEEDS:6 TWTS:506 BLOGS:0 ARCHIVED:102071 CACHE:2446 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:506 BLOGS:0 ARCHIVED:102071 CACHE:2446 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
I’ve realized that trying to strictly follow what is on the IndieWeb wiki won’t work well for me. Thus, I have to invent and change some things to make it work better. ⌘ Read more
(cont.)
Just to give some context on some of the components around the code structure.. I wrote this up around an earlier version of aggregate code. This generic bit simplifies things by removing the need of the Crud functions for each aggregate.
Domain ObjectsA domain object can be used as an aggregate by adding the event.AggregateRoot struct and finish implementing event.Aggregate. The AggregateRoot implements logic for adding events after they are either Raised by a command or Appended by the eventstore Load or service ApplyFn methods. It also tracks the uncommitted events that are saved using the eventstore Save method.
type User struct {
Identity string ```json:"identity"`
CreatedAt time.Time
event.AggregateRoot
}
// StreamID for the aggregate when stored or loaded from ES.
func (a *User) StreamID() string {
return "user-" + a.Identity
}
// ApplyEvent to the aggregate state.
func (a *User) ApplyEvent(lis ...event.Event) {
for _, e := range lis {
switch e := e.(type) {
case *UserCreated:
a.Identity = e.Identity
a.CreatedAt = e.EventMeta().CreatedDate
/* ... */
}
}
}
Events
Events are applied to the aggregate. They are defined by adding the event.Meta and implementing the getter/setters for event.Event
type UserCreated struct {
eventMeta event.Meta
Identity string
}
func (c *UserCreated) EventMeta() (m event.Meta) {
if c != nil {
m = c.eventMeta
}
return m
}
func (c *UserCreated) SetEventMeta(m event.Meta) {
if c != nil {
c.eventMeta = m
}
}
Reading Events from EventStore
With a domain object that implements the event.Aggregate the event store client can load events and apply them using the Load(ctx, agg) method.
// GetUser populates an user from event store.
func (rw *User) GetUser(ctx context.Context, userID string) (*domain.User, error) {
user := &domain.User{Identity: userID}
err := rw.es.Load(ctx, user)
if err != nil {
if err != nil {
if errors.Is(err, eventstore.ErrStreamNotFound) {
return user, ErrNotFound
}
return user, err
}
return nil, err
}
return user, err
}
OnX Commands
An OnX command will validate the state of the domain object can have the command performed on it. If it can be applied it raises the event using event.Raise() Otherwise it returns an error.
// OnCreate raises an UserCreated event to create the user.
// Note: The handler will check that the user does not already exsist.
func (a *User) OnCreate(identity string) error {
event.Raise(a, &UserCreated{Identity: identity})
return nil
}
// OnScored will attempt to score a task.
// If the task is not in a Created state it will fail.
func (a *Task) OnScored(taskID string, score int64, attributes Attributes) error {
if a.State != TaskStateCreated {
return fmt.Errorf("task expected created, got %s", a.State)
}
event.Raise(a, &TaskScored{TaskID: taskID, Attributes: attributes, Score: score})
return nil
}
Crud Operations for OnX Commands
The following functions in the aggregate service can be used to perform creation and updating of aggregates. The Update function will ensure the aggregate exists, where the Create is intended for non-existent aggregates. These can probably be combined into one function.
// Create is used when the stream does not yet exist.
func (rw *User) Create(
ctx context.Context,
identity string,
fn func(*domain.User) error,
) (*domain.User, error) {
session, err := rw.GetUser(ctx, identity)
if err != nil && !errors.Is(err, ErrNotFound) {
return nil, err
}
if err = fn(session); err != nil {
return nil, err
}
_, err = rw.es.Save(ctx, session)
return session, err
}
// Update is used when the stream already exists.
func (rw *User) Update(
ctx context.Context,
identity string,
fn func(*domain.User) error,
) (*domain.User, error) {
session, err := rw.GetUser(ctx, identity)
if err != nil {
return nil, err
}
if err = fn(session); err != nil {
return nil, err
}
_, err = rw.es.Save(ctx, session)
return session, err
}
**
🧮 USERS:3 FEEDS:6 TWTS:505 BLOGS:0 ARCHIVED:102004 CACHE:2460 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:505 BLOGS:0 ARCHIVED:102004 CACHE:2460 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:504 BLOGS:0 ARCHIVED:101937 CACHE:2466 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:504 BLOGS:0 ARCHIVED:101937 CACHE:2466 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
The XMPP Standards Foundation: Mid Term Evaluation Updates
It’s been a month since I wrote my last blog. For those of you who have been following my blogs, thanks a lot for taking the time to read them. In this blog, I will give the updates post mid-term evaluation and the challenges that I have been facing and how I overcame some of them.
For those of you who don’t know much about GSoC, a mid-term evaluat … ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:503 BLOGS:0 ARCHIVED:101845 CACHE:2450 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:503 BLOGS:0 ARCHIVED:101845 CACHE:2450 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:502 BLOGS:0 ARCHIVED:101760 CACHE:2439 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:502 BLOGS:0 ARCHIVED:101760 CACHE:2439 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:501 BLOGS:0 ARCHIVED:101664 CACHE:2403 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:501 BLOGS:0 ARCHIVED:101664 CACHE:2403 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:500 BLOGS:0 ARCHIVED:101577 CACHE:2387 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:500 BLOGS:0 ARCHIVED:101577 CACHE:2387 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:499 BLOGS:0 ARCHIVED:101432 CACHE:2382 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:499 BLOGS:0 ARCHIVED:101432 CACHE:2382 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
To all my feed subscribers: If you are annoyed by the TTS audio or the “Interactions” link, add a “.min” in front of the feed type in the URL. For example https://jlelse.blog/.min.rss. Thanks for following! 😄 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:498 BLOGS:0 ARCHIVED:101357 CACHE:2381 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:498 BLOGS:0 ARCHIVED:101357 CACHE:2381 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:497 BLOGS:0 ARCHIVED:101289 CACHE:2380 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:497 BLOGS:0 ARCHIVED:101289 CACHE:2380 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:496 BLOGS:0 ARCHIVED:101190 CACHE:2501 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:496 BLOGS:0 ARCHIVED:101190 CACHE:2501 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
Ignite Realtime Blog: REST API Openfire plugin 1.9.1 released!
Woopsie doodle! It turns out that a rather annoying bug was introduced in version 1.9.0 of the REST API plugin for Openfire, that we released earlier today!
To avoid unnecessary issues, we’ve decided to follow up with an immediate new release that addresses this issue. … ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:495 BLOGS:0 ARCHIVED:101094 CACHE:2507 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:495 BLOGS:0 ARCHIVED:101094 CACHE:2507 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:494 BLOGS:0 ARCHIVED:101009 CACHE:2498 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:494 BLOGS:0 ARCHIVED:101009 CACHE:2498 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:493 BLOGS:0 ARCHIVED:100918 CACHE:2478 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:493 BLOGS:0 ARCHIVED:100918 CACHE:2478 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:492 BLOGS:0 ARCHIVED:100822 CACHE:2465 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:492 BLOGS:0 ARCHIVED:100822 CACHE:2465 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:491 BLOGS:0 ARCHIVED:100750 CACHE:2522 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:491 BLOGS:0 ARCHIVED:100750 CACHE:2522 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:490 BLOGS:0 ARCHIVED:100677 CACHE:2524 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:490 BLOGS:0 ARCHIVED:100677 CACHE:2524 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:489 BLOGS:0 ARCHIVED:100592 CACHE:2507 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:489 BLOGS:0 ARCHIVED:100592 CACHE:2507 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:488 BLOGS:0 ARCHIVED:100504 CACHE:2502 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:488 BLOGS:0 ARCHIVED:100504 CACHE:2502 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:487 BLOGS:0 ARCHIVED:100420 CACHE:2487 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:487 BLOGS:0 ARCHIVED:100420 CACHE:2487 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:486 BLOGS:0 ARCHIVED:100325 CACHE:2471 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:486 BLOGS:0 ARCHIVED:100325 CACHE:2471 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more
**
🧮 USERS:3 FEEDS:6 TWTS:485 BLOGS:0 ARCHIVED:100217 CACHE:2449 FOLLOWERS:9 FOLLOWING:17
**
🧮 USERS:3 FEEDS:6 TWTS:485 BLOGS:0 ARCHIVED:100217 CACHE:2449 FOLLOWERS:9 FOLLOWING:17 ⌘ Read more