Time Test
Read the first 50 pages, if the author hasnāt earned your attention by then, you can stop reading. Youāll never read all the good books anyway, donāt waste your time on the bad ones. Reading fast, reading well, and reading widely (2020) | Hacker News
ā¤ļø š¶: As Time Goes by by Yoon Mi Rae (T)
now is a good time to sit back and read
GoToSocial seems like a promising alternative to Mastodon. Itās written in Go (š in my opinion), lightweight and pretty good documented so far. Itās still āalpha softwareā but seems to make great progress. In the past, I self hosted a microblog.pub instance and then after some time without any Fediverse profile other than my blog, which has ActivityPub support as well, signed up at Fosstodon to be able to reply to blog comments from the Fediverse. I already set up an instace of GTS, but will probably wait to use it ⦠ā Read more
Gear-up and unlock the newest GitHub Global Campus features
Calling all students and teachers! With semester change coming soon, now is the time to start using the latest features within GitHub Education and Global Campus! ā Read more
Maxime Buquet: Versioning
I finally took time to setup a forge and some old drafts turned up. I am
publishing one of them today as is even though itās 4 years old
(2018-08-07T13:27:43+01:00). Iām not as grumpy as I was at the time but I
still think this applies.
Today I am grumpy at peopleās expectation of a free software project, about
versioning and releases. I am mostly concerned about applications rather than
libraries in this article but I am sure some of this would apply to libraries
as well.
Today we were discussing ab ⦠ā Read more
Arnaud Joset: Updates: chatty server and HTTPAuthentificationOverXMPP
Itās been a long time since I updated this blog. It will be a short update post about two projects.
The first is chatty_server, a small XMPP bot I use to interact with my server. It allows me to get information about the CPU load, traffic, weather etc.
It also has a small feature to get reminder messages. There was a bug that allowed anyone to spam reminders. Anybody can add the bot to their rooster and could create random reminders t ⦠ā Read more
Comment on Ubuntu Gets New Themes, Logo, Boot Screen, Indentity and So Much More! by Ubuntu Has a Brand New Logo ā OMG! Ubuntu! - 7th Information Technologies
[ā¦] in āUbuntuā as part of the process.Why revamp the logo at all? Ubuntu last underwent a rebrand in 2010. But Canonical reasons that since Ubuntu and the technologies that underpin it evolve over time, so [ā¦] ā Read more
Hard times create strong men. Strong men create autocratic dynasties. Autocratic dynasties create supernumerary bureaucracies. Supernumerary bureaucracies create eunuch castes. Eunuch castes create drama. Drama creates Heavenly displeasure. Heavenly displeasure creates hard times. Book Review: 1587, a Year of No Significance | Hacker News
@prologic@twtxt.net That is confusing and no one will understand how to use it. But I did not even know UTC means Coordinated Universal Time. We need to make a revolution to get rid of timezones on the internet and just use UTC
@mckinley@twtxt.net We need to make something like computer time or something like that so people using a computer can say like lets have a chat thursday at 7:00 and no timezone things.
@ocdtrekkie@twtxt.net That is cool that there is no tpic. Its not like people on these open platforms have to use linux or some free and open os. Anyone can use whatever they want to. Yarn is just a web ui for twtxt and the os does not matter. I canāt say on for long time at midnight and I left before you started.
@movq@www.uninformativ.de Did you time travel into the future to post those? Anyway that is weird and if the system clock is fine then the posts should more be in the future.
@ocdtrekkie@twtxt.net If your doing something like a chat with people from twtxt and yarn I would join some time if I can whenver you do it next.
@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. :-)
