ultralisp
talk-transcripts
ultralisp | talk-transcripts | |
---|---|---|
16 | 35 | |
220 | 2,854 | |
0.9% | - | |
8.3 | 4.7 | |
23 days ago | 11 months ago | |
Common Lisp | ||
- | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
ultralisp
-
June 2023 Quicklisp dist update now available
If it reduces your pain, you can add it to https://ultralisp.org without any hussle.
-
Deploying a web server in SBCL to cloud
- as a dockerized daemon (here is my Dockerfile describing a few microservices: https://github.com/ultralisp/ultralisp/blob/master/Dockerfile)
-
Ocicl – An ASDF system distribution and management tool for Common Lisp
Other options are:
- Quicklisp -really slick, libraries in there are curated. (with https support here: https://github.com/rudolfochrist/ql-https and here: https://github.com/snmsts/quicklisp-https.git)
- for project-local dependencies like virtualenv: https://github.com/fukamachi/qlot
- a new, more traditional one: https://www.clpm.dev (CLPM comes as a pre-built binary, supports HTTPS by default, supports installing multiple package versions, supports versioned systems, and more)
For recent Quicklisp upgrades: http://ultralisp.org/
Ocicl is very new (5 days) and tries a new approach, building "on tools from the world of containers".
- Ultralisp – Fast Common Lisp Repository
-
Review of 8 Common Lisp IDEs Which One to Choose? [EN Subs]
I'm the author and I'm using Emacs + SLY. Happily switched to Emacs from VIM about 10 years ago when decided to invest all my free time into Common Lisp.
And yes, I have real project experience – a lot of Commmon Lisp libraries at https://github.com/40ants and also I'm developing a hosting for CL library distributions: https://ultralisp.org
-
OpenAPI Client Generator
So far openapi-generator is mostly tested on linux/sbcl and it should work for most spec files. It would be great to have some criticism/feedback/improvement ideas. You can download it from Ultralisp via (ql:quickload :openapi-generator)(you may need to update first (ql:update-dist "ultralisp"))
-
How to replace Quicklisp and Qlot with CLPM (screencast)
See also Ultralisp, a Quicklisp distribution that builds every 5 minutes: https://ultralisp.org/ where you can publish packages.
-
Looking for good common lisp projects on github to read?
There is also a repository behind Ultralisp.org: https://github.com/ultralisp/ultralisp
- Building a Startup on Clojure
-
New Lisp-Stat Release
Quicklisp ships releases once a month, so it is very possible it didn't pick the latest release yet.
Your solution is to clone the repository into ~/quicklisp/local-projects/.
Another one would be to use the Ultralisp distribution, that ships every five minutes. https://ultralisp.org/
(ql-dist:install-dist "http://dist.ultralisp.org/"
talk-transcripts
-
In praise of idleness – Bertrand Russell
Reminds me a little of hammock-driven development [1]
> the background mind is good at synthesizing things. It's good about strategy
[1] https://github.com/matthiasn/talk-transcripts/blob/master/Hi...
-
Teach Yourself Programming in Ten Years (1998)
Thank you for this recommendation. I've never heard of it before and now I'm reading: https://github.com/matthiasn/talk-transcripts/blob/master/Hi...
It's giving me energy this Monday holiday(USA)!
-
Can't Be Fucked: Underrated Cause of Tech Debt
race?
> [Audience reply: Sprinter]
> Right, only somebody who runs really short races, okay?
> [Audience laughter]
> But of course, we are programmers, and we are smarter than runners, apparently, because we know how to fix that problem, right? We just fire the starting pistol every hundred yards and call it a new sprint.
https://github.com/matthiasn/talk-transcripts/blob/master/Hi...
-
Strong typing, a hill I'm willing to die on
>So this is 10x, a full order of magnitude reduction in (?) severity before we get to the set of problems I think are more in the domain of what programming languages can help with, right? And because you can read these they'll all going to come up in a second as I go through each one on some slide so I'm not going to read them all out right now. But importantly there's another break where we get to trivialisms of problems in programming. Like typos and just being inconsistent, like, you thought you're going to have a list of strings and you put a number in there. That happens, you know, people make those kinds of mistakes, they're pretty inexpensive.
[0] Video: https://www.youtube.com/watch?v=2V1FtfBDsLU
[1] Slides and transcript: https://github.com/matthiasn/talk-transcripts/blob/master/Hi...
[2] Video https://www.youtube.com/watch?v=YR5WdGrpoug
[3] Slides and transcript https://github.com/matthiasn/talk-transcripts/blob/master/Hi...
-
Puzzle Languages
This is tangentially related to Puzzles-vs-Problems in Rich Hickey's Effective Programs
> Eventually I got back to scheduling and again wrote a new kind of scheduling system in Common Lisp, which again they did not want to run in production. And then I rewrote it in C++. Now at this point I was an expert C++ user and really loved C++, for some value of love. But as we'll see later I love the puzzle of C++. So I had to rewrite it in C++ and it took, you know, four times as long to rewrite it as it took to write it in the first place, it yielded five times as much code and it was no faster. And that's when I knew I was doing it wrong.
[...]
> So I mean for young programmers, if everybody's tired and old, this doesn't matter any more. But when I was young, when I was young, I really, you know, when you're young you've got lots of free space. I used to say "an empty head", but that's not right. You've got a lot of free space available and you can fill it with whatever you like. And these type systems they're quite fun, because from an endorphin standpoint solving puzzles and solving problems is the same, it gives you the same rush. Puzzle solving is really cool. But that's not what it should be about.
Talk: https://www.youtube.com/watch?v=2V1FtfBDsLU
Slides and transcript: https://github.com/matthiasn/talk-transcripts/blob/master/Hi...
-
All the ways to capture changes in Postgres
Using triggers + history tables (aka audit tables) is the right answer 98% of the time. Just do it. If you're not already doing it, start today. It is a proven technique, in use for _over 30 years_.
Here's a quick rundown of how to do it generically https://gist.github.com/slotrans/353952c4f383596e6fe8777db5d... (trades off space efficiency for "being easy").
It's great if you can store immutable data. Really, really great. But you _probably_ have a ton of mutable data in your database and you are _probably_ forgetting a ton of it every day. Stop forgetting things! Use history tables.
cf. https://github.com/matthiasn/talk-transcripts/blob/master/Hi...
Do not use Papertrail or similar application-space history tracking libraries/techniques. They are slow, error-prone, and incapable of capturing any DB changes that bypass your app stack (which you probably have, and should). Worth remembering that _any_ attempt to capture an "updated" timestamp from your app is fundamentally incorrect, because each of your webheads has its own clock. Use the database clock! It's the only one that's correct!
-
G. Polya, How to Solve It
Rich Hickey (creator of Clojure) references Polya several times in his classic talk "Hammock Driven Development". Here's a transcript:
https://github.com/matthiasn/talk-transcripts/blob/master/Hi...
I've long been impressed by Hickey's problem solving skills, so I took much of this talk to heart, and even bought a copy of HTSI. Can't say it really helped me any more than Rich's talk (as a programmer) but I'm thinking I'll give it another look.
-
Interfaces All the Way Down
>Great product designs require no manual, and similarly, great interfaces need no documentation. Imagine having to read a manual on how to use a coffee mug.
This could not be more wrong.
Not everything is easy. If a library is addressing a complicated domain, solving by definition a complicated problem, it is fine if it requires some learning.
When did expertise and learning become bad things? If software is an engineering discipline, why would people in it ever promulgate the idea that any random cog can step in to any “engineer”s shoes?
Rich Hickey analogizes this mentality to the world of music, where it taken for granted that learning an instrument requires a lot of study:
“ We start with the cello. Should we make cellos that auto tune? Like, no matter where you put your finger, it's just going to play something good, play a good note.
“[Audience laughter]
“Like, you're good. We'll just fix that.
“ Should we have cellos with, like, red and green lights? Like, if you're playing the wrong note, you know, it's red. You slide around, and it's green. You're like, great! I'm good. I'm playing the right song. Right?
“ Or maybe we should have cellos that don't make any sound at all. Until you get it right, there's nothing.
“ [Audience laughter]”
https://github.com/matthiasn/talk-transcripts/blob/master/Hi...
-
Slightly off-topic: Whose lectures do you recommend listening to, similar to Rich Hickey?
You might find adjacent talks and speakers here ... https://github.com/matthiasn/talk-transcripts
-
Functions vs. Procedures: Keep them separate.
Many languages merge the two concepts, and implement procedures as functions that return void. This may muddle/complect their distinction, causing programmers to call procedures from within functions, thereby making those functions into impure functions (meaning that they affect the world outside of themselves, through side-effects like I/O or mutating state). This should be avoided, especially if you care about debug-ability and Functional Core, Imperative Shell architectures (see Gary Bernhardt's Boundaries talk at 31:56) (which make testing your system easier, without mocking).
What are some alternatives?
qlot - A project-local library installer for Common Lisp
rich4clojure - Practice Clojure using Interactive Programming in your editor
ftw - Common Lisp Win32 GUI library
etaoin - Pure Clojure Webdriver protocol implementation
phel-lang - Phel is a functional programming language that transpiles to PHP. A Lisp dialect inspired by Clojure and Janet.
clj-chrome-devtools - Clojure API for controlling a Chrome DevTools remote
coalton - Coalton is an efficient, statically typed functional programming language that supercharges Common Lisp.
codetour - VS Code extension that allows you to record and play back guided tours of codebases, directly within the editor.
4ever-clojure - Pure cljs version of 4clojure, meant to run forever!
base - Unison base libraries
pgloader - Migrate to PostgreSQL in a single command!
lumo - Fast, cross-platform, standalone ClojureScript environment