# 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 196301
# self = https://watcher.sour.is?offset=163856
# next = https://watcher.sour.is?offset=163956
# prev = https://watcher.sour.is?offset=163756
Oh yes, it's certainly the DROP and CREATE COLUMN of existing tables. Wow! Alrighty then, removing the migration, here we go.
[47°09′42″S, 126°43′19″W] --bad checksum--
@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.
MOTD: (Media od the day)

An interesting fog formation early this afternoon in the park tha our house backs on to, in full daylight 😱

What about y'all? Anything interesting to share today? 🤔
MOTD: (Media od the day)

An interesting fog formation early this afternoon in the park tha our house backs on to, in full daylight 😱

What about y'all? Anything interesting to share today? 🤔
[47°09′04″S, 126°43′16″W] Carrier too weak
@tkanos @bender Thanks, but the thing is that Microsoft has blocklisted these well-known keys in their Service Pack installers. So, yeah, it works, but only for a basic installation of XP – and some games demand a Service Pack being present. 🫤

I don’t remember having seen bender’s key, though. Maybe that one works. I might give it a try some day, when my motivation is back up. 😂
@tkanos @bender Thanks, but the thing is that Microsoft has blocklisted these well-known keys in their Service Pack installers. So, yeah, it works, but only for a basic installation of XP – and some games demand a Service Pack being present. 🫤

I don’t remember having seen bender’s key, though. Maybe that one works. I might give it a try some day, when my motivation is back up. 😂
@tkanos @bender Thanks, but the thing is that Microsoft has blocklisted these well-known keys in their Service Pack installers. So, yeah, it works, but only for a basic installation of XP – and some games demand a Service Pack being present. 🫤

I don’t remember having seen bender’s key, though. Maybe that one works. I might give it a try some day, when my motivation is back up. 😂
@tkanos @bender Thanks, but the thing is that Microsoft has blocklisted these well-known keys in their Service Pack installers. So, yeah, it works, but only for a basic installation of XP – and some games demand a Service Pack being present. 🫤

I don’t remember having seen bender’s key, though. Maybe that one works. I might give it a try some day, when my motivation is back up. 😂
[47°09′50″S, 126°43′21″W] Transfer aborted
@lyse That is cool 👌
@lyse That is cool 👌
@aelaraji hi, is it this path you are trying?
@aelaraji hi, is it this path you are trying?
@aelaraji hi, is it this path you are trying?
@prologic it was great to meet ya'll!
@prologic it was great to meet ya'll!
@prologic it was great to meet ya'll!
@prologic thanks! i normally enjoy the long runs because i just zone out.
@prologic thanks! i normally enjoy the long runs because i just zone out.
@prologic thanks! i normally enjoy the long runs because i just zone out.
Windows XP Pro 32bits volume license media: DKPRM-Q68HX-FRKCJ-MT88X-7QKBB
🧮 USERS:1 FEEDS:2 TWTS:985 ARCHIVED:72956 CACHE:2433 FOLLOWERS:17 FOLLOWING:14
sun, sun, sun
botando o Debian no portátil novo, este processo continua a dar-me alegria 15 anos depois
botando o Debian no portátil novo, este processo continua a dar-me alegria 15 anos depois
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.
[47°09′33″S, 126°43′32″W] Transfer 25% complete...
For now, I removed the BIOS battery from the PC in question. 😂 I just want to play some older games, that’s it. Let’s see how long it’ll work that way.
For now, I removed the BIOS battery from the PC in question. 😂 I just want to play some older games, that’s it. Let’s see how long it’ll work that way.
For now, I removed the BIOS battery from the PC in question. 😂 I just want to play some older games, that’s it. Let’s see how long it’ll work that way.
For now, I removed the BIOS battery from the PC in question. 😂 I just want to play some older games, that’s it. Let’s see how long it’ll work that way.
https://pluralistic.net/2024/05/29/sub-bushel-comms-strategy/#nothing-would-fundamentally-change
(To be fair, I could have seen it coming back then. It was well known that you have to activate Windows XP. I still “bought” it. Lesson learned: It was a rental, for a limit period of time.)
(To be fair, I could have seen it coming back then. It was well known that you have to activate Windows XP. I still “bought” it. Lesson learned: It was a rental, for a limit period of time.)
(To be fair, I could have seen it coming back then. It was well known that you have to activate Windows XP. I still “bought” it. Lesson learned: It was a rental, for a limit period of time.)
(To be fair, I could have seen it coming back then. It was well known that you have to activate Windows XP. I still “bought” it. Lesson learned: It was a rental, for a limit period of time.)
Wasted another hour trying to get Windows XP to work again (while avoiding totally shady stuff). Not much success.

Windows XP has scarred me for life. 😂 I bought this thing, cost me 140 bucks, but I can’t use it anymore because Microsoft says so. Screw that.

I won’t buy commercial software anymore and haven’t done so in a long time. You want an online activation or, better yet, some sort of subscription? Screw that.

Up until the end of the 1990ies and very early 2000s, it was okay to buy commercial software. Things like StarOffice 3.1 still work just fine today, because you can just install it, done.

Free/libre software is the way to go.
Wasted another hour trying to get Windows XP to work again (while avoiding totally shady stuff). Not much success.

Windows XP has scarred me for life. 😂 I bought this thing, cost me 140 bucks, but I can’t use it anymore because Microsoft says so. Screw that.

I won’t buy commercial software anymore and haven’t done so in a long time. You want an online activation or, better yet, some sort of subscription? Screw that.

Up until the end of the 1990ies and very early 2000s, it was okay to buy commercial software. Things like StarOffice 3.1 still work just fine today, because you can just install it, done.

Free/libre software is the way to go.
Wasted another hour trying to get Windows XP to work again (while avoiding totally shady stuff). Not much success.

Windows XP has scarred me for life. 😂 I bought this thing, cost me 140 bucks, but I can’t use it anymore because Microsoft says so. Screw that.

I won’t buy commercial software anymore and haven’t done so in a long time. You want an online activation or, better yet, some sort of subscription? Screw that.

Up until the end of the 1990ies and very early 2000s, it was okay to buy commercial software. Things like StarOffice 3.1 still work just fine today, because you can just install it, done.

Free/libre software is the way to go.
Wasted another hour trying to get Windows XP to work again (while avoiding totally shady stuff). Not much success.

Windows XP has scarred me for life. 😂 I bought this thing, cost me 140 bucks, but I can’t use it anymore because Microsoft says so. Screw that.

I won’t buy commercial software anymore and haven’t done so in a long time. You want an online activation or, better yet, some sort of subscription? Screw that.

Up until the end of the 1990ies and very early 2000s, it was okay to buy commercial software. Things like StarOffice 3.1 still work just fine today, because you can just install it, done.

Free/libre software is the way to go.
Base: 7.01 miles, 00:09:43 average pace, 01:08:08 duration
just logging the miles and time. last day of kids' school so a lot of chaos has settled only to be replaced i am sure!
#running #treadmill
Base: 7.01 miles, 00:09:43 average pace, 01:08:08 duration
just logging the miles and time. last day of kids' school so a lot of chaos has settled only to be replaced i am sure!
#running #treadmill
Base: 7.01 miles, 00:09:43 average pace, 01:08:08 duration
just logging the miles and time. last day of kids' school so a lot of chaos has settled only to be replaced i am sure!
#running #treadmill
[47°09′23″S, 126°43′11″W] Waiting for carrier
Note pour plus tard : se documenter sur les ADR architectural décision records. En complément des RFC, élaboration collaborative, l'ADR trace les décisions.
Note pour plus tard : se documenter sur les ADR architectural décision records. En complément des RFC, élaboration collaborative, l'ADR trace les décisions.
[twtxt.net Timeline](https://twtxt.net/?title=Go Wiki: Go Code Review Comments - The Go Programming Language) 👈 Can Someone better at Go than me explain the guidance on interfaces here such that I understand why? Explain this to me like I'm five! Apparently this was talked about on Reddit some ~3yrs ago, but I missed the memo 📋 #Go #Inerfaces~
Go Wiki: Go Code Review Comments - The Go Programming Language 👈 Can Someone better at Go than me explain the guidance on interfaces here such that I understand why? Explain this to me like I'm five! Apparently this was talked about on Reddit some ~3yrs ago, but I missed the memo 📋 #Go #Inerfaces~
Go Wiki: Go Code Review Comments - The Go Programming Language 👈 Can Someone better at Go than me explain the guidance on interfaces here such that I understand why? Explain this to me like I'm five! Apparently this was talked about on Reddit some ~3yrs ago, but I missed the memo 📋 #Go #Inerfaces~
Good old (bitmap) Helvetica works as a GUI font again:

https://movq.de/v/2456cfb05a/helvetica.png

This broke a year ago and I gave up on it. Now it’s back. Crisp fonts, just like in the terminal. 💚

This is *much* easier for me to read. Maybe it’s because of my myopia. Everything is a little bit fuzzy anyway and font antialiasing *on top* is really exhausting for me.
Good old (bitmap) Helvetica works as a GUI font again:

https://movq.de/v/2456cfb05a/helvetica.png

This broke a year ago and I gave up on it. Now it’s back. Crisp fonts, just like in the terminal. 💚

This is *much* easier for me to read. Maybe it’s because of my myopia. Everything is a little bit fuzzy anyway and font antialiasing *on top* is really exhausting for me.
Good old (bitmap) Helvetica works as a GUI font again:

https://movq.de/v/2456cfb05a/helvetica.png

This broke a year ago and I gave up on it. Now it’s back. Crisp fonts, just like in the terminal. 💚

This is *much* easier for me to read. Maybe it’s because of my myopia. Everything is a little bit fuzzy anyway and font antialiasing *on top* is really exhausting for me.
Good old (bitmap) Helvetica works as a GUI font again:

https://movq.de/v/2456cfb05a/helvetica.png

This broke a year ago and I gave up on it. Now it’s back. Crisp fonts, just like in the terminal. 💚

This is *much* easier for me to read. Maybe it’s because of my myopia. Everything is a little bit fuzzy anyway and font antialiasing *on top* is really exhausting for me.
[47°09′05″S, 126°43′22″W] Transponder still failing -- switching to analog communication
Where i can download Geminin browsers for legacy Windows ?!
[47°09′48″S, 126°43′10″W] Transponder malfunction
@sorenpeter Kk 👌
@sorenpeter Kk 👌
[47°09′34″S, 126°43′58″W] Storm recedes -- back to normal work
🧮 USERS:1 FEEDS:2 TWTS:984 ARCHIVED:72948 CACHE:2462 FOLLOWERS:17 FOLLOWING:14
[47°09′48″S, 126°43′21″W] Weather forecast alert -- storm from SW
@prologic The old options are still valid, so "Show latest post per feed" should just be added as a 3th.
@prologic The old options are still valid, so "Show latest post per feed" should just be added as a 3th.
@prologic The old options are still valid, so "Show latest post per feed" should just be added as a 3th.
@prologic The old options are still valid, so "Show latest post per feed" should just be added as a 3th.
[47°09′03″S, 126°43′05″W] Not enough data -- sampling finished
rain, rain, rain
Should this be an option at all, or just the default?
Should this be an option at all, or just the default?
@sorenpeter Are there any other valid options you can think of besides "Show latest post per feed"? 🤔
@sorenpeter Are there any other valid options you can think of besides "Show latest post per feed"? 🤔
/https://baldo.cat/media/photos/photo_15428-05-2024_13-33-44.jpg) #catsoftwtxt
#catsoftwtxt
#catsoftwtxt
#catsoftwtxt
#catsoftwtxt
/https://baldo.cat/media/photos/photo_15328-05-2024_13-30-51.jpg) #catsoftwtxt
#catsoftwtxt
#catsoftwtxt
/https://baldo.cat/media/photos/photo_15028-05-2024_13-27-32.jpg) #catsoftwtxt
You can only learn something when you hate learning something else
I think it is a good addition. Similar to how the Fraidycat RSS reader works. Fraidyc.at also support twtxt, but have not seen any updates since 2021...
I think it is a good addition. Similar to how the Fraidycat RSS reader works. Fraidyc.at also support twtxt, but have not seen any updates since 2021...
I think it is a good addition. Similar to how the Fraidycat RSS reader works. Fraidyc.at also support twtxt, but have not seen any updates since 2021...
I think it is a good addition. Similar to how the Fraidycat RSS reader works. Fraidyc.at also support twtxt, but have not seen any updates since 2021...
Radio advertisements slapping away sustained thought on the coffeeshop stereo. I'd like a real-life ad blocker.
Easy: 9.00 miles, 00:09:44 average pace, 01:27:35 duration
just a long easy run
#running #treadmill
Easy: 9.00 miles, 00:09:44 average pace, 01:27:35 duration
just a long easy run
#running #treadmill
Easy: 9.00 miles, 00:09:44 average pace, 01:27:35 duration
just a long easy run
#running #treadmill
[47°09′01″S, 126°43′16″W] Taking samples
Thinking about how to programmatically manage what's displayed on the Front page / Discover view...

Today we have the two optinos:

- Local posts only
- All posts in cache

I'm thinking of additional checkbox (on|off) options such as:

- Latest post per feed

Any other ways we can manage this a bit better? 🤔
Thinking about how to programmatically manage what's displayed on the Front page / Discover view...

Today we have the two optinos:

- Local posts only
- All posts in cache

I'm thinking of additional checkbox (on|off) options such as:

- Latest post per feed

Any other ways we can manage this a bit better? 🤔
My Name isn't 5bd84! I won't tell you what it is, though. Browsing from my homemade gopher client!
[47°09′36″S, 126°43′39″W] Saalmi, retransmit, please
[47°09′00″S, 126°43′38″W] --no signal--