_______________

                             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.