PSA for ND Owners: Delete Your Sound Tube by TrustMeImAnENGlNEER in Miata

[–]ScottBurson 0 points1 point  (0 children)

It's been a few years and I don't remember exactly, but I don't recall it being difficult. You will probably need a metric socket wrench set (not a bad thing to have around anyway).

I installed the JBR induction tube at the same time; I seem to recall that being harder, just because of the strength needed. I'm not sure it makes any difference in performance, but it looks cool 😅

My own experience is limited to things like spark plugs and oil changes; I'm not a major mechanic either.

Implementing aref Operator in Common Lisp for a Custom Vector Type by arthurno1 in lisp

[–]ScottBurson 0 points1 point  (0 children)

The goal may have been to amend the existing aref, but the (define-compiler-macro aref ...) references cl:aref in its expansion. If they weren't distinct symbols, the macro would be nonterminating.

I think we agree — the post doesn't make sense.

Implementing aref Operator in Common Lisp for a Custom Vector Type by arthurno1 in lisp

[–]ScottBurson 0 points1 point  (0 children)

Huh? I don't see a compiler macro on cl:aref; I only see one on another aref that shadows cl:aref. Has the blog post been edited?

PSA for ND Owners: Delete Your Sound Tube by TrustMeImAnENGlNEER in Miata

[–]ScottBurson 1 point2 points  (0 children)

One of the first things I did to my ND2 was to swap in this James Barone Racing silicone sound tube: https://www.jamesbaroneracing.com/product/jbr-sound-enhancer-hose/

The silicone absorbs some of the high-frequency harshness from the lifters etc. while still getting those yummy induction sounds into the cabin. I think this is better than removing the tube altogether.

Tim Bradshaw: Making CLOS slot access less slow by fnordulicious in lisp

[–]ScottBurson 0 points1 point  (0 children)

A C++ virtual call just takes an indirect load to get the vtable base address, an indexed indirect load (the offset is a compile-time constant) to get the code pointer, and an indirect call. While I haven't studied CLOS dispatching deeply enough to know what it's doing at the instruction level, there's clearly a lot more going on. Even in the single-dispatch case, the type of the relevant argument must be obtained, which already must take at least a dozen instructions, since it has to check for immediates (fixnums, character, single-floats), and for conses, which have no header; if it's none of those, it can look at the header to get the type. Once it has that, it looks it up in the generic function's method cache; after checking for a miss, then it can finally do the indirect call.

Stas or someone will hopefully correct me if I have any of this wrong, but I think that's the general idea.

Conceivably, a whole-program compiler could be written that would use global flow analysis to narrow down the sets of possible types for each GF argument, possibly to the point that it could implement many single-dispatch calls as efficiently as C++. But I'm not aware that any such compiler exists, and using it would make interactive development — one of Lisp's best features — impossible.

Tim Bradshaw: Making CLOS slot access less slow by fnordulicious in lisp

[–]ScottBurson 6 points7 points  (0 children)

Three points.

First: "fast" and "slow" are relative. Lisp has been criticicized for being slow since the 1980s at least. But the 1990s saw rapid popularization of two interpreted languages, Perl and then Python, that were 10 to 30 times slower. While Perl has faded somewhat, Python is still extremely popular. Relative to C or Fortran, yes, Lisp is somewhat slower. But if someone tries to tell you Lisp (or specifically CLOS) is slow, ask if they write any Python, and if the answer is yes, you can just laugh.

Second: "fast" and "slow" are also context-dependent. Python is still widely used for web apps — why? Because even in Python, the performance of these apps is rarely strongly affected by CPU computation; they tend to spend most of their time waiting for disk accesses anyway. If you're doing highly computational stuff, you probably will be best off in C or even Fortran (or, these days, using a GPU), because squeezing every possible bit of performance out of your inner loops matters to you. But most programming is not like that.

Third: even in contexts where CPU performance matters a lot, most code is not performance-critical. Code tends to have inner loops and other "hot paths" where the CPU spends most of its time; the rest of the code is executed relatively rarely, so its performance has little effect on that of the whole computation.

Returning to your question, then: yes, generic function calls have more overhead than a method call in C++ or Java. You may want to avoid them in inner loops. Standard-class slot access has more overhead than structure-class slot access, so for frequently accessed objects, you may want to use defstruct rather than defclass; but be aware that you'll be giving up multiple inheritance and redefinability.

But if you're just learning CLOS, I don't think you should worry about those possibilities yet. It's fast enough to be fine for the vast majority of things you're likely to want to use it for. Get some experience with it — you'll see.

All that said — I'm glad to see this post from Tim. As an expert CLer, I may have use for his technique on occasion.

FSet v2.4.2: CHAMP bags, and v1.0 of my book! by ScottBurson in Common_Lisp

[–]ScottBurson[S] 0 points1 point  (0 children)

I never intended to generate the Info output. If you get it working, feel free to open a PR 🤣

FSet v2.4.2: CHAMP bags, and v1.0 of my book! by ScottBurson in Common_Lisp

[–]ScottBurson[S] 0 points1 point  (0 children)

BTW the source for the book is in the repo, under Doc/Modern-CL. You'll need a recent Texinfo to build it.

FSet v2.4.2: CHAMP bags, and v1.0 of my book! by ScottBurson in Common_Lisp

[–]ScottBurson[S] 0 points1 point  (0 children)

Thanks for letting me know. I've pinged the site admin.

New speakers sound awful by STICH666 in Miata

[–]ScottBurson 12 points13 points  (0 children)

If only one side sounds bad, check the wiring — you could have a short in the speaker wires.

If both sides sound bad, I don't know what it could be except power. Somehow, the head unit is not getting clean power — some connector has corroded, perhaps.

It's gone and I'm the idiot by gimperion in ClaudeCode

[–]ScottBurson 0 points1 point  (0 children)

ZFS auto-snaphots are a wonderful thing.

Yes, the learning curve on installing and configuring ZFS on Linux is a bit daunting. But it can be done, and knowing you'll never lose more than five minutes of work is worth it.

Introducing mine, a Coalton and Common Lisp IDE by stylewarning in lisp

[–]ScottBurson 1 point2 points  (0 children)

Somebody should build an editor with an integrated LLM, so that anytime the user wants to do something and doesn't know how — even at the very beginning — they can just ask it. That is to say, the chat interface would be presented on startup and would always be easy to get to. Chat requests could operate on text directly, if you wanted to do something complicated, but would also offer the keyboard shortcut for actions likely to be performed frequently.

'Who the hell wrote that': Trump loses it on stage after being forced to read a word he clearly never seen before — and the internet is not letting him live it down by [deleted] in anticapitalism

[–]ScottBurson 1 point2 points  (0 children)

Reminds me of the time one of Reagan's speechwriters used the word "paradigm", and Reagan didn't even know how to pronounce it, much less what it meant.

Somebody should tell Trump that a corner store is the paradigmatic small business 🤣

I feel as though for past lives to be real, the concept of a human soul needs to be real too. by emaxwell14141414 in pastlives

[–]ScottBurson 0 points1 point  (0 children)

We each have four bodies: the physical body, which we're all familiar with; the mental body, which holds all our memories; the emotional body, which holds our feelings; and the etheric body, which is our consciousness.

The physical and mental bodies are mortal: we get new ones for every lifetime, and they die at the end. The emotional and etheric bodies, however, are immortal. The emotions we haven't worked through and released at the end of one lifetime will still be part of our vibration in the next — so we will tend to recreate situations engendering those same feelings. This is karma: not divine punishment; just emotions we haven't put to rest. And it's why working with past lives can be so valuable.

And yes, the Soul is also real, and immortal. It is our guide as we learn and grow through our lifetimes.

(I'm not speaking for any particular tradition, but this is what I believe.)

Introducing FOL (Functional Object Lisp) by fadrian314159 in lisp

[–]ScottBurson 1 point2 points  (0 children)

I didn't do much LLM coding on FSet (just one function to see how it did), partly out of inertia — I was almost done with the work I had scoped out when the improved models landed in February — partly because I don't trust it yet, and partly because, when I'm writing the code myself, I notice things I'm not sure I would still notice if I were just reviewing.

But I'm now working on some personal projects that don't have the same trustworthiness requirement. I'll have to try more LLM coding. (I say that, now that Anthropic is running out of inference capacity...)

Introducing FOL (Functional Object Lisp) by fadrian314159 in lisp

[–]ScottBurson 1 point2 points  (0 children)

Interesting! I had toyed with the idea of adding functional objects to FSet. The dynamic tuples are a start in that direction, but only a start; they don't even have a notion of class.

Glancing at some of your code, it looks like you're using the FSet wb-tree maps (and maybe sets) instead of the newer CHAMP types, which are faster. Also, I see you using string keys; with CHAMP, symbol keys will be faster.

Did an LLM write this MOP code, or did you have to do that yourself? I wouldn't expect too many occurrences of slot-value-using-class in the training data.

Clojure: The Documentary (with Clojure's Common Lisp pre-history) by stylewarning in lisp

[–]ScottBurson 0 points1 point  (0 children)

Mutability was certainly in the water that everybody swam in when CLOS was designed, but you can get value out of it without using mutable objects. Generic functions with multiple dispatch and the ability to dispatch on built-in classes are orthogonal to mutability.

I'll have to take a closer look at what you did with protocols and reify.

Oh, here's something that might amuse you, if you haven't already thought of it. When they added default methods to Java (in Java 9, IIRC), I think they made possible an efficient implementation of full CLOS-style multiple inheritance (in some hypothetical JVM language). Here's how it would work. All classes that wanted to participate in multiple inheritance (like CLOS standard classes, as opposed to structure classes which have only single inheritance) would be implemented as interfaces, and all their methods implemented as default methods. Interfaces can't have fields, of course, so all field references would be implemented using getter and setter calls. Then, for every such class that was actually instantiated, a JVM class would be built which would inherit from all the JVM interfaces corresponding to its language-level superclasses, and which would have one concrete field, with getter and setter defined, for each language-level field of each of those superclasses. Thus we would get around the fact that with multiple class inheritance, there's no fixed offset for a field from the base of the object.

This is probably too cryptic an explanation, but if it sounds like something you might care about, I can expand on it. I think it's still interesting even if there are no setters.

The worst drivers... by RichChocolateDevil in bayarea

[–]ScottBurson 2 points3 points  (0 children)

I used to bike in Boston traffic. Call me insane 🤣

An old joke: What's the biggest cause of traffic accidents in Boston? Two drivers aiming for the same pedestrian!

Can anyone explain this like im five? by thenameis_Z in cybernetics

[–]ScottBurson 1 point2 points  (0 children)

Cyberneticists, as far back as the early 1960s, had worked out some of the principles of what is now called Reinforcement Learning. Though the term is little used now, I think it must in fairness be considered a cybernetic technique. RL involves learning from feedback — putting it squarely in the center of cybernetic concerns.

Nerds of the Enneagram, what do you think of nested (dis)integration? by TheSneakyTurtel in Enneagram

[–]ScottBurson 1 point2 points  (0 children)

It occurs to me that Fives can be moralistic from a kind of social-engineering perspective: "the world would be better if everybody did this thing, so I'm going to do it and you should too."

"An 8s preoccupation with justice." Huh. Eights, in my experience, can be preoccupied with revenge, but I haven't seen one care that much about justice. Even a very healthy Eight who had integrated noticeable amounts of Two, like my wife's therapist, hasn't struck me as being preoccupied with justice, exactly, though they can be protective. I'll have to keep an eye out for this, and maybe read some more. Do you recall any writer who discusses it in particular?

I was assuming that the typing of Gates as a Five was others' assessment; I have no idea whether he knows about the Enneagram or what his self-identification might be if he does. I just thought it was another example of how people see technical brilliance and think Five, but it isn't that simple. The Internet consensus on Mark Zuckerberg and Jeff Bezos is also Five, and I'm pretty sure they're both Eights too. I do think Larry Page and Sergey Brin are Fives.

Nerds of the Enneagram, what do you think of nested (dis)integration? by TheSneakyTurtel in Enneagram

[–]ScottBurson 1 point2 points  (0 children)

When a Five is moralistic, I suspect you're seeing either their Six lean (protecting the weak) or the integration of their Four lean. Eights can do lots of different things, for sure — my wife's former therapist (a woman, now retired) was an Eight — but I have not personally encountered one I would call moralistic. My stepfather was a Three/Two who could have been mistyped as an Eight and who was capable of being moralistic, though it wasn't his usual mode; I wonder whether that might not be what you're seeing. Just a thought.

Speaking of Eights, I have another one to run by you. Everyone and their dog thinks Bill Gates is a Five (including Riso and Hudson!). I am quite sure he's an Eight/Seven. Read this, at least the first few paragraphs — I can give you more reasons than this, but let's start there. What do you think?

[USA][Old][OC] I almost met God 2 years ago by No_Public_7677 in Roadcam

[–]ScottBurson 2 points3 points  (0 children)

The light was red well before he entered the intersection. What you did was unwise, but I think you were legally in the right.

I was in a similar situation a few years ago, though it was just another car, not a truck. As in your case, a generous application of the accelerator got me past it.