I am constantly thinking about Winogradâs 1972 call for complex systems architects to follow his SHRDLU approach, in terms of that his human contribution was to create the most vast, intricate and boggling system he was just barely humanly capable of in contrast to good-business-advice cheap-shot software strategies. As you may know. I am not saying that I think SHRDLU in 1972 is the most significant language software ever written, though it bears study. It was Winogradâs approach to contribute maximally-straining-his-personal-human-limits complexity capability into his program, as a particular exemplar for lisp community software architecture.
Tempermentally also, I think that I personally am not very good at picking low hanging fruit.
In the first place, orthogonality and complexity are opposites. What affect does this have on this other complexity? None / O(1)
.
However this is also the basis for complex systems- orthogonality is the statement that this axis never leaks complexity into this axis. Consider a lisp system that uses make-symbol
and a system that uses intern
. In so many words, make-symbol
just makes a symbol, whereas intern registers the maybe-new symbol in a package. make-symbol
is orthogonal to the package it is being used in, whereas intern
âleaks complexityâ into the package - you are potentially intern-bombing yourself (attempting to register a huge number of symbols with a package). In this sense, make-symbol
does not require you to actively be aware of your potential for intern
-bombing yourself. On the other hand, intern
makes it easy to reach for a symbol by picking it out of the package
it was intern
ed in- just interactively type that-package::that-interned-symbol-name
, and also the intern
ed symbols can be usefully split further into intern
ed symbols in a package which have been export
ed from that package
. This gives a view of the complex, non-orthogonal symbol
/intern
/package
/export
system and the orthogonal make-symbol
.
In the last example, it might seem that make-symbol
is better than intern
due to its orthogonality to - i.e. not leaking complexity into - package
s. However, make-symbol
is basically less useful interactively than intern
and friends. In fact, lispâs intern
etc over time have been the basis of FarĂ©âs ubiquitous substandard asdf
, and Barlowâs included uiop:define-package
.
However, one still gets the feeling that one is definitely a user of the ASDF system seperately to one being a lisp programmer. Furthermore, we all have the experience with non-lisp programmers - they express an interest in adding lisp to their personal repertoire - and then, they suddenly need to learn what, at least ASDF and either emacs or otherwise enough of emacs to understand lisp software reactions to emacs, and this is sufficient to chase off a reasonable cadre.
This being said, the lisp curse is infamous- relative to later languages, it has been seen that single lisp developers can and do write Winogradian bogglingly complex - and great - software systems that are, like Winogradâs example, simply the most phenomenally complicated thing they are capable of by themselves and it is attested by the lisp curse, specifically by themselves (though something like minor martial arts traditions emerge to hand particular great arts onto a chosen apprentice in the next generation happens - consider cl-series as always).
Underlying this is what my friend mdhughes always says -
Other peopleâs code is the devil
Basically that becoming a user is making a deal with the devil. However, we can consider the extreme success of ASDF/UIOP/cl-series subsystems above. (And emacs.).
In this episode graced by Kent M. Pitman, we heard a bit of the history of Kentâs work at Harlequin Inc rendering html to postscript (i.e. a print-ready format), and his subsequent plugging of the html rendering system into CLIM and adding html anchors to realise a lisp web browser (new complex system) at the time.
I am kind of hurting for some of my softwares to finally come together. This section is a beginning of my attempt to bring most of my threads together into a fabric. I am adopting my own trivial CLIM graph formatting helper and Eduardoâs eev mode as my systems for this part of this journey. I am here defining AâźB to mean B is directly used from A. For AâźBâźC, C would be said not to be directly used from A. The graph is permitted to be complex. [Note, the meaning of the arrows changes later.]
This graph is somewhat special because it is prior to emacs being started, (and my emacs starts into eev-mode). So one might invoke emacs
or emacsclient -c -a ""
in their operating systemâs shell
.
emacs
M-x eev-beginner
(hypothetically).
eev lets me alternate controlling emacs (red star lines, which are emacs lisp) and eepitching lines to programs/buffers run inside emacs. One can imagine âdoing this manuallyâ in a shell or another editor.
#|
(setq inferior-lisp-program "ecl")
(slime)
(setq eepitch-buffer-name "*slime-repl ECL*")
|#
'test
#|
(find-quicklisp-links "mcclim")
|#
;; Oh that utility is really handy, Eduardo.
;; F8-ing that will help you get and load McCLIM.
;; If you need particular help el em kay on the mastodon.
(asdf:load-system :mcclim)
(in-package :clim-user)
I donât consider asdf:load-system
to be âusing asdfâ here per se (quicklisp neither), since these functions are just to load systems that were made using asdf and quicklisp.
Incidentally, Eduardo is working on direct ASDF support from eev-mode as well as the above quicklisp support.
#|
(eepitch-shell)
mkdir -p ~/gits
cd ~/gits
git clone https://codeberg.org/tfw/screwlisps-knowledge.git
mkdir -p ~/common-lisp
cd ~/common-lisp
ln -s ~/gits/screwlisps-knowledge
(eepitch-kill)
(setq eepitch-buffer-name "*slime-repl ECL*")
|#
'foo
(asdf:load-system :screwlisps-knowledge/cons-grapher) ; register system packages and retry?
(use-package :screwlisps-knowledge/cons-grapher)
(visualize '(a (b (c))) '(d (c)))
Okay it looks like we are getting into business.
(defvar *system-interactions* (list))
(setq *system-interactions* (list))
(push '(OS (emacs (eev))) *system-interactions*)
*system-interactions*
(apply 'visualize *)
'(eev (slime (mcclim (clim-user))))
(push * *system-interactions*)
(apply 'visualize *)
'(screwlisps-knowledge (cons-grapher (clim-user)))
(push * *system-interactions*)
*system-interactions*
(apply 'visualize *)
Ah, the arrows seem to best mean- AâB meaning âA is directly prior to Bâ rather than âB is used from Aâ as I had initially thought. clim-user
âs status as the changing absorbs-user-interactions package needs a more clear statement.
In the context of reasoning and about complex systems, we started using CLIM 2 specâs graphing utility via the McCLIM implementation to sketch how systems relate directly to each other. The way it seemed to work in practice was slightly different to how I had initially imagined it would. Itâs nice to piece-meal construct and visually pop up windows of a graph as part of a writing session in emacs. eev in particular is an excellent way of using emacs.
Metacircularly graphing our calling of the grapher is somehow particularly satisfying.
I might change the graphâs orientation to left-to-right instead of up-to-down (itâs a keyword choice) to better accomodate crowds of short graphs on an up-down scrolling page.
I have quite a few thoughts about these graphs. I think orthogonality might be the same thing as having very short direct-dependency graphs, so a complex system of orthogonal components would be a crowd of short direct dependency graphs. Three more key thoughts about these graphs as such is that the graphs are close to being literal HTML trees, which is also close to literally being a kitten component, while also literally being a common clim spec LISP cons tree to graph. The other thing that is close to this html would be the OWL stuff that shizamura keeps promising to do a segment on on the show (while sleeping).
Another view of sketching systems is Sachaâs literal sketching of systems.
See you tomorrow for the lispy gopher climate featuring writer, gopher, onieric monk and host of the Evolution Revolution and many great (and small) works gopher://sdf.org/1/users/gef
, exploring using emacs for their writing. We expect to have Edrx also joining us live via #Emacsconf on the liberachat IRC.
Mastodon thread for this article. What do you think about drawing graphs like this?
Sorry about the âfallow weekâ everyone.
screwlisp proposes kittens