The Tentacles of the Ruling Class
I started reading The Lost Art of Scripture by Karen Armstrong yesterday. I read another one of her books in my early twenties and it helped spawn a part of my life very interested in exploring religion, myth and their effects on culture and the people I knew at the time. During more recent decades, I’ve separated religion from what Karen calls the arts and left it in a box to rot under the bed in the apartment I lived in back then in Houston. Perhaps part of the present Bobbus wants to summon a bit of that past Bobbus and re-explore those concepts.
Certainly, a mental struggle against ideologues throughout my existence has engendered cynicism. I’ve come close, but I wouldn’t say I’ve ever completely immersed myself in atheism. I’ve always retained at least a small sense of wonder for the ineffable. Karen states repeatedly in the introduction of the book, we cannot discount logos for mythos nor vice-versa, and I am in complete agreement. In fact, as I wrote, religion and its scriptures and ritual surrounding them were always a part of the arts. Just recently (century-wise), occidental culture has moved to quash that idea.
Grinding the ideologues up into fertilizer for the plants on my balcony is the first step. The second is to immerse myself once again in the shifting dialogue between mythos and logos.
The first thing that hit me was this:
We shall see that in every agrarian society, a small aristocracy, together with its retainers, seized the surplus grown by their peasants and used it to fund their cultural projects, forcing ninety per cent of the population to live at subsistence level.
Regardless of mythos and the wisdom of scriptures of old, I still stand firm in my belief that those who want to backtrack into some past system of ideology / laws to solve current problems (at whatever level of granularity) are imbeciles. In the world of art and music, it is equally or even more true. I’ve had numerous conversations with Herr Christián lately concerning the aristocracy and its ties to classically trained musicians he knows, most notably his friend Krzys, an opera singer of “note” from some Slavic nation I forget the name of. (There are just so many of them!)
What Karen states was once the unbending norm, but I posit that the aristocracy no longer exists in any form resembling what it was in those forlorn times. A far greater percentage of humanity have aristocratic beads hanging about its neck, each giving us time out of serfdom to pursue cultural / artistic projects. Logos, or humanity’s success in technological progress, is the plinth on which we stand that brings us up to the level of the olden aristocracy. Said classical purists who cling to the times where only the chosen could enter into and flourish in the arts are living in a rapidly diminishing bubble. Fuck um.
Oouh!Repetition is not a form of change (in this case)
Habitually in Spain, it’s seen as maleducación to directly tell someone you dislike what they have suggested to you or given to you as a gift. I suppose that to some extent, this practise would be considered maleducación in most cultures. Sadly, its effects are detrimental to a relationship. In fact, the effects are so detrimental that I’d place them on the level of, say, binding one’s friend to an outcropping overlooking a churning sea of pus so that a goat can consume his / her pancreas.
Marisa’s sister, María Jose, bakes a fish cake every xmas for the entire family. Of course, the entire family despises the dish, though they are required to consume it. Why are they required to consume it? Well, they wish to spare María Jose’s feelings, of course! So she prepares it unfailingly each xmas. Wouldn’t it be better to make her feel bad for a short period by telling her the truth so that she can move on and spend her time baking something everyone will enjoy?
The spongy wall of appropriateness only allows certain acts to be criticized. Somehow it is proportional to how original or how traditional the act is.
Miguel suggested a semi-documentary for us to watch the other day. In my opinion, and also in Marisa’s, it is awful, detailing a part of life in the United States that we have no interest in. Miguel can revel in it. I don’t have a problem with that. But I’m not allowed to tell him that I disliked it. He’ll never be able to align his suggestions to what is actually enjoyable for us.
For most, this type of critique is reserved for their closest friends and sometimes family. I task myself to break this cultural more. Fuck um. Humans that are close to me need to know when they are creating something abominable so they can either form it into something more palatable or swap it out for a less abominable abomination.
Other sides to this story exist, of course, especially in the case of art and the importance (or lack thereof) of an audience, and if the point was to create an abomination in the first place. I’ve written about these topics before and shall again. The reader of this particular abomination is now tasked with baking a fish cake that is only moderately abominable.
Oouh!Rambler's Ranch
It seems to me that a certain percentage of the violation of nature that I call the human race has an irksome habit. In fact, it’s so irksome, that many a times, I wish for these peasants to drown in their own blood. The paradox is that this habit, in the correct context, can be positive.
I require concise answers to questions in my work, and not only in my work but in other aspects of my life. When I ask a colleague a question, I don’t want a slice of their inner dialog combined with a vague pretension of an answer. If said colleague doesn’t know the answer, then they can kindly point me in the right direction and spare me a snapshot of a turbid inner life.
This malady is exacerbated when the person ostensibly answering my question is of the marketing or idea man ilk. In fact, the tendency of this ilk to dish out a slice of inner dialog instead of giving tight, controlled answers leads me to the conclusion that they all are better off used as fertilizer for my opium farm. To counter my complaints, such “people” answer with enlightenments along the lines of well, my mind is so rich with ideas that I cannot contain myself. Write it in a fucking blog. What you find to be insight is mostly dribble. Someone else can sort through the ramblings to find the 0.46% that may be of value to me.
The illness springs from the storyteller archetype - the old man in the center of the ring who recounts (highly edited and enhanced) tales of his tedious life. This archetype lives strong in self-proclaimed entertainers in our epoch, jokesters and other ego-addicts. My recommendation is to write a book or at least a blog. That way, if I spend time with the ramblings, at least I will have chosen to do so. Don’t bombard me with an inner dialog that you don’t have the willpower to tame and especially when I need a concise answer to a question.
About the habit being positive in the correct context - I changed my mind. They should all DIE.
Oouh!Musical Black Box
I’m often overwhelmed by the amount of music that both exists and appeals to me on an immediate surface level. The question is, how do I choose which are worthy of profound examination? My conclusion is that the choice is entirely arbitrary.
Sometimes I’ll elect a group / artist / project to explore by association with others I’ve previously delved into. Last year’s Utopia Strong is a prime example, as it’s a Kavus Torabi project. I choose others because of social association. Lately this means through acquaintences on Sonomu.Club. Historically, I’ve found much to like through acquaintences on progressiveears (and in ancient times, rec.music.progressive). I also shouldn’t forget friends who ramble on and on about certain artists. I tend to check those out, as well, though at times with trepidation.
But again, the previous paragraph indicates over-saturation. I have to thin the elite herd and / or cherry-pick. These decisions to explore deeply, as I typed cheerily a few paragraphs ago, are arbitrary. Last year, I decided I’m going to be a fan of Lady With. I had enjoyed what I heard and also other projects involving the composer, but it took a conscious decision to make time to get into the musical universe of the group.
I’m guessing youth saw me having more visceral reactions to musics and choosing explorations on a lizard brain level. Those days are long dissipated.
Oouh!The Buddha Goes for Target Practise, Part IV
Walking through the Pagan Park in Seminole, Texas, or perhaps whilst visiting the casino in Hobbs with my parents, a thought struck and amused me.
Say that living beings (all of them) have some sort of primordial force that various humans term soul or spirit. This premise is frighteningly widespread. I say frighteningly because I see myself as a rational guy who frowns and even scoffs at superstitions. To each his own, sure, but even novel and film related ghost stories give me problems these days. Perhaps it is my decrepitude. I am, after all, several epochs old. Anyway, that is a separate subject.
Back on track - Say that living beings (each one of them) have a primordial interior force. It exists symbiotically with our living corpse, but doesn’t deteriorate with time. Various humans dub this soul or spirit or elephantine farce, depending on whom you ask. It doesn’t cease, however, after the living corpse stops its elliptical ambulations. Taking the Buddhist standpoint, the primordial force passes directly into another living corpse after death. It makes sense to me that it’d elect a being conceived, born, whatever moment you’d like to choose at the same instant of the aforementioned living corpse’s death.
Given this theory, a spirit previously inhabiting a human has an infinitesimal chance of residing in another human. Most likely, that force carries on in a paramecium or lichen. Personally, I hope my personal (I laughingly call it personal) primordial force, wiped clean of those pesky memories, occupies a widely distributed slime mold. How’s that for megalomania?
Oouh!The Denial of Immediacy
A recurring bump in interaction with a friend who will remain anonymous other than saying he has what I call the Newman disease and both severe dyslexia and dyscalculia again happened yesterday. I suggested a course on Javascript using exercism.io, a useful site for learning programming languages at your own pace - ie, when you have free time.
Again, I got an offhand comment about js, but nothing more. Same old story, different epoch. Usually, when I get this sort of response from someone, I blink a few times and move on with my life. Some humans and even mustelids are interested neither in taking general advice or in intellectual self-improvement. Specifically, some are just not interested in educational tasks that will take a (even sometimes very small) chunk of time even if rationally they understand it will diminish various other chunks of future time and especially alleviate frustration.
Usually, I’d say fuck um and move on, but this oxlet with Newman disease (among others) is a particularly good friend.
My impression is that there is an aversion here to any learning that doesn’t have intuitive appeal. It’s an issue that pokes at my enlarged and pustulant liver because it also affected me for many epochs.
My path through primary, middle and high school was so easy that I learned no useful study skills. I mastered everything hurled at me intuitively. I received a nasty blow to the ego when I walked into the University of Texas at Austin and not everything came so easily. I had to sit down and feel myself through a maze of knowledge without that intuitive olfactory sense that leads the precocious rat to the fermented mold.
I tripped and found myself sprawled into a world where I had to grapple with knowledge and especially process to reach any sort of mastery. Bastards. Since, during my infancy and adolescence, I was showered with praise for my gift of intelligence, climbing the debris-littered slope probably took longer than for those who didn’t have it so “easy” during the formative years.
These epochs, I’m wary of anything that comes completely intuitively. I realize that is possibly an extreme, but I find constant self-observation appealing. Hand me a platter of puzzles I must unlock to get at the foodstuffs instead of a steaming döner in a paper sack, please. The hunger will encourage discovery.
The appeal of immediacy is undeniable, but just like plunging into a long term relationship simply because another human or mustelid is feisty in the burrow, initial wonder can lead to debris dodging and bug fixing for epochs to come. I haven’t seen a concise proportional measure ’tween effort and reward, but am pretty sure always taking the easy, intuitive path doesn’t work out so well for anyone.
Oouh!A Murderous Flash
Yesterday, in the early evening, I had a flash like a sudden fever that struck me then left, but returned in reverberating waves during the following hours. The feeling had subsided completely by the time I passed into sleep hours later, but the thought structure it left behind remained. It still remains today.
The collection of wealth for its own sake is an abomination. Moreover, the collection of wealth to pool into a family trust is equally evil. Common regurgitations I perceive are along the lines of I’m saving so my children can have a better life. But what these egocentric oafs are really doing is teaching the same behaviour to the offspring in effort to hoard wealth into a dynasty.
It’s somewhat the same as the mafia strategy, concentrating hoardings in the family throughout generations to no ends but augmenting the pile. The dragon in Grendel floats to mind, but on a hereditary scale.
Being a speciesist, or even a proponent of all life, in general, I find concentrations of power, wealth, or any sort of potential detrimental to what I feel is the flow of life. I can only peripherally understand it from the point of view of the hoarders, assume their motives, of course, but the portion I understand sickens me. I strikes like a fever at this flow of life, which seems to be diverted and diluted again and again by generational wealth hoarding.
Gather a pile of gold and sit on it.
I’m about to use the word should extensively in the following paragraph. Thus, I am accused of instructing others in the way they should act. It could be seen as my own form of fundamentalism. So be it if it is seen that way. I write what I feel would improve the world in general, and in specific, relations between communities in our species.
My thoughts are that each individual, and on less granular scale, each family or even peer group or organization, should to make a contribution from their hoarding to the flow of life. These contributions should be anonymous so they do not cause a fluctuation in the aesthetic perception of said individual or group. They shouldn’t be a one time thing, akin to a religious act of being saved by the one time scandal of letting the Jesus creature into their lives. Direct application of funds can be substituted by substantial acts of kindness. Either way, a portion of the wealth hoard is diffused back into the flow of life.
My seething hatred at those who pile their gold solely for their kin and for no other reason to pile their gold and teach their offspring to do the same has faded. The impression remains. The seething hatred has faded, but I’d still not mind were many of them used as fertilizer. We need more fertilizer around here, after all.
Oouh!A Task for my Pet Tardigrade and its Multitudinous Foals
Taylor asked me yesterday what are five things I did during the decade that is coming to a close that made it worth it.
Before I begin a formal list, I’ll say the overreaching concept that made the decade worth it was the sheer enjoyment of as many moments as possible during the said decade. Being that a moment can be regarded as an infinetesimal span of time, I had the possibility to experience infinite enjoyable moments, causing death by cerebral hemorrhage in several infinities of parallel quantum universes.
- I started seriously composing and playing music again.
The dearth of music years were between 2002 and 2008, more or less. During that time, I tossed away any aspiration of even picking up my guitar, much less letting it speak into the antiquated tape machines I still held on to for years. I certainly didn’t give up listening intently to music, however, and attended many concerts. Those are other stories that may or may not be told in this or some other member of some other infinity of parallel quantum universes. I don’t encourage you to wait for their telling, though you may do so, if you so wish. I will not be held responsible, however, if you wither and dessicate during the process.
In 2010, when I lived in New Cross Gate, I earnestly dabbled with electronic music for the first time. Ironically, now that I’ve incorporated modular synth and whimsical Supercollider forays into my compositions, none of that original dabbling has seen the light. One piece, The Fen, will eventually be resurrected.
Tony and I created a collection of improvisations, some of which I’m afraid to relisten to, during the following year. We also worked on some crudities I wrote in 2008 whilst living in Hůrka. Fold is a “modern” version of one of those crudities. I plan to pull Union and Reduction from their tombs, as well.
Most importantly, I composed Cycle, a seventeen minute or so piece deeply set in a ravine of minimalism. A version exists purely as midi. This template can be expanded and mechanically fleshed by electronics, guitar and gargling voices set bringing an end to the plague that is the “American” way of life and that has poisoned so much of Europe. Fuck um.
Another few dead years followed during which I frittered about in Boston and tampered with the destiny of Mustelids in Spain. Whilst remaning in Spain I bought a utter trozo de hovno kytara Pignose and started practising again. I didn’t at first consider composing or revising past glories, but just practising. I practised until my fingers bled. I practised until my liver drooped from my abdomen. I practised until the Heat Death of a few infinities of parallel quantum universes.
I spent 2017 and the first few months of 2018 playing in a duo. As little as I cared for the humour or attitute of my partner in this venture, my point of view expanded and those dank days flowered into whatever sort of monstrosities one could describe the first few Flavigula albums as. I dumped the duo and the rancid individual I was strung up with, tossed away my noose and dove into the psychedelic maelstrom.
- I became better at letting go / not obsessing about anything.
Fixations take up chunks of time in the lives of many people I know. Not only are they fixations, but fixations on things that do absolutely nothing to further their intellectual or creative (or both) pursuits. I’ve gone to great lengths to dissolve an obsessive compulsive disorder I had. Best is the ability to concentrate on what I want to concentrate without some mental module I have no control of sucking away my time and energy.
Or, one might say, I became more of a sociopath. That would be the correct perception since I have become Catholic and therefore see all life in discreet blocks of black and white.
My oversensitive persona of youth and 20s had been fading for some time, in any case. The road to a firmer self realization and self esteem had already been tread. The decade simply saw these facets become more prominent. Marisa calls it Aspergers. Whatever one wants to call it, I find it a blessing from the almighty Baal itself. Yes - I will speak my mind. Yes - I will care little of what you think of me (unless I know you very well). But also I’ll listen to your reasoned discourse. Put away your mannered ravings. They do not appeal to me.
- I narrowed my fields of concentration.
Following in the footsteps of my desensitization to the majority of humanity, I felt mortality encroaching from a vague distance. The realization that time is limited is something most are not willing to approach during their youths, or if so, only in a bombastic or melodramatic way.
I used to be happy being a mustelid of broad knowledge. Now my objective is to be a mustelid of profound knowledge in a limited number of areas. Ok, knowledge may be too specific a word here. Simply put, I limit my concetration to fields that interest me most, such as music, programming and worshipping goats.
In stark contrast to these self-absorbed pursuits, I tasked myself with opening myself to empathy that I’d rejected so long. Having been raised in the hellish entorno of Fort Stockton, it’s been a arduous journey recuperating genuine compassion for humanity. I believe my love for animal life and mustelidae in specific assisted this eternal work in progress. Constant observation of ignorance and stupidity in every village square has not done much to assist this eternal work in progress.
4 & 5. I’ll have to think of other abstractions that have been important to me in the receding decade. Perhaps I’ll come up with something soon, but, as I wrote earlier, don’t dessicate waiting for me to do it.
A list of discreet occurances that pivoted my life during the receding decade (or ones that I feel could be pivot points influencing the encroaching decade):
- Meeting Lisa Kammerud (December, 2009, actually)
- Tuzla, as a discreet, three month point
- Metting Jeremy Croteau
- Starting a company with James
- Connecting with my biological son
- Meeting Matthew Walsh
- Meeting Daniel García
- Two short films with Dani (as discreet points)
- Meeting Tiit Maran
- Meeting Marisa
My Collection of Originalities is Thinning
In brief conversation with Marisa’s mother, Ilu, I encountered an ingrained form of response, or so it seemed to me. I stated We are leaving within an hour. (Marcharemos dentro de una hora.) and she immediately came back with Or even sooner! (O incluso más pronto!). I immediately correct her, as I am wont to do. Some call me a pedant for such behaviours. Fuck um. Nothing against Ilu, but I find such responses a symptom of sloppy thinking.
I like to hang back a bit with my thoughts before coming out with the first phrase that tingles my tongue. I’m unsure if I am among the majority that perform this way. I’m all for saying what’s on one’s mind, but when those thoughts come out in dichos or stock phrases, I wonder about the precision of expression.
Thus the central point of this entry. As I grow towards decrepitude, shrinking further into the groaning corporeal husk that houses my hara, I find myself surrounded more and more frequently by people who, instead of discursive conversation, resort to retorting in phrases which seem carved into their mental language tablets as if into stone. Certain stock phrases recur, recited in various orders to achieve various level of vagary. I’m aware that I am suppose to sense the meaning behind each black box after black bundle of words. I should interperet them in context just like a set a gesticulations. However, this process leaves me deeply dissatisfied. I don’t want to talk to a magician who has a bag containing a set number of stock phrases. He pulls one after another from said bag, sorts and assembles them as quickly as possible.
An interesting assement of dichos, as they are called in Spanish, is that they tend to create tighter bonds between community members, especially of those dichos are particularly local. They toughen the skin of the bubble. In other words, they further isolate the community from the outside with a barrier of impenetrable phrasiology. An outsider will have a harder time integrating when they don’t know the inner significance of three noses to the wind or he buried a pumkin near the ravine.
One could argue that such dichos give a particular bubble (community) flavour of its own, differentiating it from multitudinous other bubbles wielding their own stock phrases. My view is that this tendency is a barrier to fluid communications between bubbles and a barrier to globalism. It’s a small step towards culture-centrism, nationalism and a type of fundamentalism that irks me.
Oouh!How I Ruptured my Cerebrum Implementing Activity Pub
I spent a few months on and off, that is to say, not very consistently, attempting to get this blog Activity Pub Sensitive. There were many false starts, many moments where I gave up, many spilled comestibles and one or two plagues of sentient lice. In the end, my implementation is far from perfect or finished, but it does what I need it to do for now.
I’m in metaphysical debt to the following:
- Activity Pub as it has Been Understood
- How to Read the Activity Pub Specification
- Activty Streams Vocabulary
- Activity Pub Specification
My code is here: https://github.com/inhortte/martenblog-elixir
(Activity Pub as...)
(How to Read...)
(Activty Streams Vocabulary)
(Activity Pub Specification)
Martenblog is a single user federated app, so, unlike #mastodon or Pleroma. This single user is the manifestation of the blog, perhaps, were it sentient. Perhaps it is. I’m not sure. Whereas Actors on Mastodon are indicated by https://instance/users/username (I’m https://sonomu.club/users/flavigula on Mastodon), my singular actor is https://flavigula.net/ap/actor. I didn’t come up with this genericism myself, but by stealing the idea from … well, it seems I cannot find the repository any longer. I am also in metaphysical debt to this human who did a Node.js implementation for his own blog.
curl -k https://flavigula.net/ap/actor will show you my actor.
Backtracking slightly, I found it necessary to implement webfinger so that other servers could see me. My initial testing goal was to be able to type @martenblog@flavigula.net into the search field on Mastodon and find the manifestation of Martenblog.
def webfinger do
json = %{
aliases: [
"https://#{@domain}/ap/actor"
],
links: [
%{
href: "https://#{@domain}/ap/actor",
rel: "self",
type: "application/activity+json"
}
],
subject: "acct:martenblog@#{@domain}"
}
json
end
I suppose that’s pretty self explanatory. You can see the result at https://flavigula.net/.well-known/webfinger
While I was at it, I added the https://flavigula.net/.well-known/host-meta endpoint:
<?xml version="1.0" encoding="UTF-8"?>
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
<Link rel="lrdd" template="https://flavigula.net/.well-known/webfinger?resource={uri}" type="application/xrd+xml"/>
</XRD>
Also, the https://flavigula.net/.well-known/nodeinfo endpoint:
{
"links": [
{
"rel": "https://nodeinfo.diaspora.software/ns/schema/2.0",
"href": "https://flavigula.net/.well-known/nodeinfo/2.0.json"
},
{
"rel": "https://nodeinfo.diaspora.software/ns/schema/2.1",
"href": "https://flavigula.net/.well-known/nodeinfo/2.1.json"
}
]
}
And the two endpoints referenced within nodeinfo:
{
"version": "2.0",
"usage": {
"users": {
"total": 1,
"activeMonth": 1,
"activeHalfyear": 1
},
"localPosts": 419
},
"software": {
"version": "1.0.0",
"name": "Martenblog"
},
"services": {
"outbound": [],
"inbound": []
},
"protocols": [
"activitypub"
],
"openRegistrations": false
}
{
"version": "2.1",
"usage": {
"users": {
"total": 1,
"activeMonth": 1,
"activeHalfyear": 1
},
"localPosts": 419
},
"software": {
"version": "1.0.0",
"repository": "https://github.com/inhortte/martenblog-elixir.git",
"name": "Martenblog"
},
"services": {
"outbound": [],
"inbound": []
},
"protocols": [
"activitypub"
],
"openRegistrations": false
}
The code for those are in https://github.com/inhortte/martenblog-elixir/blob/master/lib/martenblog/router.ex along with every endpoint of my website.
I only want to federate blog entries to people who follow me from other regions of the Fediverse. An api endpoint exists for this, appropriately named followers. (https://flavigula.net/ap/actor/followers) Though I implemented the endpoint and find it likely that it is required to do so to have a functioning server, the resulting collection didn’t serve as I thought it should according to my interpretation of the specifications. I’ll come back to that later, however.
One must accrue followers. That is, I’m not going to send blog entries arbitrarily out to fediverse entities. So, when someone follows Martenblog, it receives something along these lines to the inbox (that’s https://flavigula.net/ap/actor/inbox):
{
"type": "Follow",
"object": "https://flavigula.net/ap/actor",
"id": "https://sonomu.club/94904728-1d32-4a51-b422-0373323ec61c",
"actor": "https://sonomu.club/users/flavigula",
"@context": "https://www.w3.org/ns/activitystreams"
}
The code takes this json and wraps it in an accept activity:
{
"type": "Accept",
"object": {
"type": "Follow",
"object": "https://flavigula.net/ap/actor",
"id": "https://sonomu.club/94904728-1d32-4a51-b422-0373323ec61c",
"actor": "https://sonomu.club/users/flavigula",
"@context": "https://www.w3.org/ns/activitystreams"
},
"id": "https://flavigula.net/ap/48394fc9-114a-4849-86e4-3b78226915d9",
"actor": "https://flavigula.net/ap/actor",
"@context": "https://www.w3.org/ns/activitystreams"
}
and sends it on its way, which will be explained next, as it is the most complex bit. The inbox endpoint in https://github.com/inhortte/martenblog-elixir/blob/master/lib/martenblog/router.ex sends the follow activity to the inbox function in https://github.com/inhortte/martenblog-elixir/blob/master/lib/martenblog/activitypub.ex, which calls the accept function in the same file.
Implementing the sending an activity to another Fediverse server part was like excoriating myself with a rusty spanner, mainly because I couldn’t find a clear way to test during development, so I was, as it were, programming blind, deaf, motionless and possibly without appendages whatsoever.
def sign_and_send(activity, inbox) do
target_domain = Fuzzyurl.from_string(inbox).hostname
inbox_fragment = String.replace(inbox, "https://#{target_domain}", "")
date_str = Utils.rfc2616_now
Logger.info "Reading private key..."
{:ok, priv_key} = File.read("/home/polaris/keys/martenblog.pem")
Logger.info "priv_key: #{priv_key}"
string_to_sign = "(request-target): post #{inbox_fragment}\nhost: #{target_domain}\ndate: #{date_str}"
[ rsa_entry | _ ] = :public_key.pem_decode(priv_key)
decoded_key = :public_key.pem_entry_decode(rsa_entry)
sign_me = :public_key.sign(string_to_sign, :sha256, decoded_key)
signature = :base64.encode(sign_me)
sig_header = "keyId=\"https://#{@domain}/ap/actor#main-key\",headers=\"(request-target) host date\",algorithm=\"rsa-sha256\",signature=\"#{signature}\""
case Poison.encode activity do
{:ok, json_activity} ->
Logger.info "sign_and_send -> activity: #{json_activity}"
Logger.info "string_to_sign: #{string_to_sign}"
Logger.info "signature header: #{sig_header}"
Logger.info "date_str: #{date_str}"
case :hackney.post(inbox, [
Host: target_domain,
Date: date_str,
Signature: sig_header,
"Content-Type": "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"",
Accept: "application/activity+json, application/ld+json"
], json_activity) do
{:ok, res} -> res
error -> error
end
error -> error
end
end
This function is invoked with the activity to be sent and the inbox of its recipient. In this case, said recipient would be the actor from another federated site that sent me a follow activity. I extract the inbox of the actor who wants to follow me by grabbing the actor and extracting its inbox field. The remote_actor and fetch_actor functions do this. You may want to take a look at https://github.com/inhortte/martenblog-elixir/blob/master/lib/martenblog/ap_resolver.ex, also, which handles actors cached in the database.
I diverged from the main point a bit. sign_and_send receives the activity to send and the inbox of the remote actor to send it to. First, it calculates the inbox_fragment from the remote inbox. That’d be, say /users/flavigula/inbox. Next, the date, which HAS to be in this format: Thu, 26 Dec 2019 15:25:21 GMT - the rfc2616 format. If you do not use that format, you will instantly be beheaded.
It seems that Pleroma is more flexible concerning the format of the date it receives. Mastodon is not. It must be RFC2616. Take a look at the function rfc2616_now at https://github.com/inhortte/martenblog-elixir/blob/master/lib/martenblog/utils.ex. Notice that I manually append GMT at the end. Since I use DateTime.utc_now, the time zone is not relevant, but be warned that if you use a conversion tool that gives you UTC as the time zone, your signature will be rejected by Mastodon servers. Tacking on GMT is my solution.
Mastodon uses this bit of Ruby to verify the date:
def matches_time_window?
begin
time_sent = Time.httpdate(request.headers['Date'])
rescue ArgumentError
return false
end
(Time.now.utc - time_sent).abs <= 12.hours
end
I recall reading that the window for submitting a response is +/- 30 seconds. Obviously, Mastodon thinks otherwise.
Sometime before you get to this point, you need to have generated a public / private key pair. If you don’t know how to perform these duties, check out the following url: https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/. It also complements several processes I’ve already described, so is generally helpful.
So, Herr sign_and_send fetches my private key and constructs the so called string_to_sign, which his this aspect:
(request-target): post /users/flavigula/inbox
host: sonomu.club
date: Thu, 26 Dec 2019 15:25:21 GMT
The function continues by decoding my private key, signing the key via sha256, and encoding the result via base64. Of course, the tools you use to perform these three steps will vary depending on your language. I’m hanging out with Elixir at the moment and the procedure is carried out by functions from the underlying Erlang system (note they all start with :). The aforementioned blog.joinmastodon.org url details the same steps in Ruby.
The sig_header, an amalgam of the preceeding steps, comes out similar to this:
keyId="https://flavigula.net/ap/actor#main-key",headers="(request-target) host date",algorithm="rsa-sha256",signature="VHYpjLbjhxwsVwOQTPzsbzzSkqCHXRtnhUp3CYYJsXRcdosKAeSHKShm3OuwCLlyx7iLvsU7y+jN2i4zrf2nLfAi6ujXqUBxsfrtHXBaLkjMyypRZ6eYwprZvZsDgWQ0v+M1E2KsWowlLINpAWGG9Nydh4wCa37RB7sAhqv/Ccdp57FACT5O9DQFUccgko93Yns4Amo7ZWtKth0QAR4H5bILe8lLGa0E6IfgyX1SSuitXRMqVsd8RDPY9ARKUl7arge6mPNl9WFtxPjNzhfXIiEYn7VHIt1WA82ungMnNUy6+aOOrBwJWu8BDYOlZT+Sl5/qN91ggjjtgq7vT+qjrA==
Now, you can POST the activity to the foreign inbox. Again, I’m using Erlang - hackney to be exact. Set the Content-Type to be application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\" or be beheaded once again.
On to sending actual blog entries.
Wrapping an entry into an article, I get the following:
%{
"@context": ["https://www.w3.org/ns/activitystreams"],
attributedTo: "https://flavigula.net/ap/actor",
cc: [],
content: "<p>Strange how these days remind me...</p>\n",
id: "https://flavigula.net/entry/by-id/4",
name: "Winter eve",
published: "Thu, 26 Dec 2019 15:25:21 GMT",
to: ["https://sonomu.club/users/flavigula"],
type: "Article",
url: "https://flavigula.net/#/blog/2006/12/8"
}
… constructed by the article function in activitypub.ex. Though I didn’t find reference to it in documentation anywhere (but I honestly didn’t look for more than twenty six seconds), the url field provides a nice link using the name at the beginning of an article federated to Pleroma. Mastodon ends up with the contents of the name field followed by the url.
The Elixir map (that’s the construction you see above that begins with %{ and ends with } which is certaily not json yet) is piped through the create_activity function and another map emerges:
%{
"@context": "https://www.w3.org/ns/activitystreams",
actor: "https://flavigula.net/ap/actor",
cc: [],
id: "https://flavigula.net/ap/20a8f2d0-8f14-42bf-ab4f-c4d5a98c7c5a",
object: %{
# The article above
},
published: "Thu, 26 Dec 2019 15:25:21 GMT",
to: ["https://sonomu.club/users/flavigula"],
type: "Create"
}
As I noted earlier, and also to prevent yourself from being beheaded a third time, make sure the published field in the article (represented in the object field in the create activity), the published field in the create activity itself and the date that goes into the sign_and_send apparatus are all within thirty seconds of each other. Edit: The Ruby code I quoted above and which comes straight from the Mastodon source seems to think 12 hours is good enough. Regardless, playing it safe is better.
Identical to sending the accept activity previously, this create activity, along with every follower’s inbox goes to sign_and_send. I loop through each inbox, calling sign_and_send repeatedly, and certainly realize this is not particularly efficient. I’ll get around to improving this and other laxnesses soon.
As I mentioned near the beginning of this spiel, though, I could not get the send to followers functionality of Activitypub to work. Therefore, instead of having https://flavigula.net/ap/actor/followers in the to or cc fields, I directly add an array of the followers’ inboxes. The issue needs more investigation.
So, there you have it. I possibly missed a few steps and / or parts are misaligned and inexact. Having stated that caveat, I hope what I’ve written is of help to some of those humans I keep hearing about who are ostensibly wandering around on the face of the planet. If so, said humans should relax, celebrate, take some ketamine or whatever suits their fancy. I know I would were I a human instead of a mere mustelid.
Oouh!The Artifact that Diluted a Species
When it comes to #music, any piece that doesn’t contain an underlying current of melancholy or a smattering of anxiety isn’t ever going to be regarded as great in my inked book. I consider the two emotions the basis of quality art, or, translated into more humble terms, art that appeals to the inner goat.
I quickly lose interest in pieces that ooze what some would call joy or ecstasy. Their surface is too transparent. There is usually little beneath. Thus, club or dance music, in the modern sense, doesn’t appeal to me. In fact, it fills me with a rage that teeters on the edge of genocidal mania. As far as transparency goes, neither does folk music do much for the inner goat. At times lyrics and melodies may pull on the hara’s firmament, but the inner emptiness of the music always overwhelms.
An exception to the first paragraph is droning, mostly harmonically static, ambient music. The deference to an emotionless morass is appealing to my cruder, Taoist sensibilities.
My goal, apart from what I’ve typewritten with a hunk of dirt bashed against the skull of a goat, is to create bare music. Its relation to droning, mostly harmonically static music is most apparent in that it is not defined by any emotion that I, its creator, am oozing during the moment of creation (or any other moments in its temporal vicinity). Any #emotion conjured from a piece is incidental, created by the ooze of chemicals within the listener.
Of course, I have hopes that the primary emotion that surges from an active or passive listener is unbridled RAGE. They transform into their interior GOAT and viciously butt passerbys into metaphorical cunetas.
The ostensible connotation is that none of my music will be, by my former definition, great in my inked book. In that my satisfaction is more with the journey of creating than in the finished product, I’m not bothered. My goat hara is complex enough and infused with enough modular history that I’m sure a mixture of varying emotional material will flow into a piece no matter my intention. I’ll be the “judge” of whether anything is great later in life by the impressions the pieces leave on my later self.
Oouh!