-
Writer Ted Chiang on AI and grappling with big ideas - Avery Keatley, Scott Detrow, Patrick Jarenwattananon
-
ChatGPT Is a Blurry JPEG of the Web - Ted Chiang - version archived elsewhere as original is paywalled
In 2013, workers at a German construction company noticed something odd about their Xerox photocopier: when they made a copy of the floor plan of a house, the copy differed from the original in a subtle but significant way. In the original floor plan, each of the house’s three rooms was accompanied by a rectangle specifying its area: the rooms were 14.13, 21.11, and 17.42 square metres, respectively. However, in the photocopy, all three rooms were labelled as being 14.13 square metres in size. The company contacted the computer scientist David Kriesel to investigate this seemingly inconceivable result. They needed a computer scientist because a modern Xerox photocopier doesn’t use the physical xerographic process popularized in the nineteen-sixties. Instead, it scans the document digitally, and then prints the resulting image file. Combine that with the fact that virtually every digital image file is compressed to save space, and a solution to the mystery begins to suggest itself.
Compressing a file requires two steps: first, the encoding, during which the file is converted into a more compact format, and then the decoding, whereby the process is reversed. If the restored file is identical to the original, then the compression process is described as lossless: no information has been discarded. By contrast, if the restored file is only an approximation of the original, the compression is described as lossy: some information has been discarded and is now unrecoverable. Lossless compression is what’s typically used for text files and computer programs, because those are domains in which even a single incorrect character has the potential to be disastrous. Lossy compression is often used for photos, audio, and video in situations in which absolute accuracy isn’t essential. Most of the time, we don’t notice if a picture, song, or movie isn’t perfectly reproduced. The loss in fidelity becomes more perceptible only as files are squeezed very tightly. In those cases, we notice what are known as compression artifacts: the fuzziness of the smallest jpeg and mpeg images, or the tinny sound of low-bit-rate MP3s.
Xerox photocopiers use a lossy compression format known as jbig2, designed for use with black-and-white images. To save space, the copier identifies similar-looking regions in the image and stores a single copy for all of them; when the file is decompressed, it uses that copy repeatedly to reconstruct the image. It turned out that the photocopier had judged the labels specifying the area of the rooms to be similar enough that it needed to store only one of them—14.13—and it reused that one for all three rooms when printing the floor plan.
The fact that Xerox photocopiers use a lossy compression format instead of a lossless one isn’t, in itself, a problem. The problem is that the photocopiers were degrading the image in a subtle way, in which the compression artifacts weren’t immediately recognizable. If the photocopier simply produced blurry printouts, everyone would know that they weren’t accurate reproductions of the originals. What led to problems was the fact that the photocopier was producing numbers that were readable but incorrect; it made the copies seem accurate when they weren’t.
-
Ted Chiang: The Incompatibilities Between Generative AI and Art
-
Why A.I. Isn't Going to Make Art - Ted Chiang
Art is notoriously hard to define, and so are the differences between good art and bad art. But let me offer a generalization: art is something that results from making a lot of choices. This might be easiest to explain if we use fiction writing as an example. When you are writing fiction, you are - consciously or unconsciously - making a choice about almost every word you type; to oversimplify, we can imagine that a ten-thousand-word short story requires something on the order of ten thousand choices. When you give a generative-A.I. program a prompt, you are making very few choices; if you supply a hundred-word prompt, you have made on the order of a hundred choices.
If an A.I. generates a ten-thousand-word story based on your prompt, it has to fill in for all of the choices that you are not making. There are various ways it can do this. One is to take an average of the choices that other writers have made, as represented by text found on the Internet; that average is equivalent to the least interesting choices possible, which is why A.I.-generated text is often really bland. Another is to instruct the program to engage in style mimicry, emulating the choices made by a specific writer, which produces a highly derivative story.In neither case is it creating interesting art.
...
The companies promoting generative-A.I. programs claim that they will unleash creativity. In essence, they are saying that art can be all inspiration and no perspiration - but these things cannot be easily separated. I’m not saying that art has to involve tedium. What I’m saying is that art requires making choices at every scale; the countless small-scale choices made during implementation are just as important to the final product as the few large-scale choices made during the conception. It is a mistake to equate “large-scale”with “important” when it comes to the choices made when creating art; the interrelationship between the large scale and the small scale is where the artistry lies.
...
Many of us have sent store-bought greeting cards, knowing that it will be clear to the recipient that we didn’t compose the words ourselves. We don’t copy the words from a Hallmark card in our own handwriting, because that would feel dishonest. The programmer Simon Willison has described the training for large language models as “money laundering for copyrighted data,” which I find a useful way to think about the appeal of generative-A.I. programs: they let you engage in something like plagiarism, but there’s no guilt associated with it because it’s not clear even to you that you’re copying.
-
‘Do you really want to live forever?’ Sci-fi author Ted Chiang talks immortality
- The Best Things and Stuff of 2025 - fogus
assess: LLMs - I’m into the 3rd AI hype-cycle in my life (at least) and this is not much different than they other two, save for the potential market and job disruptions in play. I tried in earnest to make AI work for me, with varying degrees of un-success. I’ve had zero success leveraging it in my work maintaining and evolving Clojure. For problem formation in the face of novelty, LLMs have been more frustrating than helpful and the little gains that I’ve found were in the very early phases of problem solving requiring a bare minimum of experimental code. But even these examples operate wholly in the known rather than in the unknown where I’d like to operate instead. Even in these early stages the “hand-holding” involved was more frustrating than helpful. In my work, the bottleneck is absolutely not the code. While I think that the kind of up-front work that I do could inform prompt-engineering to some degree, by the time that I get to that point the code is often perfunctory. Most of the work that I do is devising and investigating new problem framing rather than in interpolation of the known (i.e. analogy play). While the latter is important for sure, what’s known often acts as a source of tension to help motivate and tease out potentially new solutions. And this is a huge problem in the very nature of LLMs. That is, they are trained on the products of problem solving processes rather then also in the very processes themselves. Further, as a Socratic partner, LLMs are incredibly frustrating in their inability to move a “discussion” forward. A good Socratic partner creates pressure to move toward truth, but LLMs are too sycophantic, lack an awareness of useful tension,20 cannot often identify contradiction, and lack any ability to adhere to the trajectory of a conversation. So far I’m left wanting, but because LLMs are likely to never go away then I’ll see if these downsides get better in the future.21
- Learn Lisp the Hard Way - 2nd Edition - Colin J.E. Lupton
- Thoughts on Go vs. Rust vs. Zig - Sinclair Target
- Getting My Allocators Straight - Sinclair Target
Anyone who knows, and knows that he knows, makes the steed of intelligence leap over the vault of heaven. Anyone who does not know but knows that he does not know, can bring his lame little donkey to the destination nonetheless. Anyone who does not know, and does not know that he does not know, is stuck forever in double ignorance.
-- Nasir al-Din al-Tusi
- I wrote a thing for Emacs, but don't call it a "plugin" - Emacs Propaganda
- Functional Quadtrees - Lau B. Jensen
- The ingenious product that brings eSIM to any Android phone - Mishaal Rahman
- Simplifying Quines - Adrian Smith
- Uri Gellar, James Randi and a ChatGPT Thought Experiment - Carl Brown (Spec Again / Internet of Bugs)
- Aimless - David Nolen
- Interview with Bakpakin - Alex Alejandre
- CLOSOS - Specification of a Lisp operating system - Robert Strandh
- VeriTAR - Verify checksums of files within a TAR archive - George Notaras
- Modern Monetary Theory: Economics for the 21st Century – MOOC – now available via MMTed.org - Wlliam Mitchell
- Introduction to Janet RPC - Joe Creager
- Does AI-Assisted Coding Deliver? A Difference-in-Differences Study of Cursor's Impact on Software Projects - Hao He, Courtney Miller, Shyam Agarwal, Christian Kästner, Bogdan Vasilescu
- The Search for Meaning Through Collaboration and Code - Timothy Pratley
- The Human is the Agent: How SolveIt Changed My Programming Journey After 25 Years - Chris Thomas
- SolveIt: The Thinking Developer's Environment w/Jeremy Howard & Johno Whitaker - Hamel Husain
- Build Asteroids with ClojureScript & Scittle - Burin Choomnuam
- Chartalism
a theory in macroeconomics that views money as a creation of the state, introduced to control and organize economic activity rather than arising from barter or debt. It holds that fiat currency has value because governments impose taxes that must be paid in the currency they issue, creating demand for it.
- Calling Jank from C - Mauricio Sazbo
- Advanced Beginner's guide to ClojureScript - Roman Liutikov
- Twemoji Cheatsheet
- Make the system draw itself - Tudor Girba
- Miller Documentation
Miller is a command-line tool for querying, shaping, and reformatting data files in various formats, including CSV, TSV, JSON, and JSON Lines.
- Drawing Dynamic Visualizations - Bret Victor
- Building Browser-Native Presentations with Scittle - Burin Choomnuan
- Python + ClojureScript: Pyodide Integration with Scittle - Burin Choomnuan
- ldd arbitrary code execution - Peter Krumins
- shared libraries and dynamic linking - Szabolcs Nagy
- Dynamic Linking - Rob Pike
- Versioned Symbols - A New Level of Hell - Rob Pike
- Packagers don't know best - Andrew Thompson
- Packaging and the tide of history - Andrew Thompson
- RHEL Discourages Static Linking
- The .a File is a Relic: Why Static Archives Were a Bad Idea All Along - Eyal Itkin
- mtime comparison considered harmful - apenwarr
- Go Modules: Why You Should Stop Worrying about Vendoring - Mitch
- build system tradeoffs - jyn
- C Isn't A Programming Language Anymore - Aria Desires
- Growing explanations together - Teodor Heggelund
- The Eternal Mainframe - Rudolf Winestock
- How a File Format Led to a Crossword Scandal - Saul Pwanson
- Effective Open Source Maintenance Maintenance - Peter Taoussanis
- Caveman - A Clojure Web Framework
- Gradual Automation With Do Nothing Scripts - Alex Alejandre
- Hiccup, Macros, API design, and magic - Niki Tonsky
- Hiccup Tips - Eric Normand
- The Rise of Parasitic AI - Adele Lopez
- Failure Driven Design - Paul Tarvydas
- Type Checking is a Symptom, Not a Solution - Paul Tarvydas
- MMT White Paper - Warren Mosler
- Soft Currency Economics - Warren Mosler
- A General Analytical Framework for the Analysis of Currencies and Other Commodities - Warren Mosler
- What is Money? - A. Mitchell Innes
- Scrolling with pleasure - Pavel Fatin
- The Economy Is Like A Bathtub - Stephanie Kelton
- Money Did Not Come From Barter - It Came From Blood Feuds - L. Randall Wray
- Pay no attention to the man behind the curtain.
- Keyboard Macros are Misunderstood - Mickey Petersen
- PROMPT_ - Tomáš Baránek
- Elements of Malli - Ben Sless
- The broken promise of static typing - Dan Lebrero
- The Shocking Secret About Static Types - Eric Elliot
- 6.4.24. Deferring type errors to runtime - GHC User’s Guide
- Publishing semantic-namespace/contract lib - tangrammer
There is no reason to limit our specifications to what we can prove, yet that is primarily what type systems do. There is so much more we want to communicate and verify about our systems. This goes beyond structural/representational types and tagging to predicates that e.g. narrow domains or detail relationships between inputs or between inputs and output. Additionally, the properties we care most about are often those of the runtime values, not some static notion. Thus spec is not a type system.
- Sound Default-Typed Scheme (Position Paper) - Jan-Paul Ramos-Davila
We propose a new approach to typing Scheme programs based on the observation that programmers often have strong beliefs about the “normal” behavior of their code. Rather than forcing a binary choice between static types and runtime checks, we introduce default typing, where each program point carries a plausibility-ranked set of types. The highest-ranked type (rank 0) represents what the programmer believes will “almost always” be true, while higher ranks capture increasingly exceptional cases. By leveraging Racket’s macro-extensible type system and SMT-based constraint solving, we can verify whether a program type-checks using only the default assumptions. Success yields efficient code with no runtime overhead; failure produces a counterexample showing which assumptions are violated. We provide a precise notion of conditional soundness: programs are guaranteed type-safe only when their default assumptions hold at runtime.
- My Position on AI, LLMs, and "vibe coding" - Arne Brasseur
- Let’s Build the GPT Tokenizer: A Complete Guide to Tokenization in LLMs - Andrej Karpathy, Kerem Turgutlu
- How to Solve it With Code course now available - Jeremy Howard
- From Correlations to Recommendations - Tomáš Baránek
- Convert PDF to TXT while preserving layout -
pdftotext -layout input.pdf output.txt(pdftotextinpoppler-utils.debpackage)
- De-complecting clojure.spec - tangrammer
- Episode 5: Combinatory Programming with Zach Smith - Tacit Talk
- Lisp Design Patterns - Artyom Bologov
- Software Architecture Today - Alex Alejandre
- QEMU machine types and compatibility - Cornelia Huck
- QEMU Install Windows 11 Guest - undus5
- Domain Driven Design in Clojure with generalized Hiccup - Michal Hadrava
- Concept image and concept definition Wikipedia Page
- Concept Image and Concept Definition in Mathematics with particular reference to Limits and Continuity - David Tall and Shlomo Vinner
- Procept Wikipedia Page
- Procepts @archive.org - David Tall
- Evolving Clojure with Java’s Virtual Threads - Alex Miller
- Recommended Directory Structure for Janet’s Modern Bundles - Michael Camilleri
- Bundles in Janet - Michael Camilleri
- It Turns Out That No One Wants to Tell the Truth About Government 'Debt' - Stephanie Kelton
- Can Taxes and Bonds Finance Government Spending? - 1998 - Stephanie Bell (Kelton)
- Top 10 MCP vulnerabilities: The hidden risks of AI integrations
- Cross-tenant data exposure
- Living off AI attacks
- Tool poisoning
- Toxic agent flows via trusted platforms
- Token theft and account takeover
- Composability chaining
- User consent fatigue
- Admin bypass
- Command injection
- Tool shadowing
- ANSI Escape Sequences - Christian Petersen
- Everything you never wanted to know about ANSI escape codes - Burke Libbey
- Death by a thousand slops - Daniel Stenberg
- Why I am moving away from Scala - Pavels Smirnovs
- The Quest for Tacit; Combinators, Arrays, and Beyond - Kai Schmidt
- Combinatory Programming - Z. D. Smith
- Tutorial on multiple currency accounting - Peter Selinger
- How the .NET Foundation kerfuffle became a brouhaha - Rob Mensching
- On Understanding Data Abstraction, Revisited - William R. Cook
- The Architecture of Complexity - Herbert A. Simon
- My experience with Cursor and Clojure-MCP - Julien Bille
- Toward relaxing assumptions in languages and their implementations - Mary Shaw, Wim. A. Wulf
- Operation Triangulation - Apple Backdoor?
- A Grammar of Physics - can't...stop...pressing...explode
- C4 - ISeq clarity - David Miller
- Make Worse Software, Slower - Nathan Marz
And for your convenience, here are some comments you can use prewritten by ChatGPT from the prompt “generate a range of typical Hacker News responses to this post”:
- C4 - Symbolic of what? - David Miller
- Linux Mint User Guide -> Snap Store -> Criticism
- Biometric "Security" Is NOT Secure
- What is your favourite non-mainstream programming language - Shubhamkar Ayare
- C4 - AST me anything - David Miller
- Classic Clojure Compiler Contemplation - David Miller
- J Notation as a Tool of Thought - Hillel Wayne
- Notation as a Tool of Thought - Kenneth E. Iverson
- The lethal trifecta for AI agents: private data, untrusted content, and external communication - Simon Willison
- Some thoughts on LLMs and Software Development - Martin Fowler
My former colleague Rebecca Parsons, has been saying for a long time that hallucinations aren’t a bug of LLMs, they are a feature. Indeed they are the feature. All an LLM does is produce hallucinations, it’s just that we find some of them useful.
- Getting Started with Leiningen: A Beginner’s Guide - Andrey Fadeev - Post
- Getting Started with Leiningen: A Beginner’s Guide - Andrey Fadeev - YouTube video
- Porting Portal to Basilisp - Chris Badahdah
- Growing the Java Language - Brian Goetz - JVM Language Summit 2025
- Kill-Safe Synchronization Abstractions
- Paper - Matthew Flatt and Robert Bruce Findler
- Am I becoming obsolete or just older? - Andrey Listopadov
- Layers of lawyers and liars - Matthew Butterick
- HTTP/1.1 must die: the desync endgame - James Kettle
- HTTP/2: The Sequel is Always Worse - James Kettle
- A Conjure Piglet Client - Laurence Chen
- No build step ClojureScript + nREPL with Scittle and cljs-josh - mccormix
- Scittle ClojureScript Game Menu Template - mccormix
- UTF-8 Format Basics - Aidan Olsen
- Automatic Syntax Error Recovery - Laurence Tratt
- Functional Core, Imperative Shell - Gary Bernhardt
- Functional Core, Imperative Shell - refactoring kata
- Library patterns: Why frameworks are evil - Tomas Petricek
- Designing extendable data applications
I like static typing — I really do.
But the love fades when I have to build large domain entities.
I’ve been building supply chain management systems for decades, modeling complex domains with tens or even hundreds of properties. In long-lived data applications, one truth becomes clear: we want to extend code, not change it.
Code mutation sends ripples through the system — and often breaks it. The programming industry has largely solved code modularity, yet we remain stuck with monolithic data structures. Code and data are glued together.
Many business applications today are fragile because they rely on structs, records, and classes. Yes, these give compile-time safety — but also rigid, hard-to-extend designs.
For me, the practical solution is simple: build entities on maps. You can add new properties to an existing map, or combine maps to create new, derived ones.
- Managing Complexity - Or "Why do you code in F#?" - Anthony Lloyd
- Easy-J - An Introduction to the World’s most Remarkable Programming Language - Linda Alvord and Norman Thomson
- Learning J - Roger Stokes
- J for C Programmers - Henry Rich
- J Reference Card
- Dissect - visualizing J sentence execution
- J Playground - try J in a web browser
- How to Write Computer Programs - John Scholes
- Programming Language Pragmatics Videos
- The power of the :deps alias - Sean Corfield
- Comparison of Common Lisp Testing Frameworks - Sabra Crolleton
- manp.gs - man pages
- Uiua Tutorial
- How the Uiua Logo Works
- The J Primer
- Internal Reprogrammability - Martin Fowler
- Boundaries - Gary Bernhardt - RubyConf 2012
- Do Programming Language Features Deliver on their Promises - Aaron Hsu - LambdaConf 2025
- Does APL Need a Type System? - Aaron W Hsu - FunctionalConf 2018
- in which a surprising affinity is pondered - Technomancy
- In Defence of Doubles - Anthony Lloyd
- The happy state of property-based testing in C# - Anthony Lloyd
- Why should you use a random testing library in C#? - Anthony Lloyd
- Integrated Random Testing - Anthony Lloyd
- The sad state of property-based testing libraries - Stevan A
- The Shrinking Challenge
Comparing shrinking approaches and performance across different PBT libraries
- I Snuck Clojure Into Work - Trev
- Multiplayer game with nbb and datastar - Gregory Bleiker
- Clojure vs. The Static Typing World - Eric Normand
- ZFS won’t save you: fancy filesystem fanatics need to get a clue about bit rot (and RAID-5) - Jody Bruchon
- Rasmussen and practical drift - Drift towards danger and the normalization of deviance - Eric Marsden
- Protocols, Not Platforms: A Technological Approach to Free Speech - Mike Masnick
- Do-nothing scripting: the key to gradual automation - Dan Slimmon
- Storage Media Life Expectancy: SSDs, HDDs & More! - Explaining Computers
- Shearing Layers Applied to the Web - Dorian Taylor
- The Speed of Information Architecture - Peter Morville
- The Specificity Gradient - Dorian Taylor
- How Buildings Learn - Stewart Brand
- WIP Coupling Language and Geography - Alex Alejandre
- Detecting bitrot / verifying backups
- Silent Data Corruption
- Cracking the Code: Realtime Debugger Visualization Architecture – Ryan Fleury – Better Software Conference 2025
- LXM: better splittable pseudorandom number generators (and almost as fast) - Guy L. Steele Jr., Sebastiano Vigna
- JEP 356: Enhanced Pseudo-Random Number Generators
- Java 17's Enhanced Pseudo-Random Number Generators - Michael Bien
- Design Reboot - Jonathan Blow
- Jai Demo and Design Explanation - Jonathan Blow - LambdaConf 2025
- Demystifying Debuggers, Part 1: A Busy Intersection - Ryan Fleury
To emphasize their importance, I’d like to reflect on the name “debugger”. It is not a name I would’ve chosen, because it can give the impression that a debugger is an auxiliary, only-relevant-when-things-break tool. Of course, a debugger is used to debug—which is why it was named as such—but it is also enormously useful to analyze working code’s behavior, and to verify code’s correctness, with respect to the expectations of the code.
A good debugger provides clear and insightful visualizations into what code is doing. As such, they are also enormously useful educational tools—for beginners and experts alike—because they make what is normally opaque, visible. They provide these features by dynamically interacting with running programs—as such, they can also dynamically modify code. At the limit, this approximates (or employs) JIT-compilation and hot-reloading, making traditional compiled toolchains have much more runtime flexibility for developers.
For these reasons, “debugger” is much too special-purpose of a name for the full set of capabilities that debuggers actually provide—they offer glimpses into the lower level inner-workings of a computer. If one designed a computing system from scratch, they might not ideally be independent from the operating system itself. Instead, perhaps the same capabilities could simply be provided through first-class visualization and dynamic execution adjustment features that the operating system naturally exposes. But that is a topic for another day.
I hope this sheds light on the imbecility of Internet debates about the utility of debuggers—for example, where one might find comments like, “I don’t need debuggers, because I can just use printf”, or “I don’t need debuggers if I can statically guarantee correctness”. It’s akin to suggesting that someone does not benefit from vision, because they can feel their way around with a mobility cane, or read text through Braille. Even though mobility canes and Braille are obviously good inventions for people who can’t have vision, that doesn’t somehow imply that vision isn’t an obvious benefit, or that it isn’t obviously preferable. Similarly, even though logging and static verification are obviously good inventions for programs or circumstances which cannot be easily debugged at runtime, or when those things are simply preferable in context, that doesn’t somehow imply that actively visualizing the runtime execution of programs through a debugger isn’t an obvious net benefit, or that it isn’t obviously preferable in many cases. To suggest otherwise in either case is absurd. The more useful debuggers become, the shorter the iteration loop of the programmer, the more efficient software production becomes, and the more trivially that programmers can obtain true from-first-principles reasoning about their code.
- No Wrong Doors. - Will Larson
- Adventures in core.logic: learning clojure and logic programming with help from Gen AI - Louis Luangkesorn
- Why 0x5deece66d?
- Semantic Clojure Formatting - Bozhidar Batsov
- The Big OOPs: Anatomy of a Thirty-five-year Mistake - Casey Muratori - BSC 2025
- Come Try Out Piglet - Arne Brasseur
- I don't like notebooks - Joel Grus
- What’s Wrong with Computational Notebooks? Pain Points, Needs, and Design Opportunities - Souti Chattopadhyay, Ishita Prasad, Austin Z. Henley, Anita Sarma, Titus Barik
- Met1: What is Metaphysics ? - Dr Adrian Heathcote
- GREN - "A programming language for simple and correct applications"
- Clojure as a First Language - Ethan McCue
- Convergence to Normal Distribution, independent of original distribution - Sam Umbach
- Clojure's
doat top-level is similar to Janet'supscope - How to Hash-Lang - William J. Bowman
- Mellow Drama: Turning Browsers Into Request Brokers
- Data remanence
- Reliably Erasing Data From Flash-Based Solid State Drives
- Life after TRIM: Using Factory Access Mode for Imaging SSD Drives
- Rethinking Object-Oriented Programming in Java Education
- jank is C++
- TCL: The Tool Command Language - LISP for the Masses - Karl Lehenbauer - Houston FPUG
- Avoid SanDisk and Western Digital
- SanDisk’s Name is Now Mud
- SanDisk Portable SSDs Are Failing So Frequently, We Can No Longer Recommend Them
- Western Digital’s Network Breached, Multiple Services Taken Down
- Western Digital’s Cloud Network Has Been Down for Five Days
- Major Vulnerability Affects All Western Digital NAS Devices Running OS 3
- HDD and SDD Stats
- No, the 16 billion credentials leak is not a new data breach
- Windows Update stuck on KB44930440, various troubleshooting methods (e.g. troubleshooter, sfc, dism, etc.) didn't help...tried manually installing via Microsoft Update Catalog...but then got feedback it was already installed...
- Everything I've learned so far about running local LLMs - Chris Wellons
Without taking my word for it, consider how it show up in the economics: If AI companies could deliver the productivity gains they claim, they wouldn’t sell AI. They’d keep it to themselves and gobble up the software industry. Or consider the software products produced by companies on the bleeding edge of AI. It’s still the same old, bloated web garbage everyone else is building. (My LLM research has involved navigating their awful web sites, and it’s made be bitter.)
- Simply Annotate: A Lightweight Annotation System
- Advanced Testing with Go - Mitchell Hashimoto - GopherCon 2017
- Can we test it? Yes, was can! - Mitchell Hashimoto
- How to avoid having to manually configure web browser preferences repeatedly upon new installation...
- How to backup your web browser settings/profiles - Method 2. Manually backup profile folder - Chrome, FF, Edge...no Brave though
- Back up and restore information in Firefox profiles - better than nothing? not using FF any more though...
- Programmatically change settings - some info?
- Perceus: Garbage Free Reference Counting with Reuse
- CPSC 411 2020w2 – Introduction to Compiler Construction
- ClojureScript from First Principles - David Nolen - Clojure/NYC meetup 2025-06-04
- Fix Windows 11 Freezing After Waking Up From Sleep
- Solved: Windows 11 Restarts After Sleep
- Windows Crashes After Sleep: 7 Methods to Prevent That
- There is no reliable way to change the language on Windows 11. Period. - installing Language Packs and getting them to work on Windows 11 can be surprisingly difficult (also had trouble)
- Language pack downloading can take a long time...and/or fail in the end
- The download speed of the language pack in the settings is too slow, is there any other way to change the Windows language, such as FoD-ISO?
- More than 30 minutes to install a language pack?
- Cannot install Language Pack in Windows 11 [Fix]
- Windows 11 Language Pack download stuck
- How to Fix Language Pack Download Stuck on Windows 11?
- How to Install Windows 11 on an Unsupported PC
- How to Dual Boot Linux Mint 21 alongside Windows 11
- How to Dual Boot Linux Mint And Windows 10 or 11 [Beginner's Guide]
- No boot menu showed up after initial installation of Linux Mint - changing a boot-related setting via the BIOS menus seemed to take care of things
- Linux Mint 22.1 XFCE Installation for use with qemu VM - adapt some instructions from here, specifically the bits about disabling services
- How to Upgrade Your PC to Windows 11
- Turns out that if you're upgrading from Windows 10 and already have a local account, you may not be asked to create a MS account. One thing I did though was to forget my router's network before doing the restart that comes right after going through the initial "Download and install" part of Windows 11 via Windows Update. Don't know if that made a difference. (Note: this is like a log entry -- it's not something from the article linked above.)
- How to bypass the Microsoft Account requirement during Windows setup
- How to Set Up Windows 11 Without a Microsoft Account
To bypass the Microsoft Account requirement, proceed with the first few steps of the installation process normally until you reach this screen ("Let's add your Microsfot account")
Once you're there, press Shift + F10 to open up a Command Prompt Window and type:
oobe\bypassnroIt isn't case sensitive, but it is critical that you use the correct slash. Once you type in the command, press Enter and your PC will immediately restart.
Now, you should completely disconnect your PC from the Internet at this point. If Windows 11 detects an Internet connection it will continue to try and force you to sign in with a Microsoft account. However, if you're disconnected from the Internet you'll see an "I Don't Have Internet" option, or you'll be prompted to create a local account immediately.
Click "Continue with limited setup" on the next page if it appears, and then you'll be able to create a local account with a password and three security questions.
- How to Delete a Saved Wi-Fi Network on Windows 10
- Windows 11 OOBE Bypassnro Not Working
- OOBE BypassNRO - Windows CMD - SS64.com
bypassnro.cmd used to contain the following:
@Echo off reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE /v BypassNRO /t REG_DWORD /d 1 /f shutdown /r /t 0- On the Windows 11 setup screen, press Shift + F10 to open a CMD prompt and type regedit and press Enter.
- Go to Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE
- Click Edit > New > DWORD (32-bit) and rename the new value to BypassNRO
- Open the value and change its value data to 1
- Restart the system.
You can now setup your computer without an active internet connection or a Microsoft Account, though this workaround may stop working at some point in the future.
- [2025 Guide] Install Windows 11 24H2 on Unsupported PCs (Bypass Compatibility Check)
- borkdude in #off-topic at clojurians slack:
I've used it two times. The second time I tried to make it create a markdown parser. When it got hard in the edge cases, it said things like: yeah, but I have 30 out of 40 passing tests, that's already quite impressive right! Yes, it was impressive sure, but it didn't get to the hard part "because it needed to go from a regex based approach to a delimited parser approach" yeah duh.
My feeling is that "vibe" coding is best used to find problems, not to solve them
Also the Claude/ChatGPT is stuff is handy for "dumb" things like "something is not right about my pom.xml, what is it"
After a while I felt like I was tolerating too much generated shit code and it felt like a slot machine addition.
- Producing a video lesson - Rakhim Davletkaliyev
- Running Clojure in Wasm - Roman Liutikov
- Clojure: SQLite C API with project Panama and Coffi - Anders Murphy
- What is an architecture decision record?
An architecture decision record (ADR) is a document that captures an important architectural decision made along with its context and consequences.
An architecture decision (AD) is a software design choice that addresses a significant requirement.
An architecture decision log (ADL) is the collection of all ADRs created and maintained for a particular project (or organization).
An architecturally-significant requirement (ASR) is a requirement that has a measurable effect on a software system’s architecture.
All these are within the topic of architecture knowledge management (AKM).
- This might be the BEST time to create a NEW programming language - interview with Richard Feldman
- Accelerating maps with join-with - Christophe Grand
- Case Study: Reagent With Macro Help - Thomas Helloer
- Creating Languages in Racket - Sometimes you just have to make a better mousetrap. - Matthew Flatt
- What the Heck Are You Talking About? - Thomas Heller
- Keynote: Rethinking our Adoption Strategy - Evan Czaplicki - Lambda Days 2025
- What The Heck Just Happened? - Thomas Heller
-
Quote from "I got bruned by haskell." (with slight editing):
Dirk Roeckmann
amano said:
After coding in haskell for months, I prefer clojure. I would rather verify unstructured input data with spec or something similar and write tests than satisfy a complex type system.
Python is probably the last frontier for clojure. When clojure is properly on python, I will only write clojure.
That’s absolutely my opinion too. An official Clojure hosted on Python would be sensational for all data scientists/AI afficionados interested in FP and homoiconicity. This is the perfect marriage. Python is just the lingua franca of AI nowadays and full access to all the SOTA packages from within Clojure would be a dream. Basilisp is great, but official backing would be perfect
walterl
amano said:
After coding in haskell for months, I prefer clojure. I would rather verify unstructured input data with spec or something similar and write tests than satisfy a complex type system.
I've spent the last 2 years working in Julia, and I concur. Coming from Clojure it was interesting to see what I've come to describe as "type obsession" in action. There is no inclination to think of data as data. Everything must be typed, and considered in those terms.
- Thank you Google for breaking my YouTube addiction - Rakhim Davletkaliyev
- They made computers behave like annoying salesmen - Rakhim Davletkaliyev
- Introducing Dataspex: Browse Clojure data from the comforts of your own devtools
- Slop Deving v. Vibe Coding - Dio the Debugger
I think many developers and even people today have heard of the term 'Vibe coding' the term was coined by Andrej Karpathy, a well known AI researcher and influencer in the field. I think that vibe coding does not capture that well the result of what is produced, it is also singular to code where as slop deving or slop development is more accurate. You want to just churn out effectively garbage content. A major thing that is missing from vibecoding is that you are not even coding at all. In fact, it isn't vibe coding if you are coding. Though the term has recently evovled to almost encompass any major usage of AI in writing code. The original usage of the term meant the wholesale abandonment of the code. Prompting the AI is all you need. We need a better term that captures this, because honestly its as bad as the term 'serverless'.
- "Hallucinations"
-
Hallucinations are false or distorted sensory experiences that appear to be real perceptions. These sensory impressions are generated by the mind rather than by any external stimuli, and may be seen, heard, felt, and even smelled or tasted.
- ...seems a rather difficult thing to prove "generated by the mind rather than by any external stimuli"
-
Some researchers have highlighted a lack of consistency in how the term is used, but also identified several alternative terms in the literature, such as confabulations, fabrications, and factual errors.
...
In the scientific community, some researchers avoid the term "hallucination", seeing it as potentially misleading. It has been criticized by Usama Fayyad, executive director of the Institute for Experimental Artificial Intelligence at Northeastern University, on the grounds that it misleadingly personifies large language models and is vague. Mary Shaw said, "The current fashion for calling generative AI’s errors 'hallucinations' is appalling. It anthropomorphizes the software, and it spins actual errors as somehow being idiosyncratic quirks of the system even when they’re objectively incorrect." In Salon, statistician Gary N. Smith argues that LLMs "do not understand what words mean" and consequently that the term "hallucination" unreasonably anthropomorphizes the machine. Some see the AI outputs not as illusory but as prospective—that is, having some chance of being true, similar to early-stage scientific conjectures. The term has also been criticized for its association with psychedelic drug experiences.
- ...isn't everything from LLMs generated? sometimes what comes out is useful (even though it may be wrong), sometimes what comes out is not found to be useful...and may be it even depends on who looks at the results...and when...
-
- "Retrieval"
- @dictionary.cambridge
the process of finding and bringing back something
- @dictionary.cambridge
- Functional Design in Clojure
- Writing Model Content Protocol (MCP) Servers in Clojure - Vedang Manerikar
- Writing Hygienic Macros in Scheme with Syntax-Case - Kent Dybvig
- Syntactic Extensions in the Programming Language Lisp - Eugene Kohlbecker
- CS 5510 Programming Languages - Matthew Flatt
- Schedule - has links to videos, slides, etc.
- Your Brain on ChatGPT: Accumulation of Cognitive Debt when Using an AI Assistant for Essay Writing Task
- Fake Commodore 64 Programming Book Scam BUSTED!
- A meta-analysis of three different notions of software complexity - Varun Gandhi
- What is a User Interface? - Adrian Smith
- Implementing a Functional UI Model - Adiran Smith
- Reusable UI Components - Adrian Smith
- Simpler User Interfaces with Membrane - Adrian Smith
- Python: The Full Monty: A Tested Semantics for the Python Programming Language
- LLMail-Inject: Adaptive Prompt Injection Challenge
- The AI Con - How to Fight Big Tech’s Hype and Create the Future We Want
- Easel: A Pure Clojure IDE in the Spirit of Emacs - phronmophobic
- Introducing Visual and Interactive-Syntax realized (VISr) for ClojureScript (and JavaScript) - Leif Andersen
- Project Crema: Open World for Native Image - may be good news for Clojure/Babashka
- Classic Talk: Clojure for Java Programmers - Markus Agwin Kloimwieder
- The SciCloj CLI and the return of the REPL-prompt - Markus Agwin Kloimwieder
- How Does Retrieval Improve New Learning?
- Attacking Multimodal OS Agents with Malicious Image Patches - Lukas Aichberger, Alasdair Paren, Yarin Gal, Philip Torr, Adel Bibi
Recent advances in operating system (OS) agents enable vision-language models to interact directly with the graphical user interface of an OS. These multimodal OS agents autonomously perform computer-based tasks in response to a single prompt via application programming interfaces (APIs). Such APIs typically support low-level operations, including mouse clicks, keyboard inputs, and screenshot captures. We introduce a novel attack vector: malicious image patches (MIPs) that have been adversarially perturbed so that, when captured in a screenshot, they cause an OS agent to perform harmful actions by exploiting specific APIs. For instance, MIPs embedded in desktop backgrounds or shared on social media can redirect an agent to a malicious website, enabling further exploitation. These MIPs generalise across different user requests and screen layouts, and remain effective for multiple OS agents.
- The Gap Through Which We Praise the Machine - Fred Hebert
- Scicloj AI Meetup 8: Clojure-MCP - summary & recording - Video
- Designing Clobber: A Deep Dive into a Clojure-Powered Editor for Text and Code - phronmophobic
- 7gui with membrane - phronmophobic
- 7GUIs: A GUI Programming Benchmark
- Types Are Not Sets - James H. Morris, Jr.
- Building the Future of Clojure: Welcoming Christoph Neumann as Nubank’s First Clojure Developer Advocate
-
Vibe Coding With Clojure-MCP - Bruce Hauman, Luke Burton, Gene Kim
00:00 Introductions and Background
03:17 First AI Coding Agent Experiences
06:41 Discussing the Vibe Coding Book Project
14:09 Setting Up Clojure MCP Demo
41:45 Troubleshooting MCP Configuration
55:30 Live Demo: Working with Book Data Structure
01:31:08 Deep Dive: Clojure Edit vs S-Expression Editing
01:49:53 Reflections on the Demo Experience
01:52:00 OMG: Let’s go find/fix a crazy race condition! (And prove by showing contrapositive condition!)
02:15:25 Discussion: REPL-Driven Development and AI
02:28:24 Closing Thoughts and Future of AI Coding
-
On keys and their usage - Christian Johansen
-
Programming Languages - CSCI 1730 - Shriram Krishnamurthi (and others)
- Data Parallel Algorithms - Guy Steele (1990)
- What Is the Sound of One Network Clapping? A Philosophical Overview of the Connection Machine CM-5 - Guy Steele (1992)
A talk from 1992 that discusses the architecture of the Connection Machine CM-5, a supercomputer manufactured by Thinking Machines Corporation. The empsasis is less on "what" and "how" and more on "why".
- Learning Fennel from Scratch to Develop Neovim Plugins - Laurence Chen
- Game Development with Clojure/ClojureScript - 2016
- RSC for LISP Developers - Dan Abramov
- What if… we were taught transducers first? - Sean Corfield
- joinr's answer to "I have some questions about side effects and other things in Clojure"
- How to take off keyboard switches WITHOUT A TOOL
-
A break from programming languages - Alexis King
I have often reflected on the fact that, although I have many personal projects, I have never chosen Haskell for any of them. Not once. Whenever I need to write a little code to accomplish some task, it’s always Racket. This blog is in Racket. My personal shell utilities are in Racket. When I want to scrape a website or wrap some library, I do it with Racket. Haskell is a language I have always exclusively written professionally, and although I do very earnestly love many things about it, it is not so precious to me that I feel motivated to contribute to it out of passion alone.
- Advanced C: The UB and optimizations that trick good programmers - Eskil Steenberg
- How I program C - Eskil Steenberg
- Sharing specs between modules
- The Hallway Track: SciNoj Light #1 Data Analysis Stories - Timothy Pratley
- How to reuse a macro like a function - technosophist
- Clojure MCP Demo - Valtteri Harmainen - video of Metosin person using Bruce Hauman's clojure-mcp
- Datomic: this is not the history you're looking for - Valentin Waeselynck
- Programming at the REPL: Introduction - originally by Valentin Waeselynck(?)
- Glamorous Toolkit
- Shared library versions - Douglas Creager
- Claim that "the only way Emacs can use tree-sitter is via dynamic library"
- Documentation Groups
Emacs can list functions based on various groupings. For instance,
string-trimandmapconcatare “string” functions, soM-x shortdoc RET string RETwill give an overview of functions that operate on strings.The documentation groups are created with the
define-short-documentation-groupmacro. - LSP client in Clojure in 200 lines of code - vlaaad
- Bthreads: A Simple and Easy Paradigm for Clojure - Thomas Cothran
- REPL-able tests in Clojure - Phillip Lopes Mates
- Bruce Hauman Has Done It Again - Valtteri Harmainen
- Maintainability and Refactoring Impact of Higher-Level Design Features - Titus Winters - CppCon 2019
Multi-Step Refactoring
- YouTube Videos of Jay McCarthy Courses
- The Myth of the Objective - Oliver Powell
- brush - "bash/POSIX-compatible shell implemented in Rust"
- rusty_bash - "bash written with Rust"
-
The Unix process API is unreliable and unsafe
- Beyond process supervisors
- Mistakes to avoid when designing Unix dæmon programs - Jonathan de Boyne Pollard
- Beyond process supervisors
-
The received wisdom suggests that Unix’s unusual combination of fork() and exec() for process creation was an inspired design. In this paper, we argue that fork was a clever hack for machines and programs of the 1970s that has long outlived its usefulness and is now a liability. We catalog the ways in which fork is a terrible abstraction for the modern programmer to use, describe how it compromises OS implementations, and propose alternatives.
As the designers and implementers of operating systems, we should acknowledge that fork’s continued existence as a first-class OS primitive holds back systems research, and deprecate it. As educators, we should teach fork as a historical artifact, and not the first process creation mechanism students encounter.
-
On Read/Write Code - 6cdh
-
Keep Healthy - 6cdh
- Course Webpage for Compilers (P423, P523, E313, and E513) - has lecture video links (this course uses the "Essentials of Compilation" book and is taught by the author)
- Repository for course - has link to the book (also has links to lecture videos)
- “Clojure in Product. Would you do it again?” podcast
- My new hobby: watching AI slowly drive Microsoft employees insane - reddit thread
- Making Lambda Island Free
- On Extensibility - Laurence Chen
- Have any points from Clojure the bad parts been addressed? - reddit thread about a 2017 video
- This One Programming Choice Completely Changed These Tech Firms—Here's How - Artem Barmin
- Clojure vs Statically typed programming languages - discussion started by Amano Kenji at Clojurians Zulip
- The Shocking Secret About Static Types - Eric Elliot - posted to Clojurians Zulip by Amano Kenji
- How to programming fast - 6cdh
-
Writing a C Compiler in Clojure - Shagun Agrawal
-
Babashka Wiki | Self contained executable - no JVM needed
You can make a self-contained binary using an uberjar.
- Functional vs Data-Driven development: a Case-Study in Clojure & OCaml - Kiran Gopinathan
- Clojure from a Schemer's perspective - Peter Bex
- Programming People - LEFTOVER SALAD
- Sound Gradual Typing: Only Mostly Dead - Sam Tobin-Hochstadt
- Crash Course on Notation in Programming Language Theory - Jeremy Siek
- Crash Course on Notation in Programming Language Theory (Part 1) - Jeremy Siek - λC 2018
- Crash Course on Notation in Programming Language Theory (Part 2) - Jeremy Siek - λC 2018
- Dana Scott & Jeremy Siek - Theory & Models of Lambda Calculus: Typed and Untyped (Part 1) - Dana Scott and Jeremy Siek - λC 2018
- Teaching and Learning Compilers Incrementally - Jeremy Siek - thirteenth RacketCon (2023)
- Teaching and Learning Compilers Incrementally - Jeremy Siek - ICFP 2023
- The one ring problem: abstraction and our quest for power - Ted Kaminski
- Reproducible Data Science with Clojure - Kira Howe
- Clojure Tidy Tuesdays - Kira Howe
- ClojureTV video view analysis - Timothy Pratley
- Exploring probability distributions - Timothy Pratley
- rewriting a clojure file with rewrite-clj and babashka - oxalorg
- Musical Elitism is Everywhere - Tantacrul
- Non-goals Section of "P2137R0 Goals and priorities for C++"
- How to memorize the ASCII table - John D. Cook
- Don Syme on Type Classes for F# - Don Syme
- Resilient LL Parsing Tutorial - Alex Kladov (matklad)
- matklad's links - "A bunch of things I find myself repeatedly referring to in various discussions!"
- Demystifying Emacs’s Window Manager - Mickey Petersen
- The Emacs Window Management Almanac - Karthik Chikmagalur
- Emacs: control where buffers are displayed (the 'display-buffer-alist') - Protesilaos Stavrou
- 4 Keys to Motivating Your Unmotivated Students - Benjamin Keep
- Forgetting doesn't work like you think - Benjamin Keep
- Organizing Clojure code - A real problem? - Clojureverse discussion started by Eric Normand
- Organizing Clojure code with Functional Core, Imperative Shell - Shantanu Kumar
- What no one tells you about learning faster - Benjamin Keep
- List of software architecture styles and patterns
-
- Polylith in a Nutshell - James Trunk
- Polylith - the last architecture you will ever need - Joakim Tengstrand
- The Polylith architecture - Joakim Tengstrand
- Understanding Polylith through the lens of Hexagonal architecture - Joakim Tengstrand
- The origin of complexity - Joakim Tengstrand
- clojure-polylith-realworld-example-app - Clojure, Polylith and Ring codebase containing real world examples (CRUD, auth, advanced patterns, etc) that adheres to the RealWorld spec and API
- Production Systems
-
Vertical Slice Architecture - Jimmy Bogard
-
Onion / Clean -> Vertical Slice - Jimmy Bogard
I was on a large project with the person that came up with Onion architecture. It had worked on smaller (max 3 months) projects, as it didn’t cave under its own weight.
Fast forward 4 months and we realized that Onion (or Clean in its current incarnation) in fact cant scale with complexity or size. So we collapsed everything down and removed all the indirection.
We couldn’t remove all the needless indirection and abstraction, but most of the silliness. The next big project I was on, I removed all of the sacred cows to see what patterns would naturally emerge. The result was the Vertical Slice Architecture stuff, built on the ashes of defactoring Onion/Clean. I blogged about this journey in my Put Your Controllers On a Diet series almost a decade ago.
-
-
Difficulty in demonstrating benefits of architectures - nanothief
One large issue with demonstrating methodologies as clean architecture, microservices or object orientated programming is they only become beneficial at larger scales:
-
A program under 1000 LOC would rarely benefit from object inheritance; just use an if/switch statement
-
If you have less than 10 domain objects/database tables you probably don't need microservices or any of the "clean architecture" techniques; just make a single EF Core + ASP.net Core project.
This causes a catch 22 problem when writing examples of those ideas. If you make a simple example, then using such methodologies is actually a net negative to the project - the complexity they add is far greater than the benefit they provide. Newer developers may look at such an example and think they should do it the same way for their project even though it isn't necessary.
If you make a much larger example, then not only is it going to take a lot of time to complete, but it is going to make the example much harder to follow. It will likely not be tested well either (since an example app doesn't make you any money and isn't used anywhere there isn't any pressure to make it work well).
-
- The Onion Architecture : part 1 - Jeffrey Palermo
- Dependency inversion principle - doesn't seem like the best naming in the world...
- Hexagonal architecture - Alistair Cockburn - via archive.org
- The Onion Architecture : part 2 - Jeffrey Palermo
- The Onion Architecture : part 3 - Jeffrey Palermo
- The Onion Architecture : part 4 - Jeffrey Palermo
- What is the onion architecture? - Eric Normand
- A Simple Way to Learn Complex Skills - Benjamin Keep
- immutable-js - Immutable persistent data collections for Javascript which increase efficiency and simplicity.
- ramda - Ramda emphasizes a purer functional style. Immutability and side-effect free functions are at the heart of its design philosophy.
- Wiki - lots of resources
- Introducing Ramda - Buzz de Cafe
- Why Ramda? - Scott Sauyet
- Favoring Curry - Scott Sauyet
- Why Curry Helps - Hugh Jackson
- Hey Underscore, You're Doing It Wrong! - Brian Lonsdorf
- Thinking in Ramda - Randy Coulman
- Cookbook
- Qigong for Seniors - 5 Tips for Practice - Jeff Chand
- Listen to your body
- 70% rule
- Notice small improvements
- Coordinate body and breath
- Find flow
- The Knowledge That Underlies Everything | Tacit Knowledge - Benjamin Keep
- msvc-wine - Scripts for setting up and running MSVC in Wine on Linux
- A Decision Maker's Guide to Typed Functional Languages - Evan Czaplicki - GOTO 2024
- How visualizations help you learn (and how to use them) - Benjamin Keep
- Learning Beyond Facts | Conceptual Knowledge, Procedural Knowledge, and More - Benjamin Keep
- M-x window-swap-states - suppose there are two windows and one wants to swap the buffers...
- pacstall - An AUR-inspired package manager for Ubuntu
- Interactive language modeling visualization
- Scicloj - Recommended reading
- Desirable Difficulties - How Learning Works - Benjamin Keep
- Intro to Running LLMs Locally - Adrian Smith
- Clojure in new fields - opening up - Daniel Slutsky
- FRUSTRATED or BORED when learning? Try this. - Benjamin Keep
- What People Get Wrong About Deliberate Practice - Benjamin Keep
-
Finale - How Music Software Dies - Tantacrul - stopping at 1:09:32 might be better for one's health
-
Write Excel docs & PDFs with Clojure data, from higher level abstractions (tree, table) or via a manual grid specification.
-
Is deliberate practice all wrong? - Benjamin Keep
-
Qi Gong Routine for Back Pain - Easy - Jeffrey Chand
- Tai Chi Made Easy: Do I Really Need a Teacher? - David-Dorian Ross - some comments sort of along the lines of the "Practicing Versus Inventing With Contrasting Cases: The Effects of Telling First on Learning and Transfer" paper...
- Communicating in Types - Kris Jenkins - GOTO 2024
- Playground Wisdom: Threads Beat Async/Await - mentions Trio and Nathaniel J. Smith's article
- Secrets of Interleaved Practice - Benjamin Keep
- The interleaving effect: Mixing it up boosts learning - Steven C. Pan
- Does learning by doing actually work? - Benjamin Keep
-
Practicing Versus Inventing With Contrasting Cases: The Effects of Telling First on Learning and Transfer - Daniel L. Schwartz, Catherine C. Chase, Marily A. Oppezzo, and Doris B. Chin
In a review of the Third International Mathematics and Science Study, Hiebert and Stigler (2004) noted that instruction in the United States largely takes a form that we will label tell and practice (T&P). Teachers or texts first explain concepts and their formulaic expression, and then students practice on a set of well-designed problems. It is a convenient and efficient way to deliver accumulated knowledge. Nevertheless, many scholars are working on instructional alternatives. Catrambone (1998) summarized a prevailing concern with T&P: “Students tend to memorize the details of how the equations are filled out rather than learning the deeper, conceptual knowledge” (p. 356).
-
- Transfer of learning - Taking Learning Seriously
-
About - Taking Learning Seriously
In 1999, Lee Shulman, then President of the Carnegie Foundation for the Advancement of Teaching, published Taking Learning Seriously, a wonderful article in which he introduced the higher education community to three key concepts about learning. A gifted storyteller, Shulman described these as pathologies of learning, called them amnesia, fantasia, and inertia, and went on to explain how these pose ever present threats to derail new learning and undermine teaching.
The technical terms for these pathologies are forgetting, misconceptions, and lack of transfer of learning, respectively. As many decades of research have shown, they are significant cognitive obstacles in learning. For example, students may demonstrate knowledge of a topic soon after learning it, but then forget it quickly (amnesia). The preconceptions and misconceptions students bring to a new learning situation profoundly affect whether and what they will learn (fantasia). And, even though students can demonstrate knowledge of a topic on one day, they may not be able to use it the next (inertia).
-
- Babashka book - Michiel Borkent
- Babashka Babooka - Daniel Higginbotham
- Bash and Babashka equivalents
- Eliminating Left Recursion in Context-Free Grammars - David Broman
- x86-64 Assembly Programming: Hello World! - David Broman
- Clojure Beginner Resources
-
Poetry of Programming - Puzzle Based Introduction to Functional Programming
This is a Clojure programming course designed for non-programmers, in particular for Liberal Arts students with some college/high school algebra background. The course discusses the functional core of the language.
-
- Notes on neural networks from scratch in Clojure - Matthew Downey
- Three kinds of Clojure macros - Matthew Downey
- A Practical Guide to test.check - Robert Johnson
- Getting Started in Clojure Meta-Guide - Robert Johnson
- 4ever-clojure - 4clojure reincarnated
- Markdown (CommonMark?) Tutorial - spiffy interactive tutorial
- Using clojure.spec.alpha with babashka
- rich-comment-tests - RCT (inspired by RCF)
- Testing babashka scripts
-
Rascal: a Haskell with more parentheses - what Hackett used to be called
-
Problems with Excel - Joel Dueck
Spreadsheets work great for prototyping (although they still foster silent-error creep when used for complex models), and suck at operations when compared to suitable tools such as accounting software.
-
LLMs can't stop making up software dependencies and sabotaging everything
-
MMark - Strict markdown processor for writers
-
Scheme is a great choice for novice programmers, and it's a natural fit in Office - particularly Excel. However, there's more to this story!
The Professional edition of Accelerate for Microsoft 365 will target more seasoned or professional developers and enterprise use cases, and it will also offer Clojure as an alternative, mainly focused on microservices and linked-data integration. Clojure is another great, somewhat more modern, Lisp that has a stealthy presence on .NET, and of which most .NET developers are unaware.
- Clojure Brain Teasers Review
- CommonMark Spec
-
We can think of a document as a sequence of blocks—structural elements like paragraphs, block quotations, lists, headings, rules, and code blocks. Some blocks (like block quotes and list items) contain other blocks; others (like headings and paragraphs) contain inline content—text, links, emphasized text, images, code spans, and so on.
-
The following rules define list items:
[1] Basic case. If a sequence of lines Ls constitute a sequence of blocks Bs starting with a character other than a space or tab, and M is a list marker of width W followed by 1 ≤ N ≤ 4 spaces of indentation, then the result of prepending M and the following spaces to the first line of Ls, and indenting subsequent lines of Ls by W + N spaces, is a list item with Bs as its contents. The type of the list item (bullet or ordered) is determined by the type of its list marker. If the list item is ordered, then it is also assigned a start number, based on the ordered list marker.
Exceptions:
- When the first list item in a list interrupts a paragraph—that is, when it starts on a line that would otherwise count as paragraph continuation text—then (a) the lines Ls must not begin with a blank line, and (b) if the list item is ordered, the start number must be 1.
- If any line is a thematic break then that line is not a list item.
[2] Item starting with indented code. If a sequence of lines Ls constitute a sequence of blocks Bs starting with an indented code block, and M is a list marker of width W followed by one space of indentation, then the result of prepending M and the following space to the first line of Ls, and indenting subsequent lines of Ls by W + 1 spaces, is a list item with Bs as its contents. If a line is empty, then it need not be indented. The type of the list item (bullet or ordered) is determined by the type of its list marker. If the list item is ordered, then it is also assigned a start number, based on the ordered list marker.[3] Item starting with a blank line. If a sequence of lines Ls starting with a single blank line constitute a (possibly empty) sequence of blocks Bs, and M is a list marker of width W, then the result of prepending M to the first line of Ls, and preceding subsequent lines of Ls by W + 1 spaces of indentation, is a list item with Bs as its contents. If a line is empty, then it need not be indented. The type of the list item (bullet or ordered) is determined by the type of its list marker. If the list item is ordered, then it is also assigned a start number, based on the ordered list marker.
[4] Indentation. If a sequence of lines Ls constitutes a list item according to rule #1, #2, or #3, then the result of preceding each line of Ls by up to three spaces of indentation (the same for each line) also constitutes a list item with the same contents and attributes. If a line is empty, then it need not be indented.
[5] Laziness. If a string of lines Ls constitute a list item with contents Bs, then the result of deleting some or all of the indentation from one or more lines in which the next character other than a space or tab after the indentation is paragraph continuation text is a list item with the same contents and attributes. The unindented lines are called lazy continuation lines.
Going through the corresponding examples in the spec may be helpful in understanding the text above.
-
A list is a sequence of one or more list items of the same type. The list items may be separated by any number of blank lines.
-
Parsing has two phases:
-
In the first phase, lines of input are consumed and the block structure of the document—its division into paragraphs, block quotes, list items, and so on—is constructed. Text is assigned to these blocks but not parsed. Link reference definitions are parsed and a map of links is constructed.
-
In the second phase, the raw text contents of paragraphs and headings are parsed into sequences of Markdown inline elements (strings, code spans, links, emphasis, and so on), using the map of link references constructed in phase 1.
At each point in processing, the document is represented as a tree of blocks. The root of the tree is a document block. The document may have any number of other blocks as children. These children may, in turn, have other blocks as children. The last child of a block is normally considered open, meaning that subsequent lines of input can alter its contents. (Blocks that are not open are closed.)
-
-
- Data.Fressian - Stuart Halloway - Clojure/conj 2013
-
CommonMark List Looseness / Tightness
A list is loose if any of its constituent list items are separated by blank lines, or if any of its constituent list items directly contain two block-level elements with a blank line between them. Otherwise a list is tight. (The difference in HTML output is that paragraphs in a loose list are wrapped in <p> tags, while paragraphs in a tight list are not.)
-
Beyond Markdown - John MacFarlane
-
- Road to 1.0 and beyond? - not going to be ready soon...
-
Structured Procrastination - via John MacFarlane
-
The 7 Building Blocks of a Powerful Qi Gong Practice: A Step-by-Step Guide - Lee Holden
- Breathwork
- Activation
- Warm Up
- Stretch
- Flow
- Posture
- Meditation
-
Organizing Functional Code for Parallel Execution; or, foldl and foldr Considered Slightly Harmful - (video at vimeo) - (video at youtube) - Guy L. Steele Jr. - ICFP 2009
Get Rid of Cons!
-
How to Think about Parallel Programming: Not! - (video at youtube) - (transcript) - Guy L. Steele Jr. - Strange Loop 2010
-
This is why we can't have safe cancellation points
The last piece of background before we can understand the debate about signal handling is that musl has a solution for this difficulty that is "clever" if you ask Andy Lutomirski and "a hack" if you ask Linus Torvalds.
-
The Impedance Mismatch is Our Fault - (video at youtube) - Stuart Halloway - goto; conference 2012
- Mark generated files with @generated marker
- spec-tools
- Debugging with the Scientific Method - Stuart Halloway - Clojure/conj 2015
- Clojure in the Field - 2013 - (video at youtube) - Stuart Halloway (with beard) - Devnexus 2013
- Clojure in the Field - 2010 - (video at youtube) - Stuary Halloway - QCon 2010
-
Spec-ulation Keynote - Rich Hickey - Clojure/conj 2016
-
Thoughts about Spec-ulation - Edward Z. Yang
Accretion is not a silver bullet... if you believe in data hiding. In his talk, Rich implies that backwards compatibility can be maintained simply by committing not to "remove things". As a Haskeller, this sounds obviously false to me: if I change the internal representation of some abstract type (or even the internal invariants), I cannot just load up both old and new copies of the library and expect to pass values of this type between the two. Indeed, the typechecker won't even let you do this even if the representation hasn't changed.
But, at least for Clojure, I think Rich is right. The reason is this: Clojure doesn't believe data hiding! The prevailing style of Clojure code is that data types consist of immutable records with public fields that are passed around. And so a change to the representation of the data is a possibly a breaking change; non-breaking representation changes are simply not done.
- Extremist Programming - Edward Z. Yang
- Do not use version ranges in project.clj - Nelson Morris
- Dependency Heaven - Alex Miller - EuroClojure 2017 - tools.deps
- Composable Tools - Alex Miller - Clojure/conj 2019 - tools.deps
- Clojure's deadly sin - Oleksandr Yakushev - about Clojure's laziness
- Clojure: Enemy of the State - (video at youtube) - Alex Miller - ETE Conference 2013(?) - talk from Alex before he joined Cognitect
- Exploring a Legacy Clojure Codebase - (video at youtube) - Jon Neale, Ragnar Dahlen - FP Days 2014
- Dealing with legacy code in Clojure - Isabella Pimentel, Daouda Traore - Clojure South 2019
- Using spec to Transparently Replace a Legacy System - Daniel Solano Gómez - Clojure/West 2017
- Living With Legacy Code - James Reeves - Heart of Clojure 2024
- Transform MS Office into Cloud-savvy Linked Data Microservices With Clojure on .NET - Bob Calco - London Clojurians 2022
- Solving New School with the Old School (Clojure) - (video at youtube) - Jearvon Dharrie - QCon New York 2018 - has some spec coverage
- Lessons Learned; the Nice and Accurate Counsel of Alex Miller, Programmer - Alex Miller - ClojuTRE 2019 - has post-may-be-not bits on clojure.spec
- BatBadBut: You can't securely execute commands on Windows - 2024-04
-
On Windows, batch files (*.bat or *.cmd) may be launched by the operating system in a system shell regardless of the arguments passed to this library. This could result in arguments being parsed according to shell rules, but without any escaping added by Python. If you are intentionally launching a batch file with arguments from untrusted sources, consider passing shell=True to allow Python to escape special characters. See gh-114539 for additional discussion.
via: https://docs.python.org/3/library/subprocess.html#security-considerations
-
- Everyone quotes command line arguments the wrong way - 2011
- Clojure 1.2 Protocols - Stuart Halloway - 2010
- Introduction to Clojure Protocols Part 1 - Eric Normand - 2016
- Macros: Why, When, and How - video at youtube - Gary Fredericks - ClojureWest 2013
- Swearjure - video at youtube - Gary Fredericks - ClojureWest 2013
-
Swearjure - Clojure without alphanumerics - Jean Niklas L'orange
-
Swearjure is Turing Complete - Jean Niklas L'orange
-
:?!$ is the platform name for Swearjure, whereas :clj represents Clojure proper.
-
- Why Concatenative Programming Matters
- Gershwin: Stack-based, Concatenative Clojure - video at youtube (audio improves after a bit) - Daniel Gregoire - StrangeLoop 2013
- How to Program Racket: a Style Guide
-
93: Diversity of Approach (David Nolen) - Giant Robots Smashing Into Other Giant Robots
-
The Disconnect Between AI Benchmarks and Math Research
Current AI systems boast impressive scores on mathematical benchmarks. Yet when confronted with the questions mathematicians actually ask in their daily research, these same systems often struggle, and don't even realize they are struggling.
-
The Cultural Divide between Mathematics and AI
To understand the cultural divide, we must first understand what mathematics truly is. Paul Halmos captured this beautifully in I Want to Be a Mathematician (1985): "The youngster who is presented with a proof of a difficult theorem admires the achievement and is left wondering: How was this proof found? How could I invent something like this? No hints are given in the books." This gets at a fundamental truth: mathematics isn't primarily about finding proofs; it's about building understanding.
May be actually teaching about how to solve things directly from an early age might have a positive impact?
-
Exploring the Methodology of “A performance comparison of Clojure and Java” by Gustav Krantz - joinr
-
We are a small team of nerds sharing writings on the internet. If you think about it, that’s how the internet started, before its commercialization. Remember the 90s? (Ok, some of you don’t.) Not that we are against commercial activity per se — we’re not. However, this is the way that we remember the internet when it first started, and we’re proud to join the few who are still keeping, in effect, this tradition alive.
-
-
clojure.spec - Rich Hickey - LispNYC 2016 - transcript
As you build larger systems, you realize that so much happens at run time, and so many things happen over wires. And there is sort of presumption in many languages that the type system is going to solve every problem. It is just not practical. There is the famous adage about every large C program has a little crappy Lisp implementation inside it. That is not my adage. That is an old one. But it does, and I used to write crappy Lisps inside C++ programs.
And after you have done that for a while, you realize: I am doing this because I do not have sufficient flexibility. My systems are large. I need them to be malleable. I cannot afford to change the whole world whenever some small thing changes.
So when you get to the dynamic edges of those programs, you end up doing this stuff. In Clojure, we do it this way all of the time. But there are still edges to our programs, and if you do something in the language that is just about the language, you run up against the wire, and then it stops helping you.
-
Agility & Robustness: Clojure spec - (video at youtube) - Stuart Halloway - Strange Loop 2016
- Austin Clojure Meetup Version of Talk - Stuart Halloway - Austin Clojure Meetup 2016
-
Clojure Spec: Expressing Data Constraints without Types - (video at youtube) - Alex Miller - Emerging Technologies Conference 2017
- Some More Books that Use Racket
- Animated Problem Solving - Marco T. Morazán
- Animated Program Design - Marco T. Morazán
- Programming-Based Formal Languages and Automata Theory - Marco T. Morazán
- Lambda Calculus and Lisp, part 1
- Lambda Calculus and Lisp, part 2 (recursion excursion)
- We don't need startups, we need Digital-Mittelstand
-
Why do you say that static type systems are a "premature optimization"? - Hacker News discussion
- auggiesrose
-
Annotated Version of Boole's Algebra of Logic 1847 - via archive.org
-
Archival Storage - David Rosenthal
-
Practical UX for startups surviving without a designer - Tibi Iorga
-
Why numbering should start at zero - E. W. Dijkstra Archive
-
We present a calculational approach to the design of type checkers, showing how they can be derived from behavioural specifications using equational reasoning.
- auggiesrose
-
Answer to "How to make a responsive and interactive image map using SVG" - Stack Overflow
- Answer to "How do I add alternative text to an object?" - Stack Overflow
- Answer to "Do I use <img>, <object>, or <embed> for SVG files? - Stack Overflow
-
CS 450: Structure of Higher Level Languages - Tiago Cogumbreiro - Spring 2021
-
Netsec Return-Oriented Programming - Matthew Flatt
-
How Data Abstraction changed Computing forever - Barbara Liskov - TEDxMIT
- A design methodology for reliable software systems - Barbara Liskov - 1972
-
In formal reasoning, in particular in mathematical logic, computer algebra, and automated theorem proving, a fresh variable is a variable that did not occur in the context considered so far. The concept is often used without explanation.
-
Temporary symbol creation section of Hygienic Macro Wikipedia Page
In some programming languages, it is possible for a new variable name, or symbol, to be generated and bound to a temporary location. The language processing system ensures that this never clashes with another name or location in the execution environment. The responsibility for choosing to use this feature within the body of a macro definition is left to the programmer. This method was used in MacLisp, where a function named
gensymcould be used to generate a new symbol name. Similar functions (usually namedgensymas well) exist in many Lisp-like languages, including the widely implemented Common Lisp standard and Elisp.
-
Identifying and Correcting Programming Language Behavior Misconceptions - Kuang-Chen Lu - OOPSLA24
-
What Happens When Students Switch (Functional) Languages (Experience Report) - Kuang-Chen Lu - ICFP'23
-
Annotation tools for the web. Select text, images, or (nearly) anything else, and add your notes.
-
On the Expressive Power of Programming Languages - Matthias Felleisen
- Expressiveness - portion from "Principles of Programming Languages" by Matthias Felleisen
- Turing is Useless
- The mechanical evaluation of expressions - Peter J. Landin - paper that introduces the term "syntactic sugar" (the original meaning of which may be a bit different from the current one?)
- Slides from CS 7194 at Cornell - CS 7194 (Spring 2019) Great works in Programming Languages
- Expressiveness - portion from "Principles of Programming Languages" by Matthias Felleisen
-
Rhombus: A New Spin on Macros without All the Parentheses - Matthew Flatt - OOPSLA23
-
On the Expressive Power of Programming Languages - Shriram Krishnamurthi - PWLConf 2019
-
Always Be Composing - Zach Tellman - Clojure/conj 2014
-
Secure and fast microVMs for serverless computing
-
"The Value of Values" transcript - Rich Hickey
-
Ep 042: What does it mean to be 'data-oriented'? - Functional Design in Clojure
-
What is commutativity and why is it so useful in distributed systems? - Eric Normand
When you have distributed systems, one of the most costly, expensive things you can do between those nodes and the system is to communicate, so that you can coordinate.
You don't want to be waiting for each other. You don't want to be waiting for messages to travel across the network. The whole point is that you can work independently. [...]
We want to reduce the interdependence of the ordering of our operations. We want to make it so that the order the work gets done in doesn't matter. That's what commutativity is.
-
To ensure eventual convergence the functions should fulfill the following properties: The merge function should compute the join for any pair of replica states, and should form a semilattice with the initial state as the neutral element. In particular this means, that the merge function must be commutative, associative, and idempotent. The intuition behind commutativity, associativity and idempotence is that these properties are used to make the CRDT invariant under package re-ordering and duplication.
-
Applications of Continuations - Daniel P. Friedman
-
markdown editors - because working with gists for content that gets longer is terrible
- markdown-mode - emacs mode, not as pretty, but seems to work better than alternatives tested below
- ghostwriter - dark mode out-of-the-box, but handling of links to local files not so great?
- ReText - no issue with links, but dark mode doesn't work here
- Marker - A gtk3 markdown editor - mostly good except problems with navigating to local files?
-
Tidy Data - Hadley Wickham
-
Speech-to-text, text-to-speech, speaker diarization, speech enhancement, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, HarmonyOS, Raspberry Pi, RISC-V, x86_64 servers, websocket server/client, support 11 programming languages
-
Netsec Tools for Executables - Matthew Flatt
-
Smooth, iterative deepening - Niko Matsakis
The idea is that a user’s first experience should be simple–they should be able to get up and going quickly. As they get further into their project, the user will find places where it’s not doing what they want, and they’ll need to take control. They should be able to do this in a localized way, changing one part of their project without disturbing everything else.
Smooth, iterative deepening sounds easy but is in fact very hard. Many projects fail either because the initial experience is hard or because the step from simple-to-control is in fact more like scaling a cliff, requiring users to learn a lot of background material. Rust certainly doesn’t always succeed–but we succeed enough, and I like to think we’re always working to do better.
-
Why getters and setters are terrible - Eric Normand
-
What is a calculation? - Eric Normand - some operations that don't have side-effects are not functions in some languages (e.g.
+in javascript), having a term that can capture these types of things along with pure functions might be less confusing...hence "calculation"
- Extensible Compilation - Will Crichton
- Integrating Typed and Untyped Code in a Scripting Language
- Terra - a low-level system programming language that is embedded in and meta-programmed by the Lua programming language
- SujarJ
- Safely Composable Type-Specific Languages
- What is idempotence? - Eric Normand
- What is an inverse, and why is it useful? - Eric Normand
- Why don't I encounter more type errors when programming in Clojure? - Eric Normand
- Netsec Buffer Overflow - Matthew Flatt
- Disable the GitHub notification dot
- Dashboard: My filters - to bring something back that has been blocked, remove appropriate line(s) from the Dashboard's "My filters" pane.
- Dashboard - the Dashboard can be accessed by the gear icon that shows up on the floating dialog(?) that appears when uBlock Origin's icon (the web browser toolbar one) is clicked
- Dashboard: My filters - to bring something back that has been blocked, remove appropriate line(s) from the Dashboard's "My filters" pane.
- uBlock Origin
- Zooming Per Tab
- Grokking Simplicity - Eric Normand
- What is an action? - Eric Normand
- Runnable Specifications - Eric Normand - book draft bits
- Gradual Programming - Will Crichton
- Empirical Analysis of Programming Language Adoption - Leo A. Meyerovich, Ariel Rabkin - OOPSLA 2013
- Designing and evaluating programming languages: Dagstuhl trip report - Amy J. Ko
- Why we're no longer using Core.typed - CircleCI Blog - 2015?
- Pyret docs
- Visualizing and Explaining Rust's Ownership Model - Will Crichton - IWACO 2024
- How to Make Mathematicians Into Programmers (And Vice Versa) - Will Crichton - Topos Institute Colloquium (2024-08-22)
- A Grounded Conceptual Model for Ownership Types in Rust - Will Crichton - OOPSLA2 2023
- The Art and Science of Teaching Rust - Will Crichton - RustConf 2023
- Type-Driven API Design in Rust - Will Crichton - Strange Loop 2021
- Notional Machines
- WebAssembly from the Ground Up - Mariano Guerra and Patrick Dubroy
- Yong Jie's Notes on Elements of Clojure - Yong Jie
- Data-Centeric Computing: The Educational Horizon Expands [13:39-] - Kathi Fisler - 10th RacketCon (2020)
- QA with Matthias Felleisen [31:48-] - 10th RacketCon (2020)
- State of Racket (2020) [11:14-] - 10th RacketCon (2020)
- Town Hall (2020) [41:41-] - 10th RacketCon (2020)
- Netsec Wi-Fi Security Series - Matthew Flatt
- ninja: a simple way to do builds - Julia Evans
- Perception and Action - An Introduction to Clojure's Time Model - video at youtube - Stuart Halloway - QCon 2011
- Lambda Calculus
- Writing a Nanopass Compiler - Andy Keep - Clojure/conj 2013
- Systematic Program Design - Gregor Kiczales - despite what the page says, the tab content (e.g. Design Recipes, Language, etc.) is visible and the videos are available via youtube
- Adventure with Types in Haskell (Lecture 2) - Simon Peyton Jones - Oregon Programming Languages Summer School 2013
- Adventures with types - Simon Peyton Jones - Functional Programming Exchange 2013
- CaSE podcast - Problem Solving and Clojure 1.9 - transcript - Joy Clark interviews Rich Hickey - 2018
- Effective Programs - Rich Hickey - Clojure/conj 2017
- Striving to Make Things Simple and Fast - Phil Bagwell - Clojure/conj 2011
- Generic Collections: One Interface to Rule Them All - Alexis King - fifth RacketCon (2015)
- Why Black Boxes are so Hard to Reuse - Gregor Kiczales - 1994
- The Mapping Dilemma - David Nolen - Strange Loop 2011
- Introduction to Systematic Program Design - Gregor Kiczales
- Strategies and Technology for Teaching HtDP at Scale - Gregor Kiczales - fourteenth RacketCon (2024)
- Gregor Kiczales CV
- COMEFROM (vs GOTO)
- Right Shifts section of Left shift and right shift operators: << and >> - what happens for negative numbers...
- From Bronze to GM in miniKanren! Episode 1 - William Byrd
- The Mozilla Firefox New Terms of Use Disaster: What Actually Happened?
- Machine to Machine Communication and Building the Human UI on top - Rich Hickey - what about the repl...
- The Language of the System - Rich Hickey - Clojure/conj 2012
- Functional Geekery Podcast - Steven Proctor
- What Sucks about Clojure and Why You'll Love It Anyway - video at youtube - Chas Emerick - Clojure/West 2012
- Clojure's Solutions to the Expression Problem - video at youtube - Chris Houser - Strange Loop 2010
- Functional Geekery - Matthew Flatt Episode 24
- thalia - A collection of documentation for Clojure symbols
- Netsec Confidential Routing - Matthew Flatt
- Thinking in Data - video at youtube - Stuart Sierra - Clojure/West 2012
- Netsec TLS - Matthew Flatt
- Design, Composition, and Performance - Rich Hickey - not down on "iterative" (though in 2023's "Design in Practice" talk, seemed different)
- What if data is a really bad idea? - Eric Normand
- History section of Information History Wikipedia page
- Why you shouldn't hide your data - Eric Normand
- https://docs.racket-lang.org/rackjure/index.html#(part._dict-init) - data literals for dictionaries in rackjure
- Simple Made Easy - Rich Hickey - on pattern matching dislike
- Threading with Style - Stuart Sierra
- Simple Made Easy - Rich Hickey - Parens are Hard!
- https://github.com/lilactown/helix
- The Functional Final Frontier - David Nolen
- A Teaching Language for Specification - similar bits to spec mentioned
- Why is data so powerful? - Eric Normand
- Clojure, Made Simple - Rich Hickey - bit about react dev thanking RH
- Programming is (should be) fun! - Gerald Sussman
- Matt Might
- Om Next - David Nolen
- Hello Om Next! - David Nolen
- Fulcro vs. Stock Om Next
- David Nolen - TheReadME Project
- "The Most Beautiful Program Ever Written" - William Byrd - Papers We Love
- The Shape of a Mars Mission - Maciej Cegłowski
- From Bronze to GM in miniKanren! Episode 1 - William Byrd
- Cognicast Episode 63 - Will Byrd
- Tool for generating Clang's JSON Compilation Database files for make-based build systems
- Lisp in WebAssembly - implemented in Zig
- Cognicast Episode 19 - Rich Hickey - Codeq
- Janet hygiene is not hygiene - John Cowan (R7RS Large person)
- Incrementally Developing Support for Racket to Wasm Compilation - Adam Perlin - 13th RacketCon (2023)
- History Section of Expression problem Wikipedia page - mentions PLT people such as Shriram Krishnamurthi
- Northeastern’s redesign of the Khoury curriculum abandons the fundamentals of computer science
- Comment at loste.rs
- Python! - Matthias Felleisen
- Fear of Macros - Greg Hendershott
- More: Systems Programming with Racket - Matthew Flatt
- Clojure Turns 15 - Rich Hickey, Stuart Halloway, Alex Miller, Michael Fogus, etc. - Building Nu Engineering Meetup #03
- 26 programming languages in 25 days, Part 2: Reflections on language design - Matt Might
- Resigning as Asahi Linux project lead
- Interview With Rich Hickey by Michael Fogus
- Watching a Language Grow - Chris Houser, Michael Fogus - conj 2017
- Make a fun, infinitely replayable game in 5 minutes with GPT-4 - Matt Might
- the DrScheme repl isn’t the one in Emacs - Matthias Felleisen
- Racket Metaprogramming - Matthew Flatt - Clojure/West 2013
- Submodules in Racket: You Want it When, Again? - Matthew Flatt
- https://docs.racket-lang.org/raco/decompile.html#(part._.A.P.I_for_.Marshaling_.Bytecode - term "marshal" used for serialization in racket's docs
- Go Module Mirror served backdoor to devs for 3+ years
- Scheme Workshop Keynote: Type-driven Development via Scheme in Idris 2 - Edwin Brady - ICFP 2019 - Code more readable starting around 9:30
- Dark Pattern Wikipedia page
- Zig; what I think after months of using it
- Deep dive into LLMs like ChatGPT by Andrej Karpathy (TL;DR) - a bit meh (treats "hallucination" as a relevant idea) but possibly has some useful bits
- Law of the instrument Wikipedia page
- Effort justification Wikipedia page
- AI’s Ostensible Emergent Abilities Are a Mirage
- Common arguments regarding emergent abilities
- Contracts and Gradual Types 1 - Sam Tobin-Hochstadt - OPLSS 2017
- Dependent Types in the Idris Programming Language 1 - Edwin Brady - OPLSS 2017
- Introduction to Haskell Typeclasses
- Racket & Typed Racket: the power of extensibility - Sam Tobin-Hochstadt - PolyConf 15
- Hytradboi 2025 - one of the speakers is Andrew Kelley
- Rust's Most Unrecognized Contributor
- Composable and Compilable Macros - Sam Tobin-Hochstadt - Papers We Love
- From Scheme to Typed Racket - Sam Tobin-Hochstadt - ICFP 2017
- The Two Memory Models - Anders Schau Knatten
- Cognicast Episode 61 - Matthew Flatt
- Cognicast Episode 84 - Matthew Flatt
- Cognicast Episode 108 - Sam Tobin-Hochstadt
- The State of Racket (2024) - Sam Tobin-Hochstadt - 14th RacketCon (2024) - Sam has been to all of them (may be he started RacketCon?)
- Calvin Rose profile page on Quora
- The State of Racket (2023) - Sam Tobin-Hochstadt - 13th RacketCon (2023) - on the Chez Scheme merge
- Governing Rust - Aaron Turon - 9th RacketCon (2019)
- Rash: The Reckless Racket Shell - William Hatch
- Rewriting Roc's Compiler in Zig - Richard Feldman
- Intro to Fugato - David Nolen - London Clojurians (2025)