I have added a webmention endpoint to https://darch.dk using https://webmention.io - let see if it work from neotxt.dk to @sorenpeter@darch.dk
I’ve been thinking of how to notify someone else that you’ve replied to their twts.
Is there something already developed, for example on yarn.social?
Let’s say I want to notify https://sour.is/tiktok/America/Denver.txt that I’ve replied to some twt. They don’t follow me back, so they won’t see my reply.
I would send my URL to, could be, https://sour.is/tiktok/replies?url=MY_URL and they’ll check that I have a reply to some of their twts, and could decide to follow me back (after seeing my twtxt profile to avoid spam)
Another option could be having a metadata like
follow-request=https://sour.is/tiktok/America/Denver.txt TIMESTAMP_IN_SECONDS
that the other client has to look for, to ensure that the request comes from that URL (again, to avoid spam)
This could be deleted after the other .txt has your URL in the follow list, or auto-expire after X days to clean-up old requests.
What do you think?
@lyse@lyse.isobeef.org hm, thanks for letting me know, unsure why it’s slow, it’s a VPS I rent. I’ll check on it from my end later.
В издании PC Gamer назвали «самые важные игры и события» для ПК-гейминга за 30 лет
Начиная от Doom и Quake, заканчивая Baldur’s Gate 3 и Steam Deck.
Команда моддеров выпустила неофициальный ремейк Dungeon Keeper — он находился в разработке 15 лет
Обновлённая версия стратегии Питера Молиньё получила множество улучшений, дополнительный контент и открытый исходный код.
Today, while being in the second home over the weekend, I finally installed the 5G router setup (ZTE MC801A + GL.iNet Beryl AX). Now my home server (staying in this flat because it has a good place here) is behind a cellular 5G connection. There’s running nothing important on it, but let’s see how reliable this new setup will work over a longer period. Today so far all works fine. And if there will be problems, I still have a few months time to find solutions. ⌘ Read more
Бывший вице-президент Naughty Dog Кристиан Гирлинг покинул студию после 17 лет работы
Он начал свою карьеру программистом, и принял участие в создании всех игр из серий Uncharted и The Last of Us.
Beta 2 of iOS 17.2, iPadOS 17.2, MacOS Sonoma 14.2 Released for Testing
Apple has released the second beta versions of iOS 17.2 for iPhone, iPadOS 17.2 for iPad, and macOS Sonoma 14.2 for Mac. The beta versions are available now to users participating in the beta testing programs for iOS, iPadOS, and macOS. iOS 17.2 beta includes the Journal app, which lets users track their lives in … [Read More](https://osxdaily.com/2023/11/10/beta-2-of-ios-17-2-ipados-17-2-maco … ⌘ Read more
I quickly played with OpenAI’s new Text-To-Speech model to check if it’s an alternative to Google’s API. And wow! English is fantastic and even German is not bad. Just some syllables in German have a weird English accent. But even then, it’s still good. But sadly, it’s also a bit costly. Let’s wait a few months until it gets cheaper and better, and you can enjoy my blog’s “Read aloud” feature even more. 😉 ⌘ Read more
I have not been feeling good the past two days, caught a cold. So yesterday I was very lazy, luckily the kids where busy with their things, and Marlyn took Nanook to the dogpark to let him blow off some steam. Today I feel much better, so I headed out early for a 5km walk in the forest with the dog before everyone got up this morning. When I came home my daughter went to her friends house, so she will probably be gone for the rest of the day, and my son is playing games with his friends. Its still raining a lot here, but I managed to do to the walk in between the rain. Now Im working some more on the laptop I installed OpenBSD on this weekend. Getting more stuff set up on it.
How to Use iPhone as Microphone for a Mac
You can use the built-in microphone on your iPhone as an external microphone on your Mac, thanks to the Continuity Camera feature of MacOS. Yes, the same feature that allows you to use iPhone as a FaceTime camera on a Mac also lets you just tap into the microphone if you’d like to. The iPhone … Read More ⌘ Read more
Save $250 on MacBook Air 15″, $60 Off AirPods Pro, & More as Amazon Prime Day Deals Continue
Amazon Prime Day is almost over but the amazing deals continue for now, and while you need an Amazon Prime membership (or a free trial) to take advantage of the best deals, many of them are good enough to justify the membership price alone. Let’s check out some of our favorite deals for Amazon Prime … [Read More](https://osxdaily.com/2023/10/11/save-250-on-mac … ⌘ Read more
8 of the Best New Tips for iOS 17
iOS 17 includes a variety of new capabilities and features, and some in particular really stand out for iPhone. Let’s take a look at the best new features in iOS 17 and some tips to get started using the latest innovations in the world of iPhone software. From interactive widgets, to Standby Mode, new Messages … Read More ⌘ Read more
Let’s DockerCon!
DockerCon 2023 will be hybrid — both live (in Los Angeles, California) and virtual. Our desire is to once again experience the live magic of the hallway track, the serendipitous developer-to-developer sharing of tips and tricks, and the celebration of our community’s accomplishments … all while looking forward together toward a really exciting future. And for members of our community who can’t attend in person, we hope you’ll join us virtually! ⌘ Read more
The GitHub Security Lab’s journey to disclosing 500 CVEs in open source projects
The GitHub Security Lab audits open source projects for security vulnerabilities and helps maintainers fix them. Recently, we passed the milestone of 500 CVEs disclosed. Let’s take a trip down memory lane with a review of some noteworthy CVEs!
The post [The GitHub Security Lab’s journey to disclosing 500 CVEs in open source projects](https://github.blog/2023-09-21-the-github-s … ⌘ Read more
JMP: Newsletter: Summer in Review
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one app; Free as in Freedom; Sh … ⌘ Read more
Snikket: State of Snikket 2023
This is our first blog post for quite a while, and the last few have all been technical updates of various kinds about the Snikket software. In fact it’s been almost two years since the last post that gave a general progress update on the Snikket project itself, so let’s fix that!
You’ll be pleased to hear that Snikket is very much alive, and although there hasn’t been much of a show to see here, a bunch of stuff has been going on backstage.
We plan to catch you up with our progres … ⌘ Read more
I’m having a life crisis, I’m not happy with any of my internet presence (again). I don’t know what I want or how I want it to be. I let a lot of my domains expire (lol poor) but I still have my special core ones and I want them to all be loved equally
Got contacted on instagram from someone who wanted to buy some of my images (NFT), I have been putting the images I liked the most into a collection (and add new ones when I take Images I think is good enough) into the collection. Just letting it sit there to see if I can make a sale one day.
Not sure yet if the person is serious or not - but If I could make a sale - then I’m all for it.
It’s much easier to put things up for sale as NFT then other ways.
I sell them as a 1 item thing. And put a price that I think is fair (Fixed price on all, but based on the amount of time I actually spend getting to all these locations).
One thing I have not liked about NFT is all the crap art stuff that there that takes 0 effort, but I do at least spend time picking out where we go. And each image has a memory attached to it, a trip with my family to that exact place..
I’m curious. How many people truly believe blockchain social networks are the future?
NFTs, tokens, monetization, revenue…
I’m sorry, but how are your random social media blabbers worth any money?
Unless you’re Shakespeare or Einstein or some philosophical or scientific genius, I don’t see why anyone would want to read your posts, let alone cash out some “crypto” from some “wallet”.
And that applies to most people. Sure, your lifestyle and your thoughts may be interesting. But who’s going to start paying to view what’s going on in your life?
As if likes, upvotes, hearts, and subscriptions weren’t narcissistic enough, let’s make people think someone wants to pay them with crypto to view their random posts online.
Speculation, accusation, defamation, and conspiracies will always get more eyeballs then careful balanced well researched reporting. Lying about something now is cheaper and more profitable than sending a reporter out and getting the facts tomorrow. Forget Spotify for news – let’s fix the real problem (2017) | Hacker News
Ignite Realtime Blog: Certificate Manager plugin for Openfire release 1.1.1
The Ignite Realtime community is happy to announce a new release of the Certificate Manager plugin for Openfire.
This plugin allows you to automate TLS certificate management tasks. This is particularly helpful when your certificates are short-lived, like the ones issued by Let’s Encrypt.
This release is a maintenance release. It adds translations. More details are available in the [changelog] … ⌘ Read more
Introducing passwordless authentication on GitHub.com
Passkeys are now available in public beta. Opting in lets you upgrade security keys to passkeys, and use those in place of both your password and your 2FA method. ⌘ Read more
Introducing passwordless authentication on GitHub.com
Passkeys are now available in public beta. Opting in lets you upgrade security keys to passkeys, and use those in place of both your password and your 2FA method. ⌘ Read more
On my blog: Free Culture Book Club — Let’s Move Forward https://john.colagioia.net/blog/2023/06/24/move-forward.html #freeculture #bookclub
Erlang Solutions: Lifting Your Loads for Maintainable Elixir Applications
This post will discuss one particular aspect of designing Elixir applications using the Ecto library: separating data loading from using the data which is loaded. I will lay out the situations and present some solutions, including a new library called ecto_require_associations.
Applications will differ, but let’s look at [this example]( … ⌘ Read more
Erlang Solutions: Lifting Your Loads for Maintainable Elixir Applications
This post will discuss one particular aspect of designing Elixir applications using the Ecto library: separating data loading from using the data which is loaded. I will lay out the situations and present some solutions, including a new library called ecto_require_associations.
Applications will differ, but let’s look at [this example]( … ⌘ Read more
Thanks to everyone who doesn’t let gopher die.
JMP: Newsletter: Jabber ID Discovery, New Referral Codes
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one app; Free … ⌘ Read more
Let me try a thing
@prologic@twtxt.net It did not crash today (after it did earlier today), I now compiled and updated to latest, I’ll let you know if it happens again.
@funbreaker@twtxt.net I have pushed a fix now to git, I now got rid of the error when I use it on my end. I will create a test account on twtxt later tonight (after dinner and all that) if needed. If you test the latest on your end before that - let me know :) And thanks for your patience.
@funbreaker@twtxt.net Ok, I saw that error here now as well - but it does not crash. I have put it in the issue tracker, I will fix it and let you know once I’ve tracked it down.
After multiple years of delays, my Solo V2’s finally arrived. Let’s see what I’ll do with them. I also have a YubiKey, I can’t even find right now. 😅 ⌘ Read more
If anyone of you pulls the code and compiles it - then please let me know :)
After multiple years of delays, my Solo V2’s finally arrived. Let’s see what I’ll do with them. I also have a YubiKey, I can’t even find right now. 😅 ⌘ Read more
I’ve got the archives of my Musker accounts safe and sound, let the man baby play his games without me https://lien.sus.fr/jpOTL
evolution lets animals age because otherwise they fall into procrastination type paradox situations
Look Ma: My computer is talking; let’s create a simplified ChatGPT!
ChatGPT is all the hype now, but the math behind it is pretty complex - can we
create something smaller & simpler, possibly under 200 lines of Rust code? ⌘ Read more
Multi-repository variant analysis: a powerful new way to perform security research across GitHub
Multi-repository variant analysis lets you scale security research across thousands of repositories, giving you a powerful tool to find and respond to newly discovered vulnerabilities. ⌘ Read more
Distributed Cloud-Native Graph Database with NebulaGraph Docker Extension
Let’s take a look at NebulaGraph and how this modern, open source database can help your organization store and query complex data relationships. ⌘ Read more
My cheap alternative to Ngrok
Since GoBlog has an Auto-HTTPS feature that can automatically retrieve HTTPS certificates via ACME from e.g. Let’s Encrypt, I need a public IP address with which I can reach my test instance of GoBlog via port 80 and 443. ⌘ Read more
I will try and write a small cli example project in rust, that will let you post a message on yarn through a server url. Once I have that - I will then try and write a client with GUI and all that. I have not used rust much - but I really want to learn it more. I usually stick with c++. Not sure how much time it’ll take to get started, but I’ll give it a try.
Erlang Solutions: Can’t Live with It, Can’t Live without It
I’d like to share some thoughts about Elixir’s with keyword. with is a wonderful tool, but in my experience it is a bit overused. To use it best, we must understand how it behaves in all cases. So, let’s briefly cover the basics, starting with pipes in Elixir.
But like all tools, you should think about when it is best used…
Pipes are at their best when you expect your function … ⌘ Read more
@prologic@twtxt.net Running out of time for tonight, but I will test it tomorrow! :) I’ll let you know how it goes tomorrow night.
Lindypress Bug Fix
Just a brief note that for the past couple of days, you might’ve been unable to buy books on LindyPress.net if you are in the United States, Canada or Australia (which is a lot of you). This has now been fixed, so you can place your orders now!
The issue was that there was a silent API update that kept addresses from validating states and provinces. Note that if your order placed, it’s all okay, this is only for people for whom the site would not let place an order.
… ⌘ Read more
Lindypress Bug Fix
Just a brief note that for the past couple of days, you might’ve been unable to buy books on LindyPress.net if you are in the United States, Canada or Australia (which is a lot of you). This has now been fixed, so you can place your orders now!
The issue was that there was a silent API update that kept addresses from validating states and provinces. Note that if your order placed, it’s all okay, this is only for people for whom the site would not let place an order.
… ⌘ Read more
Profanity: New Profanity Old System
Occasionally people visit our MUC asking how to run the latest profanity release on years old systems.
For some distributions people maintain a backports project, so you can get it from there if available.
Here we want to describe another methods, using containers, more specifically distrobox.
What’s Distrobox?It’s basically a tool that let’s you run another distribution on your system. It uses docker/podman to create containers that … ⌘ Read more
@bender@twtxt.net Yeah, that is correct :) I use it for testing, but I set it up as any desktop system as close as I can, with all the things I usually use.
I’m really excited about riscv - I have another board as well, which is more like a arduino, but I never got that one to do anything useful, but the mangopo - is as you say more usefull since it’s just like a raspberrypi zero, and works very well.
But I am looking forward to that day I can have a proper desktop system (or laptop) with riscv. There was a board released some time ago that let you do that, but the price was a bit too high for me .So now I wait for the next thing to come out.
Okay one last time, then I’m going to bed, let’s hope this is the final bug that fixes Yarn/Twtxt <-> Activity Pub integration 😅
Took my daughter’s kickbike again and let Nanook pull for some kilometres, he was really good today, fun to see him correct around obstacles, and when he looks back at me while running to make sure things are OK. I really need to get a offroad kickbike that I can use, makes it more safe too - because he runs fast. I know Ill get one in mid May, hopefully sooner.
ICYMI: CodeQL enhancements
Learn about CodeQL’s improved user experience and enhancements that let you scan new languages, detect new types of CWEs, and perform deeper analyses of your applications. ⌘ Read more
JMP: Newsletter: JMP is 6! Leaving beta this year! And FOSSY 🙂️
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one … ⌘ Read more
**RT by @mind_booster: Happy I ❤️ Free Software Day everyone! Let’s start by saying thank you to #freesoftware contributors out there who work for #softwarefreedom ❤️ #ilovefs
Don’t let this day pass without saying thank you! https://sharepic.fsfe.org/#ilovefs**
Happy I ❤️ Free Software Day everyone! Let’s start by saying thank you to #freesoftware contributors out there who work for #softwarefreedom ❤️ [#ilovefs](https:/ … ⌘ Read more
Erlang Solutions: Elixir, 7 steps to start your journey
Read this post in Spanish.
Let’s talk about Elixir!
Elixir is a functional programming language created by José Valim to build concurrent and scalable systems. It is defined as:
“a dynamic, functional language for building scalable and maintainable applications”.
Its first version was released in 2012. Since then, n … ⌘ Read more
❤️ 🎶: Never Let You Go (電視劇《我只喜歡你》片尾曲) by 薩吉
JMP: Threads, Thumbnails, XMR, ETH
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one app; Free as in Freedom; Shar … ⌘ Read more
Did not want to start my day with a hike today, so I borrowed my daughter’s kickbike and let the dog pull me for some kilometres. He did better today then ever before. He hit his top speed and just kept going.
Funny Programming Pictures Part XIX
It’s Friday! So let’s look at some funny, nerdy pictures! ⌘ Read more
BREAKING: Gizmodo stuns world by publishing Tech article
“We won’t let computers distract us from our core mission…complaining about Elon Musk” ⌘ Read more
PEP 703: Making the Global Interpreter Lock Optional in CPython
CPython’s global interpreter lock (“GIL”) prevents multiple threads from executing Python code at the same time. The GIL is an obstacle to using multi-core CPUs from Python efficiently. This PEP proposes adding a build configuration (–without-gil) to CPython to let it run Python code without the global interpreter lock and with the necessary changes needed to make the interpreter thread-safe. ⌘ Read more
RT by @mind_booster: Happy Public Domain Day 2023! Let’s celebrate in style with Erma Bossi’s fun painting “Circus”, which just entered the Public Domain – meaning it is now free to re-use and remix by anyone! href=”https://txt.sour.is/search?q=%23publicdomainday”>#publicdomainday**
Happy Public Domain Day 2023! Let’s celebrate in style with Erma Bossi’s fun painting “Circus”, which just entered the Public Domain – meaning it is now free to re-use and remix by anyone! #publicdomainday
 through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one app; Free as in Freedom; Sha … ⌘ Read more
JMP: Newsletter: Busy Year in 2022
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one app; Free as in Freedom; Sha … ⌘ Read more
I’ll let the head of the bird site comment on that:

I’ll let the head of the bird site comment on that:

Creating an accessible search experience with the QueryBuilder component
GitHub’s search inputs have several complex accessibility considerations. Let’s dive into what those are, how we addressed them, and talk about the standalone, reusable component that was ultimately built. ⌘ Read more
What was the first PDA?
It wasn’t the Palm Pilot. Nor the Newton. Let’s keep going back to find the answer… ⌘ Read more
How to Pronounce Tech Words (part 2)
Watch now (6 min) | Some computer words are hard to say. Let Lunduke help you. ⌘ Read more
pareto improvement: instead of letting students write bachelors/masters theses that are basically just literature reviews, let them rewrite the respective wikipedia articles instead (and then check the article)
I’ll see if I have time tonight, I’ll take a backup of everything, then test a bit. I’ll let you know if I get stuck on anything. thank you for asking :)
Brought our dog to work today, so nice to have one that handles the cold without any issues. He just chills in his crate in the car while I work, and I take some small breaks to let him stretch his legs. Loves to play around in the snow. I could then take the ‘long’ walk on my way home instead of getting home first - then head out again.
@darch@neotxt.dk yeah, all my computers and devices are on 24/7. but I’ll install it on my webserver (vps) as well, and let that one be the master device. my desktop is backed up to spideroak at all times, so when I sync there it backs things up. Im not too worried about the issue if something causes a conflict. There is only one file that worries me, and that is my keepass file. I might keep that elsewhere to be sure, I have not decided yet.
Let Me Be Blunt ⌘ Read more
How to Build a Restreaming Server with a Raspberry Pi
First of all, what is a restreaming server? Sometimes you want to livestream video from a device like an ATEM Mini or OBS to multiple destinations. Many devices and software like this will let you push video to just one RTMP destination at a time. ⌘ Read more
Amnistier les covidistes ? Et puis quoi encore ?
The Atlantic, vénérable mensuel fondé au XIXème siècle, a récemment fait paraître un article d’Emily Oster qui a largement défrayé la chronique : dans “Let’s declare a pandemic amnestie” (“Déclarons une amnistie pour la pandémie”), l’auteur tente d’aligner quelques arguments en faveur d’un pardon général pour tous ceux qui, pendant la pandémie, ont pris les décisions […] ⌘ Read more
JMP: Newsletter: New Cheogram Android Release, Chatwoot Instance
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one … ⌘ Read more
Gajim: Gajim 1.5.3
Gajim 1.5.3 brings back a feature many of you missed: selecting and copying multiple messages. Emoji shortcodes have been improved and cover even more emojis now. Gajim also lets you mark workspaces as read, so you don’t have to go through all conversations. Thank you for all your contributions!
Since we changed the way Gajim displays messages in Gajim 1.4, selecting multiple messages to copy them was not possible anymore. With Gajim 1.5.3 you can now select multiple messag … ⌘ Read more
I was inclined to let this go so as not to stir anything up, but after some additional thought I’ve decided to call it out. This twt:
is exactly the kind of ad hominem garbage I came to expect from Twitter™, and I’m disappointed to see it replicated here. Rummaging through someone’s background trying to find a “gotcha” argument to take credibility away from what a person is saying, instead of engaging the ideas directly, is what trolls and bad faith actors do. That’s what the twt above does (falsely, I might add–what’s being claimed is untrue).
If you take issue with something I’ve said, you can mute me, unfollow me, ignore me, use TamperMonkey to turn all my twts into gibberish, engage the ideas directly, etc etc etc. There are plenty of options to make what I said go away. Reading through my links, reading about my organization’s CEO’s background, and trying to use that against me somehow (after misinterpreting it no less)? Besides being unacceptable in a rational discussion, and besides being completely ineffective in stopping me from expressing whatever it is you didn’t like, it’s creepy. Don’t do that.
**Here’s how a patent troll works:
- Sit and watch as s codec is made specifically to avoid patent fees;
- Wait a decade to let the codec be wildly implemented;
- Try to monetize the work of others, using patents some other parties might have.**
Here’s how a patent troll works:
1. Sit and watch as s codec is made specifically to avoid patent fees;
2. Wait a decade to let the codec be wildly implemented;
3. Try to monetize the work of others, using patents some other parties might have.
[nitter.net/Hi … ⌘ Read more
That time the creator of UNIX built a Trojan Horse that let him log in to any UNIX machine.
And nobody knew about it for years. ⌘ Read more
JMP: Newsletter: Voicemail Changes, Opt-in Jabber ID Discoverability
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone number … ⌘ Read more
❤️ 🎶: let’s have a drink by Zia
Funny Programming Pictures Part XVI
It’s Friday! Let’s have some fun and look at some funny pictures about programming and Linux and stuff! The Lunduke Journal Community — About the Lunduke Journal — Subscriber Perks The Lunduke Journal Weekly Schedule: Monday - Computer History Tuesday ⌘ Read more
The (very real) history of :-)
On the 40th anniversary of :-) and :-( let’s tell the story of how the emoticon came into existence. ⌘ Read more
Monal IM: Monal IM – project moved
We recently started to migrate the App from Anu Pokharel‘s Apple account to Thilo Molitor‘s Apple account.
Aspart of this transition we also deployed some new push servers to not let an old retired developer pay for the infrastructure needed for Monal.
Coming along with this transition from the old developer team to the new one is our new clean website at https://monal-im.org/. From now on, this blog will not be used for Monal anymore.
**Many t … ⌘ Read more
@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.
Now that I have access to Udemy Business and can watch many, many courses for free, I subscribed to two courses. One to improve my English and one to improve my quick-wittedness. Let’s see if I complete them and if they really help. ⌘ Read more
Integrated Terminal for Running Containers, Extended Integration with Containerd, and More in Docker Desktop 4.12
Docker Desktop 4.12 is now live! This release brings some key quality-of-life improvements to the Docker Dashboard. We’ve also made some changes to our container image management and added it as an experimental feature. Finally, we’ve made it easier to find useful Extensions. Let’s dive in. Execute commands in a runn … ⌘ Read more
JMP: Newsletter: New Employee, Command UI, JMP SIM Card, Multi-account Billing
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone … ⌘ Read more
Progress! so i have moved into working on aggregates. Which are a grouping of events that replayed on an object set the current state of the object. I came up with this little bit of generic wonder.
type PA[T any] interface {
event.Aggregate
*T
}
// Create uses fn to create a new aggregate and store in db.
func Create[A any, T PA[A]](ctx context.Context, es *EventStore, streamID string, fn func(context.Context, T) error) (agg T, err error) {
ctx, span := logz.Span(ctx)
defer span.End()
agg = new(A)
agg.SetStreamID(streamID)
if err = es.Load(ctx, agg); err != nil {
return
}
if err = event.NotExists(agg); err != nil {
return
}
if err = fn(ctx, agg); err != nil {
return
}
var i uint64
if i, err = es.Save(ctx, agg); err != nil {
return
}
span.AddEvent(fmt.Sprint("wrote events = ", i))
return
}
This lets me do something like this:
a, err := es.Create(ctx, r.es, streamID, func(ctx context.Context, agg *domain.SaltyUser) error {
return agg.OnUserRegister(nick, key)
})
I can tell the function the type being modified and returned using the function argument that is passed in. pretty cray cray.
Progress! so i have moved into working on aggregates. Which are a grouping of events that replayed on an object set the current state of the object. I came up with this little bit of generic wonder.
type PA[T any] interface {
event.Aggregate
*T
}
// Create uses fn to create a new aggregate and store in db.
func Create[A any, T PA[A]](ctx context.Context, es *EventStore, streamID string, fn func(context.Context, T) error) (agg T, err error) {
ctx, span := logz.Span(ctx)
defer span.End()
agg = new(A)
agg.SetStreamID(streamID)
if err = es.Load(ctx, agg); err != nil {
return
}
if err = event.NotExists(agg); err != nil {
return
}
if err = fn(ctx, agg); err != nil {
return
}
var i uint64
if i, err = es.Save(ctx, agg); err != nil {
return
}
span.AddEvent(fmt.Sprint("wrote events = ", i))
return
}
This lets me do something like this:
a, err := es.Create(ctx, r.es, streamID, func(ctx context.Context, agg *domain.SaltyUser) error {
return agg.OnUserRegister(nick, key)
})
I can tell the function the type being modified and returned using the function argument that is passed in. pretty cray cray.
@prologic@twtxt.net Error handling especially in Go is very tricky I think. Even though the idea is simple, it’s fairly hard to actually implement and use in a meaningful way in my opinion. All this error wrapping or the lack of it and checking whether some specific error occurred is a mess. errors.As(…) just doesn’t feel natural. errors.Is(…) only just. I mainly avoided it. Yesterday evening I actually researched a bit about that and found this article on errors with Go 1.13. It shed a little bit of light, but I still have a long way to go, I reckon.
We tried several things but haven’t found the holy grail. Currently, we have a mix of different styles, but nothing feels really right. And having plenty of different approaches also doesn’t help, that’s right. I agree, error messages often end up getting wrapped way too much with useless information. We haven’t found a solution yet. We just noticed that it kind of depends on the exact circumstances, sometimes the caller should add more information, sometimes it’s better if the callee already includes what it was supposed to do.
To experiment and get a feel for yesterday’s research results I tried myself on the combined log parser and how to signal three different errors. I’m not happy with it. Any feedback is highly appreciated. The idea is to let the caller check (not implemented yet) whether a specific error occurred. That means I have to define some dedicated errors upfront (ErrInvalidFormat, ErrInvalidStatusCode, ErrInvalidSentBytes) that can be used in the err == ErrInvalidFormat or probably more correct errors.Is(err, ErrInvalidFormat) check at the caller.
All three errors define separate error categories and are created using errors.New(…). But for the invalid status code and invalid sent bytes cases I want to include more detail, the actual invalid number that is. Since these errors are already predefined, I cannot add this dynamic information to them. So I would need to wrap them à la fmt.Errorf("invalid sent bytes '%s': %w", sentBytes, ErrInvalidSentBytes"). Yet, the ErrInvalidSentBytes is wrapped and can be asserted later on using errors.Is(err, ErrInvalidSentBytes), but the big problem is that the message is repeated. I don’t want that!
Having a Python and Java background, exception hierarchies are a well understood concept I’m trying to use here. While typing this long message it occurs to me that this is probably the issue here. Anyways, I thought, I just create a ParseError type, that can hold a custom message and some causing error (one of the three ErrInvalid* above). The custom message is then returned at Error() and the wrapped cause will be matched in Is(…). I then just return a ParseError{fmt.Sprintf("invalid sent bytes '%s'", sentBytes), ErrInvalidSentBytes}, but that looks super weird.
I probably need to scrap the “parent error” ParseError and make all three “suberrors” three dedicated error types implementing Error() string methods where I create a useful error messages. Then the caller probably could just errors.Is(err, InvalidSentBytesError{}). But creating an instance of the InvalidSentBytesError type only to check for such an error category just does feel wrong to me. However, it might be the way to do this. I don’t know. To be tried. Opinions, anyone? Implementing a whole new type is some effort, that I want to avoid.
Alternatively just one ParseError containing an error kind enumeration for InvalidFormat and friends could be used. Also seen that pattern before. But that would then require the much more verbose var parseError ParseError; if errors.As(err, &parseError) && parseError.Kind == InvalidSentBytes { … } or something like that. Far from elegant in my eyes.
❤️ 🎶: Lets never meet again by Park Boram
Dino: Stateless File Sharing: Base implementation
The last few weeks were quite busy for me, but there was also a lot of progress.
I’m happy to say that the base of stateless file sharing is implemented and working.
Let’s explore some of the more interesting topics.
File hashes have some practical applications, such as file validation and duplication detection.
As such, they are part of the [metadata element](https://xmpp.org/extensio … ⌘ Read more
JMP: Newsletter: Multilingual Transcriptions and Better Voicemail Greetings
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numb … ⌘ Read more
Let’s lower the cost of Lunduke Journal subscriptions!
And have some fun in the process. ⌘ Read more
I’m trying to switch from Konversation to irssi. Let’s see how that goes. Any irssiers out there who can recommend specific settings or scripts? I already got myself trackbar.pl and nickcolor.pl as super-essentials. Also trying window_switcher.pl. Somehow my custom binds for Ctrl+1/2/3/etc. to switch to window 1/2/3/etc. doesn’t do anything: { key = "^1"; id = "change_window"; data = "1"; } (I cannot use the default with Alt as this is handled by my window manager). Currently, I’m just cycling with Ctrl+N/P. Other things to solve in the near future:
- better, more colorful and compact theme (just removed clock from statusbar so far)
- getting bell/urgency hints working on arriving messages
- nicer tabs in status bar, maybe even just channel names and no indexes
- decluster status bar with user and channel modes (I never cared about those in the last decade)