I got a small desk calendar as advertising gift. It shows three months at once. Iām using this thing since the beginning of this year and I have to say that it turned out to be super useful. Iām happily surprised.
It sits on my desk next to my rightmost monitor. Iāve set it up so that I can see the last, current and next months. Each morning, I advance the ātoday windowā or whatever its proper name is. This gives me a sense of what date we have today and which I will have forgotten half a minute later already. At most. However, itās easily at hand by turning my head just a few degrees.
With the last month still showing, I had several occasions so far where a date in the past popped up in a meeting. I could easily tell when something happened, how long ago that was. Or how many days or weeks are left until we have to deliver something, etc.
In hindsight, this is absolutely no surprise at all. But I still find it fascinating. Iām now actually wondering why I never had something like that before. How could I live without that thing? Sure, I pulled up a calendar on my computer, ncal -w3 or so. But I always hated the inverted ncal output, necessary for showing week numbers, though. Having a paper calander right next to my screen at all times is sooooo much more handy.
So, do yourself a favor and think about whether such a desk calendar might be useful to you.
The only annoying thing is that the ātoday windowā moves too easily. It slips down by its own. I reckon it wants me to regularly interact with it, so that I memorize the current date.
āI feel utter angerā: from Canada to Europe, a movement to boycott US goods is spreading
In Canada, where the American national anthem has been booed during hockey matches with US teams, a slew of apps has emerged with names such as ābuy beaverā, āmaple scanā and āis this Canadianā to allow shoppers to scan QR barcodes and reject US produce from alcohol to pizza toppings. In Sweden, more than 70,000 users have joined a Facebook group calling for a ⦠ā Read more
pls elaborate on a āp2p databaseā, āall storyā and āRegistriesā.
My first thought takes me to something like secure-scuttlebutt which itās painful to sync data using clients, and too slow compared to downloading a text file.
Also Iād like for twtxt to avoid becoming an ActivityPub. Works well but itās uses too many resources IMO.
https://kingant.net/2025/02/mastodon-the-cost-of-running-my-own-server/
Iām defending being able to self-host your Web client (like youād do with a Wordpress, twtxt is a micrologging, at the end), instead of federated instances, so in a first thought Iād say Registries have many disadvantages being the first one that someone has to maintain them active.
@prologic@twtxt.net We often turn to a database when we can use a plain text file, such as a CSV. With sed or awk, you can run simple queries without using a database.
Did I get the context right? š
Today I learned how to use TestCafƩ. It is a E2E framework.
I needed it because I wanted to write a script that would launch a browser in the background, log me in with a username and password, and return the cookie value with the token ID. The goal is to perform tests with the token.
https://testcafe.io/
The other day, after a discussion online, we came to the conclusion that using awk+sed+tr could replace much of the development that requires a database. However, using SQLite to have a SQL syntax isnāt a bad idea either. What do you think?
EU-US rift triggers call for made-in-Europe tech
The utter chaos in the United States and the countryās antagonistic, erratic, and often downright hostile approach to what used to be its allies has not gone unnoticed, and it seems itās finally creating some urgency in an area in which people have been fruitlessly advocating for urgency for years: digital independence from US tech giants. Efforts to make Europe more technologically āsovereignā have gone mainstream. The European Commi ⦠ā Read more
Notes from setting up GlobalTalk using QEMU on Ubuntu
I signed up for GlobalTalk in 2024, but never found the time to get a machine set up. Fast-forward to MARCHintosh 2025 and I wasnāt going to let another year go by. This is a series of notes from my experience getting System 7.6 up and running on QEMU 68k on Ubuntu. Hopefully this will help others that might be hitting a roadblock. I certainly hit several! ā« Cale Mooth A short and to-the-point guide for those of us who want ⦠ā Read more
whoa! esp32 = 29 undocumented commands, collectively characterized as a backdoor, that could be used for memory manipulation, MAC address spoofing and packet injection
š Hello @death@yarn.girlonthemoon.xyz, welcome to yarn, a Yarn.social Pod! To get started you may want to check out the podās Discover feed to find users to follow and interact with. To follow new users, use the ⨠Follow button on their profile page or use the Follow form and enter a Twtxt URL. You may also find other feeds of interest via Feeds. Welcome! š¤
š Hello @radiantgarden@yarn.girlonthemoon.xyz, welcome to yarn, a Yarn.social Pod! To get started you may want to check out the podās Discover feed to find users to follow and interact with. To follow new users, use the ⨠Follow button on their profile page or use the Follow form and enter a Twtxt URL. You may also find other feeds of interest via Feeds. Welcome! š¤
š Hello @hydaelyn@yarn.girlonthemoon.xyz, welcome to yarn, a Yarn.social Pod! To get started you may want to check out the podās Discover feed to find users to follow and interact with. To follow new users, use the ⨠Follow button on their profile page or use the Follow form and enter a Twtxt URL. You may also find other feeds of interest via Feeds. Welcome! š¤
@prologic@twtxt.net oops, Iām sorry to see disagreement leading to draining emotions.
It remind me a bit of the Conclave movie where every part wanted to defend their vision and there is only a winner. If one wins the other loses. Like the political side of many leaders and volunteers representing a broad community. I donāt think thatās the case here. Most of us (in not all) should āwinā.
I can only add that isnāt nice to listen that āmy idea and effortā is not what the rest of the people expect. I personally have a kind of issue with public rejection, but I also like to argue, discuss and even fight a bit. āA gem cannot be polished without friction, nor a man perfected without trials,ā they say.
This exercise and belonging to this community also brings me good feelings of smart people trying to solve a human and technical problem, which is insanely difficult to get ārightā.
I genuinely hope we can understand each other, and even with our different and respectful thoughts on the same thing, we might reach an agreement on whatās the best for most people.
Good vibes to everyone!
@lyse@lyse.isobeef.org deeply honored to be used as an example, when illustrating things that will break! :-D <3
Brother denies using firmware updates to brick printers with third-party ink
Brother laser printers are popular recommendations for people seeking a printer with none of the nonsense. By nonsense, we mean printers suddenly bricking features, like scanning or printing, if users install third-party cartridges. Some printer firms outright block third-party toner and ink, despite customer blowback and lawsuits. Brotherās laser printers have historically worke ⦠ā Read more
Porting the curl command-line tool and library with Goa
For more than a decade, we have a port of the curl library for Genode available. With the use of Sculpt OS as a daily driver as well as the plan to run Goa natively on Sculpt OS by the end of the year, the itch to also port the curl command-line tool became irresistible. Of course this is a perfect territory for using Goa. In this article, I will share the process of porting the curl command-line tool and shared library ⦠ā Read more
Why not just use registry? It can be personal or hosted by someone like registry.twtxt.org. Just need to be adapt to support hashes
If we donāt keep insisting on simplify and āThe beauty of twtxt is, you put one file on your server, done. One.ā, then people should just use ActivityPub-based software like Mastodon, PixelFed, etc. which are getting a lot of attention and uses migrating to the fediverse from meta/x here in Denmark over the last couple of months.
@prologic@twtxt.net We canāt agree on this idea because that makes things even more complicated than it already is today. The beauty of twtxt is, you put one file on your server, done. One. Not five million. Granted, there might be archive feeds, so it might be already a bit more, but still faaaaaaar less than one file per message.
Also, you would need to host not your own hash files, but everybody elseās as well you follow. Otherwise, what is that supposed to achieve? If people are already following my feed, they know what hashes I have, so this is to no use of them (unless they want to look up a message from an archive feed and donāt process them). But the far more common scenario is that an unknown hash originates from a feed that they have not subscribed to.
Additionally, yarndās URL schema would then also break, because https://twtxt.net/twt/<hash> now becomes https://twtxt.net/user/prologic/<hash>, https://twtxt.net/user/bender/<hash> and so on. To me, that looks like you would only get hashes if they belonged to this particular user. Of course, you could define rules that if there is a /user/ part in the path, then use a different URL, but this complicates things even more.
Sorry, I donāt like that idea.
re reading so NewRAMStorage(ā¦) is just something that setups your storage and initial data.. that can probably live with storage/sqlite. The point is the storage package does not import the implementations of storage.Storage It just defines the contract for things that use that interface. Now storage/sqlite CAN import storage and not have a circle dep.
It kinda works in reverse for import directions. usually you have your root package that imports things from deeper in the directory structures.. but for the case of interfaces it reverses where the deeper can import from parents but parents cannot import from children.
- app < storage
< storage/sqlite
< controller < storage
< storage/sqlite
- sqlite < storage
- storage X storage/sqlite
Startup launches biological computer made of human brain cells
Melbourne start-up launches biological computer using human neurons; Novel immune system function reveals potential for antibiotic advancements; Australia reveals its oldest-known impact crater dating back 3.47 billion years ā Read more
@xuu@txt.sour.is My layout looks like this:
- storage/
- storage.go: defines a
Storageinterface
- sqlite.go: implements the
Storageinterface
- sqlite_test.go: originally had a function to set up a test storage to test the SQLite storage implementation itself:
newRAMStorage(testing.T, $initialData) *Storage
- storage.go: defines a
- controller/
- feeds.go: uses a
Storage
- feeds_test.go: here I wanted to reuse the
newRAMStorage(ā¦)function
- feeds.go: uses a
I then tried to relocate the newRAMStorage(ā¦) into a
- teststorage/
- storage.go: moved here as
NewRAMStorage(ā¦)
- storage.go: moved here as
so that I could just reuse it from both
- storage/
- sqlite_test.go: uses
testutils.NewRAMStorage(ā¦)
- sqlite_test.go: uses
- controller/
- feeds_test.go: uses
testutils.NewRamStorage(ā¦)
- feeds_test.go: uses
But that results into an import cycle, because the teststorage package imports storage for storage.Storage and the storage package imports testutils for testutils.NewRAMStorage(ā¦) in its test. Iām just screwed. For now, I duplicated it as newRAMStorage(ā¦) in controller/feeds_test.go.
I could put NewRAMStorage(ā¦) in storage/testutils.go, which could be guarded with //go:build testutils. With go test -tags testutils ā¦, in storage/sqlite_test.go could just use NewRAMStorage(ā¦) directly and similarly in controller/feeds_test.go I could call storage.NewRamStorage(ā¦). But I donāt know if I would consider this really elegant.
The more I think about it, the more appealing it sounds. Because I could then also use other test-related stuff across packages without introducing other dedicated test packages. Build some assertions, converters, types etc. directly into the same package, maybe even make them methods of types.
If I went that route, I might do the opposite with the build tag and make it something like !prod instead of testing. Only when building the final binary, I would have to specify the tag to exclude all the non-prod stuff. Hmmm.
it seems to be confused with the subject right next to it.. it works better at the end of the twt string.
Yarn wonāt display anything. but the parser does add it to the AST in a way that you can parse it out using twt.Attrs().Get("lang")
https://git.mills.io/yarnsocial/go-lextwt/src/branch/main/ast.go#L1270-L1272
https://git.mills.io/yarnsocial/go-types/src/branch/main/twt.go#L473-L478
Zen and the art of microcode hacking
Now that we have examined the vulnerability that enables arbitrary microcode patches to be installed on all (un-patched) Zen 1 through Zen 4 CPUs, letās discuss how you can use and expand our tools to author your own patches. We have been working on developing a collection of tools combined into a single project weāre calling zentool. The long-term goal is to provide a suite of capabilities similar to binutils, but targeting AMD microcode instead of CPU mach ⦠ā Read more
Dang it! I ran into import cycles with shared test utilities again. :-( Either I have to copy this function to set up an in-memory test storage across packages or I have to put it in the storage package itself and guard it with a build tag that is only used in tests (otherwise I end up with this function in my production binary as well). I donāt like any of the alternatives. :-(
lang=en @xuu@txt.sour.is gotcha!
From that PR #17 I think it was reverted? We could discuss about metadata later this month, as it seems that Iām the only person using it.
Iāve added a [lang=en] to this twt to see current yarn behaviour.
really? I think I havenāt seen it being used in the wild
For point 1 and others using the metadata tags. we have implemented them in yarnd as [lang=en][meta=data]
itās been while since Iād stopped #window-manager hopping and just settled with #Herbstluftwm but Iām NGL, the River #Wayland compositor is starting to grow on me⦠Iām still not sure if itās just me but something about it feels clean and snappy. The shortcuts in the vanilla/example configuration feel a bit clunky, but then again, itās just me being used to the same old ones I keep adopting and replicating across WMs. Iāve got 0 energy for ricing so Iāll just roll with the vanilla config as is (maybe add in a short-cut for a launcher but that will be it).
looks good to me!
About aliceās hash, using SHA256, I get 96473b4f or 96473B4F for the last 8 characters. Iāll add it as an implementation example.
The idea of including it besides the follow URL is to avoid calculating it every time we load the file (assuming the client did that correctly), and helps to track replies across the file with a simple search.
Also, watching your example Iām thinking now that instead of {url=96473B4F,id=1} which is ambiguous of which URL we are referring to, it could be something like:
{reply_to=[URL_HASH]_[TWT_ID]} / {reply_to=96473B4F_1}
That way, the āfull twt IDā could be 96473B4F_1.
True. Though if the idea turns out to be better.. then community will adopt it.
if you look at the subject for that twt you will see that it uses the extended hash format to include a URL address.
Ukraine, UK, and France to draft a ceasefire plan to present to US
Britain, France, and Ukraine draft ceasefire; Iowa bans gender identity rights; Israel blocks aid deliveries into Gaza Strip. ā Read more
We went up our backyard mountain again right after lunch. The sun peaked through the clouds sometimes. The 6°C felt much, much cooler with the northeast wind. We got lucky, though, it was dead calm at the summit. At least on the southwestern side, which is a few meters lower than the very top to the east. That was shielded absolutely perfectly from the wind (we were extremely surprised), so we sat down on a bench and could really enjoy the sun heating us up. Apart from the haze, the view was really nice.
There were even patches of snow left up top, that was unexpected. Also, somebody created a cool rock art piece on a tree stump. That one rock absolutely looked like a face. Crazy!

Netboot Windows 11 with iSCSI and iPXE
For the past several years my desktop has also had a disk dedicated to maintaining a Windows install. Iād prefer to use the space in my PC case for disks for Linux. Since I already run a home NAS, and my Windows usage is infrequent, I wondered if I could offload the Windows install to my NAS instead. This lead me down the course of netbooting Windows 11 and writing up these notes on how to do a simplified āmodernā version. ā« Terin Stock The setup Terin S ⦠ā Read more
@prologic@twtxt.net @david@collantes.us Good question, was this on live TV? I think it was? š¤
@andros@twtxt.andros.dev I donāt see a burst of new twtxt clients popping up. Yeah, the most recent ones are TwtxtReader and twtxt-el. Did I miss one? I agree with @david@collantes.us, looks normal to me. :-)
Iām also working on my rewrite at the moment, but that started⦠*looking at the git history*⦠oh wow! O_o Over two years ago! I just implemented jumping to the next/previous unread message.
HeliBoard might be the first one of these fully open source Android keyboards, that doesnāt suck, idk, Iām still in the process of testing it, but I already like it a lot more than any of the ones I used before it.
Setting it up was somewhat clunky, but once you set it all up and dile in the settings, the keyboard itself, feels really great to use.
Mozilla deletes promise not to sell Firefox usersā data
The hits just keep on coming. Mozilla not only changed its Privacy Notice and introduced a Terms of Use for Firefox for the first time with some pretty onerous terms, they also removed a rather specific question and answer pair from their page with frequently asked questions about Firefox, as discovered by David Gerard. The following question and answer were removed: Does Firefox sell your personal data? Nope. Never have, ⦠ā Read more
What would happen if we didnāt use TCP or UDP?
At some point, I wonderedāwhat if I sent a packet using a transport protocol that didnāt exist? Not TCP, not UDP, not even ICMPāsomething completely made up. Would the OS let it through? Would it get stopped before it even left my machine? Would routers ignore it, or would some middlebox kill it on sight? Could it actually move faster by slipping past common firewall rules? No idea. So I had to try. ā« Hawzen Okay so the end result is that i ⦠ā Read more
working on my bookmarks tool, I found out that http(s)://domain.tls is not a valid resource, but http(s)://domain.tls/ is, as you can see here: https://stackoverflow.com/a/2581423
I suppose that internally the wget/curl or whatever client you are using is redirecting it?
@lyse@lyse.isobeef.org Yeah, well, what they want is for us to become hopeless and give up. We should just try. Not wait and ⦠wait.
@lyse@lyse.isobeef.org @david@collantes.us I often think about moving to Mecklenburg-Vorpommern. Itās a long way from home and probably not realistic, but one can dream. š
@movq@www.uninformativ.de @david@collantes.us Where can I join you? Building a log cabin in the woods would be dang awesome!
I forgot to follow up on this one. I ended up ordering the Mac mini M4 just before Christmas, which means I got it on 31 December 2024. The machine is all I thought it will be, so, very happy with it. This time around I am using the āmostly vanillaā approach. That means no iTerm2, but Terminal app, no Chrome, etc., and just a few selected brew applications. Want to keep it lean!
I agree. finding good writings on architecture is hard to find. I used to read architecture reviews over on the high scalability blog. i suspect the reason why is that the arch is how the big tech companies can build moats around their bases. I know in AWS world it only goes as far as how to nickle and dime you to death.
I have the books but they donāt grow much more past interview level.
Understanding surrogate pairs: why some Windows filenames canāt be read
Windows was an early adopter of Unicode, and its file APIs use UTFā16 internally since Windows 2000-used to be UCS-2 in Windows 95 era, when Unicode standard was only a draft on paper, but thatās another topic. Using UTF-16 means that filenames, text strings, and other data are stored as sequences of 16ābit units. For Windows, a properly formed surrogate pair is perfectly acceptable. However ⦠ā Read more
Mozilla is going to collect a lot more data from Firefox users
I guess my praise for Mozillaās and Firefoxā continued support for Manifest v2 had to be balanced out by Mozilla doing something stupid. Mozilla just published Terms of Use for Firefox for the first time, as well as an updated Privacy Notice, that come into effect immediately and include some questionable terms. The Terms of Use state: When you upload or input information through Firefox, you hereby grant u ⦠ā Read more
@andros@twtxt.andros.dev Just before the pandemic, we watched Uncle Bob videos once a week in the lunch break. While almost all of my old teammates agreed with his views, I partially found them to be very odd and even counterproductive.
I didnāt come across John Ousterhout or any of his work before, at least not deliberately. So, this document is my first contact.
I only finished the chapter on comments and I totally agree with John so far. This document just manifests to me how weird Bobās view is on certain subjects.
I always disagreed with the concept of a maximum method length. Sure, generally, shorter functions are probably better, but it always depends. And Iāve certainly seen super short methods that just made the code flow even worse to follow. While āone function should only do one thingā is a nice general rule, Iām 100% in team John with the shown examples. There are cases, where this doesnāt help readability at all. Not even close.
To me, a function always has to justify its existence. Either by reusing it at least at another place or by coming up with dedicated tests for it. But if it is just called once and there are no tests, I almost always decide against it. Personally, I donāt mind longer methods. We just recently had a discussion about that and I lost against two other workmates who are more in Uncle Bobās camp, they refactored one medium sized method into three very short ones. Luckily, we agree on most other topics.
Lol, what!? The shorter the method, the longer the variables inside? I first thought I misread or the writeup mixed it up. Iāll always do it the other way around.
Iāve been also bitten badly by outdated comments in the past, but Bob must have worked on really terrible projects to end up with such an attitude to dislike comments. Oh well. No doubt, Iāve come across by several orders of magnitude more useless comments, in my experience (autogenerated) JavaDocs fall in the category more frequently than not. So, I know that there are different types of comments. A comment doesnāt automatically mean that it is good and justified.
But I also partially agree with Bob and John and think that a good name has a proper chance to save a comment. Though, when in doubt, I go Johnās route and use a shorter name with a comment rather than use a kilometer long identifier. Writing good comments typically takes some time, sometimes much longer than writing the code. It regularly takes me several minutes. Itās a hard art.
I perhaps should read up on Johnās work. He seems to be more reasonable and likeminded. :-) Let me continue to complete this document.
I read a lot about Clean Code, SOLID, TDD, DDD⦠now Iām discovering Ā«A Philosophy of Software Design»⦠but nobody talks about the importance of the project architecture. Do we depend on the framework to do the work for us?
You know Iām a big fan of Clean Architecture, but I feel alone when I share my thoughts on social media or at work.
You have to think outside the framework.
Mozilla reaffirms it wonāt remove Manifest v2 support from Firefox
Mozilla has officially reiterated that itās going to keep offering support for both Manifest v2 and Manifest v3 extensions in Firefox. Google is removing support for Manifest v2 from Chrome, and with it a feature called blockingWebRequest that is used by ad blockers like uBlock Origin. Googleās replacement for that feature is more restrictive and less capable, and as such, uBlock Origin no longer wor ⦠ā Read more