<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
      <title>Raphael Lullis</title>
      <generator uri="https://gohugo.io">Hugo</generator>
      <link>https://raphael.lullis.net/tags/activitypub/</link>
      <language>en-us</language>
      <author>Raphael Lullis</author>
      
      <updated>Tue, 03 Mar 2026 01:40:39 &#43;0300</updated>
      
      <item>
        <title>ADAPT: the server to bring back the (Social) Web</title>
        <link>https://raphael.lullis.net/adapt-activitypub/</link>
        <pubDate>Tue, 03 Mar 2026 01:40:39 &#43;0300</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/adapt-activitypub/</guid>
        <description>&lt;p&gt;The blog has been quiet - partly because my usual beat has lost a bit of space
to things that I can not &lt;em&gt;A&lt;/em&gt;ctually &lt;em&gt;I&lt;/em&gt;ndicate, and partly because frankly
nothing of major interest was going on in the Fediverse. Zuckerberg
plans to become an infrastructure company fizzled out due to (or
thanks to?) European regulations. Reddit continues its slow descent
into an exclusive forum for chatbots talking with each other and
finding hooks to plug some advertisement. Bluesky didn&amp;rsquo;t keep the
post-election hockey stick growth, but managed to hold on enough of
the userbase and hasn&amp;rsquo;t completely flamed out.&lt;/p&gt;
&lt;p&gt;Even &lt;a href=&#34;https://communick.com&#34;&gt;Communick&lt;/a&gt; had reached this weird stasis:
enough customers to pay the server bills but not enough growth to
justify more work on it. After going through one Social Dilemma, two
Twitter Diasporas and countless Mastodon and Lemmy instances getting
abandoned for insufficient support, maybe it was time to accept that
Federated Fetch was not going to happen.&lt;/p&gt;
&lt;p&gt;But by the end of last year, something started to change in a way that
people could no longer ignore. What was previously seen as Traditional
Corporate Greed has become a true concern for a full-on Surveillance
State. With Governments in the US and Europe pushing hard for age
verification requirements, content moderation mandates, and
platform-level accountability laws; centralized platforms are becoming
targets themselves. When you concentrate hundreds of millions of users
into a single system under a single jurisdiction, you make life easy
for the Powers That Be to control you.&lt;/p&gt;
&lt;p&gt;And it&amp;rsquo;s not like there are any innocent actors in this game, either.
That&amp;rsquo;s the deal platforms accepted when they decided that growth was
the only metric that mattered. And the companies that gave away
control of the communication channel for convenience and optimization
are finding out what it means to have no leverage: they&amp;rsquo;ve watched
their reach get algorithmically throttled, their content policies
changed without notice, and now they&amp;rsquo;re watching the platforms
themselves become political liabilities.&lt;/p&gt;
&lt;h2 id=&#34;what-then&#34;&gt;What then?&lt;/h2&gt;
&lt;p&gt;Of course, this pressure has caused some movement in the direction of
open and federated systems. Communick once again started getting a
more constant influx of signups. But no matter how far I extrapolate
those growth curves, it&amp;rsquo;s clear that the vast majority of people are
not going to take the initiative to move anywhere. If we want the
Fediverse to be universal and a credible threat to the Big Tech
platforms, we need to make it interesting for the &amp;ldquo;cottage industry&amp;rdquo;
that grows on every platform: small businesses looking for a way to
reach their customers, content creators who live and die by the size
of the audience, other independent developers looking to build a
product that serves a niche, etc. These are the people who suffers the
most with enshittification and artificial limitations of the
platforms, and these will be the first to try &lt;em&gt;any&lt;/em&gt; alternative that
seems better than the status quo.&lt;/p&gt;
&lt;p&gt;These problems will not go away if they leave one corporate-controlled
platform and move to &lt;em&gt;another&lt;/em&gt; corporate-controlled platform. Leaving
Twitter for Bluesky is not a solution. Leaving Facebook for TikTok
even less. The only logical response is to stop depending on
infrastructure they don&amp;rsquo;t control. What we need is to &lt;a href=&#34;https://raphael.lullis.net/a-plan-for-social-media-less-fedi-more-webby/&#34;&gt;bring back the
&lt;strong&gt;web&lt;/strong&gt;&lt;/a&gt;,
a loosely interconnected collection of servers that can withstand
individual failures.&lt;/p&gt;
&lt;h2 id=&#34;time-to-adapt&#34;&gt;Time to ADAPT&lt;/h2&gt;
&lt;p&gt;One of my many side projects is a website called
&lt;a href=&#34;https://cupid.careers&#34;&gt;CareerCupid&lt;/a&gt;. It is a website that could be
described as &amp;ldquo;OkCupid for Jobs&amp;rdquo;. People sign up, answer questions
about their values, work styles, needs and wants in a company. The
answers of all members are compared against one another and then we
give a &amp;ldquo;matching score&amp;rdquo; saying how well you would work together.&lt;/p&gt;
&lt;p&gt;To bootstrap the network, I wanted it to make it easy to participate
even if they never saw the website. So I had the idea of integrating a
bot which people could be followed on the Fediverse, and I wanted to
give one &amp;ldquo;actor&amp;rdquo; for each user that was on the website.&lt;/p&gt;
&lt;p&gt;Could I have done that by setting up a Mastodon instance and setting
up bot accounts? Yes. Was that what I did? Of course not. CareerCupid
is a Django site, so I&amp;rsquo;ve built my own library that could integrate
with it directly. In the process of getting that &amp;ldquo;cupid bot&amp;rdquo;
interacting with the whole Fediverse, I ended up learning and building
enough of ActivityPub and the related set of standards: RDF/Linked
Data, Webfinger, Authentication via HTTP message signatures&amp;hellip; but
above all it helped me understand that &lt;strong&gt;all the building blocks that
make the &amp;ldquo;Social Web&amp;rdquo; are also the building blocks of the Semantic
Web&lt;/strong&gt;. The idea of &amp;ldquo;different platforms that can talk with one
another&amp;rdquo; is already powerful, but the real insight is that this is
mostly a side-effect of RDF - and that integrations can be as trivial
as defining a custom vocabulary and letting the world know about it.
There&amp;rsquo;s a deeper implication here around &lt;a href=&#34;https://bryon.io/why-rdf-is-the-natural-knowledge-layer-for-ai-systems-a5fd0b43d4c5&#34;&gt;Linked Data and what it
means for AI
applications&lt;/a&gt; -
but that deserves its own post.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s basically how the &lt;a href=&#34;https://activitypub.mushroomlabs.com&#34;&gt;Django ActivityPub
Toolkit&lt;/a&gt; came to existence. It&amp;rsquo;s
not meant to be yet-another service to emulate the proprietary
networks (though it can be, as it provides a Lemmy-API adapter), but
rather a library and application server that can be used to let you
integrate your existing applications and let you build &lt;em&gt;on&lt;/em&gt; the social
graph (the same one Mastodon, Flipboard, and a growing number of other
services already use) without requiring you to bootstrap a whole
network every time.&lt;/p&gt;
&lt;h2 id=&#34;help-me-take-this-to-the-next-level&#34;&gt;Help me take this to the next level&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve been working on this alongside client work, which is the wrong
way to build infrastructure when things are changing so fast. I want
to make this my full-time job, ideally by finding a company that wants
to hire me to keep working on this. If that&amp;rsquo;s not the right fit yet,
I&amp;rsquo;m seeking 4 to 6 companies to each commit $2,500/month: 10 hours of
dedicated development for your specific use case, office hours for
your engineering team, and first right of refusal if the project gets
acquired. Think of it as sharing the cost of a dedicated
infrastructure engineer - at a fraction of what a full hire would run
any single one of you.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not looking for donations or one-time grants. This is closer to
buying an option: a small bet on infrastructure that might matter a
lot in two years, shaped in part by your own requirements, for less
than you&amp;rsquo;d spend on a single engineer&amp;rsquo;s weekly salary.&lt;/p&gt;
&lt;p&gt;The companies I have in mind are ones with an obvious &lt;a href=&#34;https://raphael.lullis.net/a-plan-for-social-media-the-what-the-why-the-who/&#34;&gt;strategic
interest in federated
infrastructure&lt;/a&gt;:
telcos who were turned into dumb pipes by Big Tech, news publications
who&amp;rsquo;d like to take back control of their distribution, browser vendors
who&amp;rsquo;d rather not depend on platform APIs. If that&amp;rsquo;s you, &lt;a href=&#34;../about&#34;&gt;get in touch&lt;/a&gt;.&lt;/p&gt;
</description>
      </item>
      
      <item>
        <title>Can we fix job sites?</title>
        <link>https://raphael.lullis.net/job-sites/</link>
        <pubDate>Tue, 11 Feb 2025 20:05:46 &#43;0100</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/job-sites/</guid>
        <description>&lt;p&gt;(I want to try something different here. Instead of a fully fleshed
out post, I&amp;rsquo;d like to just start with a draft of some ideas and I hope
that it is enough to generate a conversation. I&amp;rsquo;ll take the relevant
responses and use them to keep improving this article)&lt;/p&gt;
&lt;p&gt;StackOverflow is nowadays famous for being the site that you only go
after you&amp;rsquo;ve given up ChatGPT to stop hallucinating, but one of its
lesser known products was &lt;a href=&#34;https://stackoverflow.blog/2011/02/23/careers-2-0-launches/&#34;&gt;StackOverflow
Careers&lt;/a&gt;
(sorry, couldn&amp;rsquo;t find the link to the original announcement), which
absolutely raised the bar in how job sites worked. It was one of the
first sites every job listing had to provide information about the
hiring company and a direct contact. This might seem weird for anyone
born in this century&amp;hellip; but boy, how refreshing it was in 2010 to be
able to see a job listing who was not from a recruiting withholding
information.&lt;/p&gt;
&lt;p&gt;It seems like the social media and Big Tech broke job searching again.
Companies that are hiring are drowned by &amp;ldquo;content creators&amp;rdquo; on
LinkedIn or taking a &amp;ldquo;spray and pray&amp;rdquo; approach by posting to whatever
site is popular at any given month. Job seekers are now playing a game
of cat-and-mouse with AI tools, figuring out whether their changes are
going to help them stand out or make their CVs look exactly like
everyone else&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;Here is my tentative list of things that should be created for a job
site that fixes those issues:&lt;/p&gt;
&lt;h3 id=&#34;remove-siloes-and-walled-gardens&#34;&gt;Remove siloes and walled gardens.&lt;/h3&gt;
&lt;p&gt;This one is obvious. People shouldn&amp;rsquo;t have to sign up to any specific
site to access information. Applying could be as simple as sending a
message via email. With protocols like ActivityPub, we could have a
simple &amp;ldquo;like this job posting indicates interest&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;I am not saying that it &lt;em&gt;has&lt;/em&gt; to be built on ActivityPub, but anything
that brings some form decentralization (maybe
&lt;a href=&#34;https://solidproject.org/&#34;&gt;Solid&lt;/a&gt;?) would certainly be an improvement
over the status quo.&lt;/p&gt;
&lt;h3 id=&#34;create-a-standard-measurement-to-allow-people-to-know-where-they-are-skills-wise&#34;&gt;Create a standard measurement to allow people to know where they are, skills-wise.&lt;/h3&gt;
&lt;p&gt;This could be one good use of gamification. Imagine that every job
listing had a well defined matrix of required skills to do that job
&lt;em&gt;and&lt;/em&gt; at what level of expertise. People could figure out even before
applying whether they had a chance at the job or - most importantly -
they could see &lt;em&gt;exactly&lt;/em&gt; what is separating them for the next step up
in the professional career.&lt;/p&gt;
&lt;p&gt;If this is properly implemented, we would be able to get rid of the
whole &amp;ldquo;CV analysis&amp;rdquo; and all forms of subjetive evaluations.&lt;/p&gt;
&lt;h3 id=&#34;make-it-functional-for-people-who-are-not-looking-for-a-job&#34;&gt;Make it functional for people who are &lt;em&gt;not&lt;/em&gt; looking for a job&lt;/h3&gt;
&lt;p&gt;If you are happy at your job and you prefer to do your networking
offline, there is a good chance you only keep your LinkedIn account
for the &lt;a href=&#34;https://sh.itjust.works/c/linkedinlunatics&#34;&gt;entertainment
value&lt;/a&gt;. For most, joining
and participating in a professional-focused site makes sense &lt;em&gt;only&lt;/em&gt;
when job seeking. Sure, that by itself is already enough to bring a
massive user base, but couldn&amp;rsquo;t we make things even better by also
making things interesting and useful for those who want to help &lt;em&gt;others&lt;/em&gt;?&lt;/p&gt;
&lt;p&gt;Just an example: there are so many companies that create incentives
for employees who make good referrals. Couldn&amp;rsquo;t we perhaps think of a
system that enables established professionals to do that at a wider
scale?&lt;/p&gt;
&lt;p&gt;Or consider the ATS systems that are (mostly) managed by the
recruiters. They are built in a way where recruiters are kept in
control of the top of the funnel, and prospects are only introduced to
the hiring manager after they have passed some pre-screening
interview. This is not only slow, but it is also inneficient: even the
best of recruiters can not evaluate a potential candidate better than
their eventual team mates and direct reports. What if we could simply
get rid of pre-screening interviews by allowing everyone in the team
to join in the triage?&lt;/p&gt;
&lt;h3 id=&#34;reduce-the-stakes-prospecting-should-not-indicate-commitment&#34;&gt;Reduce the stakes: prospecting should not indicate commitment&lt;/h3&gt;
&lt;p&gt;The days of being rewarded by being loyal to any particular company
are long over. This means that the default state for anyone should be
&amp;ldquo;do your best, prepare for the worst&amp;rdquo;. Keeping a constant pulse on the
job market and being open to talk about new opportunities, &lt;em&gt;even&lt;/em&gt; when
you are perfectly happy with your employer, should be normalized and
not automatically treated as a sign that you are &amp;ldquo;ready to jump ship&amp;rdquo;.&lt;/p&gt;
&lt;h3 id=&#34;default-to-transparency&#34;&gt;Default to transparency&lt;/h3&gt;
&lt;p&gt;There is so much information that a company can disclose that could
and &lt;em&gt;should&lt;/em&gt; be available before we even get to the &amp;ldquo;apply now&amp;rdquo;
button: who is on the team? What is the current org-chart and who are
they are hiring for? How are they going to assess candidates for the
skills being required? Can this evaluation be done prior to the
application?&lt;/p&gt;
&lt;h3 id=&#34;no-gated-features-to-extract-revenue-from-job-seekers&#34;&gt;No gated features to extract revenue from job seekers&lt;/h3&gt;
&lt;p&gt;Paying for reach or access to a valuable contact is criminal.&lt;/p&gt;
&lt;h2 id=&#34;more&#34;&gt;More?&lt;/h2&gt;
&lt;p&gt;Thoughts? Suggestions? Let me know on @raphael@communick.com&lt;/p&gt;
</description>
      </item>
      
      <item>
        <title>When information is cheap, attention is expensive</title>
        <link>https://raphael.lullis.net/when-information-is-cheap-attention-is-expensive/</link>
        <pubDate>Thu, 26 Sep 2024 23:41:39 &#43;0200</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/when-information-is-cheap-attention-is-expensive/</guid>
        <description>&lt;p&gt;TL;DR: I have a number of Lemmy instances meant for discussion groups
around specific topics. They are not being as used as I
expected/hoped. I would like to set them up in a way that they can be
owned by a consortium of different admins so that they are
collectively owned. My only requirement: these instances should remain
closed for registrations and used only to create &lt;em&gt;communities&lt;/em&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;During the height of the &amp;ldquo;Reddit API protests&amp;rdquo;, I had come up with &lt;strong&gt;The Grand Plan&lt;/strong&gt; to bring a sizeable part of Reddit&amp;rsquo;s userbase to the Fediverse alternatives. &lt;strong&gt;The Grand Plan&lt;/strong&gt; was as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Identify the largest segments of community interests that are popular on Reddit.&lt;/li&gt;
&lt;li&gt;Create different Lemmy instances for each of these identified topics.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fediverser.io&#34;&gt;Build a tool to let users sign up to Lemmy and automatically subscribe them to the relevant communities based on their favorite subreddits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;???&lt;/li&gt;
&lt;li&gt;Profit!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Much to my own frustration, &lt;strong&gt;The Grand Plan&lt;/strong&gt; has not progressed much
beyond step #3. &lt;a href=&#34;https://raphael.lullis.net/a-plan-for-social-media-intro&#34;&gt;Reasons for this failure abound&lt;/a&gt;, but there are two flaws that are exclusively my fault:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Because I wanted to keep the instances focused around topics,
registrations were closed and I was the only one who could create
communities on them.&lt;/li&gt;
&lt;li&gt;Because I was promoting these instances along with
&lt;a href=&#34;https://communick.com&#34;&gt;Communick&lt;/a&gt;, I led people to believe that
these instances were going to be part of some commercial scheme.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I am now looking to find a way to fix both of these problems. I would
like to find a way to have these instances under the governance of
some collective or consortium, and to make them part of an unified
response for anyone that is looking for a Reddit alternative.&lt;/p&gt;
&lt;p&gt;These are the instances that are active and running:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://soccer.forum&#34;&gt;https://soccer.forum&lt;/a&gt; (Football)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nba.space&#34;&gt;https://nba.space&lt;/a&gt; (NBA Basketball)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nfl.community&#34;&gt;https://nfl.community&lt;/a&gt; (American Football)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://matchpoint.zone&#34;&gt;https://matchpoint.zone&lt;/a&gt; (Tennis)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hardware.watch&#34;&gt;https://hardware.watch&lt;/a&gt; (Consumer Electronics)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://poweruser.forum&#34;&gt;https://poweruser.forum&lt;/a&gt; (Software Support)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://selfhosted.forum&#34;&gt;https://selfhosted.forum&lt;/a&gt; (selfhosting)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blockchained.world&#34;&gt;https://blockchained.world&lt;/a&gt; (crypto)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://netheads.online&#34;&gt;https://netheads.online&lt;/a&gt; (VoIP)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sfw.community&#34;&gt;https://sfw.community&lt;/a&gt; (Equivalent to Reddit&amp;rsquo;s SFW Network)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://level-up.zone&#34;&gt;https://level-up.zone&lt;/a&gt; (Gaming)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://metacritics.zone&#34;&gt;https://metacritics.zone&lt;/a&gt; (TV &amp;amp; Movies)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://healthy.community&#34;&gt;https://healthy.community&lt;/a&gt; (Health &amp;amp; Fitness)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://indiehackers.space&#34;&gt;https://indiehackers.space&lt;/a&gt; (Business and Entrepreneurship)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://viewfinder.pro&#34;&gt;https://viewfinder.pro&lt;/a&gt; (Photography)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hi-fi.community&#34;&gt;https://hi-fi.community&lt;/a&gt; (Hi-Fi Audio)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://style.land&#34;&gt;https://style.land&lt;/a&gt; (Fashion and style)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gearhead.town&#34;&gt;https://gearhead.town&lt;/a&gt; (Car and Motor)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My only &amp;ldquo;requirement&amp;rdquo; to make this happen is to keep these instances
&lt;em&gt;exclusively&lt;/em&gt; as a home for groups, so registration should be closed
at all times. &lt;a href=&#34;https://raphael.lullis.net/federations-and-identity/&#34;&gt;Unlike with Mastodon&lt;/a&gt;, I
believe that keeping groups/community actors connected to instances of
related interests for the following reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Make it easy for content discovery. Things currently are very ad-hoc
and people tend to create communities for their interests if they do
not immediately find them on their instance. If we have a better
separation between &amp;ldquo;instances for users&amp;rdquo; and &amp;ldquo;instances for groups&amp;rdquo;,
onboarding would be easier and unnecessary duplication can be
avoided.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mitigate potential issues from political fighting between users from
different instances. If instance A has a conflict from instance B
and wants to defederate and if a community is popular on B, then the
&amp;ldquo;natural reaction&amp;rdquo; would be for users on A having to recreate the
communities. This is not just a problem for users of A and B, but
everyone else on other instances. If the communities are on a
neutral ground, they would be less likely to become collateral
damage.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If we have instances that are more focused on hosting users, it
would be easier to distribute incoming users around.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To repeat: I am &lt;strong&gt;not&lt;/strong&gt; doing this because of financial issues (though I wouldn&amp;rsquo;t
mind if you want to &lt;a href=&#34;https://github.com/sponsors/mushroomlabs&#34;&gt;become a
sponsor&lt;/a&gt;) or because I am
unable to keep managing them. The only reason that I am considering
this is to see if I can get more alignment with other instance admins
and organizations that might be interested in collaborating.&lt;/p&gt;
&lt;p&gt;If you are part of an organization that could be interested in
joining, or if you are an individual who would like to help, please
feel free to reach me on &lt;a href=&#34;@raphael@communick.com&#34;&gt;Mastodon&lt;/a&gt;.&lt;/p&gt;
</description>
      </item>
      
      <item>
        <title>A Plan for Social Media - What? ✅ Why? ✅ Who? 🤷</title>
        <link>https://raphael.lullis.net/a-plan-for-social-media-the-what-the-why-the-who/</link>
        <pubDate>Mon, 20 May 2024 23:45:00 &#43;0200</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/a-plan-for-social-media-the-what-the-why-the-who/</guid>
        <description>&lt;p&gt;This is the final part of the series calling for a different approach
in the development of Social Media based on open standards. In the
&lt;a href=&#34;https://raphael.lullis.net/a-plan-for-social-media-less-fedi-more-webby&#34;&gt;previous post&lt;/a&gt;, I
argued that we could build applications that relied less on
functionality provided by the server and put the client in control.
The server software needed would be responsible mostly for
authenticating users (i.e, keeping track of user identities) and
sending and routing ActivityPub messages.&lt;/p&gt;
&lt;p&gt;I want to close out this series with a list of market players who
&lt;em&gt;could&lt;/em&gt; be interested in trying out this strategy. Unfortunately,
investment in new technologies is more dependent on hype than on a
clear value-based evaluation, which means that someone like Mozilla
backing down of their plans can be seen that the momentum for the open
social web is reduced. Couple that with the fact that &amp;ldquo;Fediverse
Culture&amp;rdquo; is still largely anti-corporate and averse to &amp;ldquo;profit-motive&amp;rdquo;
ventures and it&amp;rsquo;s hard to imagine a large number of companies eager to
place some bets into this game.&lt;/p&gt;
&lt;p&gt;Still, I do believe that there is an opportunity here. Just look at
how much Facebook is investing strongly on Threads and its (so far,
credible) commitment to interoperate with other ActivityPub-based
systems. Threads has been promoted as the &amp;ldquo;Twitter killer&amp;rdquo;, but to me,
this is more than just a social network with billions of users trying
to snag a hundred million more from a rival; Zuckerberg&amp;rsquo;s investment
in Threads should be seen as a &lt;a href=&#34;https://www.fromjason.xyz/p/notebook/copy-acquire-kill-how-meta-could-pull-off-the-most-extraordinary-pivot-in-tech-history/&#34;&gt;medium-long term play to move away
from being a company that runs a panopticon to an &lt;em&gt;infrastructure
provider&lt;/em&gt; for other
companies&lt;/a&gt;.
This move makes sense to them. We are already seeing how AI-generated
content is ruining
&lt;a href=&#34;https://futurism.com/ai-garbage-destroying-google-results&#34;&gt;search&lt;/a&gt;
and &lt;a href=&#34;https://www.404media.co/ai-is-poisoning-reddit-to-promote-products-and-game-google-with-parasite-seo/&#34;&gt;poisoning the well of community
recommendations&lt;/a&gt;.
It seems reasonable to believe that social media will be moving away
from the &amp;ldquo;global town square&amp;rdquo; and give room to direct conversations
between people in small groups that already have a established
connection. With that in mind, who should we be watching for as
potential businesses coming up with new initiatives in the space?&lt;/p&gt;
&lt;h3 id=&#34;browser-vendors&#34;&gt;Browser vendors&lt;/h3&gt;
&lt;p&gt;Mozilla&amp;rsquo;s initial effort failed. And, &lt;a href=&#34;https://gizmodo.com/google-chat-hangouts-meet-talk-messages-explained-1849733798&#34;&gt;unlike
Google&lt;/a&gt;,
they do not have a history of persuing a space multiple times. They
have taken many shots at different ideas, but I do not recall any
project that has been repeatedly tried.&lt;/p&gt;
&lt;p&gt;What about the other browser vendors, though? Apple still leans hard
on the idea that their platform is more secure and protective of
users&amp;rsquo; privacy. They are also known for &amp;ldquo;not doing social media&amp;rdquo;. But
the appealing aspect of a protocol-based approach to it is that they
wouldn&amp;rsquo;t have to build the network, they would just need to ensure
that the experience is superior. Consider how the whole &amp;ldquo;Reddit API
protests&amp;rdquo; started due the most popular client (Apollo) being so much
better than the Reddit&amp;rsquo;s own client that it was hurting Reddit&amp;rsquo;s
revenues. Would it be too crazy to have Apple re-hiring Christian
Selig to make &amp;ldquo;Social Web Client&amp;rdquo; built &lt;em&gt;into&lt;/em&gt; iOS or Safari?&lt;/p&gt;
&lt;p&gt;If not Apple, maybe other Chrome-based, privacy-focused
browsers? Brave could use some investment in social as a way to
reinvegorate its &lt;a href=&#34;https://creators.brave.com/&#34;&gt;crowdfunding platform&lt;/a&gt;
and could also leverage its in-device ad inventory, turning into a
system that let advertisers find their audience and connecting them
&lt;em&gt;directly&lt;/em&gt; through social media. Users of DDG and Vivaldi with a
built-in social browser would certainly have increased usage and
contribute to their revenue streams.&lt;/p&gt;
&lt;h3 id=&#34;website-builders&#34;&gt;Website builders&lt;/h3&gt;
&lt;p&gt;One of the worst aspects of the &amp;ldquo;walled gardens&amp;rdquo; was that it made
&lt;a href=&#34;https://theoatmeal.com/comics/reaching_people_2021&#34;&gt;impossible for independent professionals and small businesses to
reach their customers unless they paid to promote their own
content&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Whether you are the owner a small restaurant, a farmer selling produce
at a local market or a wedding photographer, having all these separate
social media networks means that you &lt;em&gt;have&lt;/em&gt; to keep an online presence
on each of them.&lt;/p&gt;
&lt;p&gt;Being able to have social web based on open standards would mean that
people would be able to take back control of their online presence. As
long as you have your own domain, you are in control of how you
interact with anyone else.&lt;/p&gt;
&lt;p&gt;If Facebook&amp;rsquo;s plan really is to pivot to an infrastructure provider,
it would be wise for companies like
&lt;a href=&#34;https://squarespace.com&#34;&gt;squarespace&lt;/a&gt;, &lt;a href=&#34;https://wix.com&#34;&gt;Wix&lt;/a&gt; and
&lt;a href=&#34;https://weebly.com&#34;&gt;Weebly&lt;/a&gt; to preempt their move and create
offerings where their customers can simply provide their domain and
get an account on ActivityPub-capable server. This move is already
happening in the open source world: Wordpress has already created an
integration with ActivityPub that lets people follow and interact with
a blog from Mastodon and other Fediverse software, and
&lt;a href=&#34;https://activitypub.ghost.org&#34;&gt;Ghost&lt;/a&gt; also started working on it,
presumably with the intent of adding monetization options for content
creators that want to have an alternative to the likes of Medium and
Substack.&lt;/p&gt;
&lt;h3 id=&#34;domain-registrars&#34;&gt;Domain registrars&lt;/h3&gt;
&lt;p&gt;Identity and reputation is an integral part of decentralized systems.
If you receive a message from a recruiter that claims to work for
ACME, inc., but the email message is sent from
&amp;ldquo;&lt;a href=&#34;mailto:jane.from.acme@hotmail.com&#34;&gt;jane.from.acme@hotmail.com&lt;/a&gt;&amp;rdquo; you will be a lot less likely to trust
it. With current social media, we are still in this weird situation
where brands and famous individuals risk their names
taken by squatters and have to rely either on &amp;ldquo;blue checks&amp;rdquo; or having
enough clout to be able to claim their name back, which can be a long
process.&lt;/p&gt;
&lt;p&gt;The majority of domain registrars offer auxiliary services for
everyone that is buying their own domain. The current suite of
&amp;ldquo;Fediverse&amp;rdquo; software is still too big for these companies to be able
to offer, but having a simpler, client-first system for ActivityPub
would mean that they could partner with other service providers or
even run their own, like they do with email.&lt;/p&gt;
&lt;h2 id=&#34;final-thoughts&#34;&gt;Final thoughts&lt;/h2&gt;
&lt;p&gt;I don&amp;rsquo;t really have a definitive conclusion here. I just wanted to lay
out some thoughts based on my involvement with the Fediverse and from
observing the direction that its development has taken. While it&amp;rsquo;s
impossible to prove it, I sincerely believe that we have enough
evidence to conclude that the current server-centric approach is not
going to be able to take us to the next level in mass adoption. To
support this belief, I can say that Communick is no longer going to
offer Managed Mastodon hosting (for new customers, existing ones do
not need to worry) and will instead focus on promoting
&lt;a href=&#34;https://communick.com/takahe&#34;&gt;Takahe&lt;/a&gt;, because it at least provides a
solution where one server can be used to as a host for multiple
domains. I also starting exploring some ideas on a fork of Takahe to
make it a testbed for ActivityPub C2S.&lt;/p&gt;
&lt;p&gt;If you are interested in the future of social media and would like to
support my work, here is how you can help, in order of increasing commitment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://communick.com/packages/access&#34;&gt;Join Communick&lt;/a&gt;. For
$29/year, you get access to a suite of services that includes an
account on &lt;a href=&#34;https://mastodon.communick.com&#34;&gt;Mastodon&lt;/a&gt;, Matrix,
&lt;a href=&#34;https://communick.news&#34;&gt;Lemmy&lt;/a&gt; and also listen to music on
&lt;a href=&#34;https://communick.stream&#34;&gt;Funkwhale&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/sponsors/mushroomlabs&#34;&gt;Become a sponsor&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;mailto://raphael@lullis.net.pleaseremovethis.com&#34;&gt;Hire me&lt;/a&gt;. I&amp;rsquo;ve been working with web and large-scale distributed
systems for almost 20 years, but most important I have a good
track record for delivering customer-first, product-focused work.
Whether for full-time or part-time positions, I am available for any
short-term or long-term project.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
      
      <item>
        <title>A Plan for Social Media - Rethinking Federation</title>
        <link>https://raphael.lullis.net/a-plan-for-social-media-less-fedi-more-webby/</link>
        <pubDate>Sat, 18 May 2024 15:45:00 &#43;0200</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/a-plan-for-social-media-less-fedi-more-webby/</guid>
        <description>&lt;p&gt;This is part of a series of posts about the current state of Social
Media. I talked about &lt;a href=&#34;https://raphael.lullis.net/a-plan-for-social-media-intro&#34;&gt;Mozilla&amp;rsquo;s failed
strategy&lt;/a&gt; to get people out of the
corporate-controlled networks and into the open alternatives and made
a &lt;a href=&#34;https://raphael.lullis.net/a-plan-for-social-media-activitypub&#34;&gt;quick demonstration of how ActivityPub is
used&lt;/a&gt; to power the &amp;ldquo;Social Web&amp;rdquo;.
I wanted to talk about these things before I get to the main point of
my thesis: the &amp;ldquo;Fediverse&amp;rdquo; as a concept of &amp;ldquo;servers who can interact
with one another&amp;rdquo; is antithetical to the open, social &lt;em&gt;web&lt;/em&gt;. We need
to go back to the drawing board and re-design our software in a way
that creates bottom-up connections, instead of the current top-down
approach.&lt;/p&gt;
&lt;h4 id=&#34;federation-is-not-the-natural-unit-of-social-organization&#34;&gt;Federation is not the natural unit of social organization&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://raphael.lullis.net/federations-and-identity/&#34;&gt;I&amp;rsquo;ve already talked about this before&lt;/a&gt;,
but to reiterate: aside from cases where people are self-selecting or
acting as a representative of a larger group - i.e, they are part of
that network &lt;em&gt;because&lt;/em&gt; of their affiliation - the federation model has
little to do with how people identify themselves and their
relationships with others. It&amp;rsquo;s no wonder so many people have
difficulty &amp;ldquo;choosing an instance&amp;rdquo;: they are implicitly being asked to
pledge alliance to a group they never met before, and are told
(literally!) that this will be a crucial part of their identity in
this social space.&lt;/p&gt;
&lt;p&gt;Other protocols like Bluesky have solved this issue, and there has
been work on &lt;a href=&#34;https://jointakahe.org&#34;&gt;ActivityPub servers that decouple their domain from the
user&amp;rsquo;s Actor ID&lt;/a&gt;, but the majority of servers
still operate on the idea that users that want to use their service
must &amp;ldquo;belong&amp;rdquo; to them.&lt;/p&gt;
&lt;h4 id=&#34;servers-are-expensive-to-operate&#34;&gt;Servers are expensive to operate&lt;/h4&gt;
&lt;p&gt;Centralized services benefit from a client-server architecture because
of economies of scale. The marginal cost per extra user is neglibile
compared to the initial cost of setting up a server, so when your
service is being used by thousands of people, it is more than
reasonable to focus on having a system that can grow by &amp;ldquo;throwing more
machines at it&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;This is not &lt;em&gt;necessarily&lt;/em&gt; true for distributed services. The obvious
example is the &amp;ldquo;single-user&amp;rdquo; instance: any service provider will have
to provision a whole Mastodon server, with its own database and its
own processing queues, which can not be shared with other people.&lt;/p&gt;
&lt;h4 id=&#34;we-should-not-and-need-not-emulate-the-fragmentation-of-closed-social-networks&#34;&gt;We should not and need not emulate the fragmentation of closed social networks&lt;/h4&gt;
&lt;p&gt;While it&amp;rsquo;s undeniable that the developers of the leading projects have
largely delivered on the promise of &amp;ldquo;getting rid of walled gardens&amp;rdquo;,
it&amp;rsquo;s also true that our user experience is still determined by the
type of server that we are using. This happens because projects have
started by emulating one of the closed social platforms and &amp;ldquo;porting&amp;rdquo;
it to ActivityPub.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mastodon (Pleroma, Misskey): like Twitter, but can federate!&lt;/li&gt;
&lt;li&gt;PixelFed: Federated Instagram!&lt;/li&gt;
&lt;li&gt;Lemmy: Reddit, but federated!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While there are some projects that try to unify some of these aspects
(kbin, for example, provides both microblogging and group discussion),
people still need to keep multiple accounts in different servers if
they want to do different things. You can not follow someone&amp;rsquo;s
Pixelfed stories from your Mastodon account, even though a less
&amp;ldquo;server-centric&amp;rdquo; ActivityPub application would make this perfectly
possible.&lt;/p&gt;
&lt;h4 id=&#34;the-server-is-the-wrong-place-for-application-logic&#34;&gt;The server is the wrong place for application logic&lt;/h4&gt;
&lt;p&gt;Some issues from Mastodon:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When you first sign up to a account, you might be greeted
with a list of recommended users to follow. This list can be
configured by the server admin, but in any case it will only be able
to show you accounts that are from the same server as yours or from a
server that already &amp;ldquo;federates&amp;rdquo; with it.&lt;/li&gt;
&lt;li&gt;If you visit a profile from an account from a different server, you
can only see their posts that have directly interacted with your
server. If you are on a small server, chances are that you will see
only the profile information, but none of their previous posts, and
you will have to browse to the &amp;ldquo;remote&amp;rdquo; instance to see their actual
timeline.&lt;/li&gt;
&lt;li&gt;When you run a search query, you are running the query through the
server, and again the results are only a reflection of the data that
has been &amp;ldquo;seen&amp;rdquo; by the server.&lt;/li&gt;
&lt;li&gt;The &amp;ldquo;trending hashtags&amp;rdquo; feature only works for tags that have been
explicitly approved by the instance admin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lemmy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The server provides different sorting methods for posts and
comments, such as &amp;ldquo;Hot&amp;rdquo;, &amp;ldquo;Active&amp;rdquo;, &amp;ldquo;Newest&amp;rdquo;, etc. There is no way
for the user to define their own sorting method.&lt;/li&gt;
&lt;li&gt;There is no reasonable way to define policies to handle votes,
aside from instance admin being able to enable/disable &amp;ldquo;downvotes&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All these issues could&amp;rsquo;ve been avoided if the decision-making process
was delegated to the client. It&amp;rsquo;s nice that the server can make search
queries, but it would be &lt;em&gt;even better&lt;/em&gt; if the client could choose a
separate, &amp;ldquo;global&amp;rdquo; search engine. It&amp;rsquo;s nice that the server can make
recommendations for accounts to follow, but it would be even better if
I had a menu pointing me to external services that are dedicated to
this task. By forcing the user to do everything through the server, we
become needlessly dependent on it.&lt;/p&gt;
&lt;h2 id=&#34;networks-are-smarter-at-the-edges&#34;&gt;Networks are smarter at the edges.&lt;/h2&gt;
&lt;p&gt;The &amp;ldquo;server-centric&amp;rdquo; approach to the application development is at
odds with the nature of distributed systems. We need to &lt;a href=&#34;https://raphael.lullis.net/thinking-heads-are-not-in-the-clouds/&#34;&gt;stop treating
the client as a dumb terminal&lt;/a&gt;
and give it as much power (and responsibility) as possible.&lt;/p&gt;
&lt;p&gt;The curious thing is that ActivityPub has already quite a bit a work
of done to allow applications to do exactly that. The W3C
specification has a &amp;ldquo;Client-to-Server&amp;rdquo; (C2S) API to standardize how
clients can interact with their inbox and outbox, if we flip the
architecture of the applications and make the clients responsible for
the &amp;ldquo;smart&amp;rdquo; parts of the system (content discovery, timeline
management, filtering rules for moderation and protection, etc) and
let the server squarely with the single responsibility of message
routing, not only we would make of the application development faster,
we would quite possibly solve the scalibility and TCO issues of the
server. If we consider that &lt;a href=&#34;https://www.process-one.net/blog/ejabberd-massive-scalability-1node-2-million-concurrent-users/&#34;&gt;XMPP servers can handle millions of
concurrent users on a single
node&lt;/a&gt;,
it&amp;rsquo;s easy to realize that this architecture would make large scale
deployments of Social apps cheaper.&lt;/p&gt;
&lt;p&gt;There is also another benefit for server operators: by turning the
server into a &amp;ldquo;simple&amp;rdquo; message relay, there would be &lt;em&gt;no&lt;/em&gt; data stored
in the server and these messages could even be end-to-end encrypted,
which would mean that operators would have less liability risk.&lt;/p&gt;
&lt;p&gt;Lastly, we can not ignore one potential improvement in regards to
privacy. Less data on the servers means there is less data available
for the likes of Google, Facebook and OpenAI.&lt;/p&gt;
&lt;h2 id=&#34;the-proposal-a-social-web-browser-built-into-the-browser&#34;&gt;The proposal: a Social Web browser, built into the browser.&lt;/h2&gt;
&lt;p&gt;If we have the client as the center piece of our social web, why not
build it already in the foundation of the web client that is already
used by virtually everyone?&lt;/p&gt;
&lt;p&gt;Going back to our very first post in this series: what did I expect to
see from an organization known for developing a web browser, if not an
initiative to have these features &lt;em&gt;in the browser&lt;/em&gt;? Instead of
experimenting with their own instance, Mozilla could have &amp;ldquo;executed with
greater agility&amp;rdquo; if they worked on a browser extension that started a
simple &amp;ldquo;Actor ID&amp;rdquo; follower. That alone would already be as useful as
a &amp;ldquo;RSS reader for the social web&amp;rdquo;. After they got this in place, they
could start refining it. Add login capabilities, notify user of
received messages, post messages to public timeline, etc.&lt;/p&gt;
&lt;p&gt;And for bonus points: after we got these building blocks in place,
there would be nothing stopping us to extend the functionality to
&lt;em&gt;other&lt;/em&gt; networks. What better way to prevent data tracking from the
likes of Reddit/Facebook/Twitter than by simply having an alternate
client inside the browser?&lt;/p&gt;
&lt;p&gt;There are extensions like
&lt;a href=&#34;https://libredirect.github.io/&#34;&gt;libredirect&lt;/a&gt; that take links to
&amp;ldquo;problematic&amp;rdquo; sites and point to alternative frontends. If users could
have such a service built &lt;em&gt;into&lt;/em&gt; the browser, we would be effectively
denying the companies any chance of tracking users extensively.&lt;/p&gt;
</description>
      </item>
      
      <item>
        <title>A Plan for Social Media - Understanding ActivityPub</title>
        <link>https://raphael.lullis.net/a-plan-for-social-media-activitypub/</link>
        <pubDate>Sat, 18 May 2024 03:00:00 &#43;0200</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/a-plan-for-social-media-activitypub/</guid>
        <description>&lt;p&gt;This is part of a series of posts about the current state of Social
Media and the Fediverse. In the &lt;a href=&#34;https://raphael.lullis.net/a-plan-for-social-media-intro&#34;&gt;first
post&lt;/a&gt;, I described some of the issues
with the shot that Mozilla took with their mozilla.social initiative.
By the end of this series, I plan to have laid out a strategy that can
be more successful. But before doing all that, it will be good to have
a very fundamental understanding of ActivityPub, the protocol that
enables interoperability between all the different services. Let&amp;rsquo;s get
to it.&lt;/p&gt;
&lt;h2 id=&#34;activitypub-actors-and-message-boxes&#34;&gt;ActivityPub, actors and message boxes&lt;/h2&gt;
&lt;p&gt;If you want a proper introduction to the protocol, a good
resource to start is &lt;a href=&#34;https//activitypub.rocks&#34;&gt;activitypub.rocks&lt;/a&gt;. There we can find this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://raphael.lullis.net/images/activitypub-intro.png&#34; alt=&#34;Sequence Diagram for ActivityPub&#34;&gt;&lt;/p&gt;
&lt;p&gt;The diagram introduces us to the three main concepts in ActivityPub:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Actors&lt;/em&gt; as the entity being addressed by messages&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;inbox&lt;/em&gt; is the URL where the actor can be reached&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;outbox&lt;/em&gt; is the URL used by the actor to post new messages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This looks simple, but how do we get from these simple concepts into an
useable application? Let&amp;rsquo;s say that we want to find out what was the
last message that I posted on my
&lt;a href=&#34;https://mastodon.communick.com/@raphael&#34;&gt;@raphael@communick.com&lt;/a&gt;
account.&lt;/p&gt;
&lt;p&gt;The first thing we will figure out is that my handle is
&lt;code&gt;@communick.com&lt;/code&gt;, but the server is &lt;code&gt;mastodon.communick.com&lt;/code&gt;. How
do we get from one to the other? The answer is
&lt;a href=&#34;https://webfinger.net/&#34;&gt;Webfinger&lt;/a&gt;, a protocol to help us with
service discovery via the web.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s query &lt;code&gt;communick.com&lt;/code&gt; and find out where to reach my account:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://communick.com/.well-known/webfinger?resource=acct:raphael@communick.com&amp;#34;&lt;/span&gt; -I
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I am cheating a bit here. I&amp;rsquo;m using the &lt;code&gt;-I&lt;/code&gt; flag is to show us the
response headers, because I know already that&amp;rsquo;s the relevant part of the response:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HTTP/2 &lt;span style=&#34;color:#ae81ff&#34;&gt;302&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;content-type: text/html; charset&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;utf-8
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cross-origin-opener-policy: same-origin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;date: Fri, &lt;span style=&#34;color:#ae81ff&#34;&gt;17&lt;/span&gt; May &lt;span style=&#34;color:#ae81ff&#34;&gt;2024&lt;/span&gt; 01:43:01 GMT
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;location: https://mastodon.communick.com/.well-known/webfinger?resource&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;acct%3Araphael%40communick.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;referrer-policy: same-origin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;server: uvicorn
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;x-content-type-options: nosniff
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;x-frame-options: DENY
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;content-length: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ha! &lt;code&gt;communick.com&lt;/code&gt; is telling us to go to &lt;code&gt;mastodon.communick.com&lt;/code&gt;, and
make the same query there. Let&amp;rsquo;s try it, this time we expect the
actual data:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/.well-known/webfinger?resource=acct:raphael@communick.com&amp;#34;&lt;/span&gt; | jq .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And the response is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;subject&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;acct:raphael@communick.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;aliases&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/@raphael&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;links&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;rel&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://webfinger.net/rel/profile-page&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text/html&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;href&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/@raphael&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;rel&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;self&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/activity+json&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;href&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;rel&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://ostatus.org/schema/1.0/subscribe&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;template&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/authorize_interaction?uri={uri}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So, now we know how my account actually lives. The response is
describing different links that would be relevant to someone who want
to interact with this account. From those, the most interesting one is
rel=self`, which tells us which url is used to represent my profile as
an actor. It is also indicating what mime-type should be used to make
the request. Let&amp;rsquo;s try it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl https://mastodon.communick.com/users/raphael -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;accept: application/activity+json&amp;#39;&lt;/span&gt; | jq .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And the response - with most attributes ommited for brevity:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;@context&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.w3.org/ns/activitystreams&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://w3id.org/security/v1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Person&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;following&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael/following&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;followers&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael/followers&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;inbox&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael/inbox&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;outbox&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael/outbox&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;featured&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael/collections/featured&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;featuredTags&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael/collections/tags&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;preferredUsername&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;raphael&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Raphael Lullis&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;devices&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael/collections/devices&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;publicKey&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael#main-key&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;owner&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;publicKeyPem&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Qsjv7JwN0vnEk6Vtqiv\n/S6qk7yGmynpGZW1F/qiuzpnoLfF18czx0UFHU4imU8xv8eYDhvRUSj1nVwRmT/S\noIA0c/zlesBxkxMxtiml/dbaTUXxfgsa5SKtw6l8CaFv1IfpXAmc9T24RFiUVFGU\nWUDtKqWwYwT+QZiQG7YAF89ehEcXvbGajnQOnORgT3O+M4VOxMgNMzZsvtCTa9kg\nY1Ll56lk5XkOy/VauC5YmawAUDcfinpZVHjkKmVE+qaOg0ELduL6Vw42CADCN3TV\nHz0Ap6wJPeTj0ma+a2l8eE9MyqX7M7Y115kV2eyB0/BKMKdhMyLuNaocCFNjhm4y\ncQIDAQAB\n-----END PUBLIC KEY-----\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Alright, now we are getting closer. Not only this response already
provided the &lt;strong&gt;cryptographic public key&lt;/strong&gt; used by my account (an
important aspect for those that want to make sure that the messages
I&amp;rsquo;m sending are actually from me), we have also have the urls that
tells us what are the &lt;code&gt;inbox&lt;/code&gt; and the &lt;code&gt;outbox&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s find out what type of nonsense I&amp;rsquo;ve been posting?&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl https://mastodon.communick.com/users/raphael/outbox -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;accept: application/activity+json&amp;#39;&lt;/span&gt; | jq .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;@context&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.w3.org/ns/activitystreams&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael/outbox&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;OrderedCollection&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;totalItems&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1474&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;first&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael/outbox?page=true&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;last&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael/outbox?min_id=0&amp;amp;page=true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So, the people working on Mastodon are smart enough to know that they
shouldn&amp;rsquo;t respond with all 1474 posts every time someone request the
content of my outbox, so it tells us to look at the paginated results.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mastodon.communick.com/users/raphael/outbox?page=true&amp;#34;&lt;/span&gt; -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Accept: application/ld+json&amp;#39;&lt;/span&gt; | jq .orderedItems.&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt;.id
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Again for brevity, I&amp;rsquo;m going to list only the ids of the posts.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112453788068689232/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112451233768213990/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112450952761586193/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112450838604583727/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112450692646931646/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112450481357958805/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112450434346644443/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112450380678942390/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112450366779981942/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112450254434441343/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112445793173734858/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112445792468741280/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112445753422312223/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112445505614367554/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112427864602893406/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112412635359916476/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112411290416210974/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112410255917704070/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112409574645967938/activity&amp;#34;
&amp;#34;https://mastodon.communick.com/users/raphael/statuses/112409529723480739/activity&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And let&amp;rsquo;s take a look at the response for the first result (i.e, my most recent post):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{
  &amp;#34;@context&amp;#34;: [
    &amp;#34;https://www.w3.org/ns/activitystreams&amp;#34;,
    {
      &amp;#34;ostatus&amp;#34;: &amp;#34;http://ostatus.org#&amp;#34;,
      &amp;#34;atomUri&amp;#34;: &amp;#34;ostatus:atomUri&amp;#34;,
      &amp;#34;inReplyToAtomUri&amp;#34;: &amp;#34;ostatus:inReplyToAtomUri&amp;#34;,
      &amp;#34;conversation&amp;#34;: &amp;#34;ostatus:conversation&amp;#34;,
      &amp;#34;sensitive&amp;#34;: &amp;#34;as:sensitive&amp;#34;,
      &amp;#34;toot&amp;#34;: &amp;#34;http://joinmastodon.org/ns#&amp;#34;,
      &amp;#34;votersCount&amp;#34;: &amp;#34;toot:votersCount&amp;#34;,
      &amp;#34;Hashtag&amp;#34;: &amp;#34;as:Hashtag&amp;#34;
    }
  ],
  &amp;#34;id&amp;#34;: &amp;#34;https://mastodon.communick.com/users/raphael/statuses/112453788068689232/activity&amp;#34;,
  &amp;#34;type&amp;#34;: &amp;#34;Create&amp;#34;,
  &amp;#34;actor&amp;#34;: &amp;#34;https://mastodon.communick.com/users/raphael&amp;#34;,
  &amp;#34;published&amp;#34;: &amp;#34;2024-05-17T01:17:11Z&amp;#34;,
  &amp;#34;to&amp;#34;: [
    &amp;#34;https://www.w3.org/ns/activitystreams#Public&amp;#34;
  ],
  &amp;#34;cc&amp;#34;: [
    &amp;#34;https://mastodon.communick.com/users/raphael/followers&amp;#34;
  ],
  &amp;#34;object&amp;#34;: {
    &amp;#34;id&amp;#34;: &amp;#34;https://mastodon.communick.com/users/raphael/statuses/112453788068689232&amp;#34;,
    &amp;#34;type&amp;#34;: &amp;#34;Note&amp;#34;,
    &amp;#34;summary&amp;#34;: null,
    &amp;#34;inReplyTo&amp;#34;: null,
    &amp;#34;published&amp;#34;: &amp;#34;2024-05-17T01:17:11Z&amp;#34;,
    &amp;#34;url&amp;#34;: &amp;#34;https://mastodon.communick.com/@raphael/112453788068689232&amp;#34;,
    &amp;#34;attributedTo&amp;#34;: &amp;#34;https://mastodon.communick.com/users/raphael&amp;#34;,
    &amp;#34;to&amp;#34;: [
      &amp;#34;https://www.w3.org/ns/activitystreams#Public&amp;#34;
    ],
    &amp;#34;cc&amp;#34;: [
      &amp;#34;https://mastodon.communick.com/users/raphael/followers&amp;#34;
    ],
    &amp;#34;sensitive&amp;#34;: false,
    &amp;#34;atomUri&amp;#34;: &amp;#34;https://mastodon.communick.com/users/raphael/statuses/112453788068689232&amp;#34;,
    &amp;#34;inReplyToAtomUri&amp;#34;: null,
    &amp;#34;conversation&amp;#34;: &amp;#34;tag:communick.com,2024-05-17:objectId=1006185:objectType=Conversation&amp;#34;,
    &amp;#34;content&amp;#34;: &amp;#34;&amp;lt;p&amp;gt;I&amp;amp;#39;m working on a blog post where I argue that we should stop writing web applications that emulate &amp;amp;quot;traditional&amp;amp;quot; social networks and propose a different approach for &amp;lt;a href=\&amp;#34;https://mastodon.communick.com/tags/ActivityPub\&amp;#34; class=\&amp;#34;mention hashtag\&amp;#34; rel=\&amp;#34;tag\&amp;#34;&amp;gt;#&amp;lt;span&amp;gt;ActivityPub&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt; software, putting the client at the center of everything and making the servers just specialized relays of ActivityStream messages.&amp;lt;/p&amp;gt;&amp;#34;,
    &amp;#34;contentMap&amp;#34;: {
      &amp;#34;en&amp;#34;: &amp;#34;&amp;lt;p&amp;gt;I&amp;amp;#39;m working on a blog post where I argue that we should stop writing web applications that emulate &amp;amp;quot;traditional&amp;amp;quot; social networks and propose a different approach for &amp;lt;a href=\&amp;#34;https://mastodon.communick.com/tags/ActivityPub\&amp;#34; class=\&amp;#34;mention hashtag\&amp;#34; rel=\&amp;#34;tag\&amp;#34;&amp;gt;#&amp;lt;span&amp;gt;ActivityPub&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt; software, putting the client at the center of everything and making the servers just specialized relays of ActivityStream messages.&amp;lt;/p&amp;gt;&amp;#34;
    },
    &amp;#34;attachment&amp;#34;: [],
    &amp;#34;tag&amp;#34;: [
      {
        &amp;#34;type&amp;#34;: &amp;#34;Hashtag&amp;#34;,
        &amp;#34;href&amp;#34;: &amp;#34;https://mastodon.communick.com/tags/activitypub&amp;#34;,
        &amp;#34;name&amp;#34;: &amp;#34;#activitypub&amp;#34;
      }
    ],
    &amp;#34;replies&amp;#34;: {
      &amp;#34;id&amp;#34;: &amp;#34;https://mastodon.communick.com/users/raphael/statuses/112453788068689232/replies&amp;#34;,
      &amp;#34;type&amp;#34;: &amp;#34;Collection&amp;#34;,
      &amp;#34;first&amp;#34;: {
        &amp;#34;type&amp;#34;: &amp;#34;CollectionPage&amp;#34;,
        &amp;#34;next&amp;#34;: &amp;#34;https://mastodon.communick.com/users/raphael/statuses/112453788068689232/replies?only_other_accounts=true&amp;amp;page=true&amp;#34;,
        &amp;#34;partOf&amp;#34;: &amp;#34;https://mastodon.communick.com/users/raphael/statuses/112453788068689232/replies&amp;#34;,
        &amp;#34;items&amp;#34;: []
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et Voilà! We figured out how to go from my account handle, to the
actual Actor URL, to the outbox, and finally to read a message that I
have posted. An even more interesting exercise would be to make a
similar journey from the other end and &lt;em&gt;send&lt;/em&gt; a message to me, but to
do that we need to get a bit deeper into how messages are structured,
the cryptography involved and some other implementation details which
are not at all related to the main point here. The important thing to
take away here is the concept of &lt;em&gt;actors&lt;/em&gt; and their inbox/outbox,
which can be represented by URIs and discovered through established
protocols.&lt;/p&gt;
&lt;p&gt;Now that we know the basics, we are ready to take the next step. We
will challenge one of the basic assumptions common to all current
software using ActivityPub and flip the whole architecture on its
head.&lt;/p&gt;
</description>
      </item>
      
      <item>
        <title>A Plan for Social Media - Intro</title>
        <link>https://raphael.lullis.net/a-plan-for-social-media-intro/</link>
        <pubDate>Fri, 17 May 2024 20:00:00 &#43;0200</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/a-plan-for-social-media-intro/</guid>
        <description>&lt;p&gt;About 18 months ago, Mozilla announced that they would explore a
&lt;a href=&#34;https://blog.mozilla.org/en/mozilla/mozilla-launch-fediverse-instance-social-media-alternative/&#34;&gt;healthy social media
alternative&lt;/a&gt;.
Their started their efforts by setting up a &lt;a href=&#34;https://mozilla.social&#34;&gt;server&lt;/a&gt; and putting up together a team to
work on new applications for the ecossytem. Fast-forward to February
of 2024, and they released a
&lt;a href=&#34;https://techcrunch.com/2024/02/13/mozilla-downsizes-as-it-refocuses-on-firefox-and-ai-read-the-memo/&#34;&gt;memo&lt;/a&gt;
which said:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Our initial approach was based on a belief that Mozilla needed to
quickly reach large scale in order to effectively shape the future
of social media. It was a noble idea but one we struggled to
execute. While we resourced mozilla.social heavily to pursue this
ambitious idea, in retrospect a more modest approach would have
enabled us to participate in the space with considerably greater
agility.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The more cynical of you would be quick to argue that this memo is
mostly corporate talk to justify their poor management decisions of
the last years and to give them an excuse to jump into the AI
bandwagon.&lt;/p&gt;
&lt;p&gt;But then, there is this:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://raphael.lullis.net/images/fedidb-mau.jpeg&#34;
    alt=&#34;How healthy is a network that loses 40% of its active users in 10 months?&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;How healthy is a network that loses 40% of its active users in 10 months?&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;It seems that no matter how badly the tech companies screw up and no
matter how many people show complete dissatisfaction with the status
quo, the Fediverse &lt;em&gt;as a whole&lt;/em&gt; keeps &amp;ldquo;struggling to execute&amp;rdquo;. Does
this mean that Mozilla is right to just get out of the space
altogether? Should we just give up on the idea of a healthier social
media landscape? In this blog post, I&amp;rsquo;d like to make a deeper analysis
of the core pieces of the Fediverse and:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;show how Mozilla&amp;rsquo;s approach was flawed and unlikely to succeed even if
they had more substantial growth&lt;/li&gt;
&lt;li&gt;propose a different approach that &amp;ldquo;can be executed with greater agility&amp;rdquo;&lt;/li&gt;
&lt;li&gt;make a pitch for potential businesses and players in the space who
still see value and an opportunity to take back the social web.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Get comfy in the chair, because this is looking like a mini-series&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;mozillas-mistake-and-the-pachyderm-in-the-room&#34;&gt;Mozilla&amp;rsquo;s mistake and the Pachyderm in the Room&lt;/h2&gt;
&lt;p&gt;Despite Firefox&amp;rsquo;s constant slippage in market share, Mozilla still has
considerable influence as one of the stewards of web technologies and
is widely regarded as the only large institution in the standard
bodies acting with the best interests of people in mind - in contrast
with the likes of Google and Microsoft, who are seen as pushing for
the development of technologies that mostly serve their own agenda.
So, when they announced their plans to explore the Fediverse, one
could reasonably expect them to take a look at ActivityPub (after all,
it &lt;em&gt;is&lt;/em&gt; already a W3C standard) and join in the efforts to make
technologies that leverage the protocol directly. It would have been
completely aligned with their mission if they had, e.g, decided to use
&lt;a href=&#34;https://www.mozilla.org/en-US/firefox/pocket/&#34;&gt;Pocket&lt;/a&gt; as a
laboratory for &amp;ldquo;social web&amp;rdquo; features based on ActivityPub.&lt;/p&gt;
&lt;p&gt;Instead, they announced they would be launching their own Mastodon
instance. While at first this seemed like good news (Yay, look at who
is joining us to the party!), this gradually has shown to be
completely backwards in regards to a reasonable strategy. Let us count the ways:&lt;/p&gt;
&lt;h4 id=&#34;mastodon-is-too-opinionated-and-makes-for-a-bad-experimental-system&#34;&gt;Mastodon is too opinionated and makes for a bad experimental system&lt;/h4&gt;
&lt;p&gt;This is not something to blame the Mastodon developers for; what they
managed to create with such a small team is actually impressive. But
if Mozilla&amp;rsquo;s goal was to &amp;ldquo;explore a healthy social media alternative&amp;rdquo;,
it would make a more sense if they started with something that
could let them be more flexible.&lt;/p&gt;
&lt;p&gt;For example, Mastodon (as most of the current Fediverse software)
assumes that one server will only work for one domain, and that
everyone&amp;rsquo;s identity will be tied to this domain. There is no system
nowadays with a good solution to identity portability is non-existent.
The best that Mastodon can do is simply to let people take their data
from one server to the other, but the identity itself is not in the
user&amp;rsquo;s control.&lt;/p&gt;
&lt;h4 id=&#34;mastodon-has-almost-no-regards-to-activitypub-interoperability&#34;&gt;Mastodon has almost no regards to ActivityPub interoperability&lt;/h4&gt;
&lt;p&gt;Despite being the poster child of the Fediverse and arguably the
AP-system with the most users, the implementation of Mastodon lacks in
support for common Activity Types, deviates from the standard whenever
following it could be a problem for its internal implementation and is
known for discarding or ignoring messages from other software when
they are not in the &amp;ldquo;happy path&amp;rdquo; of Mastodon implementation. For
example, Mastodon still lacks good support for groups, which makes it
very difficult to follow a Lemmy community from it.&lt;/p&gt;
&lt;p&gt;The strongest signal that ActivityPub is a second-class citizen for
Mastodon is the fact its clients - from its own web UI to &lt;em&gt;mobile
apps done for other Fediverse projects&lt;/em&gt; - prefer to use the HTTP API
provided by the server instead of accessing ActivityPub&amp;rsquo;s &amp;ldquo;native&amp;rdquo;
endpoints.&lt;/p&gt;
&lt;h4 id=&#34;the-social-web-is-more-than-just-microblogging&#34;&gt;The Social Web is more than just microblogging&lt;/h4&gt;
&lt;p&gt;Mastodon is, first and foremost, an open source clone of Twitter. It
was designed to work around the idea of short text messages, with the
occasional embedded link or image. If you are a video streamer who
wants to share your content, the people on Mastodon will see it as a
&amp;ldquo;post&amp;rdquo; with a link to the stream. If you write software that shares
the music you&amp;rsquo;d be listening to and you were planning to use it as
some alterantive to the &amp;ldquo;audio scrobblers&amp;rdquo; like Last.FM, every song
would become a post in a stream. There is no way for a user in
Mastodon to say &amp;ldquo;feel free to ignore these types of activities&amp;rdquo;,
because basically &lt;strong&gt;every&lt;/strong&gt; activity gets converted to a &amp;ldquo;Note&amp;rdquo; type.&lt;/p&gt;
&lt;h4 id=&#34;big-instances-big-problems&#34;&gt;Big instances, big problems&lt;/h4&gt;
&lt;p&gt;One of the most common analogies for federated services is &amp;ldquo;it works
like email. It doesn&amp;rsquo;t matter on what server you are, you can talk
with anyone who is connected to it&amp;rdquo;. The analogy works well until you
find out that for one reason or another your server got involved in
some blocklist. Or your server admin got into a fight with some other
admin and they severed ties and took their entire communities as
hostages. &lt;a href=&#34;https://techcrunch.com/2024/02/20/spam-attack-on-twitter-x-rival-mastodon-highlights-fediverse-vulnerabilities/&#34;&gt;Or some Japanese script kiddies got an account at your
usually well-managed server and is using it to send spam messages to
everyone&lt;/a&gt;,
and other admins now are treating your instance as radioactive.&lt;/p&gt;
&lt;p&gt;One unfortunate consequence of the &amp;ldquo;one server = one domain&amp;rdquo;
equivalence of the current services is that there is no way for
someone running the server to separate its users. The whole server
needs to be constantly monitored and any slip from the moderation team
(&lt;a href=&#34;https://raphael.lullis.net/community-is-not-enough&#34;&gt;which are most of the time just a bunch of overloaded
volunteers&lt;/a&gt;) could lead to its reputation
being destroyed.&lt;/p&gt;
&lt;p&gt;To sum up: there was no actual need for yet-another Mastodon instance
on the Fediverse. There was nothing novel about it to bring new people
to it and by putting energy into this top-down approach was a misfire.&lt;/p&gt;
&lt;p&gt;In the next blog post, I&amp;rsquo;ll do my best to show I&amp;rsquo;m not a Negative
Nancy, and we&amp;rsquo;ll make a quick dive into ActivityPub and see if by
understanding some of the fundamentals we can come up with an
alternative approach with better chances of success.&lt;/p&gt;
</description>
      </item>
      
      <item>
        <title>Funkwhale might be the most overlooked Fediverse project</title>
        <link>https://raphael.lullis.net/funkwhale/</link>
        <pubDate>Wed, 10 Apr 2024 20:23:46 &#43;0200</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/funkwhale/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://raphael.lullis.net/images/funkwhale.png&#34; alt=&#34;funkwhale&#34;&gt;&lt;/p&gt;
&lt;p&gt;For all the talk about Fediverse alternatives to the platforms from Big Tech, it seems that &lt;a href=&#34;https://funkwhale.audio&#34;&gt;Funkwhale&lt;/a&gt; would be the easiest one to get people out of Spotify/Apple Music/ Youtube Music/etc, and I am trying to figure out what is missing to get more people interested and using it.&lt;/p&gt;
&lt;p&gt;I think that its main problem is that no instance provides a &amp;ldquo;public&amp;rdquo; catalog of songs that can be streamed/downloaded by its users, but its &amp;ldquo;social aspect&amp;rdquo; is really cool. You can, e.g, connect with your friends and choose to share your private libraries with each other. So if you have a good mix of friends who kept/ripped their CD/Vynil collection or bought songs from their favorite indie musicians, you can end up with a pretty extensive library. This makes it a decent (and legal) alternative to sneaker-net piracy.&lt;/p&gt;
&lt;p&gt;It also seems like a good alternative for indie labels who want to promote their artists. Set up an instance, get accounts for each artists and let them choose if they want to have their catalog available to the public (or only for paying customers, or give an account for everyone that has bought at least one album from their artists, etc). All of that could be done, it doesn&amp;rsquo;t really cost a lot to operate and it would make them less dependent on Spotify and/or Bandcamp.&lt;/p&gt;
&lt;p&gt;The most interesting thing though, it seems to me that, unlike Lemmy, Mastodon and Pixelfed, a music streaming instance does not depend on a &amp;ldquo;boil the oceans&amp;rdquo; approach where the platform is only useful if it reaches a substantially large amount of users.&lt;/p&gt;
&lt;p&gt;Thoughts? Why is it that Funkwhale is not being more talked about? Have you tried it? What is missing in your opinion?&lt;/p&gt;
</description>
      </item>
      
      <item>
        <title>Community is not enough</title>
        <link>https://raphael.lullis.net/community-is-not-enough/</link>
        <pubDate>Wed, 07 Dec 2022 01:45:30 &#43;0100</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/community-is-not-enough/</guid>
        <description>&lt;p&gt;(This post is based on a discussion from &lt;a href=&#34;https://news.ycombinator.com/item?id=33886044&#34;&gt;Hacker News&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;I will assume that the reader is already aware of the mass-exodus from
Twitter users to &lt;a href=&#34;https://joinmastodon.org&#34;&gt;Mastodon&lt;/a&gt;, I will also
assume that the reader has some basic understanding of how Mastodon
works - it is decentralized like email, different servers can talk
with each other, etc, etc. What might be news to the reader is the
story of how this affects me, given that for the past &lt;strong&gt;&lt;a href=&#34;https://communick.com&#34;&gt;3 years I am
running a commercial provider for
Mastodon&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One can imagine how life-changing it was to see all the news about
people looking at the Mastodon as an alternative. With &lt;strong&gt;zero
marketing&lt;/strong&gt;, this service that has been used mostly by me/my
friends/my family started getting actual signups from strangers from
all around the world. The whole system had more activity in the past 3
weeks than in the past 3 years combined. It was incredibly exciting.
Many &amp;ldquo;It&amp;rsquo;s happening!!!&amp;rdquo; gifs were sent to my friends on account of
each new deposit from customers. It wasn&amp;rsquo;t only my fortune that seems
to have changed: most of the well-known Mastodon providers simply
&lt;em&gt;closed&lt;/em&gt; to new registrations as they could not keep up with the
demand.&lt;/p&gt;
&lt;p&gt;I simply couldn&amp;rsquo;t let go of this opportunity. I gave notice at my job
so that I could have time again to work on it. My reasoning was
simple: with hundreds of thousands of people leaving Twitter, one
would guess that a reasonable percentage of them people would be
willing to pay a few dollars per year to get an ad-free,
privacy-focused alternative to social media. I guessed that people
would be more than willing to pay a few dollars per year to be free
from bots, to have a service that felt more &amp;ldquo;local&amp;rdquo; and to support
smaller, independent service providers instead of fueling the huge
corporate machine of BigTech.&lt;/p&gt;
&lt;p&gt;Well, it&amp;rsquo;s been about a month since the initial euphoria, and now it
seems that those guesses are becoming &lt;em&gt;second&lt;/em&gt;-guessing.&lt;/p&gt;
&lt;p&gt;Yes, I have been getting inquiries and signups every day. I need more
than two hands to count the number of paying customers, but where are
the rest of the hundreds of thousands of people going?&lt;/p&gt;
&lt;p&gt;Turns out, they are going to the handful of &amp;ldquo;free&amp;rdquo; instances that have
sprung up to fill the demand. Some of them got popular enough to
attract celebrities (&lt;a href=&#34;https://universeodon.com/@georgetakei&#34;&gt;oh,
my!&lt;/a&gt;), others have grown so
fast that they ended up facing issues and got a &lt;a href=&#34;https://community.hachyderm.io/blog/2022/12/03/leaving-the-basement/&#34;&gt;nice war story to
tell&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My first reaction to these stories were admittedly filled with a bit
of envy. &amp;ldquo;Wow, 30000 users! If that many people subscribed to my
&lt;a href=&#34;https://communick.com/packages&#34;&gt;$0.50/user/month package&lt;/a&gt;, it would
be enough to pay myself a full salary!&amp;rdquo;. But then I realized that they
are only getting these many people because they are not driven by
commercial interests: even with donations, I am sure they are not
collecting enough to keep things afloat and they keep going
because they don&amp;rsquo;t mind spending all this time, money and resources of
their own on this project. They can treat it as a (relatively
expensive) hobby, and they can keep it running as long as it satisfies
them.&lt;/p&gt;
&lt;p&gt;The problem I see here is that I think the approach is short-sighted
and harmful in the long run. Yes, people now are finally starting to
see the issue with ad-funded social media, and it is good that this
first wave can find a home at a &amp;ldquo;free&amp;rdquo; instance. But If we want to
provide an ethical alternative to Twitter/Facebook/Instagram/WhatsApp,
we need to find a way to serve hundreds of millions to billions of
users. How are these people going to be spread around the instances?&lt;/p&gt;
&lt;p&gt;Are we going to create ~15000 Hachyderms to replace Twitter?&lt;/p&gt;
&lt;p&gt;Are we going to create ~60000 &lt;a href=&#34;https://pixelfed.org&#34;&gt;pixelfeds&lt;/a&gt; to replace Instagram?&lt;/p&gt;
&lt;p&gt;Are all these communities depend on volunteers to do the grunt
work?&lt;/p&gt;
&lt;p&gt;Are all these instances going to be operated by professionals from
Silicon Valley who can take some time from their cushy jobs at
&lt;a href=&#34;https://www.infoworld.com/article/3627319/github-copilot-is-unacceptable-and-unjust-says-free-software-foundation.html&#34;&gt;unethical
companies&lt;/a&gt;
and are able to afford to sink a few hundred dollars every month?&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t think so. I think this approach is not sustainable in the long
term. I think that eventually, all these &amp;ldquo;free&amp;rdquo; instances will find
out that they need to start thinking like a business to keep the
lights on. From there, what is going to happen? Are they going to go
to appeal to &amp;ldquo;your donation is very important to us&amp;rdquo; and expect that a
few generous souls make up for the free-riders? Or are they going to
pull a bait-and-switch, and start charging for access from all users?
Or even worse: are they going to copy the VC-style playbook, focusing on
growing the user base first at all costs and &lt;em&gt;figuring out monetization later&lt;/em&gt;?&lt;/p&gt;
&lt;p&gt;Word of warning: this was what got us in this mess in the first place.&lt;/p&gt;
&lt;p&gt;If we really want to get rid of the evils of Big Tech and if we want
social media companies to serve the people and not the interests of
the elites, we need to understand TANSTAAFL. We need to understand
that not all commercial providers are evil capitalist pigs, and we
need to understand that we will be better off by paying a fair, small
amount every month instead of relying on crazy schemes that try to
hide reality: for this to become accessible to everyone, &lt;em&gt;real money&lt;/em&gt;
needs to be spent on the people working on this and on the servers
that are running 24/7 to store and distribute the hot takes and stupid
memes that we so bizarrely crave every day.&lt;/p&gt;
&lt;p&gt;I worry that if we don&amp;rsquo;t change the mindset quickly, the whole Twitter
drama would be a wasted opportunity and we will go back to the status
quo, where surveillance capitalism is the norm and truly open systems
like Mastodon are just a geeky curiosity.&lt;/p&gt;
</description>
      </item>
      
      <item>
        <title>Let&#39;s fend off Big Tech and find a way to fund FOSS we all can be fond of</title>
        <link>https://raphael.lullis.net/open-source-funding/</link>
        <pubDate>Fri, 06 May 2022 12:22:34 &#43;0200</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/open-source-funding/</guid>
        <description>&lt;p&gt;Here is an incomplete, completely half-baked idea that I have been
chewing on since &lt;a href=&#34;https://words.filippo.io/professional-maintainers/&#34;&gt;Filippo&amp;rsquo;s call to professionalize the work of OSS
maintainers&lt;/a&gt;. I
want to share it here because (1) I &lt;em&gt;think&lt;/em&gt; there is a good business
opportunity here that could use some validation and (2) I am both an
&lt;a href=&#34;https://hub20.io&#34;&gt;OSS project maintainer&lt;/a&gt; that &lt;a href=&#34;https://github.com/sponsors/mushroomlabs&#34;&gt;would like to be paid
for my work&lt;/a&gt; &lt;em&gt;and&lt;/em&gt; I also
have a &lt;a href=&#34;https://communick.com&#34;&gt;business&lt;/a&gt; that depends on having
quality open-source solutions.&lt;/p&gt;
&lt;p&gt;The idea is to build a system where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;individuals are incentivized to contribute financially to OSS.&lt;/li&gt;
&lt;li&gt;individuals can also promote their OSS work, without getting into a popularity contest.&lt;/li&gt;
&lt;li&gt;individuals can collaborate on teams, who are self-governing.&lt;/li&gt;
&lt;li&gt;companies can help contribute to many teams at the same time,
without having to deal with complicated bureaucracy. Ideally they
would pay one single invoice, and it would look like a service that
they are paying.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ok, are you ready?&lt;/p&gt;
&lt;h3 id=&#34;what-about-a-paid-social-network-for-foss-developers&#34;&gt;What about a &lt;em&gt;paid&lt;/em&gt; social network for FOSS developers?&lt;/h3&gt;
&lt;p&gt;Wait! Don&amp;rsquo;t leave. Please hear me out! I know that at first is going
to sound a lot like LinkedIn, but I think we can make some twists and
get something useful out of it.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;d start with all the standard features from a social network: a
profile page, a way to write posts, follow others, participate in
discussions, etc. Being a social network focused on FOSS, let&amp;rsquo;s also
imagine a feature where every user can have a page for their
&lt;em&gt;projects&lt;/em&gt; and that people can organize themselves in &lt;em&gt;teams&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Still too much like LinkedIn? Let&amp;rsquo;s also consider a Patreon-style
sponsorship program. Any team or project can offer special rewards or
exclusive products for other users who back them directly.&lt;/p&gt;
&lt;p&gt;Ok, it is still pretty standard. But let&amp;rsquo;s add the first couple of
twists:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;access to the website is obtained through a &lt;em&gt;membership of
$3-5/month.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;all&lt;/strong&gt; revenue from users is earmarked for the &amp;ldquo;Developers Fund&amp;rdquo;,
which is paid out on a monthly basis to &lt;em&gt;all&lt;/em&gt; teams based on
&lt;a href=&#34;https://vitalik.ca/general/2019/12/07/quadratic.html&#34;&gt;Quadratic
Voting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;You will need millions of users just to get any decent revenue&lt;/em&gt;, you
are going to say&amp;hellip; which gets to second leg of this monster we are creating.&lt;/p&gt;
&lt;h3 id=&#34;a-suite-of-services-for-companies&#34;&gt;A suite of services for companies&lt;/h3&gt;
&lt;p&gt;Companies would certainly be interested in having access to this
potential qualified userbase. There are a good amount of services that
could be provided for them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A Job board. To keep with the OSS theme, we could make it that
companies could pay a $ X00 month to post as many &lt;strong&gt;OSS&lt;/strong&gt; jobs they
want, or they could pay twice as much individual non-OSS job
listing. Now that StackOverflow has moved out of the job listing
market, there is some room for such an offering.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ads. Companies could be interested in promoting their products,
developer conferences, run a focus group, etc. &lt;em&gt;As long as the ads
are not privacy-invasive&lt;/em&gt;, they are acceptable.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is also nothing stopping companies to use the platform to create
grant programs, become &amp;ldquo;official sponsors&amp;rdquo; of a project or a team or
create hackathons that pay &lt;em&gt;meaningful&lt;/em&gt; prizes.&lt;/p&gt;
&lt;p&gt;The important thing however is that it is the revenue from the
services paid by the companies is what can turn this into a proper
business. Of course part of this revenue could (and should) go to the
Developers Fund, but my guess is that if you keep it lean your
operating costs can be quite low. There is also the chance of turning
such a venture into a proper 503 Foundation, which could not only
bring tax benefits but also become an alternative to those who are
tired of the FSF current actions and outdated leadership.&lt;/p&gt;
&lt;h4 id=&#34;let-me-know-your-thoughts&#34;&gt;Let me know your thoughts&lt;/h4&gt;
&lt;p&gt;Like I said, these are just some ideas that I have been trying to
develop further. You can comment on &lt;a href=&#34;https://news.ycombinator.com/item?id=31296803&#34;&gt;Hacker
News&lt;/a&gt; and I hope to update this page
with anything that comes up.&lt;/p&gt;
</description>
      </item>
      
      <item>
        <title>Thinking heads are not in the clouds</title>
        <link>https://raphael.lullis.net/thinking-heads-are-not-in-the-clouds/</link>
        <pubDate>Mon, 08 Nov 2021 00:43:25 &#43;0100</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/thinking-heads-are-not-in-the-clouds/</guid>
        <description>&lt;h2 id=&#34;part-i---can-it-run-openoffice&#34;&gt;Part I - Can it run OpenOffice?&lt;/h2&gt;
&lt;p&gt;My first job in Germany was for this T-Labs project: an innovative
&lt;em&gt;online-first, browser-based&lt;/em&gt; operating system which promised to make
it simple for enterprises to manage the devices for their mobile
workforce. The OS was based on Linux and Firefox and it offered a
pretty standard set of features: users would have an SSO system and
login directly to their office intranet through a VPN connection where
they would get access to their web applications, base software updates
would be delivered transparently; and any on the device would be
encrypted. In theory, even if someone lost their device they could be
re-issued a new one and continue their work without any worry.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve built quite a lot of interesting components for that: custom
Firefox profiles to substitute Linux login screens, specialized
network managers that ensured users always had the best
connection and didn&amp;rsquo;t need to know anything about its setup,
extensions to display widgets that would usually be provided by base
desktop environment (e.g, clock, network status, mounted usb), etc.&lt;/p&gt;
&lt;p&gt;The project was already over an year in development after it got one
interested customer. After the demo, they were enthusiastic about the
product and its direction, but they had one important requirement:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Can it run OpenOffice?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;All of the &amp;ldquo;secure access to the intranet&amp;rdquo; was useful, but they
already had re-trained their workforce when they moved from MS-Office
to OpenOffice, they were not interested in doing that again. Their
intranet could give them access to the files, but the real work would
be done at the device running OpenOffice.&lt;/p&gt;
&lt;p&gt;When talking with their tech people, They pressed our management a
bit: what happens if the user wants to upload a file and they don&amp;rsquo;t
have internet access? Oh, the file gets to the local filesystem and is
later synchronized, then why not do like Dropbox and have &lt;em&gt;all&lt;/em&gt;
documents in the local filesystem?! Then you could also run OpenOffice!&lt;/p&gt;
&lt;h2 id=&#34;part-ii---kissing-my-entire-contact-list-management&#34;&gt;Part II - KISS&amp;rsquo;ing my entire contact list (management)&lt;/h2&gt;
&lt;p&gt;In my quest to de-google my digital life, I was looking for an
alternative to Google Contacts, specifically one that was easy to use
with my &lt;a href=&#34;https://e.foundation/&#34;&gt;de-googled Android&lt;/a&gt;
&lt;a href=&#34;https://www.fairphone.com/&#34;&gt;phone&lt;/a&gt;. Being no stranger to self-hosting
services, I started to look into what were the most commonly used
alternatives and found that &lt;a href=&#34;https://nextcloud.com&#34;&gt;Nextcloud&lt;/a&gt;
provided a CalDav/CardDav server. A few &lt;code&gt;docker-compose&lt;/code&gt; commands
later and I had it nicely running on my home server.&lt;/p&gt;
&lt;p&gt;Something didn&amp;rsquo;t sit right with the idea, though. Nextcloud does a lot
of things that can substitute Google services, but would I even use
them? All I cared about was my contact list. I already have an email
provider with its own calendar server, I don&amp;rsquo;t use Google Docs and
most of my &amp;ldquo;work documents&amp;rdquo; are git repositories - which by its very
nature are easy to synchronize between computers. Sure, I&amp;rsquo;ve also later found
&lt;a href=&#34;https://radicale.org/&#34;&gt;radicale&lt;/a&gt;, which seems to be focused &lt;em&gt;only&lt;/em&gt; on
being Cal/CardDav server, but did I really need a whole web
application just to keep some files in sync between my different
devices?&lt;/p&gt;
&lt;p&gt;The answer: of course servers are not needed, &lt;a href=&#34;https://github.com/39aldo39/DecSync&#34;&gt;you can sync the
files in a structured format&lt;/a&gt; which will then
then allow your &lt;a href=&#34;https://f-droid.org/en/packages/org.decsync.cc/&#34;&gt;Android apps to work as a contact
provider&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So now &lt;a href=&#34;https://mastodon.communick.com/@raphael/107096122309353819&#34;&gt;my phone may have 99
problems&lt;/a&gt;
but at least contact management ain&amp;rsquo;t one.&lt;/p&gt;
&lt;h2 id=&#34;part-iii---stream-me-not&#34;&gt;Part III - Stream me not.&lt;/h2&gt;
&lt;p&gt;How does a stream-service-denier listens to music in 2021?&lt;/p&gt;
&lt;p&gt;This is what I would do for my music collection of ~10000 songs and
~175GB of high-quality mp3 and FLAC files in different ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;When at home, I connect to the NFS mount on my NAS that have all
the music files and I can play with my local media player.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;My laptop has a large-ish SSD, so I can have a music folder managed
with &lt;a href=&#34;https://syncthing.net&#34;&gt;Syncthing&lt;/a&gt; and all the songs are also
there for me to listen.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For my phone, I&amp;rsquo;d upload my music to Google so that I could choose
what to download to my phone later&amp;hellip; and then I wake
up in a jolt, realizing Google killed once-again a service that
was useful.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Oh, well&amp;hellip; I wanted to de-google anyway. So let&amp;rsquo;s look at the alternatives:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://subsonic.org&#34;&gt;Subsonic&lt;/a&gt; - &amp;ldquo;Your complete, personal media server&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ampache.org&#34;&gt;Ampache&lt;/a&gt; - Music Streaming server&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jellyfin.org&#34;&gt;Jellyfin&lt;/a&gt; - enables you to collect, manage, and stream your media.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://funkwhale.audio&#34;&gt;Funkwhale&lt;/a&gt; - A social platform to enjoy and share music&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Noticing a pattern?&lt;/p&gt;
&lt;p&gt;I ended up installing Jellyfin and Funkwhale. Funkwhale claimed
support for Subsonic API anyway and Jellyfin also had some android
clients. As long as these clients had offline support and worked
similarly to Google Music, I would be satisfied again.&lt;/p&gt;
&lt;p&gt;Did it work?&lt;/p&gt;
&lt;p&gt;Unfortunately, no. I&amp;rsquo;ve tried three different Subsonic players for
Android which claimed offline playing ability along with the jellyfin
client. &lt;strong&gt;None&lt;/strong&gt; of them were able to save the downloaded songs to
external storage, even with all relevant permissions granted. They
only worked with internal storage and/or when using their own player.
Songs that were downloaded by any one client would not be visible to
an external media player.&lt;/p&gt;
&lt;p&gt;So, we have four different projects all working on their own separate nice web
applications, when all I really wanted was to run &lt;del&gt;OpenOffice&lt;/del&gt;
&lt;a href=&#34;https://f-droid.org/en/packages/io.github.muntashirakon.Music/&#34;&gt;Metro&lt;/a&gt;?.&lt;/p&gt;
&lt;h2 id=&#34;everything-is-still-a-file&#34;&gt;Everything is (still) a file.&lt;/h2&gt;
&lt;p&gt;The common thread around all experiences above: the premise that we
need to have &lt;strong&gt;applications&lt;/strong&gt; running on the cloud is broken. We
accepted this because it made it easier for &lt;em&gt;developers&lt;/em&gt; to distribute
their software, not because their software is necessarily better for
us.&lt;/p&gt;
&lt;p&gt;What we need is to have a device-transparent way to see our &lt;em&gt;data&lt;/em&gt;. We
got so used to the idea that web applications let us work from &amp;ldquo;dumb
terminals&amp;rdquo; that we failed to realize that &lt;em&gt;there is no such thing as a
dumb terminal anymore&lt;/em&gt;. With multi-core smartphones, many of them with
4, 8, 12, 16GB of RAM; it&amp;rsquo;s not too hard to notice that the actual
bottlenecks in mobile devices are battery life and (intermittent and
still relatively expensive) network connectivity. These are problems
that can be solved by appropriate data synchronization, not by
removing the data from the edge.&lt;/p&gt;
&lt;p&gt;One of the early jokes about web2.0 was that to have a successful
company you should take an Unix utility and turn it into a web app.
This generation of open source developers are reacting to this by
looking at successful companies and building &amp;ldquo;self-hosted&amp;rdquo; versions of
these web apps. What they didn&amp;rsquo;t seem to realize is that &lt;strong&gt;we don&amp;rsquo;t
need them&lt;/strong&gt;. The utlities and the applications still work just fine, we
just need to manage the data and how to sync between our mobile/edge
devices and our main data storage.&lt;/p&gt;
&lt;p&gt;If you are an open source developer and you are thinking of creating a
web app, do us all a favor and ask yourself first: do I need to create
yet-another silo or can I solve this with Syncthing?&lt;/p&gt;
</description>
      </item>
      
      <item>
        <title>Can FOSS eat the world?</title>
        <link>https://raphael.lullis.net/can-foss-eat-the-world/</link>
        <pubDate>Tue, 26 Oct 2021 17:45:25 &#43;0200</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/can-foss-eat-the-world/</guid>
        <description>&lt;p&gt;Yesterday I got the first (paid!) request to add a feature on
&lt;a href=&#34;https://hub20.io&#34;&gt;Hub20&lt;/a&gt; from someone who is working on what is likely to
become the first Hub20 production instance.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a simple feature, driven by his need to have some functionality
that is not provided yet. He could&amp;rsquo;ve looked at current state of the
work and said &amp;ldquo;oh, it sucks because it doesn&amp;rsquo;t do X&amp;rdquo;. He could&amp;rsquo;ve used
that (temporary) failure to address his need, and justify going to
some &amp;ldquo;established&amp;rdquo; business. Or he could&amp;rsquo;ve just taken the code and
tried to &amp;ldquo;compete&amp;rdquo; - it&amp;rsquo;s open source after all.&lt;/p&gt;
&lt;p&gt;Instead, he decided to look at things that Hub20 &lt;em&gt;does&lt;/em&gt; do, and chose
to support it to make it better.&lt;/p&gt;
&lt;p&gt;Even if there were a closed proprietary service that could do what he
needed (I have looked, and I haven&amp;rsquo;t found it yet), his contribution
will ensure that his business is not so dependent on someone else&amp;rsquo;s.
And if tried to compete with Hub20, he would quickly realize the time
alone get his development environment in order was better spent
working on his own business.&lt;/p&gt;
&lt;p&gt;Most interesting of all is that his contribution (while valuable)
would never buy the amount of &amp;ldquo;resources&amp;rdquo; if he were trying to do this
in-house. If I were to charge regular consulting rates to have this
done &lt;em&gt;only&lt;/em&gt; for his business, it would have cost him 3-5x more to have
something that would end up probably being of worse quality &lt;em&gt;and&lt;/em&gt; that
would have no chance to be further improved without having to spend again.&lt;/p&gt;
&lt;p&gt;Could it be that bigger companies will learn this lesson and start
operating on this model as well? For all the talk about how hard it is
to find good/talented people in the market, why not &lt;em&gt;reduce&lt;/em&gt; the size
and scope of your development team to your absolute core functions, and
&amp;ldquo;outsource&amp;rdquo; anything possible to open source projects?&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.sentry.io/2021/10/21/we-just-gave-154-999-dollars-and-89-cents-to-open-source-maintainers&#34;&gt;Some companies are already proving this is
possible&lt;/a&gt;.
The question is what is stopping more of them from doing so. Does it
look bad from an accounting perspective, so the bean-counters twist
their noses at the idea? Is it too much of a cultural shift, and if so
shouldn&amp;rsquo;t we take advantage of the fact that we are already in the
middle of a massive cultural shift and push this one along? Is it a
matter of corporate politics? Would a Team Lead/Manager/VP be shooting
their careers down by advocating their team to be &lt;em&gt;smaller&lt;/em&gt; and to
&amp;ldquo;give money away&amp;rdquo;?&lt;/p&gt;
</description>
      </item>
      
      <item>
        <title>A proposal for a decentralized BAT cartel</title>
        <link>https://raphael.lullis.net/decentralized-bat-cartel/</link>
        <pubDate>Mon, 30 Aug 2021 01:46:40 &#43;0200</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/decentralized-bat-cartel/</guid>
        <description>&lt;h2 id=&#34;preface&#34;&gt;Preface&lt;/h2&gt;
&lt;p&gt;Due to my (short) time working on &lt;a href=&#34;https://raiden.network&#34;&gt;Raiden&lt;/a&gt; and
(currently moonlighting) at &lt;a href=&#34;https://hub20.io&#34;&gt;Hub20&lt;/a&gt;, I got quite a
bit familiar with the different crypto projects that were coming with
the &amp;ldquo;DeFI&amp;rdquo; wave. Something in common to most of these projects is the
fact that &lt;strong&gt;they don&amp;rsquo;t really have any idea where their actual money
will come from&lt;/strong&gt;. Being a witness to the emergence of &amp;ldquo;DAO governance&amp;rdquo;
tokens that pay absolutely zero dividends to ideas based on bad
economic principles and outright scams, I started to develop a good
sense of what projects were building any kind of actual wealth and
could be considered proper investments and which were just playing
some sort of &lt;a href=&#34;https://jpkoning.blogspot.com/2018/05/ethereum-is-full-of-ponzis-is-that.html&#34;&gt;ponzi
game&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Out of the &amp;ldquo;good&amp;rdquo; crypto projects, there is one that started even
before the DeFI craze, in 2017: the &lt;a href=&#34;https://basicattentiontoken.org/&#34;&gt;Basic Attention
Token&lt;/a&gt; from
&lt;a href=&#34;https://brave.com&#34;&gt;Brave&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;bat-and-brave-quickly-explained&#34;&gt;BAT and Brave, quickly explained&lt;/h3&gt;
&lt;p&gt;Brave is a web browser that focuses on privacy and protecting users
from data tracking and the &lt;a href=&#34;https://en.wikipedia.org/wiki/Surveillance_capitalism&#34;&gt;exploitation of personal data made by Big
Tech&lt;/a&gt;. It
offers a built-in ad blocker, blocks third-party tracking cookies and
does a lot more.&lt;/p&gt;
&lt;p&gt;Brave&amp;rsquo;s business model is based on the idea that they can offer
advertisements that don&amp;rsquo;t depend on exploiting personal data. Users
from the browser can opt in to receive ads (as system notifications)
which are from Brave&amp;rsquo;s ad network. Users participating in the program
receive a share of 70% of all advertisements they receive. These
payments are made using BAT, a cryptocurrency that is based on the
Ethereum blockchain.&lt;/p&gt;
&lt;p&gt;BAT is a token that has &lt;strong&gt;fixed, limited supply&lt;/strong&gt;. During the ICO, it
was established that a total of 1.5 billion BAT would be minted,
divisible in up to 18 decimal points.&lt;/p&gt;
&lt;h3 id=&#34;how-much-is-the-price-of-bat-affected-by-braves-growth&#34;&gt;How much is the price of BAT affected by Brave&amp;rsquo;s growth?&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s important to notice: Brave&amp;rsquo;s revenue is in USD, the payouts are
in BAT. Advertisers buy space in the inventory from Brave, and Brave
takes part of that money to buy BAT in the open market. This means
that the price of the token has no direct influence in Brave&amp;rsquo;s revenue
or in the dollar amount from the payouts.&lt;/p&gt;
&lt;p&gt;At the moment, Brave&amp;rsquo;s ad rewards requires ~0.1% of the whole BAT
market cap (~1.25 billion USD), so these monthly buys are not enough to
cause any kind of noticeable change in BAT&amp;rsquo;s price. The price of token
is mostly determined by speculation and oscillates with the rest of
the market - notably BTC.&lt;/p&gt;
&lt;h2 id=&#34;solving-the-lack-of-utility-and-overabundance-a-crypto-cartel&#34;&gt;Solving the lack of utility and overabundance: a crypto-cartel.&lt;/h2&gt;
&lt;p&gt;BAT has in its favor the fact that it has at least one buyer that is
always going to be interested in acquiring the tokens regardless of
its price. However, the supply is too large for the overall economy.
Given that there is no easy way to increase the demand, perhaps we can
think of appoaches that reduce the supply?&lt;/p&gt;
&lt;h4 id=&#34;makerdao-vaults&#34;&gt;MakerDAO Vaults&lt;/h4&gt;
&lt;p&gt;At first, my idea was around using another solid project from the DeFI
world, &lt;a href=&#34;https://makerdao.com&#34;&gt;MakerDAO&lt;/a&gt;. MakerDAO has built the first
decentralized stablecurrency on ethereum, called DAI. It is based on a
set of smart contracts that takes some volatile crypto asset and
provides &lt;em&gt;collaterized loans&lt;/em&gt; in DAI to users.&lt;/p&gt;
&lt;p&gt;BAT is one of the few tokens that is accepted by MakerDAO, and while
there is a whole other post that I could write about the advantages of
using stabletokens, let&amp;rsquo;s just point out that more people creating BAT
vaults would lead to a reduction in BAT&amp;rsquo;s circulation.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;However&lt;/em&gt;, it is a collaterized loan, which means that it costs to
leave the money locked, and if the price of the token oscillates too
much, it may lead to users losing their funds.&lt;/p&gt;
&lt;h4 id=&#34;improving-on-the-idea-lock-bat-make-withdrawal-dependent-on-braves-revenue&#34;&gt;Improving on the idea: lock BAT, make withdrawal dependent on Brave&amp;rsquo;s revenue&lt;/h4&gt;
&lt;p&gt;The next idea has no existing implementation, but (I believe) could be
developed by any reasonably experienced smart contract developer. Like
MakerDAO, it takes the idea of locking BAT into a vault and it would
also lead to users having stabletokens as the &amp;ldquo;usable&amp;rdquo; currency.&lt;/p&gt;
&lt;p&gt;Such protocol would be based on a smart contract with the following functionality:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Anyone can deposit BAT to be controlled by the contract, which would then lock these funds.&lt;/li&gt;
&lt;li&gt;The smart contract would then mint another token which would represent the ownership of a share of the funds locked by the contract.&lt;/li&gt;
&lt;li&gt;Every month, the contract would unlock (allow for withdraw) an amount of BAT corresponding to 70% of Brave&amp;rsquo;s reported revenue from their ad distribution. To withdraw the allowed BAT, the contract would accept stabletokens (e.g, DAI/USDC)&lt;/li&gt;
&lt;li&gt;The received stabletokens would then be redeemed by the BAT depositors.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In effect, every one locking their BAT would be giving away their
chance of making a profit with BAT speculation, but would receive a
perpetual dividend proportional to Brave&amp;rsquo;s revenue.&lt;/p&gt;
&lt;p&gt;Brave has been growing at a good pace and it seems to be a safe bet in
the sense that it will be around in the coming years. Those that want
to look at defi as serious investment vehicle can easily be interested
in this system where the risks are relatively low and that can lead to
a continuous cash stream.&lt;/p&gt;
</description>
      </item>
      
      <item>
        <title>Loopring Arb checker - or trading hours of fun work to save on minutes of tedious calculation</title>
        <link>https://raphael.lullis.net/loopringer/</link>
        <pubDate>Tue, 16 Feb 2021 23:39:20 &#43;0100</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/loopringer/</guid>
        <description>&lt;p&gt;While I&amp;rsquo;m waiting for the next release of
&lt;a href=&#34;https://raiden.network&#34;&gt;raiden&lt;/a&gt; so that I can finish my own release
of &lt;a href=&#34;https://hub20.io&#34;&gt;Hub20&lt;/a&gt;, I am left playing with other layer-2
projects. Of those, &lt;a href=&#34;https://loopring.io&#34;&gt;loopring&lt;/a&gt; is certainly the
one that has caught most of my attention. It requires people to
transfer their tokens to a contract and then lets you keep a &amp;ldquo;Layer-2
balance&amp;rdquo;.&lt;/p&gt;
&lt;h4 id=&#34;loopring-and-the-mechanics-of-an-amm&#34;&gt;Loopring and the mechanics of an AMM&lt;/h4&gt;
&lt;p&gt;Any transaction that happens on Layer-2 is virtually free, and holding
the tokens there cost nothing. Whether you need to send a payment to
another Layer-2 account or even back to a different Layer-1, it can be
done at much lower cost than a standard on-chain transfer.&lt;/p&gt;
&lt;p&gt;That alone should make it interesting, but to make it even more
appealing the folks at Loopring created an Automated Market Maker
(AMM) exchange: similar to the mechanism popularized by Uniswap, users
can provide liquidity in &lt;em&gt;token pairs&lt;/em&gt;, and users that want to
exchange one token for another (make a swap) can do so at a fee.&lt;/p&gt;
&lt;p&gt;Due to the way that an AMM exchange works, it can happen to become
&lt;em&gt;unbalanced&lt;/em&gt;, i.e: if users buy too much of one side of the pool or if
one token of the pair gains/loses value relative to the other, the
value in one side of the pool is different from the other. This in
turn creates an opportunity for &lt;strong&gt;arbitrage&lt;/strong&gt;: one can buy the token
on the side with &amp;ldquo;excess&amp;rdquo; supply for a lower price than other
pools. In the process, the pool gets re-balanced and peace is restored
in the universe - that is at last until the next trader makes it
unbalanced again and the dance starts all over.&lt;/p&gt;
&lt;h4 id=&#34;enough-exposition-how-can-i-make-money-from-it&#34;&gt;Enough exposition. How can I make money from it?&lt;/h4&gt;
&lt;p&gt;When Loopring started accepting more token pairs to be listed on the
exchange,they rely on users providing lots of liquidity of all the
different tokens. They started providing rewards for people providing
liquidity for some tokens that were of interest, but not all pools
were benefiting from these incentives.&lt;/p&gt;
&lt;p&gt;As I noticed that there were some tokens from solid projects but with
low liquidity, I wondered if I could check if how balanced those pools
were.&lt;/p&gt;
&lt;p&gt;After some hours playing with their
&lt;a href=&#34;https://docs3.loopring.io/en/&#34;&gt;API&lt;/a&gt;, I hacked up a script that checks
that takes a list of tokens available for trade and does the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Checks if there is a &amp;ldquo;ETH-&lt;!-- raw HTML omitted --&gt;&amp;rdquo; pair&lt;/li&gt;
&lt;li&gt;Verifies the volume &lt;em&gt;and USD value&lt;/em&gt; of each side of token pair&lt;/li&gt;
&lt;li&gt;In case the pool is unbalanced, calculates how much of any one
token is needed to rebalance the pool and the associated costs.&lt;/li&gt;
&lt;li&gt;If the swap is profitable, prints the result with instructions of
what token and how much to trade.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The code is available &lt;strong&gt;&lt;a href=&#34;https://gitlab.com/lullis/loopringer/&#34;&gt;here&lt;/a&gt;&lt;/strong&gt;
and is a simple python script. To use it, just clone the repo, &lt;code&gt;pip install&lt;/code&gt; the dependencies listed on &lt;code&gt;requirements.txt&lt;/code&gt; and call
&lt;code&gt;python loopring.py&lt;/code&gt;. An example run would be:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Pay 0.2878332608336053 ETH ($511.2580728904747)
Receive: 190.44220898248264 CRV ($523.7160747018272)
Profit: $12.458 (2.437%)

[&amp;lt;Token: ETH&amp;gt;, &amp;lt;Token: DAI&amp;gt;] is balanced

Pay 0.07103439215219157 ETH ($126.17341837248723)
Receive: 61.38390289979394 GRT ($126.45083997357551)
Profit: $0.277 (0.220%)

[&amp;lt;Token: MKR&amp;gt;, &amp;lt;Token: ETH&amp;gt;] is balanced

[&amp;lt;Token: ETH&amp;gt;, &amp;lt;Token: USDC&amp;gt;] is balanced

Pay 87.2081188782998 ETH ($154901.67699520246)
Receive: 223365.22777104643 LRC ($155110.62166013668)
Profit: $208.945 (0.135%)

[&amp;lt;Token: WBTC&amp;gt;, &amp;lt;Token: ETH&amp;gt;] is balanced

[&amp;lt;Token: LINK&amp;gt;, &amp;lt;Token: ETH&amp;gt;] is balanced

Pay 42.64371343612116 1INCH ($201.7047645528531)
Receive: 0.11383943982241368 ETH ($202.20502819576586)
Profit: $0.500 (0.248%)

Pay 35.65256489452435 UNI ($724.81664430568)
Receive: 0.4083333892596485 ETH ($725.2940160046655)
Profit: $0.477 (0.066%)

Pay 0.3363907664508281 COMP ($149.6198851019993)
Receive: 0.08453349180284586 ETH ($150.1509241449689)
Profit: $0.531 (0.355%)

Pay 2683.6068944875324 PNK ($241.51925329008893)
Receive: 0.1372335288461172 ETH ($243.75831094233874)
Profit: $2.239 (0.927%)

[&amp;lt;Token: RENBTC&amp;gt;, &amp;lt;Token: ETH&amp;gt;] is balanced

Pay 4.064107695371856 AAVE ($1727.3676937638998)
Receive: 1.0481508187995057 ETH ($1861.7569288762459)
Profit: $134.389 (7.780%)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Taking a look at the results, it&amp;rsquo;s easy to verify that the ETH-AAVE
pool is really unbalanced and is now a big opportunity to make some
quick cash. As loopring grows, more people will come in, more
sophisticated traders will show up and these opportunities will become
ever rarer. Enjoy it while it lasts!&lt;/p&gt;
</description>
      </item>
      
      <item>
        <title>Federations and Identity</title>
        <link>https://raphael.lullis.net/federations-and-identity/</link>
        <pubDate>Thu, 30 Jul 2020 16:29:18 &#43;0200</pubDate>
        <author>Raphael Lullis</author>
        <guid>https://raphael.lullis.net/federations-and-identity/</guid>
        <description>&lt;p&gt;Now that &lt;a href=&#34;https://communick.com&#34;&gt;Communick&lt;/a&gt; is available for the
public at large and I am looking for ways to spread the word about the
benefits of decentralized services, something very curious is
happening: people seem to understand the issue of centralized
services, they understand how federation works and that they can
follow people from anywhere, yet the most common question I am hearing
is &amp;ldquo;What instance should I join if I am interested in X? Which ones
are better for people talking about Y?&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;My response would be something along the lines of &amp;ldquo;Do you use a
different phone number or email address depending on the topic of the
conversation?&amp;rdquo;, but the blank stares quickly remind me that I am part
of the last generation that actually &lt;em&gt;talked&lt;/em&gt; on their phones and
&lt;em&gt;wrote&lt;/em&gt; emails to &lt;em&gt;actual&lt;/em&gt; people.&lt;/p&gt;
&lt;p&gt;Yes, I am becoming an old fart, but I don&amp;rsquo;t know if it is just a
generational divide. My hunch is that companies were very successful
in convincing people that they are what they consume. As well meaning
their offering can be, every new social media startup that pops up
wants to become a middleman in the conversation of an insular
tribe. To have any kind of conversation, they need to have people
joining in the network, and playing to people&amp;rsquo;s sense of identity is
one of the oldest marketing tricks&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; to help them grow
their usage numbers. This is already bad in itself, and the fact that
they target younger people - who are still in a process of
self-discovery and understanding their relationships with society at
large - only makes it worse. It is going to take some time to get
people to unlearn this and to stop conflating their peer group values
with their own.&lt;/p&gt;
&lt;p&gt;Back to the idea of ActivityPub and Mastodon specifically, this
conflation of instances with tribes maybe made sense in a initial
point, where its participants did not have any way to find each
other. Content discovery in the fediverse certainly still needs to
improve in order to make it easier for newcomers and those that want
to leave centralized networks, but keeping this focus on
&amp;ldquo;topic-specific&amp;rdquo; instances is a recipe to keep a great idea forever
tainted as something for fringe groups.&lt;/p&gt;
&lt;p&gt;Outside of these cases where the identity of the individual is tied to
membership of the group, people&amp;rsquo;s main focus when selecting an
instance should have nothing to do with the group: is the service
reliable? Is the moderation fair and consistent? Is user privacy
being respected? Do they follow good security practices when running
the service?&lt;/p&gt;
&lt;p&gt;There certainly is a place for instances whose members have some
shared identity: employees of a business that need to communicate &lt;em&gt;on
behalf of the company&lt;/em&gt;, journalists and reporters writing for a
specific news group&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;, and even those that want to express
some currently-taboo aspect of their personalities (Yes, Uncle John,
keep your chiauauas-dressed-as-sailor-moon hentai collection private,
please) will be better off using accounts from a group specific
instance. Most of us will however be better served by joining a a
neutral federation or - even better - by running the instance under
your own domain.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;It is no wonder that the current populist wave is
tied to social media, where is so easy to foment the us-vs-them
mentality for pretty much any topic, is it?&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Given all the talk about how media groups are at odds
with big tech, how come not a single one of the mainstream news
groups put together their own instance of federated service yet? It&amp;rsquo;s
almost like they want to have all of their brand value thrown away
and mixed with all the bots and shitposters of Twitter and Facebook.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
      </item>
      
  </channel>
</rss>
