_______________
CAPTAIN'S LOG
Mental H Cat
_______________
,----
| .d0XWWWMMMMWWNWWWXKkc.
| ;kXWWMMMWWWMWWNNWWNNXNX0l
| 'kXNWNWWNNNNXXXNNXNXK00kk0Kx.
| ;KXNNNNXXXKKKKKKKK0OK00xxdldxd.
| '0XNXXX00OOOOO000OOkxkkkxc;c:lll
| .OKKXXKOxxxxxxkkOkxdddolooc,',;lo.
| lK0KXKkxdldddxkOkxdxkxoccc;....'c.
| ;0k0XKOxo:okOO000OOkkxdl:;,.. '..,.
| ,OxOXKOkl:xkxxkOOO0K0OOkkdol;. .. ..
| .kdxXKOkx;oOkdxdoloodd0KKKOo:::. ..
| .cdo000OOocokxlxcdl,.:;lxxl'.. .
| ,lokx0KKOlclxxdxOOxlkOxkd. .;. .
| .::ll0XK00occokO00KKK0Ok0x 'c:, .
| .:l:;,,xXX00Ol::cdkxdxkkOkkOx;.c:' .
| clolxOOoodOoxOxdd:clcldxO0KOok:, . .. .....
| :xOKKK0kll;.cxodok0Oc;:dkO0000dc .. ....
| d0OkOxkxdc;,.:,:x0Oo,:ccoodddc:, ... .. .
| dxlodllccc;,'..oOkdxo:;:cllc;'. .. .
| clccc::::;;;;,.dookxkx:cdclc,..;,
| ;;;;:;;,,,'''..:.:oldo,;dx...dkc' .;'
| ,c;,,,',.,........,,,;.lkd, :kdc;:xo.
| c,;;'';.'';......... ':o:;lld::lo.
| lol',,.;'.'...'..,... .',,,,','';:c.. .
| c;cdc,,'',''...........;;;'.;''...... .
| ;do:od;'''........;;'.'';'',';,,'.... ...
| :,cdc:oc'...;'.....,,..''''''',,,... ..'
| 'c,'ld::c;...''..;.......''',,''... ...
`----
Journal of the Damned
=====================
* Wed Jul 26 09:49 EDT; goldblum
I'm here. A bit lost in the mists of time at this very moment, but
generally, here.
I need to start writing down stuff again. It always rots and feels
awkward and embarrassing later when I come across it and read it
again, much like old code. I hate it in the way I hate other people's
work, only more because I can't escape the implication.
Lots of folks out there trying to escape the implication.
But writing stuff down makes me less likely to try to hang onto ideas
long past the time they've become stubs with any content lost to the
wind. Writing makes thoughts immediately forgettable, with happy
impunity.
I've been working for the last few months, but it is doing to me what
it did before, if a little slower. I can't see the horizon any more.
More generally, after some note taking finally (see?) I have concluded
that I'm working on the wrong problems.
I don't want to make it easier to implement remote "trust", I want to
make it harder. "Trust" is NOT transitive, never was. Trust is a human
concept, and one which is established through relationships. Using
math as a proxy for that makes no sense at all.
Remote attestables, fair exchange protocols - these things do not
solve the problem they proport to solve.
So now I'm starting to feel excitable again, as the end of my contract
approaches. I'm pretty checked out already. I think me and Dann, my
friend who is one of the founders I'm working for right now, are in
good shape to stay roughly the same amount of friends. I might even be
able to continue working with him in some limited way, but not for the
company per se.
So August, bring it. Gonna talk to Henry (gammaspace) about some of
the co-op stuff he's working on, and the Weird Ghost org he's working
with. I want to do games, but my route to that might be through
supporting indie game co-op studios with tooling.
So here I am. Been on the slide for a while, and its time to focus
back on the smolnet. I might write a bit about what I had hoped to
realize thru this current work, even if it might seem silly given the
obviously financial market it's aimed at. Nuff said, more later, when
I've figured out what is NDA and what is not.
* Wed Mar 15 09:15 EDT; goldblum
Screwtape mentioned my snippet from the weekend from my phlog
publishing setup, and it made me cringe because it's all a work in
progress and I already cleaned it up a bit.
So, here's an update. First, you can find the whole emacs config on
sourcehut at <
https://git.sr.ht/~mhcat/neumacs>, which will be the
current version (modulo the last 24 hours of fuckery).
Next, a little context. Currently I do a sshfs mount to the system I'm
running [hole,omar].mhcat.[space,dev], like so:
,----
| mount -t sshfs omar.local:/srv/gopher $HOME/gopher
`----
which depends on fuse ssh filesystem support locally. Being over ssh,
no particular server support is required for it to work, so I *could*
just as easily use a mount for SDF too, rather than a tramp location.
Or vice versa.
Third, I have an org capture template for my phlog, which puts entries
right into my master `log.org' file. It drops me into that file after,
and I just run the manual `org-publish' command after giving it a once
over.
Finally, once the first entry is shipped to my SDF gopher directory,
it's included in my SDF `gophermap' using the (what I think is a
gophernicus extension) `=` directive, under the "Latest entry:" line.
The snippets below are the current state, but I am now planning two
major changes. First, I want to break out a file per entry. I'll keep
the single org file master copy, but I need entries to be addressable.
Second, I need to stop including the entire entry in the main SDF
`gophermap', because it is too much for an index. Maybe a paragraph,
or a couple lines and an ellipsis, and a link to the file for the
entry rather than the whole big thing.
So, expect another one of these updates to appear in the next few
days.
,----
| (setopt org-capture-templates
| `(("p" "Phlog" entry
| (file+headline ,(concat (getenv "HOME") "/gopher/log.org") "Journal of the Damned")
| "* %<%a %b %e %R %Z>; %(system-name)\n%?%i"
| :prepend t :jump-to-captured t)
| ;; ... more templates ...
| ))
`----
,----
| (require 'org-element)
|
| (defun j0ni/prepare-first-entry (plist filename dst-dir)
| (let* ((org-inhibit-startup t)
| (visiting (find-buffer-visiting filename))
| (work-buffer (or visiting (find-file-noselect filename)))
| (dst-file (expand-file-name "first.org" dst-dir)))
| (with-current-buffer work-buffer
| (let ((entry (org-element-map (org-element-parse-buffer) 'headline
| (lambda (hl)
| (when (= (org-element-property :level hl) 2)
| hl))
| nil t)))
| (with-temp-buffer
| (insert (org-element-interpret-data entry))
| (write-region (point-min) (point-max) dst-file))))))
|
| (let ((gopher-dir (concat (getenv "HOME") "/gopher/")))
| (setopt org-publish-project-alist
| `(("captains-phlog"
| :include ("log.org")
| :exclude "first.org"
| :base-directory ,gopher-dir
| :publishing-directory ,gopher-dir
| :publishing-function (org-ascii-publish-to-ascii j0ni/prepare-first-entry))
| ("first-entry"
| :include ("first.org")
| :exclude "log.org"
| :base-directory ,gopher-dir
| :publishing-directory "/ssh:sdf:~/gopher/"
| :publishing-function org-ascii-publish-to-ascii
| :ascii-underline nil
| :ascii-text-width 60
| :with-toc nil
| :with-title nil
| :with-author nil
| :with-creator nil
| :section-numbers nil
| :headline-levels 1)
| ("phlog" :components ("captains-phlog" "first-entry"))
| ;; ... more projects
| )))
`----
* Mon Mar 13 09:56 EDT; goldblum
I have mixed feelings about the idea of signing posts
cryptographically, as part of my general questioning of our
over-dependence on crypto as a trust medium. I've written before about
how prevalent this is, and the way it's used to beguile lay people.
Most people have no idea about specifically what it is they're feeling
more confident about when they believe something to be
"cryptographically secure."
But, I do like the idea of using signatures as a form of punctuation.
For example,
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
don't trust anything you see coming from me which appears to be
signed.
-----BEGIN PGP SIGNATURE-----
iHUEARYKAB0WIQQfqJjzjharo5rcE5YygDxZFVO+2gUCZA8tYQAKCRAygDxZFVO+
2ge3AQCb46HIox4p3S1C5i7XJJmeECUxWUCPnTl8xlSJget0DQEA9QKvRGC2MB5d
dO3wjj1UgqR2VxWx3TWiMqg3oAYgWQI=
=X6vL
-----END PGP SIGNATURE-----
It almost certainly is fraudulent.
* Sun Mar 12 15:02 EDT; goldblum
I think I figured out a good workflow for publishing straight from org
capture. Here's the bit of config in my emacs init:
,----
| (require 'org-element)
|
| (let ((gopher-dir (concat (getenv "HOME") "/gopher/"))
| (entry-file "first.org")
| (log-file "log.org")
| (sdf-dir "/ssh:sdf:~/gopher/"))
|
| (defun j0ni/prepare-first-entry (plist filename dst-dir)
| (let* ((org-inhibit-startup t)
| (visiting (find-buffer-visiting filename))
| (work-buffer (or visiting (find-file-noselect filename)))
| (dst-file (expand-file-name entry-file dst-dir)))
| (with-current-buffer work-buffer
| (let ((entry (org-element-map (org-element-parse-buffer) 'headline
| (lambda (hl)
| (when (= (org-element-property :level hl) 2)
| hl))
| nil t)))
| (with-temp-buffer
| (insert "#+OPTIONS: toc:nil H:1 num:nil title:nil author:nil creator:nil")
| (newline)
| (insert "#+ATTR_ASCII: width:60")
| (newline)
| (insert (org-element-interpret-data entry))
| (write-region (point-min) (point-max) dst-file))))))
|
| (setopt org-publish-project-alist
| ;; This makes a markdown version of this file.
| `(("notwithstanding"
| :base-directory ,user-emacs-directory
| :publishing-directory ,user-emacs-directory
| :publishing-function org-md-publish-to-md)
| ("captains-phlog"
| :include ("log.org")
| :exclude "first.org"
| :base-directory ,gopher-dir
| :publishing-directory ,gopher-dir
| :publishing-function (org-ascii-publish-to-ascii j0ni/prepare-first-entry))
| ("first-entry"
| :include ("first.org")
| :exclude "log.org"
| :base-directory ,gopher-dir
| :publishing-directory ,sdf-dir
| :publishing-function org-ascii-publish-to-ascii)
| ("phlog" :components ("captains-phlog" "first-entry")))))
`----
Note that the "notwithstanding" part is unrelated, but ¯\_(ツ)_/¯.
Let's see how it goes, and if this is just too much text.
* Sat Mar 4 14:20 EST; goldblum
Day 3 of this headache. I can hear Edward snoring in the corner, and
Publius reading an out of order story on anonradio because he didn't
have time to edit a whole show so we've fallen into a replay of an old
episode.
I need a sense of direction. Maybe some halva. Maybe I should go buy a
nice 1g joint and call it a day.
* Fri Mar 3 20:51 EST; tynan
And now, the thunder is rumbling and crashing like a high energy
weapons battle on the edge of the upper atmosphere.
* Fri Mar 3 20:13 EST; tynan
The wind is howling like a dog stuck out in the howling wind without a
door key. Edward keeps looking at the window nervously like he knows
something I don't. That's probably true, though it probably is
something I would find uninteresting, or incomprehensible. Sometimes I
think about what it might be like to see through his eyes, and whether
I'd just get nauseous right away because the distortions and weird
colour perceptions of a cat's eye would be disorienting and
unsettling.
I've got to find a way to focus. I honestly don't know how to start
doing anything any more.
My shoulder is sore and my muscles hurt from the weight of my arm. I'm
going to be one of those old folks who doesn't have the upper body
strength to get out of a chair. If I get to be an old folks.
How do all you people cope with working with miserable and angry
humans? Honesly I don't know how you do it. I definitely can't handle
it, there's something sapping about the whole deal.
I noticed today that there are a bunch of messages pinned in the main
engineering channel in the company slack where I work. Every single
last one of them is sarcastic or angry or just annoyed. Even the
messages which aren't irritated at something or other and trying to
address it ("This comes up in code review all the time...") are
irritable ("I'm sick of always looking thing up..."). There's
something corrosive about that kind of serrated style of
communication. It just makes me want to go and do something else. I
mean, what, at this stage in the decay and decline of this so-called
civilization, is the point of sitting through that?
Happy Friday y'all. Capitalism hates you, but Friday tastes of
freedom.
* Tue Feb 21 09:43 EST; goldblum
Good morning world.
I think today I will experiment with writing up my updates for work
and sending those in advance so it isn't hugely annoying when I don't
show up to the meeting.
I'm starting to get a feeling for the changes I need to make in the
codebase, and I'm working on keeping perspective on the quirks of the
newer parts. It isn't easy, because I always start off frustrated when
I don't understand the choices that have been made. Oh well.
In other news, I ordered a pair of Dave Clark/Drop Aeon open back
cans! I am something of an audiophile although the quality of my
perceptions do not justify the quality of my taste. I do listen to an
awful lot of music though, and I love to immerse. I'm excited to
listen to them.
Here's hoping for a more productive week. The last few days have been
without much to redeem them in terms of productivity. They've been
good for ideas and planning though, so not a complete waste.
* Sun Feb 19 20:39 EST; tynan
It annoys me a LOT that mastodon doesn't even bother to try to serve
anything to web UAs that don't support Javascript. It's such a gross
piece of software - well, assemblage of cargo cult subsystems. I wish
the fedi had better components, the choice is grim. I would love to
build something better, but I need to get paid :(
Maybe I can find someone to pay the collective to build such a thing.
I might try writing up one-pager mvp plan which I can point people at.
I bet you could configure procmail to manage an ActivityPub backend.
* Sat Feb 18 16:22 EST; tynan
I just spend an unfortunate amount of time down a Multicast DNS rabbit
hole. Probably a better description is "in a systemd complexification
trap". Systemd is a garbage fire, but difficult to avoid using Linux.
I've got OpenBSD on a different laptop now, but it's just too much yak
shaving for work. I need dev tools to work in exactly the same way as
they do for others I work with, and in CI, and in prod, etc.
Oh well. At least Edward (my cat) seems to have forgiven me for
yelling at him earlier, which (as my mother would say if she were
still with us) is a sure sign of weakness of character.
* Fri Feb 17 18:47 EST; goldblum
One of the reasons that the web has become something to avoid is the
habitual use of cookies and the intrusive and pointless use of
"whatever" dialogs to create the pretence of collecting your
permission. In most cases, the use of cookies is completely
unnecessary, just a surveillence tool used for marketing and
advertising, and other weird monetization tricks. Occasionally it is
central to the application (session and identity tracking), but that
is *much* more rare than you might think.
Screwtape is right, there is no good reason for the richness of web.
This article hits the spot, though it's a bit more aggressive in tone
than I normally enjoy:
<
https://infrequently.org/2023/02/the-market-for-lemons/>
Speaking of, screwtape wrote an excellent bit of polemic about
programming and AI, which he's been talking about on his show quite a
bit lately. Mostly this is a response to the rise of ChatGPT in the
zeitgeist, which has been dominating the discourse lately. Some of his
thoughts have been a bit disorganized, but this nails it.
gopher://tilde.institute/0/~screwtape/216843900-lisp-beyond-lisp.txt
It's concise and cogent. I agree wholeheartedly. He references a talk
by Sussman which I dropped in com during his show, which is well worth
a watch:
<
https://www.youtube.com/watch?v=HB5TrK7A4pI>
In other news, I spoke to the coops.tech guy, Doug, this morning. It
was a good chat, and gave me an expanded sense of what is possible. I
had not considered the notion that we could maintain separate
businesses and simply pay into a shared resource pool out of which
mutual support would come (sick pay, unemployment support, etc.). I
would rather have the co-op be the entity through which all our
business must transact, and no matter what the contract, all
participants be paid the same. There would need to be safeguards
formalized to prevent disconnects turning into disasters, and that
will require careful thought; that was an insight I probably would not
have internalized until much too late to be useful - fortunately (for
me) Doug had already been around that block.
Now I need to read about the models for incorporation available to us
here in Canada, look into the immigration aspects for Anatoly, and see
it Le would like to talk about this. I'm still excited.
* Fri Feb 17 07:42 EST; goldblum
I'm meeting with the co-op people at 8, quite excited. I have no idea
where the conversation will go, or indeed what it is I need to know or
ask about. All I have is the question: how do I make this happen such
that I can bring in friends and with as little friction as possible,
get them payrolled and working.
I want to note another thing though, a pathology which shows up every
time I have a scheduled commitment. No matter how enthusiastic I am
about it when I set it up, I spend the time immediately prior to it,
sometimes even extending to the previous night, increasingly dreading
it. This often makes it impossible for me to do anything useful during
that lead-up period.
It's never awful when it finally comes arould, though sometimes I feel
like I wasted my time and the initial impulse was a false one. But
it's always debilitating. Even going to see a band, or going on
vacation, there's always a growing sense of resistance and loathing.
I bet this has an entry in the DSM. Time to download the DSM and go
full hypochondriac.
* Thu Feb 16 20:06 UTC; omar
A long time ago I worked with a guy who was on a contract (I was an
employee at the time), who refused to attend meetings. My boss at the
time just couldn't handle paying him so much and then not getting to
fuck with him in person.
I'm starting to think that not showing up to meetings is a winning
strategy. I got off a call earlier that was just way too stressful,
and tense, and awkward. I think it might also set a good precedent, to
respond to absurdly stressful exchanges by just...not.
Anyway, tomorrow morning I'm talking to some people about how to go
about starting a co-op. I see it as a kind of ideological shell around
me and my friends to protect us from the bullshit requirement that
most jobs seem to impose. It's so unrelated to the actual work.
Time to stop, I ramble.
* Wed Feb 15 19:33 UTC; omar
I really look forward to DJ Marcus on anonradio every weekday. He does
a news show, "News to Me", it's always grim and apalling but also an
awesome apocalyptic time in com. And he feels it so hard, it's
impossible not to relate.
Check it out, it's 30 minutes before Tob's DGC, which should be a
staple for most people who know what I'm talking about.
* Wed Feb 15 00:37 UTC; omar
I am frustrated. See if you can spot the problem with this:
,----
| (defn reload-lat!
| "Refreshes the lat from disk, returning the updated lat."
| ^Lat [{:keys [cached-lat] :as this}]
| (swap! cached-lat reload-lat this))
|
| (defn disk-interface
| "Creates a stateless interface for loading a line from disk.
| Automatically triggers an asynchronous reload when instantiated."
| [index-file-path
| inventory]
| (let [this {:index-file-path index-file-path
| :cached-lat (atom nil)
| :inventory inventory}]
| (future (reload-lat! this))
| this))
`----
This codebase has statefulness all over it, every other function has a
bang at the end. There's a MutableStore implementation which has the
docstring "A stateful wrapper around an ImmutableStore". Its only
method is `put' ffs.
I think there's a fundamental misunderstanding of words in play.
Also, this is a disk based storage model. I think that's a terrible
idea for software which needs to serve multiple requests possibly
concurrently.
Anyway, I'm done for now. I need to stop thinking about this.
* Tue Feb 14 01:49 UTC; omar
I have this idea for a web server that only serves GET requests and
gopher text, using minimal hardcoded HTML <pre> tags and no CSS to do
formatting. All monospace ASCII without any need to modify source
files. Gophermaps of course need some special case handling, but not
much.
* Tue Feb 14 01:15 UTC; working again
A while ago I posted on Mastodon about how I wanted to take a new
approach to work, if I were to start working again. Well, I started
working again, and the opportunity is there for a new way.
The notion is to start a co-op and take contracts which pay enough to
pay the folks involved a living wage. We're tech workers, so
theoretically we should be able to support two humans for each paid
contracter. That would allow us to work on things we want to work on
approximately half the time. Or, work better and more impressively, so
we can out-perform people who take all that filthy funge for
themselves.
My new boss, who is also my friend, is enthusiastic about the idea,
and willing to re-negotiate the contract in a few months. So I'm
hopeful.
Next things to do: start working on a Rust implementation of the
T.R.I.E rigging spec (see <
https://trie.site>) with Anatoly, and
figure out what the overheads associated with starting a co-op will
be.