@prologic@twtxt.net That is cool. The name is cool. Like saying āyarn ballersā but that sounds weird and cool at the same time
GitHub Actions: introducing the new, larger GitHub-hosted runners beta
Now your team can spend less time managing infrastructure and more time writing code. ā Read more
GitHub Actions: introducing the new, larger GitHub-hosted runners beta
Now your team can spend less time managing infrastructure and more time writing code. ā Read more
How to Build and Run Next.js Applications with Docker, Compose, & NGINX
At DockerCon 2022, Kathleen Juell, a Full Stack Engineer at Sourcegraph, shared some tips for combining Next.js, Docker, and NGINX to serve static content. With nearly 400 million active websites today, efficient content delivery is key to attracting new web application users. In some cases, using Next.js can boost deployment efficiency, accelerate time to market, [ā¦] ā Read more
My August ā22 in Review
And now August is over, time for a new monthly review. ā Read more
Universe Price Tiers
ā Read more
Universe Price Tiers
ā Read more
In about four monthsā time, if the replacement doesnāt ship from IndieGoGo before then, I will have been using my current smartphone for five years.
**In 2011, @MightySieben in Leiriaās castle for #Entremuralhas .
Today he returns to the castle (this time in Penaās church) for the kick off concert of #Extramuralhas .
Concert in less than two hours, and I canāt wait!**
In 2011, @MightySieben in Leiriaās castle for #Entremuralhas .
Today he returns to the castle (this time in Penaās church) for the kick off concert of [#Extramuralhas](https://nitter.net/search? ⦠ā Read more
video: Braxe + Falcon ā Step By Step (feat. Panda Bear)
As if we didnāt love this song enough already, Braxe + Falcon go ahead and drop the heartwarming official video/one of the sweetest skate vids of all time, featuring 12-year-old pro skater Ginwoo Onodera, who happens to be the youngest athlete ever to sign with Nike⦠[Continue readingā¦](https://www.gori ⦠ā Read more
Iāve been time-tracking for 1900 days :D
** Miscellaneous this and that **
Since my brain injury (which Iāve since learned can be called anāABIā orāacquired brain injuryā) Iāve noticed that I have trouble focusing on programming tasks; Iām able to do what I need to do for work and family but, when it comes time for hobby projects Iām just gloop. Totally oozy.
Because of that Iāve been drawn to do more reading and game playing, but also still wanna codeā¦Iāve found that it is easier to use moreābatteries includedā kinda languages, namely scheme, over what Iād ⦠ā Read more
Shouldnāt it be called Metacountries? After all it is only available to one country at a timeā¦
Shouldnāt it be called Metacountries? After all it is only available to one country at a timeā¦
nitter.net/ChrisJBakke/status/1559696878530449418#m ā Read more
The next step for LGTM.com: GitHub code scanning!
Today, GitHub code scanning has all of LGTM.comās key featuresāand more! The time has therefore come to announce the plan for the gradual deprecation of LGTM.com. ā 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
}
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
Tech Journalism Roundtable - July 25, 2016
Watch now (67 min) | With some of the most prolific Tech Journalists working at the time. ā Read more
meet lol, my new website generator!
meet lol, my new website generator!2022-08-08
Iāve been pretty busy lately, so I havenāt had a lot of time to explore
computers, which is what I love doing. In the last few months, Iāve been trying
to fight back against busyness by writing a new website generator after everyone
goes to bed. I canāt recommend doing this, because it gets exhausting after a
while, but it gives me my kicks and makes me happy.
My old website generator, [wg](https://git.m455.casa/w ⦠ā Read more
Release Radar Ā· July 2022 Edition
While some of us have been wrapping up the financial year, and enjoying vacation time, others have been hard at work shipping open source projects and releases. These projects include everything from world-changing technology to developer tooling, and weekend hobbies. Here are some of the open source projects that released major version updates this July. [ā¦] ā Read more
This is, perhaps, the greatest bug report of all time. IRC clients should specify a Gentoo-specific username: https://bugs.gentoo.org/35890
Gitea Container Registry
I am a Gitea fan! I have been for some time now. But itās always amazing how fast new features are implemented in the self-hosted GitHub alternative. ā Read more
My July ā22 in Review
In a moment, the next month is already over. After June, itās now July. Time for a short monthly review. ā Read more
@prologic@twtxt.net Yep, encountered a few unanswered ones lately, too. But most of the time I canāt complain.
@prologic@twtxt.net Well, I have to confess that whenever a Stack Overflow post pops up in the search results of my least mistrusted search engine the answer(s) there are spot on and exactly what Iām looking for most of the time. Of course there are the occasional exception, but Iām actually very happy with what I dig up there. Sometimes I need to scroll through a few answes to get what I need, but in general the first answer appearing below the question is fairly good. There are super bad answers, no doubt. But you can tell them apart immediately and just skip them right away.
@movq@www.uninformativ.de From my limited experiences in two companies I can anedoctic tell you, that what we developers told our support work mates after analyzing things and what they replied back to the enquirers was not always the same. That also happend when we gave them answers in written form. Always super nice support folks, no a single doubt, but their basic technical knowledge was pretty much non-existent. And plenty of them didnāt even really know the softwares theyāre supposed to support. Granted, those were not easy programs, one was indeed super complex. But if they use them on a daily basis for years one would expect that they know them quite well. At least the main features and workflows. We also often had to tell them basic stuff several times, which was quite a bit frustrating for both sides.
But, I was super glad, that we had them in the front row. You wouldnāt believe what crap queries they had to deal with and what utter bullshit they kept off our shoulders. Sometimes people wrote really offensive e-mails for no reason. Holy moly. I wouldnāt want to trade with them, not in a hundred years. Lots of my developer work mates, however, didnāt value our first level support at all. I mean, I totally understand, that after telling the same things over and over and over and over again it pisses you off, but treating them in a way they feel like shit, doesnāt help either. It only makes things worse. I had the impression that there was a slight war between development and support.
One thing that was totally stupid, is that the POs didnāt listen to improvements and suggestions on how to make things easier for the support team and also all our users. I mean, support has to deal with this software all day long and also get the same questions about workflows and stuff thatās too complicated or unintuitive. So a lot of things were really low hanging fruit to improve everybodyās live. But when they suggested anything, the POs always declined it, nah, itās the supportās job. Period. A few times I teamed up with the support work mates and told the POs the same, the support team was suggesting and then it was accepted without hesitation. So that clearly shows there really was a two-tier society.
In my current project we donāt have a support team, so we need to handle all the support queries ourselves. In that regard I miss the old project. But luckily, itās basically just other developers who are needing our help, so thatās fairly okay.
@movq@www.uninformativ.de @prologic@twtxt.net I tried to think about it once more today, but still no luck yet. However, I reckon that when I try to grasp something in a very focused way, then I imagine how I would loudly read it (but actually donāt) and hear myself. Iām quite certain about that. In more extreme cases I even noticed my lips slightly moving, but not creating any sound. But most of the time I donāt think thereās a voice. The tricky thing is, if I donāt think about how it works in general, I donāt know. And if I try to think about it, it feels like introducing tons of measuring errors. I just found Schrƶdingerās cat in my brain.
**We still didnāt have a (much needed) conversation about how to prepare for the next pandemic, so that next time we wonāt end up with such ill-designed contact tracing apps.
But it seems that first we have other conversation we can no longer postpone:
https://www.wired.com/story/covid-19-data-switch/**
We still didnāt have a (much needed) conversation about how to prepare for the next pandemic, so that next time we wonāt end up with such ill-designed contact tracing apps.
But it seems that first we have oth ⦠ā Read more
@prologic@twtxt.net Hahahaha, great typo, I had to laugh! Shot probably doesnāt feel too much different in your situation right now. :-D Jokes aside, get well mate!
Maybe call in sick and have a good rest. Sleeping most of the day and drinking a whole lot of tea and/or water sometimes makes a big difference for me when Iām knocked out. Iām convinced that reporting sick a day even speeds up the recovery and is a clear win in the end. Considering the reduced productivity when being ill and all the additional errors one is going to make for several days and the time spent afterwards to fix them or rework stuff, oneās better off to donāt to anything for one or two days and then take that time to really rest and give the body the time to get things sorted. At least in my limited and biased experience. Your mileage may vary, of course might be different for other folks.
@prologic@twtxt.net Thanks mate! Hahaha, I can assure you, Iāve shown these places a hundred times already. :-D But Iām glad that my selection seems alright and itās not getting boring over time. Well, to be fair, the lion is a fairly recent addition when they replaced the old benches and fenced off a steep trail over a meadow, so mountain bikers donāt ride down this path anymore. The tree stump is a knot in a bench timber. :-) The carriage bolt fastens the seat to the frame.
Went on a hike this evening and brought my camera along. The 26°C felt much nicer than yesterdayās 33°C. I perfectly met a mate who also wanted to go for a quick walk, just like we planned it. The first half hour we went together and then I parted for the longer route to the local mountain. The sunset was absolutely brilliant, but the aftermath turned out to be very boring.

Photo 9 shows the entrance to a wasp nest next to the bench in the previous take. The greenery blocks most the view, though. Several individuals took off and returned. But it wasnāt too crowded. Nothing like at a typical honey bee hive at this point in time
What I found quite strange, there was quite a lot of smell of dead meat and butyric acid in the air. Hello hot summer. Both in the forest as well as in the village. I think I noticed those nasty odors at six or seven different places. Never experienced that before. Not to thaaat extent.
@movq@www.uninformativ.de @mckinley@twtxt.net Yup, some people do. I tried several times to figure out whether I also have some imaginary voice in my head or not. And I canāt really tell. My best bet is that it depends. Generally there is no voice or just a very faint one. For very complex stuff I think my brain plays some audio. But itās very hard to tell. If I try to think about it, it feels super weird in my head.
@movq@www.uninformativ.de Now that is a cool thing. Showing the work time. I need something like that, too!
@prologic@twtxt.net Haha, of course, no worries! :-) Yup, I thought to try Go for this web application this time. REST API and web UI would be both needed in my opinion. I have at least two mates who would need a UI instead of a programmer-friendly interface. :-D
Itās far from complete, but I started writing something down: https://git.isobeef.org/lyse/kraftwerk2
@prologic@twtxt.net Simpler is better even most of the time, Iād say. :-)
@movq@www.uninformativ.de I always put it in the drawer of my desk cabinet when Iām done. Thatās part of my quitting time ceremony each day. :-)
I wonder if KISS sets are still a thing. I loved making them a very long time ago.
I seem to have way more ideas for things I want to write when Iām out and about than when Iāve got some time to write at the end of the day. I think this has been going on for months with multiple thoughts Iāve had.
Time to go to sleep, hoping I do get any given how how it is here right nowā¦
Marci ā Pass Time
Marci is out August 5th. Video filmed + edited by Marta Cikojevic.
Continue reading⦠ā Read more
In reply to: A simple mess
This is also something people keep getting wrong about Markdown as originally presented. Markdown isnāt a format. Itās a convenience tool that helps you write some of the boringest and commonest parts of HTML easier, and you can easily drop into more wonky HTML at any time.
Yes yes yes yes yes yes! ā Read more
My connecting train was cancelled, so I decided to go for a night walk with a bit of a detour. It was absolutely worth it, saw a rabbit in front of me crossing the road and the clear sky in the forest made the stars pop nicely. Also super quiet once I left the city and the overgrown paths in the woods were incredibly dark. It was very, very hard to even make out the way. Luckily, Iāve walked it many, many times, so anticipating turns was doneable. Quite an adventure! Took me about 1:15 hours to reach home about 15 minutes ago. So I wonāt make it to todayās call, sorry mates. Iāll hopefully sleep like a rock in a few minutes.
āLinux Sucks 2022ā is now free for all to watch!
āLundukeās enthusiasm is infectious!ā, āI laughed so many timesā ā Read more
Iām excited for the travel Iām going to be doing over the next few days, but the downside is that Iām not going to have much time to sleep.
All the scripts on my Gemini capsule (except chess) have now been rewritten using Python and storing data in a SQLite database. This is the first time Iāve ever worked with database in a āproductionā environment, and Iām inordinately excited.
Spent the afternoon updating my tilde and now it is time to unwind with some meditation and a book!
Donāt worry, @prologic@twtxt.net. :-) Except for one other I couldnāt do that with all my other hiking mates. Not even close. To complicate things even further, there were some rougher spots and all the inclines would slow down progress substantially. At least one hour on top, probably even two.
To be fair, when I started all the hiking a few years back, my endurance was really low, too. I couldnāt have done that back then in this time. I went out for half an hour to an hour, then I was whacked. Nothing comes from nothing.
My mate and I spontaneously decided to go for a longer tour today in 29°C heat. We ended up hiking 23 km in 4:30 hours. I had two liters of mineral water in my backpack and we bought a bottle of cherry limonade each on the way in. In the end we opted for pear limo at the same self-service fridge. What a great invention these small vending machines and self-service huts are! In Germany shops are closed on Sundays, so we would have needed to find an open restaurant (plenty didnāt survive Corona) with some detours.
It was my first time on that particular terrain. We went through some beautiful and quaint forest paths with scenic views. I forgot to put my SD card back into my camera, so no photos until my mate will send me his.
Now my feet a cooling off in a bucket of cold water. Superb.
@will@twtxt.net Oh, that huge sucker! Erie has the area of an average federal state here. You could put our biggest lake 48 times into Erie, areawise. Volume, however, only 10 times to fill it up. Truly mindblowing.
Yesterday, we had a heavy thunderstorm in the evening. At first it wasnāt too bad, just thunder in the distance and then a few drops of rain for at most five minutes. That was it. Alright, I thought, itās over, let me call a mate and walk to the dairy farm. The heavy clouds looked awesome, a bit threatening but mostly harmless and just beautiful. We decided on a small detour to the home made ice cream vending machine and got ourselves some expensive, but very yummy pineapple/mint, yoghurt and raspberry/basil tubs. Mint was super strong, had to eat three spoons of some other flavors to actually taste it. A few spoons in and then the thunder rolled in from nowhere. So we quickly headed for the dairy farm while eating our ice creams. Half way there the sky floodgates opened and we took cover under a tree at the local playground. A minute later we decided to climb up the slide tower, because it had a proper roof. A tiny bit of hail cam down, but nothing serious.
About 15-20 minutes the rain stopped and the thunder and lighning rolled past. So we continued our journey and I finally filled my two one liter bottles successfully. Every now and then it drizzled a little bit through the forest. We reached our homes and a couple minutes later rain hit again. Thunder and lighning went crazy. The sky lit up every few seconds and this continued through half of the night.
Right after I hung up to meet my mate, another mate called and reported a few villages north of us they experienced hail sized a bit under golf balls. But he luckily managed to get the car in the underground carpark in time.
Today, it rained the whole morning. This was great since the temperatures stayed below 20°C, so my walk was a real joy. Itās going to get close to 30°C tomorrow, though, gnarf, ƶrks, bwƤh. :-(

