# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 6510
# self = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=5134
# next = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=5234
# prev = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=5034
@prologic Yep, when I'm searching for "monkey", I get this error. https://search.twtxt.net/search?q=monkey&f= Looks like the data model might be corrupted or so.
Looks like the search engine is broken, @prologic:

> Error error parsing created field: parsing time "1713565714000000000" as "2006-01-02T15:04:05Z07:00": cannot parse "565714000000000" as "-"

And now it's even offline according to Clownflare…
Hahaha, _of course_ @prologic created his own monkey language fork. Nice! :-)
Hell yeah! Thanks to @movq's asciiworld I was able to to just spot the ISS. And the coolest thing ever was a small shooting star that came down right in front of the ISS when it just passed Ursa Major! :-) Holy cow, how fucking cool is that!? Mega awesome! Thanks mate for this brilliant program! <3 Absolutely worth every minute you spent on it! Thank you sooo much! :-) I'm super hyped right now. I really gotta go to bed now, though.
@mckinley Oh yes, back in the days, Firefox did percent-encode on copy. I remember that I was positively surprised about that cool feature. Not sure when they ripped it out. :-(
I just came across seven fireflies in total tonight, two females. However, I failed to get them even in frame. They were sitting pretty low and with all the hundreds of leaves around, I couldn't position the camera so that they weren't always in the way. You move around two centimeters left to right or up and down and couldn't see them anymore. The display was also waaaay too bright so spot anything. I really do need an analog view finder. The second female was hiding somewhere in 07.

I played around with my torch's green light and the camera for the first time. I have to practise and learn quite a bit. The tripod was definitely needed. With full zoom, the tripod was not rigid enough, though. Pressing the trigger button moved the cam quite a lot.

You might be able to make out Ursa Major in 06 in between the pixel errors. The clear night sky was very beautiful, I enjoyed it a lot. I also saw a bunch of satellites flying around. No shooting star, though.

https://lyse.isobeef.org/nachtwanderung-2024-07-07/
@prologic If you lower your expections to -10 or so, they may turn out alright. :-D
@prologic No, my camera is way too shitty in the darkness. But let's see if I just give it a try tonight and bring a tripod.
In comparison to the last times, today's firefly hunt was rather mediocre. Just 14 specimens. However, even ten females sitting in the bushes and only four flying males. Certainly a female record, thus, can't complain. I also came across five, six toads. And I heard a deer escaping into the woods. Couldn't see anything, but it sounded like hoofs on the asphalt in front of me.

The rain finally got me, it was forecast to arrive later. Oh well.

Loud music from town blasted uphill into the forest. And fireworks reverbed with loud bangs over the hills in the middle of nature, holy crap!
@aelaraji @prologic @bender They're also AI-ing this, so I doubt that it really works. Just another shit show to lure more people into routing the traffic through Clownflare in my opinion.
@bender I cannot accept that kind gift! :-D I enjoy the drizzle at 12°C.
@movq Sure, they were forecast, but they never actually arrived here. :-)
@movq Wasn't too much rain around here from Friday onwards. Just a little bit. I didn't mind it either.
@movq Oh yes. Compare that with an AppArmor or SELinux profile. Awful! The idea of just putting it right in the program itself sounds very appealing.
@movq @prologic Yup. And we're back to 16°C. That's how I like it.
@movq Despite the audio sounds like is was recorded with a potato in a bathroom, this is a nice talk! I enjoyed it and learned something.
@movq At least that looks really cool! We didn't get any thunderstorm at all.
@movq I hear you. We had a full day outside with the scouts. A scouting game in the morning to early afternoon. Luckily, I had a station in the forest. Then cake in the afternoon, barbecue and salad in the evening. But 33°C were just totally terrible. The sweat was running down in streams. I turned seven liters of water and apple juice into sweat in no time.

It's itching everywhere, mozzies ate me alive.
@movq Phew! Quite the opposite from ideal, but could be worse. Finger's crossed that this doesn't repeat.
Thanks, @movq, it helped. :-) I'm happy to report it was just a quick storm, no water ingress.

Oh damn, water being pushed in through cracks in the walls? Holy crap! O_o That doesn't sound confidence-inspiring at all. How much water managed to get in? Any damages or just a moist floor/walls?
@movq I also do use both clipboards all the time. I can't live with just Ctrl+C/V. Select and middle click is sooooooooo handy. Despite I'm considering myself mostly a keyboard user.
@movq The inlet has to be repaired. But I'm not gonna do that myself. You can imagine how easy it is to get tradesmen these days.

And here's the next thunderstorm lining up. Luckily, the rain barrel upgrade is completed. Also widened the funnel so that water running along the cable to the left is also caught. While typing, the rain gets stronger. Gotta check now. ;-)
It's about time to move while we still can! We had another heavy hail storm. 10-15mm diameter on average, maxing out at about 25mm. Oh boy. And my funnel contraption into the bucket at the cables in the basement were dead on.

[![Funnel into bucket](https://lyse.isobeef.org/tmp/wassertrichter-in-eimer/01-vorschau.jpg)](https://lyse.isobeef.org/tmp/wassertrichter-in-eimer/01.jpg)

Two larger streams were pouring out of the now porous looking mortar around the cables. Cool fountain in the basement. You would have thought that the right one was the bad one, but no, that one only dripped. I caught it just in time, not even half a minute later and the bucket would have spilled over. I estimate 60-75l water in total were about to mess up the floor again. Crisis averted.

[![Cables enter the house](https://lyse.isobeef.org/tmp/wassertrichter-in-eimer/02-vorschau.jpg)](https://lyse.isobeef.org/tmp/wassertrichter-in-eimer/02.jpg)

Gotta upgrade the bucket to a rain barrel until this is fixed.

Shortly after, I heared the fire brigade responding a couple of times.
@movq @prologic I'll join you at either place. :-)
@bmallred Oh my goodness, what an experience! I'm glad you were not hit and I hope they got them in the end.
@bender Oh this sounds really cool! :-) I never caught them, only watched 'em. But I have to admit that I wanted to catch them barehanded this week. Didn't try, though.

I just returned from another trip into the forest. This time, I went deeper, there was some beautiful firefly activity. When I checked on yesterday's spot on the way home there was barely anything. But I saw some presumably females sitting on the leaves in the shrubs. I didn't notice a single one yesterday. Their illuminated parts were really huge compared to the flying males. The biggest was the size of a small finger's nail (contrast that with a tiny shining dot of maybe 2-4mm max). I could even see the three distinct sections being lit up. That must have been a common glow-worm (großes Johanniswürmchen), I'd say: https://de.wikipedia.org/wiki/Datei:Lampyris_noctiluca.jpg The others might also just have been the smaller species. I don't know.

There were also some toads on the paths. A very lovely evening stroll. I'm very happy now. The dayjob's stress is completely forgotten.

I really do enjoy that I am in the woods in about 10-15 minutes afoot. The most dangerous animals here are ticks and then come the boars. And that's really it. Well, mozzies might be in the list, too. Some adventive ones can carry diseases, luckily, I haven't encountered them here yet. Today, a bunch of gnats wanted to eat me. Yesterday, I had my peace, though.
I just went into the woods for a bit over an hour. A few hundred meters in and I a found a brilliant spot. 20-30 fireflies in view all around me all the time. I loved it! As bonus, a bat was hunting over my head for two, three minutes while I watched the many glowing dots. On the return I could even see one or the other firefly over the meadows near the edge of the forest. But clearly, most can be met _in_ the forest. Guess what I will be doing tomorrow evening. :-)

I'm now really looking forward to a night hike soon.
Yesterday, I paid Duck Memorial another visit: :-D

Actually a war memorial on Mt. Hohenrechberg, but it always looks totally like a duck to me

It was a really nice hike, there was hardly anybody outside. The weather wasn't bad at all, around 22°C and cloudy most of the time. The drizzle got me a few times, but it wasn't terrible. It just raised the humidity. A bit more wind would have been nice, it was very calm, even at the summits.

On the way there I had to kill a tick that I found on my trousers. Those bloody suckers! What benefit do they bring nature? At home I checked and couldn't find any others. Phew.

On the way back from Mt. Hohenrechberg I saw a deer and hare. It's been years that I came across hares in the wild, so that was really cool. I decided to watch the sunset from Mt. Hohenstaufen, so I took a small detour. Absolutely worth it:

Sunset

A group of hippies eventually joined me at the sunset lookout, lit joss sticks, played some weird music on a metal pipe thingy (a bit like a single windbell) and sang a sun dance song. Said song had gone missing for a very long time and was recovered only lately, they told me. Okay. Some other really crazy dude told us that the mountain we're on had been raised in the Young Stone Age. That period where harvests were plentiful and people had a lot of spare time. WTF!? I mean they all were super nice and friendly and talking to them was also actually lovely, but what… err… interesting mindsets.

On the final return I saw another three deer on a paddock. And now for the very, very best part of the whole trip: in the forest I encountered 83 fireflies before I stopped counting. In the end it must have been 500-600 in total. One even nearly hit me in the face if I hadn't ducked at the last second. :-) Man, this was soooo fricking amazing! Fireflies for round about 1.5km! Didn't even try to take photos in this darkness, though.
@movq @bender @prologic Lol, that's the new shadow dirt art project in the park. :-)
@prologic Yes! Sadly, I have the feeling that this is rarely adhered to in the wild.
@prologic @movq Thanks, mates!
@prologic Visiting the login page would give you something like this:


Username: _<focused field>____
Password: ____________________
[x] Remember me (Enabling this feature will keep
    you logged in, even after closing your browser.
    Do not active this setting on shared devices.)
[Login]


The "remember me" checkbox could be already activated by default. This would benefit people like @bender.

An alternative would be to make the session lifetime configurable in the user profile. So bender would then set this to forty-two years. :-) Definitely something for power users who know what they're doing. More dangerous for the average Joe, though.
Not too shabby! We also got a rainbow, but I didn't capture it. https://lyse.isobeef.org/abendhimmel-2024-06-21/

Sunset
@prologic How so? Which part did I manage to confuse you with?
@bender It sure is no joke. But probably more fulfilling when looking back and seeing what has been accomplished that day.
@bender You gotta upgrade to triple-glazed windows.
Somebody in the neighborhood is exercising trumpet or so. What a squawking. Luckily, just after I finished my nap.
@bender @movq Coold dude! Looking at the activity graph, it appears like he's doing more useful things since the very end of 2021. :-)
@prologic Nope, we cannot.
@prologic @eldersnake I'd avoid the inverted logic. Checking a setting to disable a feature always feels wrong and confusing to me. I'd rather suggest to enable the checkbox by default. But I'm with you, an explanation what it does is definitely helpful. Maybe something along those lines: "Enabling this feature will keep you logged in, even after closing your browser. Do not activate this setting on shared devices."
@prologic Careful, you risk being hit by a brick. :-D
@bender I agree. For learning, reading is heaps better. There's also the very powerful Ctrl+F that I do not want to miss.
Nice long rant about AI: https://ludic.mataroa.blog/blog/i-will-fucking-piledrive-you-if-you-mention-ai-again/
Can't watch this. What the hell, why would you put a silly chat on the screen!? Distracting af.
@prologic Didn't understand anything. Luckily I don't have to waste my time with this web hipster shit. :-D But that's awesome! https://www.youtube.com/watch?v=ieqsL5NkS6I
@prologic Absolutely! I sure ate it after cleaning up the giant mess from door and floor. The good homemade apple sauce! :-(
@prologic I do NOT claim to be an expert in that realm. I've seen different things being implemented in the guise of "remember me". But I reckon the most common scheme, when this checkbox is activated, is to issue a dedicated, long-lived refresh token in a login cookie. I'm sure it is known under several different names. This "remember me" login cookie is separate from the actual short-lived session cookie.

Part 2 of this answer explains it fairly well: https://stackoverflow.com/a/477578 Also, this was a nice read: https://web.archive.org/web/20180819014446/http://jaspan.com/improved_persistent_login_cookie_best_practice

It depends on your threat model, but the use of public computers in libraries, internet cafés or similar is probably the most relevant here, when arguing against activating "remember me". These days, shared computer use is declining I'd assume. With twtxt being a niche for more computer-affine folks, I'd reckon this threat is not that high up the list. On the hand, you want to bring yarnd to the average non-nerd user, so this threat might actually rank more important.

It's probably okay and safe enough to remove "remember me" entirely and just issue a long-lived session cookie and be done with that. Optionally, power users or the administrator could benefit from configurable cookie lifetime(s).
@prologic Haha, my brain thought, that loopback address is missing a zero. :-D
Oh come on. The waffle fell off the plate and hit the door and then the floor. Of course with the apple sauce side each.
@bender Hihihi. ;-)
Just bent two clips or hooks from wire for my hat, so that I can attach a chin strap. Now the hurricane gusts don't blow off my hat anymore. Or so I do hope. :-D I just have to find a decent looking leather strip. The brown string I tried out quite closely matches the decorative hatband's color, but it's a bit too thin, could be more comfortable.
Those ducks belong to someone in town, @movq. Oh, sweet, I didn't know what that yellow bird was called. Thanks! :-)
Thank you, @prologic!
Went on a great 20km hike to the Wäscherschloss (lit. Launderer Castle) with my mate. Unfortunately, the castle was closed (only opens on Sundays and public holidays), so we had to peek under the door with our cameras.

[![Wäscherschloss](https://lyse.isobeef.org/wanderung-zum-waescherschloss-2024-06-15/33-vorschau.jpg)](https://lyse.isobeef.org/wanderung-zum-waescherschloss-2024-06-15/33.jpg)

Sunny and a few clouds, very windy, my hat blew off a few times, perfect 20°C hiking weather. Could have been a few degrees less, though. We walked through some beautiful scenery, especially when it is lit up by the sun. Really gorgeous views and paths. I should go over there more often. Last time was almost exactly two years ago.

The one steep foot path in the forest had 60cm deep canyons from the flood two weeks ago. Absolutely crazy! The burried post cable caution tape even was revealed. That path didn't look like a path anymore at all.

At home I had to remove a tick. Those fucking bastards!
@movq Oohhh, okay! Way more often than I thought. It's similar to oiling my handplane. Every time it squeeks or the friction gets too much (just the opposite ;-)), I pull the plane sole over my "rag in a can" oiler.
Very humid 20°C, cloudy and partially raining. That was today's weather when we went into the woods and paid or backyard mountain a visit: https://lyse.isobeef.org/waldspaziergang-2024-06-14/ Not very many folks around, looked like they all feared the liquid sunshine. The visibiliy was fairly mixed. Pretty clear in the west, we could see the Stuttgart TV tower 38.55km away (04). But very hazy to the north (03) when a rain cloud appeared.

Chestnut face nailed to a tree stump
@prologic Thanks mate! <3
@movq How often do you apply it?
@movq Haha, cool! :-) Also funny how the red container makes it completely change color.
@bender Waaahhh! Even just posting without editing?
@prologic This is how you can identify the duplicates in the feeds (storing the files first for potential further analysis later on without having to redownload them): cd /tmp; for u in prologic bender shreyan; do echo $u; curl -s https://twtxt.net/user/$u/twtxt.txt > $u.txt; uniq -cd $u.txt; done
@prologic Have a look at the raw feeds:

* https://twtxt.net/user/prologic/twtxt.txt
* https://twtxt.net/user/bender/twtxt.txt
* https://twtxt.net/user/shreyan/twtxt.txt*
Duplicates everywhere! Sigh.
@movq Right, this makes sense. Also, @bender reported the same over in https://twtxt.net/conv/ilupk5q. That whole conversation looks like that for me: Bender edits in red, notices in fuchsia (probably edits and leaves the message unchanged), and prologic acknowledges in orange. This conversation over here is marked in lime. Yeah, tt doesn't filter out duplicates. Maybe I should implement that.
@prologic I only notice that you post duplicates just like this one. This started few days ago.
I didn't know I wanted to watch a half hour lecture on over center mechanisms. But this was time very well spent with This Old Tony explaining them. Worth every second, just as always, highly recommended: https://www.youtube.com/watch?v=Ia3Iieejyg8
@bender Yes, they're on very different diets. ;-)

Hell no, I don't want to trade weathers. :-D Our humidity was around 60%.
These 24°C were brutal. The cow in 03 was standing in the bog, not sure why she liked this brackish water. It sounded "tchlk, schlk" when she moved around in that mud (what do you call that?). Some of these canyons, like 14, are over 30cm deep. Wow. In 15 at a height of two meters, a torn rag hangs in the tree in the creek bed. It's crazy to see how high the flood came in 16 with all the washed up stuff in the hedge.

https://lyse.isobeef.org/waldspaziergang-2024-06-07/

Hairy caterpillar
@movq Yes, classical "Abraummulden" and "Abrollcontainer". I haven't heard of any numbers yet, but I imagine that 100 houses have been affected. Probably more.

Here are a few photos: https://eislingen-online.de/_artikelanzeige.php?bearbeiten=_2024/2024_1150

But it's worse downstream in Ebersbach/Fils, if you want to read up on that. That's where the noise barrier collapsed onto B10 (I was mistaken on that regard, though, it wasn't the real river, but an overflowing water retention reservoir or something like that uphill that created a giant river, rushing down the streets and gardens, ripping out the accustic barrier). When water levels slightly dropped on Sunday evening, everybody here thought that we survived with only small damages, if at all. So the local fire service responded to help in Ebersbach where it had really escalated. However, they had to return shortly after, when a massive thunderstorm surprised us with very heavy rain and "land submerged" was reported back at home.
Went down to the creek and there's a skip in front of every house. Oh dear. Normally, the creek is a few meters below the tree line in 01-03. But as you can see, it went over the fields, several tens of meters wide.

Three days after the flood

The fire engine house next to the creek was also flooded. But the operational capability of the fire brigade was not affected as they already responded.

It's crazy how the relatively shallow field road on top of the hill looks. It was already in bad shape, but that's now another level. The drainage area is rather small, but tons of gravel is now in the meadows. 10cm deep holes and ditches in the road. The very loose gravel is difficult to cycle and walk on.
@prologic Yeah, l/m² is very common here. But I've also seen mm.
Between Friday 8am and Monday 8am it rained 161 liters per square meter. Our weatherman in town measured alone 40 liters on Sunday between 22:30 and 23:45. On average we get 92 liters in total in the entire May and 96 liters in June. It was a lot, but i didn't think it was actually that much. Wow!

Down in the town a lot of houses have been flooded. The municipality provided containers for all the garbage. From what I read it was the smaller creek, not the larger river that went absolutely berserk.
@prologic It was not the river water, but the rain water that found its way into the basement. It rained for a few days straight. So the ground was completely saturated at one point in time. Sunday to Monday night there was a ton of more really heavy rain, new water could not sink down anymore, so it leaked through the tight hole where the cables enter the house in the basement. That's roughly a meter above the basement floor. A tiny, tiny bit of fine sand accumulated on the floor beneath the hole.

I didn't even know that water can get through that hole in the wall, looks completely sealed to me. But as we learned, it is not sealed enough. I didn't see it flowing in, I just noticed the standing water on Monday morning.
@movq Thanks, all good. Could have been way worse. Time to work on the shelf. :-)
@movq Ein absolutes Gesamtkunstwerk. :-D Schon ne Qual, da zuzuhören. Ich habs durchgehalten, uff. ;-)
Holy crap, downstream the river broke through a noise barrier: https://www.tagesschau.de/inland/regional/badenwuerttemberg/swr-ebersbach-100.html
The river upstream kissed the hundred-year flood level (462 cm) the other day. https://www.hvz.baden-wuerttemberg.de/pegel.html?id=00265 (To me that link looks broken, but maybe it works on other browsers. :-?)

Just one pixel below

I'm on a hill, far away from the river, but with all that rain and soaked ground the water finally came into the basement where the cables enter the house over night. Luckily, just 15 mm high, so it didn't jump the doorsill into other rooms. And it was all clear, no muddy mess, all nicely filtered through the earth, gravel and sand. My shop vac is also designed to work as a wet vacuum cleaner, so that was really helpful.
@prologic I suspect this one being made of rubber, too.
@prologic Exactly, for my purposes that's enough. When I started out, I never imagined that migrations will take this long with all my gazillions of tests. :-)
@prologic There's a medieval market around the corner and this man-made western capercaillie is part of an archery tour through the forest where you can shoot all sorts of animals with bow and arrow. This one was target nine on the map.

Due to all the rain the whole market was closed yesterday, though. Since it's still raining today and tomorrow, I expect this to be total flop this years. Only Thursday was actually dry.
@bmallred Confirmed, it's fixed. :-)
@prologic The schema migration itself is easy. When not already on the latest version, loop through all schema patches and see which need to be applied. Suppose, the database schema is at version 0.5, then the SQL queries for versions 0.6, 0.7 and 0.8 are executed one after the other in exactly that order. And with a maiden database it starts out with 0.1 and goes through all the steps. Well, I just restarted with 0.8 being the first supported version, attempts to load older database versions will abort with an error. :-)

The automatic migration at startup simply exist to make *my* life easier. I not only operate this thing locally when developing, but also on a test and production environment. It's very convenient if the existing prod and test data just keep working with a new software version and I don't have to manually migrate things by hand. Simply start the new software version and voilà. I really don't wanna miss that.

Since I don't enjoy doing admin stuff, there is one big thing to not worry about. Even though I messed up one migration step so far and had to fix the production database by hand (removing all existing sessions by hand, so that a new column without default value could be added). It worked flawlessly with the test and local databases before, though, no active sessions did exist anymore at the point of deployment). That raised my adrenaline level.

I reckon I keep the supported versions to a minimum from now on. At least as long as I am absolutely sure that I'm the only person operating that software.
@movq Very cute! :-)
@prologic @movq @bender Clearly a witch on a broom!
It was a tiny bit moist on today's stroll. We saw exactly one other person in the forest. It's only raining once the entire weekend. And how!

All the black stuff on the shore of the pool are tad poles. Technically, there are hundreds of them on the flooded forest road. :-)

Tad poles on the flooded road

https://lyse.isobeef.org/waldspaziergang-2024-05-31/
Oh yes, it's certainly the DROP and CREATE COLUMN of existing tables. Wow! Alrighty then, removing the migration, here we go.
@prologic I had to read it two, three times, but I think I got it. Let me try. I believe most of it is general advice, not just specific to Go only.

# No Interface Is A Good Interface

First of all, don't start out with an interface right at the very beginning. Only create one if you later on come to the conclusion that you really have to, because chances for truly needing one are actually slim.

I experience that at my dayjob, too. There is a code base where I always wonder why certain interfaces exist in the first place. They're all implemented by exactly one type each, which is kind of useless. Just the type alone would totally suffice.

That train of thought to always also have an interface along with an implementing type might come from the Java enterprise world, at least that's where I encountered it really heavily. I never liked that. It just makes the code arbitrarily more complicated than it needs to be. The best code is the one that doesn't even exist. Simpler is better. Complexity is the root of all evil.

Advocates of the type with interface faction then like to argue: "But maybe sometime in the future we would like to create a second type that implements this interface, you will never know@11!! Or think of refactoring, we can also change the underlying implementation completely when we have an interface in front of it without people knowing!" But that basically never happens in reality. It reminds me a bit of premature optimization, preparing for the unknown future. Firstly, things turn out differently and secondly, other than one thinks. :-)

To be fair, thinking about what might happen or not is still a very valid thing. In my opinion it is even done not enough in this agile world. Implementation first, consideration second (if at all). But there are limits. So, start out simple. No interface for you at first.

That general rule goes at least for application development, it can be a little bit different when you write a library. More flexibility _might_ be actually helpful there.

# Interface Placement

When you define an actually beneficial interface, then place it in the same package where it is actually used in. Or lexically close to where is is used for that matter. As oposed to in the package where the implementing type resides in. This recommendation is very logical to me. The interface describes the API, so it should also go along with the rest of our API.

# Return Values

When you have a factory function to create a type that implements an interface, return that implementing type, not the interface. Using ugly suffixes in identifiers to help visualize the concept:

o
type FooInterface interface {
    Foo()
}

type FooImplementation struct { }
func (f *FooImplementation) Foo() { }

func NewFoo() *FooImplementation /* as opposed to FooInterface */ {
    return &FooImplementation{}
}


Most of the time I agree on that rule (it feels natural and correct), sometimes I don't. I reckon this depends on the exact use case at hand.

# Testing

When you have a type that you want to test, the recommendation is to not create dedicated interfaces for testing purposes only in order to mock something. If you do, this smells like a bad API design of the type in the first place. Instead, try to make its regular, productive API better, so it can be also used when testing the type.

Phew, this turned out to be a much longer post than I first anticipated. ;-) I hope this helps a bit.
Hmm, when I join all my eight incremental database schema changes into just a single one (basically drop support for migration of old databases), my test execution time drops from about 1:10 minutes to just 33 seconds. I might consider doing exactly that. I'm the only one who runs that software anyway.

Just haven't figured out where exactly the speedup comes from. I suspected that the column recreation is kind of expensive, but it doesn't really appear to that obvious. More testing is needed.
@prologic Absolutely! :-)
@prologic That looks cool! It even appears to get close to sunset.
One of our scout leaders found a blackbird laying outside the car and is now raising her:

Blackbird

https://lyse.isobeef.org/amsel-2024-05-29/

I should have taken a video of that gorgeous bird.
Thanks, @prologic! Could definitely be worse.
And today also just a quick two hour roundtrip in order to make it to the Yarn meetup almost in time: https://lyse.isobeef.org/waldspaziergang-2024-05-25/

View to the Swabian Alps
Quick stroll of just one and a half hours yesterday: https://lyse.isobeef.org/waldspaziergang-2024-05-24/

Old barn
Absolutely, that was really awesome! Four and a half hours, time flew. Looking forward to the next one. :-)
14:00 local time is not bad at all for me, I just might be a tiny bit late today. See you later.
@movq Yeah, there are much better ways to waste time. :-D

@bender @aelaraji All this antivirus shit just enlarges the attack surface even more.
@prologic @aelaraji @anth @movq ICQ was the first IM I ever had. I also still know my number, but I deleted my account well over a decade ago together with AIM and MSN in favor of Jabber.
Lol, somebody reverse-engineered the secret API to tell Windows that some snake oil is installed: https://github.com/es3n1n/no-defender
@bender Sounds about spot on. :-D