Readit News logoReadit News
mikelevins commented on My Impressions of the MacBook Pro M4   michael.stapelberg.ch/pos... · Posted by u/secure
bdangubic · 2 months ago
I actually can’t think of one hobby that costs less than $3k
mikelevins · 2 months ago
Besides programming, my hobbies are writing stories, writing and recording songs, drawing, and painting. None of them needs to cost anywhere near $3000. Any of them can cost as much as you want.

Take the music hobby as an example. I have several expensive guitars now, but in the first 20 years of that hobby I probably spent under $1000 on guitars and related gear the entire time.

mikelevins commented on Claude outage   status.claude.com/inciden... · Posted by u/stuartmemo
uxcolumbo · 2 months ago
Can you give some examples?

What would have improved UI development instead?

mikelevins · 2 months ago
I think the decline in UI quality is real, but I don't think the web takes all of the blame. The blame that it does take is due to a sort of mixed bag of advantages and disadvantages: web technologies make it quicker and easier to get something interactive on the screen, which is helpful in many ways. On the other hand, because it lowers the effort needed to build a UI, it encourages the building of low-effort UIs.

Other forces are to blame as well, though. In the 80s and 90s there were UI research labs in indistry that did structured testing of user interactions, measuring how well untutored users could accomplish assigned tasks with one UI design versus another, and there were UI-design teams that used the quantitative results of such tests to deign UIs that were demonstrably easier to learn and use.

I don't know whether anyone is doing this anymore, for reasons I'll metion below.

Designing for use is one thing. Designing for sales is another. For sales you want a UI to be visually appealing and approachable. You probably also want it to make the brand memorable.

For actual use you want to hit a different set of marks: you want it to be easy to learn. You want it to be easy to gradually discover and adopt more advanced features, and easy to adapt it to your preferred and developing workflow.

None of these qualities is something that you can notice in the first couple of minutes of interacting with a UI. They require extended use and familiarization before you even know whether they exist, much less how well designed they are.

I think that there has been a general movement away from design for use and toward a design for sales. I think that's perfectly understandable, but tragic. Understandable because if something doesn't sell then it doesn't matter what its features are. Tragic because optimizing for sales doesn't necessarily make a product better for use.

mikelevins commented on Who needs Git when you have 1M context windows?   alexmolas.com/2025/07/28/... · Posted by u/alexmolas
6LLvveMx2koXfwn · 3 months ago
If you can't remember what you wrote a 'few seconds' ago then you have more problems than having to work in vscode!
mikelevins · 2 months ago
It's called aging. Just wait until the first time you head back down the hall from the living room to the bedroom to get the thing you forgot to bring with you, get distracted for a moment by a pet or family member, and then can't remember if you were going down the hall to the bedroom or the living room.
mikelevins commented on Notes on Graham's ANSI Common Lisp (2024)   courses.cs.northwestern.e... · Posted by u/oumua_don17
danilor · 5 months ago
I appreciate this as someone learning lisp for the first time!

While I'm here I'll ask: does anybody have a recommendation for resources on learning lisp that focus on how the interpreter/compiler works? Here's what I tried so far: 1) Started Practical Common Lisp, but I found it lacking in the specifics. Then I 2) tried going to the specification but that was way too much. Then I 3) tried Common Lisp The Language and, while I liked the precise definitions a lot, it was a lot to keep in mind at the same time as learning the fundamentals. Right now I'm 4) back at Practical Common Lisp, skipping most of the text and reading surrounding paragraphs whenever if I find a piece of code I don't understand.

I wanted something that will not explain the standard library; I'd rather read the documentation for that. I wanted to know more precisely what happens throughout the program's life: Like, is behavior when running a script in "interpreter" mode guaranteed to be the same as when running in "native compiled code"? At what point does the compiler create an intermediate representation? Why does SBCL not use LLVM? At what point are #-starting words(read macros?) evaluated and how is that different from interpreting to compiling. How do I control the amount of optimization the compiler will do? Will the interpreter ever try to optimize? Is garbage collection implementation-defined? How will implementations change in behavior?

mikelevins · 5 months ago
The essence of Common Lisp (and other Lisps) is the metacircular evaluator from John McCarthy's Lisp 1.5 Manual:

https://michaelnielsen.org/ddi/wp-content/uploads/2012/04/Li...

This is the half-page of code that Alan Kay famously described as "the Maxwell's equations of software."

Common Lisp and MACLISP before it and Lisp 1.5 before that worked by providing a running program that implements the functions given in that half page and applies them and their effects iteratively to their own environment.

In other words, the basic model is that Lisp is a running program that you modify interactively by feeding expressions to it one after another.

Common Lisp's model still works like that: when you give it a source file it reads one expression after another from the file, evaluating the expressions as it goes, and altering the running environment to reflect any changes that they make, such as adding new definitions, updating data structures, and so on.

The Lisp reads the next well-formed expression, converting it into Lisp data structures. It then evaluates the resulting data structure, yielding some number of values and updating the environment at the same time. (In Common Lisp even pure functions have side effects if evaluated by the read-eval-print loop because the standard defines a globally-accessible variable named * that contains the value returned by the most recently-evaluated expression).

Common Lisp's design reflects this basic model, and much of its standard library is concerned with making it convenient to work this way. The ANSI standard likewise reflects this basic model of computation, including features specifically designed to support this style of interactive programming.

The process of evaluation allows, but does not require, compilation. Common Lisp interpreters (usually called "evaluators") do exist, but most practical implementations provide compilers that compile each expression in order to evaluate it. Some implementations are "compiler only": that is, every expression is always compiled in order to be evaluated, whether it's in a source file or typed at a repl prompt.

To answer some of your specific questions more directly:

> is behavior when running a script in "interpreter" mode guaranteed to > be the same as when running in "native compiled code"?

"Guaranteed" is a strong word. ANSI specifies the behavior, and it's generally the same whether code is interpreted or compiled. That may be hard to achieve for some expressions, but if you find an example of different behavior, that's most likely a bug in ANSI compliance.

(I should allow for the possibility that the ANSI spec has some corner somewhere that allows for a difference, but I can't think of any off the top of my head. Of course, the spec is large and my memory is imperfect.)

> At what point does the compiler create an intermediate representation?

Depends on what you mean. Under some interpretations and in some implementations there may not be an intermediate form.

The normal lifecycle of an evaluation is:

- read: ingest text and convert it to Lisp data

- macroexpand: rewrite any macro expressions in the data

- eval: use eval and apply on the data to yield some result values

- print: convert the result values to text in a standard format and print it to *standard-output*

You might regard the result of the read function as an intermediate form, but I would say that what read produces is Lisp source code. In my view, the original text is not Lisp source code; it's a serialization of Lisp source code. Read converts the text into Lisp source code.

ANSI does not specify in detail exactly what eval has to do in order to yield results. It specifies abstractly what each function, macro, and special form is supposed to produce, and what side effects they are supposed to have on the running environment, but the details of how the code is generated and executed are up to the implementation. An implementation can simply walk the source code interpreting forms and producing the required effects; or it can convert them to some intermediate form such as bytecode and then let a byecode interpreter do the evaluating; or it can compile them directly to native code that does the evaluating when executed. These are implementation details not specified by ANSI.

One detail that is specified by ANSI is the expansion of macros. Macros are expressions that look like function calls or special forms, but which are implemented by applying a macro-expander function to the expression to produce a new expression that is then given to the evaluator. Macros may be defined by the system or by the user. They are expanded after read and before eval. The spec goes into some detail about how this process is supposed to work and what features of the language affect it.

> Why does SBCL not use LLVM?

LLVM's first release was 2003. SBCL's first release was 1999. Moreover, SBCL is a fork of CMUCL, which was first released in 1980, though that was before Common Lisp existed. It was called SPICE Lisp at that time, and the compiler rewrite that would turn it into Common Lisp happened about five years later.

The point is that one important reason that SBCL doesn't use LLVM is that it's a large mature codebase that predates the existence of LLVM by about 23 years. I'm not saying it would be impossible to port SBCL onto LLVM, but if you did it would be so much changed that it wouldn't really be SBCL anymore. It would probably also be easier to just write a new Common Lisp on LLVM (which is what the CLASP project has done).

> At what point are #-starting words(read macros?) evaluated and > how is that different from interpreting to compiling.

An expression that starts with "#" is, as you alluded to, a reader macro. What that means is that when the read function starts to read the expression it encounters the "#" and that triggers it to look up the next character in a table of special read functions. If it doesn't find anything it signals a READER-ERROR. If it does find something then it applies the found function to the input to read it.

For example, if you feed it "#'+" then it looks up the quote character in the table of reader macros and finds a function that converts the expression to "(function +)". When "(function +)" is evaluated it returns the function that is globally bound to the symbol named "+".

So the sequence is:

  "#'+" -> READ -> reader macro -> EVAL (function +) -> return the function bound to +
The details of what happens when a reader macro is executed depend on the reader macro bound to the specific dispatch character. A bunch of them are defined by the ANSI standard, but you're free to define your own, and it's up to you what those do. You just have to know that they will get called when the reader encounters "#" followed by whatever dispatch character you specify, and the output of the function will get passed to EVAL after you're done with it.

> How do I control the amount of optimization the compiler will do?

With the declaration OPTIMIZE: http://clhs.lisp.se/Body/d_optimi.htm#optimize

For example, (declare (optimize (speed 3)(safety 0)))

> Will the interpreter ever try to optimize?

The answer is implementation specific, and may not even make sense (for example if you are using a compiler-only implementation).

> Is garbage collection implementation-defined?

To a large extent, yes. The spec assumes that implementations provide automatic memory management, but I think the only directly-related feature specified by ANSI is the ROOM function. Every implementation I know of also has the GC function to trigger a collection, but I don't think it's in the spec. Different implementations also have different GC strategies, they may have more than one GC implementation, and they provide various different implementation-specific tools for inspecting and controlling GC behavior.

mikelevins commented on Apple introduces a universal design across platforms   apple.com/newsroom/2025/0... · Posted by u/meetpateltech
yuehhangalt · 6 months ago
You must be too young to remember because a lot of the early user interface design principles, based on actual research, were pioneered by Bruce Tognazzini and Jef Raskin at Apple. Tog on Interface and Tog on Software Design were THE bibles back in the day and Apple's Human Interface Guidelines showed how a company could and should adopt consistent user experience across all of their products.

It honestly saddens me how far Apple has fallen.

mikelevins · 6 months ago
And Larry Tesler, who was a particular champion of usability testing and important in the development of the Human Interface Group. Larry cared a lot about usability.

When I was at NeXT, Steve Jobs told me that if it was up to him, Apple would get rid of the Human Interface Group. (Steve was rather hostile to Larry.)

Later, when it was up to Steve, he did exactly what he said: he got rid of HIG.

I think it’s easier to sell visual design than it is to sell usability because people see visual design immediately, but it takes time and experience to see and understand usability (and some users never seem to consciously notice it at all).

mikelevins commented on What If We Had Bigger Brains? Imagining Minds Beyond Ours   writings.stephenwolfram.c... · Posted by u/nsoonhui
whatnow37373 · 7 months ago
No matter how you twist it at some point two consciousnesses differentiate on some contradictory issue maybe not name, but surely they differ on some issue otherwise they wouldn’t be .. different consciousnesses. Life as a human moves and is narrated as a single story, not the story of a thousand processes.

If that were true I can call my heart a process, my liver, etc. They are in a way part of me but they do not just ex nihilo cohere into a single narrative. That is an active process and whatever does that is the only really interesting one (IMO). So I think there might be a bunch of processes, sub personalities maybe, but there remains the problem of integration. Whatever integrates is the one that really fascinates me.

Anyway, thanks for indulging me. It is hard to go into any depth in this medium. I think you have really interesting ideas. Have a nice weekend.

mikelevins · 7 months ago
At some moments there has to be a singular decision taken, such as which of two possible options to take. In such a moment some particular consciousness makes the decision, if it’s a decision made by a consciousness (though consciousness takes credit for more decisions than it actually makes, I think).

But granting that point does not grant that there is a single consciousness that is always (or ever) in charge, and it does not grant that any specific consciousness is associated with any specific singular narrative.

We know, scientifically speaking, some things that call the idea of a single consciousness with a single narrative into question. We know, for example from psychology of testimony that the same person’s memory of the same events differs at different times, and that the act of remembering rewrites memories. We have reason to suspect that the brain attributes to conscious choice decisions that are made too quickly for sensory data to reach the brain (and which may therefore be made elsewhere in the nervous system, even though the brain claims to have made the choice after the fact).

And I know from personal experience that some phenomena that normally appear to be singular conscious experiences can devolve into something else under some circumstances. For example, I have experienced blindsight, in which I cannot see something but can nevertheless collect accurate information from it by pointing my eyes at it. I have also experienced being asleep and awake at the same time.

Experiences like these are hard to account for if I assume that my consciousness is singular and continuous and in charge, but not so hard to account for if I assume that it’s a useful illusion cobbled together by a network of cooperating processes that usually (but not always) work well together. For example, many people might claim that it’s nonsense to say that a person can be asleep and awake at the same time, but it’s nonsense only if asleep and awake are mutually exclusive states of a singular consciousness. If, on the other hand, they are two neurological processes that are normally coordinated so that they don’t occur at the same time (because it’s less than useful for them to do so), then it’s not nonsense to observe that under unusual circumstances that coordination might be disrupted. Similarly, if seeing something is one process and consciously experiencing seeing it is a different process—normally, but not necessarily coordinated—then blindsight is not so hard to account for.

Not to mention that it’s trivially easy to find examples of consciousness not being in charge of our behavior, although it likes to think that it is.

I suggest that the supposed singular consciousness, supposedly in charge, may be an illusion constructed by a system of mostly, but not perfectly, coordinated cooperating processes.

mikelevins commented on What If We Had Bigger Brains? Imagining Minds Beyond Ours   writings.stephenwolfram.c... · Posted by u/nsoonhui
whatnow37373 · 7 months ago
It’s a single narrative that controls the body is what I mean. If one consciousness says “I am Peter” then other consciousnesses would know that and be conflicted about, if they don’t call themselves that.

What I mean is that a single narrative “wins”, not a multitude. This has to be explained somehow.

mikelevins · 7 months ago
How do you know there aren't several different consciousnesses that all think they are Peter?

How do you know they aren't just constructing whatever narrative they prefer to construct from the common pool of memory, ending up with what looks like a single narrative because the parts of the narrative come from the same pool and get written back to the same pool?

Perhaps each consciousness is just a process, like other bodily processes.

Perhaps a human being is less like a machine with a master control and more like an ecosystem of cooperating processes.

Of course, the consciousnesses like to claim to be in charge, but I don't see why I should take their word for it.

mikelevins commented on What If We Had Bigger Brains? Imagining Minds Beyond Ours   writings.stephenwolfram.c... · Posted by u/nsoonhui
whatnow37373 · 7 months ago
Which one controls the body? There is a problem there. You can’t just have a bunch of disembodied consciousnesses. Well, maybe.. but that sounds kind of strange.
mikelevins · 7 months ago
What makes you think a singular consciousness controls the body?
mikelevins commented on What If We Had Bigger Brains? Imagining Minds Beyond Ours   writings.stephenwolfram.c... · Posted by u/nsoonhui
whatnow37373 · 7 months ago
Then there is the beautiful issue of memory: maybe you are X consciousnesses but only one leaves a memory trace?

Consciousness and memory are two very different things. Don’t think too much about this when you have to undergo surgery. Maybe you are aware during the process but only memory-formation is blocked.

mikelevins · 7 months ago
Or perhaps they all leave traces, but all write to the same log? And when reconstructing memory from the log, each constructed consciousness experiences itself as singular?
mikelevins commented on From: Steve Jobs. "Great idea, thank you."   blog.hayman.net/2025/05/0... · Posted by u/mattl
msephton · 7 months ago
Whilst working in corporate I tried to get matt@apple.com which was showing as free, but in fact somebody in retail had claimed it. Good for them!
mikelevins · 7 months ago
I was mikel@apple.com for about a decade. I never got misdirected mail, probably because there aren’t all that many people with the first name "Mikel." The only other one I personally know of is Mikel Bancroft, who works at Franz, inc.

u/mikelevins

KarmaCake day2289October 9, 2010
About
An eccentric old Lisp hacker who sometimes makes products (see the LearningTouch FirstWords games for kids), sometimes does contract work (see Franz, Inc. Clozure Associates), sometimes releases open-source code (see folio, Clozure Common Lisp, Apis), sometimes helps build startups (see Secure Outcomes, Inc., Reactivity, Inc. Centerrun, Inc.), and sometimes just plays games.
View Original