What is Hackers' Pub?

Hackers' Pub is a place for software engineers to share their knowledge and experience with each other. It's also an ActivityPub-enabled social network, so you can follow your favorite hackers in the fediverse and get their latest posts in your feed.

RE: mastodon.social/@twostraws/115

I've sent Kickstart TestFlight invites to 10 more people, all of whom emailed me to say they were interested. I made another video of its features โ€“ it was 38 minutes, despite me flying through everything quickly ๐Ÿซ  Hopefully I'll be able to expand the TestFlight further soon!

0
0
3
0

I am old and my technology is aging with me

But the stuff I can keep using I keep using

Which is one reason I am enthusiastic about my switch to using the MNT Reform line of computers for my stuff. I want that for my computer itself. I want a computer that can age with me, but also grow and change, which has never been possible with laptops in my lifetime.

@cwebberChristine Lemmer-Webber This is basically where I'm at too. I'd like to keep using the Pocket Reform in some incarnation for as long as I can - with some tweaks and upgrades along the way, to be sure, but with the same chassis. (We'll see how that goes as I get older and my vision gets worse but I can always chassis swap)

Of course I feel a bit hypocritical saying that while continuing to buy each new MNT thing, but I can afford it and I want to support them. It's only partly an excuse I tell myself ๐Ÿ˜…

0
0

Instruments 26.4 adds a whole host of new features in the latest Xcode beta!

We'll take a look at them during my App Performance and Instruments Virtuoso course, starting next week.

This amazing tool keeps getting more and more powerful. I hope you can join me for a deep dive into Instruments.

Click through for full course details, testimonials from past students, and enrollment info.

swift-virtuoso.com

(Know developers who might be interested? Please boost and spread the word!)

0
1
@hongminheeๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary: from the point of view of someone who is "maintaining" a JSON-LD processing fedi software and has implemented their own JSON-LD processing library (which is, to my knowledge, the fastest in it's programming language), JSON-LD is pure overhead. there is nothing it allows for that can't be done with

1. making fields which take multiple values explicit
2. always using namespaces and letting HTTP compression take care of minimizing the transfer

without JSON-LD, fedi software could use zero-ish-copy deserialization for a majority of their objects (when strings aren't escaped) through tools like serde_json and Cow<str>, or
System.Text.Json.JsonDocument. JSON-LD processing effectively mandates a JSON node DOM (in the algorithms standardized, you may be able to get rid of it with Clever Programming)

additionally, due to JSON-LD 1.1 features like @type:@json, you can not even fetch contexts ahead of time of running JSON DOM transformations, meaning all JSON-LD code has to be async (in the languages which has the concept), potentially losing out on significant optimizations that can't be done in coroutines due to various reasons (e.g. C# async methods can't have ref structs, Rust async functions usually require thread safety due to tokio's prevalence, even if they're ran in a single-threaded runtime)

this is
after context processing introducing network dependency to the deserialization of data, wasting time and data on non-server cases (e.g. activitypub C2S). sure you can cache individual contexts, but then the context can change underneath you, desynchronizing your cached context and, in the worst case, opening you up to security vulnerabilities

json-ld is not my favorite part of this protocol

@kopperkopper :colon_three: @hongminheeๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary: As the person probably most responsible for making sure json-ld stayed in the spec (two reasons: because it was the only extensibility answer we had, and because we were trying hard to retain interoperability with the linked data people, which ultimately did not matter), I agree with you. I do ultimately regret not having a simpler solution than json-ld, especially because it greatly hurt our ability to sign messages, which has considerable effect on the ecosystem.

Mea culpa :\

I do think it's fixable. I'd be interested in joining a conversation about how to fix it.

0

Instruments 26.4 adds a whole host of new features in the latest Xcode beta!

We'll take a look at them during my App Performance and Instruments Virtuoso course, starting next week.

This amazing tool keeps getting more and more powerful. I hope you can join me for a deep dive into Instruments.

Click through for full course details, testimonials from past students, and enrollment info.

swift-virtuoso.com

(Know developers who might be interested? Please boost and spread the word!)

0
0
1
1
0
1
0
7
0
1
0
0

Question for Emacs wizards. I found a strange thing which I could not understand after reading the documentation (gnu.org/software/emacs/manual/) and even after reading the startup files, shipped with my Emacs 30.2.

If I use the -q option โ€” Emacs will add site-lisp directories to the load-path. But with -Q option โ€” there are no site-lisp catalogs in the load-path. Why is this happens? :drgn_confused:

Note: the option --no-site-lisp is not used in the both examples. So, as I understood after reading the gnu.org/software/emacs/manual/, even with --no-site-file (or -Q) the site-lisp catalogs should be added to the load-path in the both cases :drgn_confused:

Xterm window divided in two panes. On the one pane there is emacs -Q --batch --eval "(print load-path)" command which prints list of catalogs from /usr/local/share/emacs/30.2/lisp/*. On the second pane there is emacs -q --batch --eval "(print load-path)" command wich prints list of catalogs from /usr/local/share/emacs/30.2/lisp/* AND from /usr/local/share/emacs/30.2/site-lisp AND from /usr/local/share/emacs/site-lisp.
0
1
0
0
11
0
0

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary: shared the below article:

ActivityPub Social API Hackathon

evan @evan@activitypub.space

<p><a href="https://wedistribute.org/2025/08/social-web-foundation-is-betting-big-on-client-to-server-api/" rel="nofollow ugc">It's well-known</a> that we love the <a href="https://github.com/swicg/activitypub-api/" rel="nofollow ugc">ActivityPub API</a> at the Social Web Foundation.</p> <p>I think it would be great for our community to have an ActivityPub API hackathon sometime this year -- hopefully this summer. Hackathons are a great way to engage a lot of developers really quickly. They also are a great way to test that an API has enough power to get people from zero to working app in a day or a weekend.</p> <p>I see a few great times to do this:</p> <ul> <li><a href="https://dwebcamp.org/berlin-2026/" rel="nofollow ugc">DWeb Camp Berlin</a> in Berlin</li> <li><a href="https://fedicon.ca/" rel="nofollow ugc">Fedicon</a> 2026 ๐Ÿคž๐Ÿผ in Vancouver</li></ul>

Read more โ†’
0

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary: shared the below article:

Why I use "ActivityPub API" or "Social API"

Evan Prodromou @evanp@ghost.evanp.me

One of the most interesting areas of exploration in the ActivityPub community right now is the ActivityPub API. Most people who know ActivityPub are familiar with its federation protocol, which lets social networking servers like Mastodon and Pixelfed share data between them. But there is another, closely-related feature in the same specification, called the "social API".

ActivityPub has five normative sections: 3 Objects, 4 Actors, 5 Collections, 6 Client-to-Server Interactions, and 7 Server-to-Server Interactions. 3, 4, and 5 provide a read-only interface to social data that is useful for both the federation protocol and the social API. It lets both clients and servers read information about users on the network, their feeds, and the things they make and share.

Section 6 is focused on the mechanism clients can use to create new activities, and the side-effects of those activities. "Activities" are the most important data structure in ActivityPub (which is why they're featured so prominently in the name!). They represent sentences or statements about things that happen on a social network, like "Christine created the image img123.jpg" or "Evan liked Christine's image img123.jpg" and "Amy shared Christine's image img123.jpg". Creating these statements is how clients can make things happen with ActivityPub.

Section 7 is focused on how and when servers can send these activities across the network to other servers. There are some side-effects that are laid out, but mostly they involve cache management.

So, here's the important point I want to make: the federation protocol which connects ActivityPub servers is defined in sections 3, 4, 5, and 7. The social API is defined in sections 3, 4, 5, and 6. But some people use "server-to-server" or "s2s" as a synonym for the federation protocol, even though "server to server interactions" only covers one section. Similarly, some people use "c2s" or "client-to-server" as a synonym for the social API, even if "client-to-server interactions" is only one section.

I prefer to use "social API" or "ActivityPub API" to refer to the entire part of ActivityPub that lets client apps talk to social servers. Here are some rough reasons why.

  • It's what the spec calls it. In the conformance section, we said that 'this specification defines two closely related and interacting protocols: A client to server protocol, or "Social API" [...] A server to server protocol, or "Federation Protocol"'. This was intentional; the names come from the Social Web Working Group charter deliverables. Making a Social API was a key goal of the group. The ActivityPub API satisfies that goal.
  • It's a term that all developers and many users are familiar with. People who've used mobile apps or third-party apps know what an API is and what it's for. If you use "c2s", it's not clear to most developers what you're even talking about.
  • It's accurate. The social API is a RESTful API that uses JSON, HTTP, and all the fun stuff that app developers are already familiar with.
  • It emphasizes what's already available. People often say that Mastodon does not implement the ActivityPub API. But it implements sections 3, 4, and 5 of the specification โ€“ it has to, in order to support the federation protocol. That's the entire read-only side of the API. All (almost all?) Fediverse servers support these parts of the spec, too. You can build a pretty OK read-only API client using what's already available from Mastodon and others; see https://acct.swf.pub/ for an example.
  • "c2s" doesn't cover the whole API. As I said above, only one section of the doc is called "Client-to-Server Interactions", and it doesn't cover the read-only side of the API.
  • "c2s" is insider jargon. c2s isn't a common term for RESTful APIs. It really isn't a common term at all; there are only a few protocol suites, like XMPP, that refer to the "c2s" and "s2s" part.

I think it's fine if others use "c2s" when talking about the API, or especially about section 6 of the ActivityPub spec. It's not going to cause any harm. But the Social Web Community Group task force on implementing the API is called the "ActivityPub API" task force. I think that's a good idea โ€“ it emphasizes the API. I intent to use this name and framing for the foreseeable future.

Read more โ†’
0
0

Iโ€™m currently building a new app called diu, which is a to-do list that helps you understand what motivates you to do things, not just track them.

If that sounds interesting, join the waiting list over at getdiu.com
TestFlight coming pretty soon!

0
0

ใ‚ˆใฃใ“ใ„ใ— :saba:

e24737c612 (upstream/main) Replace `prettier` with `oxfmt` (#37893)
8e7c3973dc Remove conditional check for timeline data (#37922)
39ff07bc89 Only suggest `discoverable` accounts in collection account editor (#37920)
7eb4b907eb New Crowdin Translations (automated) (#37918)
2a9de97cb6 Use validation matchers for `UserEmailValidator` spec (#37908)
c118ff708f Merge collection settings into single editor page (#37916)
ed4787c1b1 Profile editing: Name and bio (#37907)
157583659a Use validation matchers for `UniqueUsernameValidator` spec (#37909)
40f92f3af8 Use validation matchers for `UnreservedUsernameValidator` spec (#37910)
e288bf6516 Show reported collections in moderation interface (#37898)
6f859364fb Update dependency rack to v3.2.5 (#37895)
238d0f8e1d Update dependency devise to v5.0.2 (#37903)
f48a299004 Use validation matchers for `UrlValidator` spec (#37911)
093528ef17 New Crowdin Translations (automated) (#37915)

0
0

V Praze pokraฤuje vรฝmฤ›na osvฤ›tlenรญ โ€“ sodรญkovรฉ lampy nahrazujรญ รบspornฤ›jลกรญ LED svฤ›tla. Proti jejich zavรกdฤ›nรญ se ale vymezuje ฤรกst veล™ejnosti i odbornรญci. Proฤ? Nejen to se dozvรญte se v dneลกnรญm dรญlu poล™adu Vysvฤ›tleno s Luciรญ Neuลพilovou.

0
0
0
0
0
0
0
0
0
0
0
0

ใƒ›ใƒŽใƒซใƒซใงใฏๅ‰ๅพŒใซใคใชใŒใฃใฆใ‚‹ใƒใ‚นใซใ‚‚ไธŠไธ‹ใซใ‹ใ•ใชใฃใฆใ‚‹ใƒใ‚นใซใ‚‚ไน—ใ‚Œใ‚‹ใชใ‚๏ผ

0
0
1
0

A bench end carved with a mermaid in the church of the coastal village of Zennor, Cornwall. A legend claims that a mysterious woman would sometimes attend church services, singing in a captivating, otherworldly voice. There seemed something of a spark between her and a handsome young chorister, and their voices would intertwine beautifully. After one service, the two walked to a nearby cove, disappeared beneath the waves, and were never seen again. The villagers realised the woman was a mermaid and had the bench she sat on carved with her image as a warning to men to beware of these dangerous creatures. Images of mermaids were quite common in medieval churches. Usually portrayed clutching mirrors and combs, they admonished worshippers about the temptations of vanity. At Zennor, the legend may have been invented to explain the carving after its meaning had been forgotten.

A wooden church bench, whose end is decorated with a worn image of a mermaid. She has long flowing hair and is clutching a round mirror and a comb.
0

Evan Prodromou shared the below article:

ActivityPub Social API Hackathon

evan @evan@activitypub.space

<p><a href="https://wedistribute.org/2025/08/social-web-foundation-is-betting-big-on-client-to-server-api/" rel="nofollow ugc">It's well-known</a> that we love the <a href="https://github.com/swicg/activitypub-api/" rel="nofollow ugc">ActivityPub API</a> at the Social Web Foundation.</p> <p>I think it would be great for our community to have an ActivityPub API hackathon sometime this year -- hopefully this summer. Hackathons are a great way to engage a lot of developers really quickly. They also are a great way to test that an API has enough power to get people from zero to working app in a day or a weekend.</p> <p>I see a few great times to do this:</p> <ul> <li><a href="https://dwebcamp.org/berlin-2026/" rel="nofollow ugc">DWeb Camp Berlin</a> in Berlin</li> <li><a href="https://fedicon.ca/" rel="nofollow ugc">Fedicon</a> 2026 ๐Ÿคž๐Ÿผ in Vancouver</li></ul>

Read more โ†’
0
0
1

Evan Prodromou shared the below article:

Why I use "ActivityPub API" or "Social API"

Evan Prodromou @evanp@ghost.evanp.me

One of the most interesting areas of exploration in the ActivityPub community right now is the ActivityPub API. Most people who know ActivityPub are familiar with its federation protocol, which lets social networking servers like Mastodon and Pixelfed share data between them. But there is another, closely-related feature in the same specification, called the "social API".

ActivityPub has five normative sections: 3 Objects, 4 Actors, 5 Collections, 6 Client-to-Server Interactions, and 7 Server-to-Server Interactions. 3, 4, and 5 provide a read-only interface to social data that is useful for both the federation protocol and the social API. It lets both clients and servers read information about users on the network, their feeds, and the things they make and share.

Section 6 is focused on the mechanism clients can use to create new activities, and the side-effects of those activities. "Activities" are the most important data structure in ActivityPub (which is why they're featured so prominently in the name!). They represent sentences or statements about things that happen on a social network, like "Christine created the image img123.jpg" or "Evan liked Christine's image img123.jpg" and "Amy shared Christine's image img123.jpg". Creating these statements is how clients can make things happen with ActivityPub.

Section 7 is focused on how and when servers can send these activities across the network to other servers. There are some side-effects that are laid out, but mostly they involve cache management.

So, here's the important point I want to make: the federation protocol which connects ActivityPub servers is defined in sections 3, 4, 5, and 7. The social API is defined in sections 3, 4, 5, and 6. But some people use "server-to-server" or "s2s" as a synonym for the federation protocol, even though "server to server interactions" only covers one section. Similarly, some people use "c2s" or "client-to-server" as a synonym for the social API, even if "client-to-server interactions" is only one section.

I prefer to use "social API" or "ActivityPub API" to refer to the entire part of ActivityPub that lets client apps talk to social servers. Here are some rough reasons why.

  • It's what the spec calls it. In the conformance section, we said that 'this specification defines two closely related and interacting protocols: A client to server protocol, or "Social API" [...] A server to server protocol, or "Federation Protocol"'. This was intentional; the names come from the Social Web Working Group charter deliverables. Making a Social API was a key goal of the group. The ActivityPub API satisfies that goal.
  • It's a term that all developers and many users are familiar with. People who've used mobile apps or third-party apps know what an API is and what it's for. If you use "c2s", it's not clear to most developers what you're even talking about.
  • It's accurate. The social API is a RESTful API that uses JSON, HTTP, and all the fun stuff that app developers are already familiar with.
  • It emphasizes what's already available. People often say that Mastodon does not implement the ActivityPub API. But it implements sections 3, 4, and 5 of the specification โ€“ it has to, in order to support the federation protocol. That's the entire read-only side of the API. All (almost all?) Fediverse servers support these parts of the spec, too. You can build a pretty OK read-only API client using what's already available from Mastodon and others; see https://acct.swf.pub/ for an example.
  • "c2s" doesn't cover the whole API. As I said above, only one section of the doc is called "Client-to-Server Interactions", and it doesn't cover the read-only side of the API.
  • "c2s" is insider jargon. c2s isn't a common term for RESTful APIs. It really isn't a common term at all; there are only a few protocol suites, like XMPP, that refer to the "c2s" and "s2s" part.

I think it's fine if others use "c2s" when talking about the API, or especially about section 6 of the ActivityPub spec. It's not going to cause any harm. But the Social Web Community Group task force on implementing the API is called the "ActivityPub API" task force. I think that's a good idea โ€“ it emphasizes the API. I intent to use this name and framing for the foreseeable future.

Read more โ†’
0
0
0