🐰 chee cherries quiet party
Greenwich Mean Time GMT

Week 08, '23

The week

By the end of the week I'd got sick and had to take a couple days off. Moments about a point.

It's my birthday next week. I'll be taking some time off to eat cheese in the bath. This is how I celebrate all events in 2023. New Year's - cheddar in the bath. Birthday - cheddar in the bath. Vernal equinox - ossau iraty in the shower. Easter - soak inside hot burrata for 3 days and emerge reborn. May day - brebis.

There was an event on Friday evening that I was meant to be attending with dearest Duckie and Pixie, but it was cancelled at the last minute. Luckily I had a backup plan which was just as enjoyable: doing literally nothing at all. 😌

On Saturday I tidied my entire apartment. Floors have been steamed. Walls have been scrubbed. There is so much space. It's fun to tidy the apartment and then rotate the sofa. It's like moving home. While I was tidying I kept breaking my own heart, telling myself things I know not to true. I mean, it is true that I have said no to a wonderful life. The only problem is it would not have been my life.

I'll pop off to the market now to see if they have any paneer. If not, i'll try my luck with lemon juice and a bucket of milk.

Questions

  • What is the most springtime of the cheeses?

Tips

  • With a clean rabbit and a tidy home you can do anything.
  • If you think of something that makes you laugh, try adding it as a reminder so one day you wake up to a notification like:

DUE TODAY
yahoo stands for yet another hoo

  • Listening to highly melodic music you know well through distortion and delay and ring modulators feels very good. Much like rubbing your hands against the bark of a strong tree.
  • Writing the song "Nature Boy" is a greater thing in life than learning to love and be loved in return.
Greenwich Mean Time GMT

Getting Started with Common Lisp in 2023

So you've written hundreds of thousands of lines of Emacs Lisp and you want to use that dark power for good. You've tried every scheme implementation you can find, but they all feel kind of hollow and empty in a way you can't explain.[1] You've tried Clojure but you've never managed to get past the "setting up your first Clojure project" stage because there are too many choices and they all seem to be the wrong choice for different reasons. Well, that's a remarkable fucking coincidence… this post's for you!

If that doesn't sound like you I've got some good news and some bad news. Good news: you aren't me. Bad news: this post is not for you. On reflection, I think that's two pieces of good news.

1. Install Steel Bank Common Lisp

There are many implementations of the common lisp specification. sbcl is lovely. It's open source and actively maintained. It will serve you well on nearly any system you have. Let's use that.

It's in most package repositories under the name sbcl.

# with homebrew on mac or linux
brew install sbcl

# or, with macports on mac
sudo port install sbcl

# or, with pacman on arch linux/steamos 3
sudo pacman -S sbcl

# or, dnf on fedora
sudo dnf install sbcl

# apt on ubuntu/debian/raspberry pi os
sudo apt install sbcl

# netbsd
sudo pkgin install sbcl

# ... etc

There are .msi installers for Windows available on sourceforge.

2. Install Quicklisp

There are many ways to handle packaging in the common lisp world. Quicklisp has been around for over a decade. It's ubiquitous and it's reliable, so let's use that.

# get quicklisp
curl -O https://beta.quicklisp.org/quicklisp.lisp

# install it
sbcl --load quicklisp.lisp \
     --eval '(quicklisp-quickstart:install)' \
     --eval '(quicklisp:add-to-init-file)' \
     --quit

# remove the quickstart script
rm quicklisp.lisp

You'll get a prompt telling you it's going to add something to your \~/.sbclrc, that'll make sure quicklisp can be used any time you want to install a dependency. You can install libraries by running sbcl --eval '(ql:quickload "package-name").

3. Get your text editor ready

Yeah, let's get all those swanky text editor features set up. This will depend on what editor you're using.

Emacs

This is how I've configured Emacs to use sbcl and SLIME[2] as my inferior lisp:

(use-package inf-lisp :config (setq inferior-lisp-program "sbcl"))
(use-package slime :elpaca t
  :config
  (setq slime-contribs '(slime-fancy slime-autodoc slime-asdf slime-quicklisp)))

I'm using use-package and elpaca to manage my packages. You can use :ensure t here instead if you are using the vanilla emacs package management. If you're using something else, you'll need to do a little research.

M-x slime will now start a lisp REPL. You can C-x C-e to send the last expression to the repl to be evaluated, C-c C-c to send the current defun. It's really powerful and cool! It makes Common Lisp almost as fun to write as emacs lisp[3]! Check out the manual when you are ready to know more.

The quicklisp contrib here lets you load systems into the repl by pressing , then typing ql then hitting enter and typing the name of the package. It'll show you all the packages it knows about, even ones you haven't installed. It's really fast, wow.

Visual Studio Code

I've heard good things[4] about ALIVE, which is a SLIME-like for Visual Studio Code.

You aready have Quicklisp installed so you can run this to get all the dependencies:

sbcl --eval '(ql:quickload "bordeaux-threads")' \
     --eval '(ql:quickload "usocket")' \
     --eval '(ql:quickload "cl-json")' \
     --eval '(ql:quickload "flexi-streams")' \
     --quit

Then you can install the extension from within Visual Studio Code and you should be good to go! There's a LOT of information about using Alive on the Common Lisp cookbook page about it.

If you run into any trouble, check ALIVE's overview on the Visual Studio Marketplace.

4. Start writing some damn lisp!!!!

If you're looking for a good book to get started, I don't believe there's anything better than the gigamonkeys book. I first went through it about 15 years ago and had a great time, though I didn't understand much of what I was doing back then. I'm just about to go through it again. Join me!

If you're knew to lisp altogether, the mini-tutorials on lisp-lang.org will be helpful for you.

I'd recommend keeping all your source code in \~/common-lisp/. That folder is automatically picked up by asdf and quicklisp so you'll be able to more easily define and use your own systems when the time comes. That's a topic for another blog post.

Resources of interest

Here are some cool things to know about:

Practical Common Lisp

The gigamonkeys book mentioned above

CLOG

This is a really cool UI kit for building GUIs with common lisp that can run on computers and phones!

Includine

A library/environment for DSP and composing scores in Lisp. bonkers.

CLiki

The common lisp wiki, full of information

Common Lisp Cookbook

Thorough, helpful articles and a lot of good links.


  1. Except CHICKEN, of course, because it rules. β†©οΈŽ

  2. In the original version of the post, I had a bit here about overriding the slime-words-of-encouragement to remove the one that calls you brother, but then a few hours later the maintainer of SLIME pushed a commit that deletes it!

    I still like some of the ones I added, though:

    (mapc (apply-partially #'add-to-list 'slime-words-of-encouragement)
    '("Come on, let's go."
      "Vamos."
      "A ver."
      "You'll always find me in the REPL at parties."
      "OK, let me have it."))

    It keeps all the originals and adds these few extra silly ones. β†©οΈŽ

  3. Not quite, though. Nothing is as fun to write as emacs lisp. Emacs lisp is literally the best programming language in the world.

    The example of how I've configured SLIME is trimmed down for the post. The full version has a lot of extra fancy stuff. You can see here: docfiles/setup β†©οΈŽ

  4. The "good things" are that it:

    1. exists
    2. works
    β†©οΈŽ
Greenwich Mean Time GMT

Week 07, '23

Let's see, let's see…

Got some good stuff finished at the coal mine. Had a little break-up. Have spent the whole weekend eating smoked mackerel, playing mario and writing emacs lisp. There was also a bath on Sunday.

Becky Avery thinks it's over for me. All vegetable curries and a water please thank-you from here on out. Maybe she's right. Though I am planning on drinking an entire bottle of PatrΓ³n on March 2nd. Should probably take that day as annual leave.

Light week, as has been the pattern so far this year. My days have been intense but it's all work stuff and I have no interest in discussing it here.

computer

I spent most of Saturday writing hundreds of lines of lisp to make it so I can see my calendar events in Org and take notes on them that will not go away when the list is updated. Here's what it does:

  1. Grab my work calendar from the Google website
  2. Filter out anything that's older or newer than 7 days from today
  3. Open up the .org file and store all the current event IDs (as current-event-ids)
  4. Go through the events from the Google calendar and a. if they exist: update their details (time, video-call, link) b. if they don't: create them (adding their meeting description in a quote block)
  5. Compare the IDs from the calendar with the current-event-ids
  6. Archive any events that were not in the calendar

This way it keeps all my old notes using Org's normal archive functions, and my current notes appear alongside the meeting when I look at it in the agenda or on Beorg on my telephone. It's great. It even converts Google Calendar's html into Org syntax. lol. haha.

screenshot of an org-mode meeting at describe above. shows the properties of the meeting as org-mode properties, the meeting notes and my personal notes on the meeting.

Figure 1: βœ… CANCELLED

ok

Anyway i'm handling the inevitable end of that relationship by writing emacs lisp. I haven't eaten today. I'll go for a walk.

good bye

Greenwich Mean Time GMT
OK.

that breakup's gonna stick. it was mutual. it's over. i've felt the relationship
leave my body. it was a pleasant breakup, though my eyes are wet and my body is
heavy.

what a wonderful person. and memories to be cherished. mexico city, the
waterfalls, the pyramids, the summer, the music, the family, the corn. you know
all that. it's all on the blog. i was happier than i've ever been, for a while.

it's strange breaking up on-line. sitting here in my chair, at my desk. using
the same computer from which i've just done a day of meetings. just another
piece of business. another set of carefully crafted words.

we spent valentine's day together. an hour of it. on the phone. it was lovely,
like before. we were right there, next to one another. i could almost touch
it. but i couldn't. we made all sorts of plans together for the future. it felt
so easy. when it was over, the hard was all the more clear. all the more
definite.

i feel ok. heavy, and sad. i still haven't opened the tequila we bought together
when she was here. next month, maybe. time is an enemy. distance is an
enemy. faraway love is a full time occupation. 
Greenwich Mean Time GMT

Week 06, ’23

Week 06, '23

A busy week. Went to the office several times. Think I'll stop eating meat. Well, I'm still planning to eat fish and shellfish. I'll stop eating birds and mammals. And bugs. I'll stop eating lizards. I'll continue to eat 8 spiders a year.

We ran a tech writing workshop. It went fine. I taught. It was fun. It's hard to run a workshop for the first time. It's hard to run a hybrid workshop. I wish there was a strategy other than making the experience of one set of attendees worse. Until I've seen, or thought of, some new way of doing things I'd only like to run workshops fully remote or fully in-office. Maybe we should get some of those little iPads that drive around. The teleprescence robot things.

iperson.jpeg

Figure 1: a human being attending a meeting

My new team is my favourite thing. I love working with these people. We're doing some really good stuff. I'm hopeful for the future.

On Friday I took the train with Pixie to see Duckie in a Sleeping Beauty panto in Windlesham. It was a lovely time. Duckie is so captivating. She, much like Spindleshanks, has star quality. Her voice cuts right through you and shivers your bones like the cold winter wind. (In a good way.) I was so overwhelmed that I cried. (In a good way.) By the time the panto was over there were no more buses. We walked for an hour through the open fields and public golf courses to the train.

Two birthday parties I'd agreed to attend fell on the same day. Saturday night. I realized this on Saturday afternoon. I responded by cooking an omelette and attending neither. The week was exhausting, I was not up to much. I stayed home and played video games and wrote some emacs lisp. I'm writing this blog post in a .org file right now like a freak.

betal-mopal-kazav.png

Figure 2: lol

Greenwich Mean Time GMT

week five, '23

What a week!

Just kidding; nothing happened.

I went to the office on Tuesday, saw some peeps. It was nice. Had a seven hour meeting. OK.

Arranged with Pixie to see Duckie on stage in Windlesham next week.

Continued to do very little other than work and play video games. On Tuesday i went out to the bar and talked about work until 11p.m. while drinking ice cold pints of water. Actually had a really hard time leaving the house all week, and was not eating or sleeping well. Will try to fix that this week.

really nothing much to report.

good luck.

Greenwich Mean Time GMT

4th week '23

work has been very busy, very good. having a good time.

on thursday evening i went out for dinner at ganapati with becky. that's one of the top people the world has made. she's vegetarian and i'm doing this low-carb-so-i-don't-die-so-soon thing, so a place that has a killer veggie thali seemed like a good option. thali wasn't on the menu, for some reason, maybe they stopped doing that. we got three main meals instead. afterwards we went to a bar and drank 2 pots of tea. i was up until 3am. guess it was strong tea. the scotsman behind the bar seemed furious to be selling us tea.

because work has been so much i've been trying to take it quiet in my spare time. also, of course, i'm not drinking. and i spent too much money last month... and this month, so all that adds up to staying home, playing video games, making tasty meals. i haven't been making any music or doing much creative, but i'll get back on that soon enough.

one of the things i spent too much money on is a steam deck. it's very cool? repairable, runs arch linux and kde plasma, a great computer and game machine. im writing this blog post on it

add me on steam, my tag is cheedear i think.