Searching We Love Privacy Club

Twts matching #tracking
Sort by: Newest, Oldest, Most Relevant

[…] UN framework convention on climate change said: “This does not go far enough, fast enough. This is nowhere near the scale of reductions required to put us on track to 1.5C. National governments must set new goals now and implement them in the next eight years.”
[…] UN framework convention on climate change said: “This does not go far enough, fast enough. This is nowhere near the scale of reductions required to put us on track to 1.5C. National governments must set new goals now and implement them in … ⌘ Read more

⤋ Read More

Voice Actor’s 109-track <i>Sent From My Telephone</i> is a surreal, fathomless dream
After spending countless late-night hours with mysterious artist Voice Actor’s massive, utterly hypnotic, 109-track, three-and-a-half-hour-long dark horse AOTY contender Sent From My Telephone since it dropped a couple weeks back, I’m now officially in love… [Continue reading…](https://www.gorillavsbear.net/voice-actors-sent-from-my-tele … ⌘ Read more

⤋ Read More

One year ago, I started using AdGuard Home instead of Pi-Hole to filter DNS requests and block ads and tracking. Yesterday, I switched to NextDNS instead. NextDNS has mostly the same features, but is hosted in the “cloud” and I have one less self-hosted service to care about. AdGuard Home is awesome, but NextDNS seems to be working great as well and also integrates with Tailscale easily. ⌘ Read more

⤋ 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

⤋ Read More
In-reply-to » Progress! so i have moved into working on aggregates. Which are a grouping of events that replayed on an object set the current state of the object. I came up with this little bit of generic wonder.

(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 Objects

A 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
}

⤋ Read More
In-reply-to » The original twt is unavailable. It may have been edited or deleted, or is from an unknown or muted feed.

@eaplmx@twtxt.net That reminds me, I should start doing some exercises, too. Years ago, I wrote a web application to track those and two other mates used it as well. This way we motivated us to do our daily pushups and situps. I even extended it to upload GPX trajectories from our bike rides and hikes to show the route on an OSM map. Finally, you could enter your weights and get a nice graph with all the ups and downs. I should revibe this project. And maybe even rewrite it.

⤋ Read More

**R to @mind_booster: Of course, kokori’s track is not the only one worth listening to. The compilation starts with the Argentinian project “Bosques”, with the track “El Planeta Es Una Nave”, a version of it available here:

https://soundcloud.com/bosques/el-planeta-es-una-nave**
Of course, kokori’s track is not the only one worth listening to. The compilation starts with the Argentinian project “Bosques”, with the track “El Planeta Es Una Nave”, a version of it available here:

[soundcloud.com/bosques/el-pl…]( … ⌘ Read more

⤋ Read More

**Ten years ago, the 3CD compilation “Bearded Snails” was released, featuring 16 tracks and 19 artists of the “A Beard of Snails Records” roster.

The last of those tracks is kokori’s “Attention”, in its first release to the general public. Now here: https://the20th.bandcamp.com/track/attention**
Ten years ago, the 3CD compilation “Bearded Snails” was released, featuring 16 tracks and 19 artists of the “A Beard of Snails Records” roster.

The last of those tracks is kokori’s “Attention”, in its first release to … ⌘ Read more

⤋ Read More

How the GitHub Security Team uses projects and GitHub Actions for planning, tracking, and more
Can projects and GitHub Actions be used by your non-developer teams? They absolutely can. Check out how our Security Team uses GitHub to run the department effortlessly. ⌘ Read more

⤋ Read More
In-reply-to » A read-only, finger(1)-based social network, maybe? http://txtpunk.com/fingers/

It’ll track a bunch of finger(1) endpoints and let you see what’s new. Very early draft. Not actually a social network, more an anti-social network for ‘80s CompSci transplants. :-)

⤋ Read More

premiere: Σtella announces Sub Pop debut <i>Up and Away</i> + shares animated video for the timeless title track
Athens, Greece-based singer and songwriter Σtella shares the timeless title track + opener from her transportive new album Up and Away, coming in June on Sub Pop. As on super dreamy recent single “Charmed”, Σtella hooks up again with London producer Redinho here to conjure an elegant and sophisticated union of vin … ⌘ Read more

⤋ Read More

there is this property of Doneness that I really like, and that tracks a lot (but not all) of my interests. First, let’s take meditation: every single moment in meditation is really Done after it’s over, it doesn’t linger around, the sensations don’t pile up somewhere. They might influence each other, sure, but at the end of the day it’s just the present experience, slashing into and out of existence in its clear luminosity.

⤋ Read More

Horsegirl announce debut album <i>Versions of Modern Performance</i> + share new single “Anti-glory”
Chicago group Horsegirl’s debut full-length is easily one of my most anticipated albums of 2022, and today the band officially announces the record with lead single and opening track, “ Anti-glory”… [Continue reading…](https://www.gorillavsbear.net/horsegirl-announces-debut-album-versi … ⌘ Read more

⤋ Read More

If a completely context-free self-tracking app exists, I am not aware of it. Every tracking app seems to apply only to a certain narrow topic - often sport or food. And then all the apps send the data to a central server, which makes me uncomfortable. A Syntax for Self-Tracking

⤋ Read More

janetanne/outfitless

Image

Web application for organizing your closet and keeping track of your wardrobe, as well as picking your outfit for the day. Uses Google Oauth to register for an account/sign in and Clarifai API to process images.

Language: Python

Star: 3

Watch: 3 ⌘ Read more

⤋ Read More