Ignite Realtime Blog: Openfire ThreadDump plugin 1.1.0 released
Earlier today, we have released version 1.1.0 of the Openfire Thread Dump plugin. This plugin uses various evaluators to trigger the creation of a Java thread dump. These thread dumps provide valuable information that is typically used when analyzing issues within Openfire’s implementation.
In the new version of the plugin, two new evaluators have been added: one that looks at the usage pattern of Openfire’s TaskEngin … ⌘ Read more
@prologic@twtxt.net Yeah I don’t even know how to use them once I added myself to the registries. The jarn search engine is similar to the registries thing but its easier to search and find things from. Also I assume its easier to use it in the yarn pods and whatever elese to get new posts. I would always like to see yarn work with regular twtxt because there is advantges to plain twtxt.
@mckinley@twtxt.net really the language authors should have added those to the standard spec by now. That is just obscene.
Right now I have to setup jenny for my timeline. Just added myself to the Registry so that part is done.
Honest Government Ad | UK ⌘ 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
}
I have updated my eventDB to have subscriptions! It now has websockets like msgbus. I have also added a in memory store that can be used along side the disk backed wal.
Microsoft Announces “Start Menu as a Service”
The company is also reportedly considering a free, ad-supported option. ⌘ Read more
Honest Government Ad | US Supreme Court ⌘ Read more
trackbar.pl and nickcolor.pl as super-essentials. Also trying window_switcher.pl. Somehow my custom binds for Ctrl+1/2/3/etc. to switch to window 1/2/3/etc. doesn't do anything: { key = "^1"; id = "change_window"; data = "1"; } (I cannot use the default with Alt as this is handled by my window manager). Currently, I'm just cycling with Ctrl+N/P. Other things to solve in the near future:
Alright, grepping for line in ~/.weechat made me realize to /set weechat.look.read_marker_always_show on. I also added a new trigger that matches everthings and then beeps (I should probably exclude join and part events). I didn’t realize the default beep trigger is only for highlights and private messages.
I just discovered that my phone app (on my personal smartphone) shows me the total call duration of all calls made with the phone so far. A total of about 137.5 hours, which is over five and a half days (!). And that’s just the calls I’ve made using the phone app in the last 22 months. With Telegram and WhatsApp (and my landline phone), I’m sure a few more hours could be added. I’ve often heard the statement that smartphones are hardly used for making calls anymore these days. But apparently I can disprove that. On … ⌘ Read more
Help keep The Lunduke Journal free of all ads and “subscriber nags”!
Less ads! More nerdy stuff! ⌘ Read more
Honest Government Ads | Season 3 Launch 🎉 ⌘ Read more
How an expanded BRICS could lead the world instead of the waning West
Adding new members to BRICS would fragment the world on a scale not seen since the Cold War and amplify the new era of ‘vertical globalisation’. The US would not be at the centre of geopolitics for the first time since World War II, and even France may switch sides. ⌘ Read more
China, South Korea battle population woes as ‘children are not a must’, adding to economic peril
Japan’s shrinking population has long been an obsession, but its East Asian neighbours of South Korea and China are now facing the same problem as fertility rates, births and marriages fall, creating an economic headache for both Seoul and Beijing. ⌘ Read more
GitHub enables the development of functional safety applications by adding support for coding standards AUTOSAR C++ and CERT C++
GitHub is excited to announce the release of CodeQL queries that implement the standards CERT C++ and AUTOSAR C++. These queries can aid developers looking to demonstrate ISO 26262 Part 6 process compliance. ⌘ Read more
For China’s elite graduates, career dreams take a back seat to stability in coronavirus-hit job market
This year, a record 10.76 million college students are set to graduate, adding pressure to a job market economists are calling the most challenging yet for young Chinese. Many are setting aside career dreams for stability. ⌘ Read more
I have added an to my RSS feed. I’ll start including atom:updated as well, since the namespace is already defined.
All this time spent being grumpy about how adding my Now updates directly into the html page is uncomfortable, and it just occurred to me I can chug it into a text file and use cat.
RT by @mind_booster: This book can be your next (perfect?) TBR: The Story of Classic Crime in 100 (102?) Books by Martin Edwards ⭐⭐⭐⭐⭐ @medwardsbooks @poisonedpen @BL_Publishing #BookReview #Booktwt https://paulasimoesblog.wordpress.com/2021/07/05/this-book-can-be-your-next-perfect-tbr-the-story-of-classic-crime-in-100-102-books-by-martin-edwards-%e2%ad%90%e2%ad%90%e2%ad%90%e2%ad%90%e2%ad%90-medwardsbooks-poisonedpen-bl_publishing-bo/
This book can be your next (perfect?) TBR: The Story of Classic Crime in 1 … ⌘ Read more
I started adding a list of books that changed my life to my tilde at http://tilde.club/~melyanna/library/
Gajim: Gajim 1.4.1
Only a week after the release of Gajim 1.4.0, we’re happy to announce Gajim 1.4.1! 🎉 This release brings several fixes for issues you reported to us. Thanks for your feedback!
In order to make it easier to reach us for help, we added a new menu item “Join Support Chat” under “Help”. Clicking it will directly join our support chat at gajim@conference.gajim.org.
While redesigning the message window, we moved message timestamps to the r … ⌘ Read more
Honest Government Ad | 1 Week Left! ⌘ Read more
Made big markup changes on my website. Added tags for RSS where appropriate and fixed bad HTML on blog posts. Apologies for downtime.
Honest Government Ad | 2022 Election (Season 2 finale) ⌘ Read more
Honest Government Ad | Carbon Credits & Offsets ⌘ Read more
Honest Government Ad | We need to talk about the floods | with Sue Higginson ⌘ Read more
Honest Government Ad | The Floods 🌊 ⌘ Read more
Conservative leadership race turns nasty between Poilievre and Brown
Honest Government Ad | United Australia Party ⌘ Read more
Made a bunch of pretty much invisible changes to my twtxt.txt file 😋 Pretty much just added an avatar and description and stuff.
New year, new habits?!
Colin’s post yesterday inspired me to install the Loop Habit Tracker app. How did I not know about this app yet? Free, no ads, and even open source! ⌘ Read more
I have uBlockOrigin on desktop and https://vancedapp.com/ on android. I never see ads on YouTube.
On SmartTV however this would be a nice addition.
Honest Government Ad | Hung Parliament ⌘ Read more
@movq@www.uninformativ.de OK, to be more specific: it does to the point of adding twts to the correct file.
I’ve not checked actual file rotation. With max_twts_per_rotation set to 100 and me posting ~ once a week first roatation will take place in two years ;-)
Blue-teaming for Exiv2: adding custom CodeQL queries to code scanning
The Exiv2 team tightened our security by enabling GitHub’s code scanning feature and adding custom queries tailored to the Exiv2 code base. ⌘ Read more
Honest Government Ad | Net Zero by 2050 ⌘ Read more
Red Hat to hire less experienced engineers, pay less going forward
The Linux giant plans to keep a “flat budget” while adding 200 employees… by hiring fewer senior programmers ⌘ Read more
I believe Yarn assumes utf-8 anyway which is why we don’t see encoding issues
Are you sure? I think in #kj2c5oa @quark@ferengi.one mentioned exactly that problem. My logs say “jenny/latest” was fetching my twtxt for quark.
All I did to fix this was to adding AddCharset utf-8 .txt to .htaccess. Especially I did not change encoding of stackeffect.txt.
Honest Government Ad | COP26 Climate Summit ⌘ Read more
Telegram Ads
So Telegram now has ads. But unlike the ads from Google, Facebook or Apple, the ads are not personalized and much more privacy friendly. The ads simply consist of a maximum 160-character message with no external links and are displayed only in large public channels. ⌘ Read more
My nutritional supplements aim should be:
- 1 or 1.5 cups of lentils (or any beans you might like better).
- 2 or 2.5 cups of bitter greens.
- 1 cup of your favourite protein (or an egg), grilled, or fried with a little of olive oil.
- 1 or 2 tomatoes, or a handful if of the cherry type.
- No added sugars. If it is sweet, make it have fibre.
- No added salt (or very little and ionised), as salt is everywhere.
Related, I tried wild rice for the first time yesterday. It was different, in a good way.
@movq@www.uninformativ.de Yup. Added all the language ones, and bam, working like a charm!
It’s Tuesday, but somehow I have a Thursday kind of feeling… Whatever. I’m following an online auction for a couple of PDAs. The starting price is more than I’d be willing to pay, but there isn’t a single bidder yet. I hope that last, because the seller will put the ad out for a lower price if it does!
@quark@twtxt.netbros.com Answering to myself: it doesn’t. @movq@www.uninformativ.de, would that be something that it could be added?
@quark@twtxt.netbros.com I have removed the cron job, and added jenny -f to the small script that starts mutt with the .muttrc-jenny file. That way when I open, it refresh the feed before. Let’s see how it goes.
Gajim: Gajim 1.3.3
This release features improved Ad-Hoc Commands and brings back spell checking. Gajim 1.3.3 includes many bug fixes and improvements. Thanks everyone for reporting issues!
The Ad-Hoc Commands window has been ported to Gajim’s new Assistant. This unifies the look and feel with other actions using an Assistant and it also fixes some issues.
More Changes New- Profile: A NOTE entry has been added
- API JID for search.jab … ⌘ Read more
GitHub Advisory Database now powers npm audit
Today, we’re adding a proxy on top of the GitHub Advisory Database that speaks the `npm audit` protocol. This means that every version of the npm CLI that supports security audits is now talking directly to the GitHub Advisory Database. ⌘ Read more
Honest Government Ad | AUKUS ⌘ Read more
GitHub Enterprise Server 3.2 brings new color modes and added security capabilities
GitHub Enterprise Server 3.2 is available today as a release candidate. With this release, we’re shipping over 70 new features and changes to improve the developer experience and deliver new security capabilities for our customers. ⌘ Read more