#+TITLE: Game plan veilid orgmode clim
#+author: screwtape
* Executing this buffer.
Well, M-x org-babel-execute-buffer
works for *me* but I have slime installed and the slime common-lisp repo
and all the other McCLIM dependencies in my ~/common-lisp/. good luck.
* Apropos veilid
I was perusing [[https://veilid.com]]'s README.md
#+name: veilid-brief
#+BEGIN_QUOTE
  ## From Orbit

  The first matter to address is the question "What is Veilid?" The
  highest-level description is that Veilid is a peer-to-peer network for
  easily sharing various kinds of data.

  Veilid is designed with a social dimension in mind, so that each user
  can have their personal content stored on the network, but also can
  share that content with other people of their choosing, or with the
  entire world if they want.

  The primary purpose of the Veilid network is to provide the
  infrastructure for a specific kind of shared data: social media in
  various forms. That includes light-weight content such as Twitter's
  tweets or Mastodon's toots, medium-weight content like images and
  songs, and heavy-weight content like videos. Meta-content such as
  personal feeds, replies, private messages, and so forth are also
  intended to run atop Veilid.
#+END_QUOTE
which goes on to say go on to install a veilid note
** Installing a node extract
INSTALL.md mainly directs the user to their deb and rpm sources to
install from on I guess redhat-like or debian-like linuxen.

I'm figuring upon my move for this. I guess there's that package for
installing a working debian inside a chroot, or I could use LxC on a
linux machine. I don't use systemd distributions normally except an
occasionally Debian as my Often Expected experience.
#+non-systemd
#+BEGIN_QUOTE
  ### Without systemd

  `veilid-server` must be run as the `veilid` user.

  To start your headless Veilid node without systemd, run:

  ```shell
  sudo -u veilid veilid-server
  ```
#+END_QUOTE
I saw someone tooting about Devuan recently, maybe I could do that.
Or someone might have a gentoo overlay.
* Do what
I was fortunate to fall into conversation with two industry-first game
authors on the mastodon recently: In particular,
[[https://mastodon.sdf.org/@synlogic@toot.io]] and
[[https://mastodon.sdf.org/@albatross]] ; being the first commercial
rogue-like and the first MMO authors respectively.

Since I wanted to write a command-loop speed game similar to an IRC
bot implicitly with veilid and McCLIM, synlogic suggested I go for
game mechanics comparable to the boardgame (often played online)
diplomacy, suggesting something like a one day serverside clock at
which point it executes whatever it accrued from the players.

The remainder of this phost will be me noodling with McCLIM in lisp.
* Noodling
Remembering that we are going to use clim, so I'm duplicating this block from 015 here:
** Starting swank in eshell
#+name: eshell-swank
#+begin_src elisp :var my-slime-path="common-lisp/slime-v2.27/" :results none
    (eshell)
    (dolist (cmd `("cd"
		   ,(format "cd %s" my-slime-path)
		   "sbcl --load start-swank.lisp"))
      (insert cmd)
      (eshell-send-input))
    (previous-buffer)
#+end_src
swank is a wire protocol.
** Connecting slime to that swank
#+name: start-slime
#+begin_src elisp :results none
  (slime-connect "localhost" "4005")
#+end_src
** Doing some clim
:PROPERTIES:
:session: clim
:END:
*** Require McCLIM
#+name: require-clim
#+begin_src lisp :results none
  (Require :mcclim)
#+end_src

*** test application
#+name: define-test-frame
#+begin_src lisp
  (clim:define-application-frame myframe () ()
   (:pane :application))
#+end_src

#+RESULTS: define-test-frame
: DEFINE-MYFRAME-COMMAND

*** Make one of those
#+name: test-make-frame
#+begin_src lisp
  (defparameter *my-test-frame*
    (clim:make-application-frame 'myframe))
#+end_src

#+RESULTS: test-make-frame
: *MY-TEST-FRAME*

*** Run that top level
#+name: test-toplevel
#+begin_src lisp :results none
(clim:run-frame-top-level *my-test-frame*)
#+end_src