Home Menu ↓

Blog

Robin Sloan on Tolkien in his latest newsletter:

Tolkien, for all his vaunted designs, only got to The Good Stuff when he was IN it, really working the text of the novels (or novel, if you consider The Lord of the Rings one big book). He could not worldbuild his way into a workable story; he had to muddle and discover and revise, just like the rest of us….

In a single stroke, we get: a mythic backstory, a grand MacGuffin, a sense of language and history, the sublimely satisfying train of magic numbers — three … seven … nine … ONE! — plus something graphically weird and beautiful on the page.

It’s all just tremendous — the perfect kernel of Tolkien’s appeal.

And, guess what:

Not only was the inscription missing from the early drafts of LOTR … the whole logic of the ring was missing, too. In its place was a mess. The ring possessed by Bilbo Baggins was one of thousands the Dark Lord manufactured, all basically equivalent: they made their wearers invisible, and eventually claimed their souls. They were like cursed candies scattered by Sauron across Middle-earth.

Tolkien’s explanation of this, in his first draft, is about about as compelling as what I just wrote.

It’s fine, as far as it goes; he could have made it work, probably? Possibly? But it is not COOL in the way that the final formulation is COOL. It has none of the symmetry, the inevitability. It does only the work it has to do, and nothing else. It is not yet aesthetically irresistible.

There are several revised approaches to “what’s the deal with the ring?” presented in The History of The Lord of the Rings, and, as you read through the drafts, the material just … slowly gets better! Bit by bit, the familiar angles emerge. There seems not to have been any magic moment: no electric thought in the bathtub, circa 1931, that sent Tolkien rushing to find a pen.

It was just revision.

I find this totally inspiring.

I find it totally inspiring, too.

This reminds me of this Guy Gavriel Kay quote which I’ve posted before and will now post again:

I learned a lot about false starts in writing. I mean that in a really serious way. His [Tolkien’s] false starts. You learn that the great works have disastrous botched chapters, that the great writers recognise that they didn’t work. So I was looking at drafts of The Lord of the Rings and rough starts for The Silmarillion and came to realise they don’t spring full-blown, utterly, completely formed in brilliance. They get there with writing and rewriting and drudgery and mistakes, and eventually if you put in the hours and the patience, something good might happen. That was a very, very early lesson for me, looking at the Tolkien materials. That it’s not instantly magnificent. That it’s laboriously so, but it gets there. That was a huge, huge, still important lesson.


Reply via email

After holding out for a few months, I’m finally on Mastodon at @bencrowder@mastodon.social. I’ve wanted to provide a more lightweight way for readers to respond to posts (email can feel a little too formal sometimes) without adding comments to the site itself, and I think this is it.


Reply via email

Recent nonfiction reads

  • The Rise and Fall of Ancient Egypt, by Toby Wilkinson. While it admittedly took me four months to read this (slow going because of all the less familiar names), I liked it a lot. How vast a time period this is — and yet still so inconsequentially small from a geological/cosmological perspective. I didn’t realize it took three years (speaking of mere blips) from the discovery of Tutankhamun’s tomb to when they finally opened his sarcophagus. Also didn’t know that pharaoh originally meant “palace,” or how often pharaohs repurposed the materials from previous pharaohs’ tombs. (All the time.) I took Middle Egyptian and Coptic in college and reading this book reminded me of that and really made me miss studying dead languages. I need to make time for that again, somehow.
  • Saints volume 3. Loved it. These were mostly parts of Church history I was less familiar with, so I enjoyed filling in those gaps. It was also fascinating to see how various world events affected people in the Church in different countries. Looking forward to the next volume. In the meantime, I’ve been dipping into the global histories.

Recent fiction reads

  • The Justice of Kings, by Richard Swan. I really liked this. The legal/judicial aspect was right up my alley and the fantastical/horror elements also worked well for me. The writing’s great, too. Immediately bought the sequel, which came out a few weeks ago.
  • Never Let Me Go, by Kazuo Ishiguro. Didn’t like it anywhere near as much as Remains of the Day or Buried Giant. It felt a lot more like Klara and the Sun, which I also didn’t like all that much. (This type of story doesn’t appeal to me. I need to stop forgetting this.) Also, I went in having heard there was a twist and…there wasn’t one. Not really.

Reply via email

Links #67

Inigo Quilez on making a 3D character with math. Impressive.

Paul Butler on the bull case for Rust on the web (via WebAssembly, for high-performance apps). Seems reasonable.

Rayon, a web app for collaborative space design. (Space meaning rooms in buildings.) Uses Rust, as mentioned in the previous link. Looks nice.

Jennifer Ouellette about a bionic finger that can see things beneath a material’s surface. Intriguing.

Jon Stokes on AI. A fairly positive take. I don’t know how much I agree with it, but I found it interesting.

Charles Chen on React being the new IBM, in the sense that no one ever got fired for choosing React, in spite of it not performing as well as other frontend frameworks.

Max G. Levy on edgeless lab-grown skin. Cool.

Austin Kleon on books as toys. I like this.

Dave Gauer on Forth. Enjoyed this. Looking forward to learning Forth, too.

Wayfare is serializing The Five Books of Jesus by my friend James Goldberg, with lovely art by Sarah Hawkes.

Winners of the visitors’ choice awards from the Church’s 12th International Art Competition.

Cassandra Willyard on how gut microbes could drive brain disorders. Still early on, but if there’s anything to it, wow.

Zach Caceres on plastic roads. Intriguing!

Rachel Binx on the unbearable sameness of the modern web, referring primarily to common component libraries.

Lingua Latina Legenda, an open-source Latin textbook.

Henrik Karlsson on blog posts being very long and complex search queries to find fascinating people and make them route interesting stuff to your inbox. I like this idea, and I really like meeting new people via this blog (or via their blogs for that matter).

Foone Turing made a cube keyboard. Ha.

Marcin Wichary on Dana Sibera’s alternate-computing-history art. Love these.

Rocky Bergen’s papercraft models of old computers.

Jennifer Senior on how people often think they’re younger than they really are. Yup. Lately I’ve felt around eight or nine years younger than I am. (And this in spite of really liking my actual age.)

Amy Goodchild on using ChatGPT to implement Sol Lewitt’s procedural wall drawings. Interesting, but ChatGPT’s output is also kind of disappointing here.

Chris Loer on Felt’s move to MapLibre for rendering. Cool.

MarioGPT, generating Mario levels via textual descriptions.

Mould Rush, an online game involving real molds in real petri dishes. Ha.

Grant Handy on writing a simple first-person raycasting game in Rust (ala Wolfenstein 3D).

Charlotte Hu on mushroom-based computing. Oh so weird but also fascinating. I wonder how much of the future of computing will be biological like this.

GB Studio, a retro game creator for making Game Boy games, kind of like the game creators for Pico-8 and other fantasy consoles. I never actually use these, but they look fun and eight-year-old Ben would have been all over this.

Pedro Cattori on snake case being the best case. The older I get, the less I think I care about this kind of thing (other than keeping it consistent across the codebase, which seems like a baseline for maintaining sanity).

Eggspensive, a map showing the price of eggs across the U.S. (I should have posted this earlier!)

Jennifer Ouellette on squid skin as an inspiration for making new types of windows. Wow. I love seeing biologically inspired tech that’s more sustainable than what we used to use.

Carl Zimmer on eight previously unknown populations of humans in prehistoric Europe. Oh how I’d love to be able to look back and see what life was like for early humans.

Jared White on the great gaslighting of the JavaScript era. Feisty. I largely agree though nowhere near as vehemently.

Cole Peters on redefining developer experience. Fully agree that user experience matters far, far more than developer experience. Also agreed that the sprawling array of tools a frontend engineer needs to stay on top of these days is…a bit much, and very much agreed about focusing on web platform fundamentals.

Anna Fitzpatrick on how parking lots ruin cities.

Gaurav Sood on Iwaya Giken trying to democratize space tourism. I love reading about space, but dang — zero interest here in going up into space myself. Especially under a flimsy balloon. (Hello, acrophobia.)

Smithsonian Open Access. Lots of Creative Commons images available for use.

Nannou, a Rust creative-coding framework. The code examples look pretty good, actually — easy to read and reason about.

Dan Wang’s 2022 letter. Fascinating read about last year’s lockdowns in China among other things. The bits at the end about books and food were also quite interesting.


Reply via email

Learning Elixir, part 2

Continuing on with working my way through the Elixir introduction. I’m trying to figure out how to keep this from taking forever (especially since I’m only doing this in little bits of free time here and there), so there’ll be a bit less commentary than last time.

Binaries, strings, and charlists

I love that you can use ? to show the code point in front of a character literal. (Not that ord("a") or "a".charCodeAt(0) is all that harder.)

Pattern matching on binaries and bitstrings is good.

Keyword lists and maps

I like being able to use atoms as the keys in keyword lists and maps. It’s a small thing, but it’s nice.

Ooh, do-blocks are just syntactic sugar. (Apparently I really like it when control flow statements are just special syntax on top of lower-level constructs like keyword lists.)

Modules and functions

Okay, like in Rust, modules are named in code (with defmodule) rather than named implicitly by whatever the containing file is called. I think I like that it’s explicit.

I don’t think I’ve seen private functions specified by changing the function definition keyword (def to defp in this case). Usually what I’ve seen is a separate keyword (private) or private-by-default (Rust) or capitalization change (Go) or mere convention with underscores (Python). Cool.

Ooh, guards on function definitions. I like this. Function overloading++. (Har har.) I know you can get the same behavior with conditional statements in a single function body, and that’s probably less verbose, but still. This seems easier to reason about.

Function capturing is interesting. I guess it’s needed because the parentheses in function calls are optional.

Default arguments with \\. Huh. Moving things up to a function head if there’s more than one default argument is also interesting. Brings back the old C/C++ days with header files.

Recursion

Guards on function definitions: great for recursion. I like being able to separate out the base/termination case like that.

I think multiple function clauses might be clearer than Enum.reduce for writing reduce algorithms. (Though I do like having the function at the end with Enum.reduce — in JavaScript, it feels like the initial value is often harder to see when it’s at the end after the function body.)

Enumerables and streams

Being able to map/reduce on ranges is nice and is something I wish more languages had. (I’ve had to do this in JavaScript a couple times recently.)

The famed pipe operator at last! Looking forward to using it in practice, since it does seem like it makes chains of function calls easier to understand.

Streams look nice.

Processes

Okay, so these are kind of like lightweight threads, similar to goroutines in Go. That makes more sense (referencing my questions in the last post). I like the send/receive syntax a bit more than Go’s channel syntax, too.

Ooh, the after timeout! I really like that that’s built in.

The docs on linked processes make it sound like you build your own supervisors in Elixir, which sounds amazing. Can’t wait to learn more about that. (I’ve always used external processes like supervisord.)

This bit about sending messages to and from processes being the normal way to maintain application state? That’s really intriguing — something I haven’t really seen before. (At least not from the perspective of being built in to the language.) Looking forward to seeing what this looks like in practice.

IO and the file system

The names of File.cp_r/2 and File.rm_rf/1 make me irrationally happy. Especially given the danger of the latter. Ha.

Oh interesting, files are processes under the hood. Beginning to suspect this may be an everything-is-a-process type language. Which is new to me and very interesting.


Okay, we’ll stop there for now. Halfway through the introduction!


Reply via email

Dot grid paper

I’ve added dot grid paper to the note paper page, in a handful of sizes:

A grid made up of dots

Colophon: I made these with JavaScript/Node, generating SVGs that I then converted into PDFs with Inkscape.


Reply via email

New daily goal charts

Inspired by Robert A. Caro’s planning calendar, I’ve redesigned my daily goal charts:

A daily goal chart

This time the chart doesn’t have a specific year baked in, so it’s reusable. (And there’s a variation for leap years.) It’s freely available as PDFs in both portrait and landscape. Currently just letter size, though maybe someday I’ll start including A4 and other sizes.

Colophon: I made these charts with HTML (it’s just a table), CSS, JavaScript (on page rather than via Node), and Firefox. The font is Avenir Next.


Reply via email

Links #66

Andrew J. Hawkins on cars rewiring our brains to ignore all the bad stuff about driving. I would love to not have to drive anymore. It’s fun, but too dangerous. I also don’t trust self-driving cars. (Yes, I realize the obvious answer is to move into a big city. Maybe someday.)

Andy Bell on the extremely loud minority when it comes to building for the web. I believe one of the reasons for WordPress’s dominance is the number of sites that are document-like rather than app-like (where React is maybe a somewhat better fit, though I still prefer more minimal solutions).

Type designer Mark Simonson on analog drawing and spending less time on screens. I need to do this more often.

Chris Coyier linking to more 2023 CSS wishlists.

Una Kravets on container queries landing in stable browsers. Awesome. Looking forward to being able to use this.

Matthias Ott on container queries.

Klint Finley on the history and future of CSS.

iOS has accessibility support for playing background sounds like rain and white noise. Had no idea!

Lincoln Michel on unnecessary things in art. I agree that art isn’t meant to be utilitarian.

Sébastien Lorber on adopting React in the early days. Anthropologically interesting.

Rerun, an SDK for logging computer vision. Pretty impressive demo.

Dave Karpf with his reverse-Scooby-Doo theory of tech innovation. A worthwhile corrective.

Local-first web development. Intriguing.

Kevin Schaul on replacing Mapbox with OSS for a Washington Post piece.

Kottke on Alex Hyner’s sky collages. So cool!

Jen Simmons and Brady Eidson on iOS supporting Web Push. In limited cases, but it’s something. And there are other nice changes included (badging, the screen wake lock API, etc.).

John Allsopp on the Webkit/Safari changes.

Openverse has more than 600 million creative works under Creative Commons licenses or in the public domain.

Neil Clarke of Clarkesworld on being bombarded by AI-written submissions. Being a publisher right now seems…really difficult.

Kevin Roose on chatting with Bing’s Sydney chatbot. I read the whole transcript and it’s bonkers. Clearly Sydney is not a person or some other kind of sentient being, but still, that was a crazy read.

Max Matza on foreign accent syndrome. I don’t have this, though my wife and kids might sometimes beg to differ. (The actual thing, though — wow!)

Curious Archive on the complex ecosystem of the indie game Rain World. I doubt the “most complex” hyperbole, but leaving that out, it’s fascinating! Especially the procedural animation.

CAD Sketcher is working on adding more CAD functionality to Blender. (Disclaimer: while I’m interested in CAD and occasionally link to it, I’ve never actually done any CAD.)

Eliot Peper interview with Ray Nayler. Relevant quote: “At no point between life’s starting point 3.7 billion years ago and my and your complex awareness right now has that chain of informational exchange and interpretation been interrupted. If it had been, you would not be here to think of that interruption’s consequences.” That blew my mind — that the ancestral chain of my physical body is unbroken all the way back (as evidenced by the fact that I’m here, and that intermediate links had to survive long enough to reproduce).

Christopher Slye on the end of Type 1 fonts. I haven’t used them in ages (since my desktop Linux days), but goodbye, Type 1!

Andy Bell on just posting (on blogs). Again, if any of y’all have a blog, let me know!

Scott Nedrelow’s Magic Sleeve desk organization system, made from merino wool. Looks cool.

Marc on accessibility being for everyone. Yes, yes, yes.

José M. Gilgado on creation happening in silence. While I can think of several exceptions, there are still some truths here.

Henrik Karlsson on the childhoods of exceptional people. Fascinating reading, even if I have no idea how reliable the conclusions are. As for me, I care a lot more about my children growing up to be good people, and don’t particularly care if they grow up to be exceptional, but doing some of the things listed in the post (within reason) seems like it might be interesting.


Reply via email

Recent nonfiction reads

  • The Soul of a New Machine, by Tracy Kidder. Really good! I especially enjoyed the technical details about building computers in the early 1980s. I’m grateful that debugging is so much easier now (with the caveat that I’m sure it’s probably harder for the engineers building today’s computers than it is for those of us building higher up the stack). While part of me wishes I could have been there to build a new computer, the overtime culture at Data General seemed unhealthy and management seemed immature, and that’s not worth it regardless of how innovative or interesting the work is.
  • In Praise of Slowness, by Carl Honoré. I felt like this could probably have been shorter (self-help isn’t really my thing, by the way), but still worth reading. I now drive the speed limit, which I didn’t expect to be an outcome of reading this book. I also find myself consciously acknowledging that things usually don’t need to be rushed, which has been helpful. The bit about playing classical music half as fast was fascinating, too.

Recent fiction reads

  • The Handmaid’s Tale, by Margaret Atwood. For some reason I thought this was going to be boring and stodgy (I knew basically nothing about it before reading it), but it was well crafted, eminently readable, with good prose. It felt modern, too — almost like it could have been written yesterday. But it was also uncomfortable and heavy and so, so sad. This reminded me once again that as a rule I don’t particularly like dystopian fiction. Also, I learned that mayday is a borrowing from the French m’aidez — “help me.”
  • Slaughterhouse-Five, by Kurt Vonnegut. I…didn’t really like it. Or get much out of it. (Even though I tried to.) For me it was kind of a rambly mess, and the humor didn’t do anything for me either. But I’m glad other people like the book. I did sort of like Cat’s Cradle, so Vonnegut’s not completely off the table for me, but I’m also in no rush to read the rest of his catalog.

Reply via email

Links #65

Saharan’s zoomable meta Game of Life. Cool. And trippy.

Jen Simmons on CSS nesting, now available in Safari Technology Preview. Come on, Firefox.

Mike Crittenden with a simple cron for cleaning up your downloads folder. I keep meaning to set something like this up.

Tom MacWright on adding circles to Placemark, and why geospatial circles aren’t as simple as they sound.

Jason Kottke on a new image of the Milky Way with 3.32 billion individual objects. Whew!

Hannah Docter-Loeb about some weird polar vortex off the north pole of the sun.

React.js: The Documentary. I haven’t watched it yet because I’m awful at making time for long videos.

Robin Wieruch on ten web development trends this year.

WHO says no level of alcohol consumption is safe for one’s health.

Turborepo and Turbopack, by Vercel. Supposedly Turbopack is way faster than Vite. Interesting.

Zach Leatherman has been collecting criticisms of React.

Laurie Voss’s rebuttal of Alex Russell’s Market for Lemons post. I can see his point — network effects are real — but I still think we can do better for end users.

Thomas F. Arciuolo and Miad Faezipour with an idea on tapping the Yellowstone supervolcano for energy. And to keep it from erupting. Color me intrigued.

Harry Spitzer on Ryan Dahl and Deno. Enjoyed reading this. I need to play around with Deno some more. And Bun.

Chris Coyier on CSS for spacing between elements. I didn’t know about margin-trim, but it seems like a great future alternative to gap in non-flex/non-grid settings.


Reply via email