300 words

I read (listened) to Nick Harkaway's Karla's Choice recently and then went back to the BBC audio versions of a bunch of the George Smiley novels. It's fascinating Harkaway can write Smiley so well when the tone of his own novels (which I also like) are so different.

I'm not sure why I like the Smiley novels so much. They're always weirder than I expected -- they are kind of plotty in a detective way -- but really they're most often weirder and sadder. I think I always like an emotionally repressed person who occasionally says something that reveals what all is going on unsaid. I guess that's English-associated. I always think of Remains of the Day as the big example though it's been a long time since I read and watched that.

The le Carre book I think about the most is A Perfect Spy, which I think I got because someone recommended it as his most literary work. It was tough to get through at times -- just because of the bad things piling up -- the indications things were going to a terrible end.

The thing it was best at was demonstrating how weird it is to want to be a spy. How broken of a person you have to be. Interesting to think about in relationship to how much media we have about spies. In this case the character's broken by his relationship to his con-man father. By needing to take care of him. By learning from him even where he didn't want to. There's an unsparing-ness to it that I always find impressive -- like he's willing to see things as they are. (Though that's a fine line -- some art veers towards "if it's the rougher view it's the true one" which is not.)

11 words

scrawl is back. using waku RSC based on the feed rebuild.

271 words

Shower idea: spreadsheet style image editor. (Also very much inspired by the way canvas works.)

There would be a source image and a destination image (maybe call the destination image canvas?). Break the image up into 16x16 cells and stretch image to fit. Then you've got a selector, that can expand to different cell sizes, and can copy-paste paint from the source image to the canvas.

So for that you'd need to be able to controld the selector, resize it, and change the source cells (while the destination cells stay the same).

You might also need layers to keep things non-destructive.

Actually you might want two modes of movement on the canvas, one where the source moves with it, and one were the source stays static. All of these should be instituted like live formulas from excel. Although you wouldn't be able to do a mutating feedback loop exactly, because your original is kept in original condition and you're always linking from there -- unless you also have the option to link from your destination. THat might be fun.

You have two different color outline to indicate source and destination. That's actually quite a few combinations of modes - might take a while to get controls that feel good.

I thought you would want to be able to change resolution (up and down). But actually it might be better to be able to zoom by factors of 2, like xzoom does. Depends which project this is a part of.

It would definitely be fun to show the source and destination info at the bottom in text as an excel type formula.

815 words

Something I've remembered for a long time, is the description, Chris Langan, who supposedly had the highest IQ in the world, of the kind of thinking he does for pleasure (as told in a First Person episode). He talks about imagining the universe, and all the forces at play within it. I recognized the pleasure of some of that. One of my main pleasures from design/programming is holding a system in my head, and imagining how different adjustments would ripple out through the system. Often it is problem solving: 'how can I better balance this system', but not always.

I have been thinking about that pleasure, and what is at the core of it in relation to mental models. It seems connected to so many other descriptions but I still feel like I have a fuzzy picture of it. It seems connected to the pleasure of physicists, coming up with an elegant explanation for the physical world (and I have read some discussion of what elegant actually means: to explain the most with the least, although there are tons of judgements within that). It also seems connected to the pleasures of worldbuiling, of telling a believable (recognizable) fictional story. Because, I think, being able to do that implies you have the model of the real world in your head, or of a system of relationships between people.

Yesterday I was reading Color and Light, about how painters learned to paint the effects of light. From that, I got a picture of painting physical scenes as your ability to hold a model of the affects of light in your head, and then to apply those to the fictional characters and objects you put in the scene. Interesting to compare that to present-day videogame rendering, where people need to build a model of the world into the game. In both cases I wonder how big of a piece the understanding of the systems in the world is, and how much of it is emulating those systems in your chosen medium (paint or computer graphics rendering), that's something I want to write more about.

How about flow state? Is holding things in your mind pretty much flow state? I don't think so, and they seem close enough that the effort to distinguish between them could be useful in understanding both. Flow state I think also implies that you have a model in your head (although it is implied it is more inutitive, less explicit?), that's how you're able to maintain flow state, I think. You can operate in a flow state because you have enough of a model that you can move confidently, without getting stuck in errors and having to look stuff up. A flow state is full engagement with the system. I don't think it means you have a complete understanding. Even now, just thinking about it I can conjure up this feeling of full engagement, of attention, almost like I'm balancing a system of physical objects.

The idea of a model you're trying to approach seems easy to relate to programming. What about art? What about just trying to create something beautiful? What is it there? In Color and Light, Gurney talks about painters trying to ocnvey human emotion through a landscape. Why use a landscape? Why not communicate more directly? Why use attention to the physical world as an intermediary? After that he showed some symbolist paintings, and looking at those I thought, well, maybe that is one reason, if you try to convey them directly (anger as a demon) it looks trite. That explains some of it I think. But it still doesn't explain to me why the landscape is a successful way of conveying emoltion.

I had another answer, which I think I can write well but still doesn't seem enough. hHat painting a landscape with the real attention to detail is an act of attention. Is it that attention is everything? Real engagement is everything? And that because we know something of how a painting is made, the labor involved, the successful painting is just a message 'this is worth paying attention to'. And then it could be anything? It seems to follow that it could be anything. And beautiful paintings have been made of anything. But that still seems like a dissatisfying answer in terms of how to make art, how to live. Maybe it is 'pay attention to things that resonate for you'. Then the question is, is the success because it also resonates for another person? Or because you successfully communcated your experience of the resonating?

Was this what I wanted to write about? Mostly. I wanted to think about holding a system in your head in relation to using tools. Because do I want to make tools you can hold in your head? What am I making tools for? How does ego come into all of this?

906 words

I've been really interesting in Dan Abramov's Just JavaScript course. The course (so far) takes the approach of treating the rules of JavaScript as natural laws, and a lot of the explanatory effort so far has been about aligning your mental model to those laws (there is a long running idea of the connection between variables and values as 'wires', for example). As it's been introductory so far, it hasn't exposed me to a lot of new thinking, but it has strengthened my understanding of how object properties work. This was not something that tripped me up a lot, but I realized after going through the JJ explanation that it had been weighing on me as I wrote code -- I'd been working around the gaps in my knowledge to an extent and I'd also been actively defending against bugs related to those gaps. So if I wrote code I was unsure about I would save and test it in the middle of writing, versus feeling confident enough to finish out the function I was trying to make. I was surprised how much of a benefit that 'in-world' knowledge of javascript provided. I felt on much surer footing while writing code (even though the new knowledge had very few direct effects on the code I wrote). It was a feeling of comfort, I keep wanting to call the feeling 'being on sure footing'. It wasn't that I could access new places exactly, but I felt a lot more grounded and confident writing the usual stuff, which made writing code a more pleasant experience. It was also like having less drag -- especially as I built a larger app, where accumulated uncertainty kind of weighs you down as you go (some expectation that something is going to break and you're not going to know the reason).

So I"ve been enjoying that experience and also thinking a lot about what it means on the meta-level. Because along with that course, most of my thinking about code lately has been focused on learning more about how a computer itself workers. This really got kickstarted with reading Code: A Hidden History. The idea behind all that, I think, was that these languages are leaky abstractions, and that the only way to feel on truly solid ground would be to really understand it from the ground up. I'm not done with that approach, but it Just JavaScript is causing me to reassess it a bit. Maybe there is no tension between the two projects, it just depends on what you're doing, but it definitely feels like there's something to be productively explored there.

The question is maybe just at what level of abstrac tion do you want to explore things. That seems like the central question for any tool. Closely related to it is what level of primitives do you want to expose to your user (and there is lots of nuance in that, maybe you expose one level of primitives, but there is an escape hatch to let people go even lower-level than that). That is something I want to think about. I want to think about why ithat decision is important, too (what are you ultimately trying to enable)? People to create things (yes)? People to create things where they feel in control (on solid ground) (yes, I think so)? How does this compare to the physical processes people use to create things (like pottery, or paining, where the material has a feel and a resistance to it)? It seems like making a tool is a process of finding the right constraints. The constraints of physical things are so varied (what makes learning painting something people waht to do? learning to play an instrument? Think about the end product versus the feel of the process).

That's something I possibly hadn't articulated before: end product versus the process. Painting and playing an instrument have a long learning curve -- I would imagine motivated by the end product (think of what I could make). What do I want to do with a tool? The end product is the carrot, but I want the process to feel good. Are video games the opposite end of the pole (not quite, they're pretty goal-oriented as well).

Slowing down, but I will throw in that also, always with this stuff, I am thinking of lego and minecraft. About their phenomenal success, their enduring attraction, and why more things aren't in that realm (why not more games that play to those impulses? Is it that people only have room for a few of those things? There's also the Sim- series of games, I suppose, but still it seems underexplored).

What else? Another inspirational part of Just Javascript is that there is still room, giving all the approaches to teaching code, for an approach that (seems) new to me and is effective. It is affirming for my faith in the importance of mental models, and as I think about making my own stuff, and have worries that I'm operating at too basic a level (that all the opportunities for this sort of thing are exhausted) this makes me feel like, no, there's still room, start from the beginning again, don't take things for granted, if something doesn't make sense dig into it more. I should write more about primitives more, I think that level of abstraction you enter into is something I need to think more about.

637 words

Rgb is the newest experiment on Constraint Systems, it lets you select different rgb values using key color combinations -- simulating the experience of mixing colors.

Rgb fell out of another project, where I was returning to the grid-based editing of Hex trying to put it together with the sprite-based font editing from Face. With outlining and text, I'd be close to the grid-based paint program useful for creating diagrams. I decided the missing piece was color, and then I got caught up trying to decide the best interface for inputing color. I originally thought I'd use a color palette with a few (8, 16?) colors to be selected, but I wanted to experiment to see if there were more intuitive interaction set-ups -- something more similar to the hex experiment.

I decided to try a method where you use key combos to set the rgb values, one column for red, one column for green, one column for blue. Each column has options for 0, 122 (half), and 255 (full). This lets you do the basic combos, and also get mixes for things like yellow, cyan, and orange.

I used rgb because it corresponds to the colors pixels are made up of in the computer display. In some ways, if I want an intuitive, painterly interface, it would make sense to use a color space that fits better with human perception like HSL. But something I'm narrowing in on with these experiments is what exactly I want to do. I think what I want to do is bridge the gap between the computer in the user in an interesting way. I don't want to build an interface where the user doesn't have to think about what is going on in the computer at all (an approach I associate with Apple). I want to "go with the grain" of what's there. By providing an interface where people can productively collaborate with the computer, while also getting used to some of the lower-level abstractions, I can help them build knowledge that will carry over to the larger computer system and will make them feel more empowered to do other things.

That is the more philosophical motivation. It's also true I think that creative systems just thrive on constraints -- so why not use the constraints that are built into the computer. This makes for a collaborative interface on the part of the user, and it's also an interesting collaborative process for me to develop the interface, choosing which parts to augment of make more forgiving and which parts of the representation to keep laid bare.

The interface also provides a playground. One of the interesting things related to AI and its current limitations, is the question of whether it can really learn without an embodied experience of cause and effect. One of the experiments of constraint systems is how quickly we can adapt to a new system if we have quick and consistent feedback. It's something I've been exploring myself in the computer programs I use -- switching to Linux and using lots of keyboard shortcuts, using a smaller keyboard. I've been surprised at how possible the switch is, though it eased a lot by a consistent set of expectations, and a consistent mental model of how the shortcuts and the system works. I'm interested in creating those experiments in miniature. I'm also interested in the overlap between these ideas and how you learn a videogame or an instrument. I think about the system behind Minecraft a lot. Where you have this set of rules that you can reason about, there's also a lot of eccentricities, but I think the block rule set keeps it grounded. I think about how popular Minecraft is (the most popular game of all time!) how it fits into a human desire to create.

856 words

I released Face on Monday. It got more Twitter attention then any of the other Constraint System releases so far. Which feels good! Although I also do notice that there wasn't a lot of direct feedback -- or (what I'd really like to see) people sharing things they made with it -- just likes. I did get some feedback I've been thinking about: that the 'hjkl' direction navigation (borrowed from Vim) is a high barrier to people jumping in.

Why do I use the navigation? Well, first because it is what I use daily, in Vim, in i3wm, and while browsing the web thanks to the Vim plugin. Also since I've switched to the Atreus keyboard, my actual arrow keys are a couple layers deep, making 'hjkl' even more convenient.

Ok, that makes sense, but why not give people not used to it the arrow option? That speaks to a broader design question. I started doing the Constraint Systems stuff directly inspired by 100 Rabbits, specifically Noodle, which is a pretty uncompromising drawing tool (for one thing it starts with a completely blank screen). It drove home to me that you can just do that -- make exactly the tool you want exactly how you want it, and, in 100 Rabbits case, you can even build a community of like-minded people around that tool. This is especially in contrast to when I'm designing something at work and I feel like I have a responsibility: to the team, to the project, to make things accessible to a broader audience.

Closely connected to that is feedback/iteration speed. If I'm building the tool exactly how I want it, then when adding or modifying a feature I simply have to determine if it feels good and makes sense to me. If I start extending the configuration, so that it can be used in ways that I don't, I add overhead, where I have to check new features against both my use and the alternate flow I've added in. (Another option is to make things configurable, which I'd like to explore sometime soon, but I also can't expect configurability to solve all my problems, the vast majority of folks will stick with the defaults.)

Also tied to that, is that I view the constraint systems project as my journey to 'find my own way', something I always have trouble with when giving feedback is if my feedback makes sense for my mental model of the project, but not the person creating it. Sometimes they'll try to satisfy my feedback, but if they aren't on the same page about how it fits in, chances are they'll do something down the line that will clash with my suggestions. Usually I think that I would rather see the fully- formed, fully-developed thing from someone else. I'd rather see a coherent mental model I don't totally align with than a mish-mash.

In fact, I think what is interesting in a lot of the 100 Rabbits projects is to me it often feels like they're coming from an alien logic (Orca especially is like this). That's a big part of the thrill of it. It's like my favorite trope in sci-fi books of how an alien language can unlock new modes of thought.

But what comes with this is a big learning curve. And I think that's what I need to think about more seriously with the experiments. Because if I want people to drop in and create and share, that unfamiliar confrontation is going to cause many to bounce off. I think in the back of my head I'm still imagining Constraint Systems building in to some sort of app that combines writing, drawing, diagramming and maybe image editing, and if you're going to go through all that you may be more willing to perservere through an unfamiliar control scheme for a payoff down the line. But if you just see a GIF on twitter and click through... you're less likely to do that.

So I need to think about what I want to do. I also feel like I am doing a slippery slope thing, where I want to make sure I don't chase after every piece of feedback I hear (I've worked on projects I felt were doing that and found it frustrating), but I also shouldn't get too strongly attached to some perceived purity. Because on a basic level what I'm talking about is enabling arrow keys for navigation along with hjkl. Something even Vim, which is not exactly beginner friendly, does. And I think I can go ahead and do that without feeling like I'm really compromising the vision of anything -- especially if I think of it as making it more possible for people to make things, which is my top goal.

It doesn't come without a cost (some part of my brain shouts) though. Even though enabling them is trivial code-wise, I will need to think through how I expose it in the instructions, instead of saying 'j' for down, I'll need to say 'j' or '↓' for down. Which does add some overhead. Probably worth it, though? Trade-offs!

399 words

This weekend I finished Face, an editor where you can change both the text and the font. I learned a ton doing it, both about how to use canvas, and about how fonts are traditionally rendered.

Face was made to investigate fonts more. Making it I realized I've always chafed against how limited my control of a font in a design is. You get to choose the font, but then you're locked in. Part of this is because font design is complicated. I don't have the skills to go in and edit an individual letterform so that it better fits in this specific design and also harmonizes with the rest of the font. Fonts are generally constructed in terms of vector shapes -- editing one of those is daunting because so much craft has gone into balancing it.

Face uses a pixel font, where the letters have an 8x16 pixel grid, This makes editing a specific letter, or even several letters manageable. The constraints mean you can understand how a letter works and imagine how your changes could affect it (you can have a reasonably accurate mental model), What you lose is access to all the great expressive work font designers have done. You also lose easy scalability (depending on the pixel density of your screen, in-between sizes can result in blurry pixels). These experiments are trying to really get a feel for those trade-offs, and maybe find some different directions around them. I've been working towards something that has a 1-bit drawing mode combined with text, where the text-sizing is regular and predictable.

In all of this I've been thinking a lot about Minecraft. Minecraft seems to me to be a triumph of an understandable mental model -- for both kids and adults. There is something so freeing about everything in the world being built with the same building blocks you have. And it's been so successful, the desire for that sort of play must be so deep (legos are the obvious antecedent, and still massively popular themselves). And yet it still seems like an underexplored space to me. It seems like a space uniquely suited to computers, since in certain ways computers can reprogram themselves -- they attempt to be nothing more than a possibility space -- at least that's my favorite version of what a computer is. I want to do projects that unlock that feeling.

108 words

Rough music purchasing plan:

I've been meaning to switch off Spotify to bandcamp, but unsure about how to start the transition. So I'm planning a system.

I keep listening to Spotify, tracking what I listen to using last.fm. At the end of each month I buy three albums.

Which albums I buy is based on a combination of: what I listen to the most + bias toward active artists (release in the past two years?) + bias towards less popular artists (probably using a threshold of global plays on spotify or last.fm) + available to buy on bandcamp.

Maybe I'll make a script to calculate this for myself.

623 words

Using i3wm (a tiling window manager) has caused me to think a lot about how arbitrary our current computer interaction model is.

In some ways a tiling window manager isn't that big of a departure. I was already using a macOS app to do quickly snap a window to sides, or quarters of the screen. But it's a good experience in the power of defaults. The fact that a new window automatically splits the space in half changes my workflow in lots of ways. Probably the clearest is when I'm working on debugging or learning something programming wise. If I need to look up options I open a web browser right alongside, or open a terminal to refer back to another site I worked on. Within a workspace the default action is to "pull up alongside". Closing is quick and easy (partly this is due to a lack of animations). Space seems less physically constrained (less skeuomorphic) in a good way. I can pull up these magic windows and then dispose of them when I'm done. Again, of course none of this is impossible with a non-tiling window manager, but the feel is different. There's stability in the constraints. That stability is a feeling I feel like I'm going to be chasing and trying to pinpoint for a while in the computer interactions I build.

I also love the workspace set-up. You have workspaces 1-9 to start with, and you switch using meta+n. As the wonderfully transparent config file shows, that's actually totally arbitrary and configurable. You can name workspaces -- a lot of people seem to do that. In macOS I had a very specific spatial system of email in the top left workspace, browser in top center, etc. I'm developing some conventions using i3: I tend to try and keep 'work' in 1-5 and us 6-9 for stuff like email, slack, etc. But I've resisted naming and declaring a workspace. The utilitarian number system supports what I was talking about with the splits -- you don't have to carefully consider where your programs go, they're there to work for you. This is also very much supported with how you can transfer a window from one workspace to another (I always think of it as throwing). There's a really satisfying interaction where I'm searching through documentation for an answer, splitting with web browsers and terminals as needed, and I run into a longer read related to the problem. I throw the long read to a middle workspace to read over lunch break or something. I track down the solution to the specific problem, and I unwind the split search -- closing all the windows I no longer need. I'm back to a calm one or two split workspace. If definitely has the feel of pulling out a bunch of books and spreading them out on your desk, then cleaning up afterwards, except much faster. Even though overlapping windows are maybe closer in their functionality to that physical experience (you probably do overlap your books) the tiling feels closer to it in spirit.

I saw one screenshot of someone who had configured their workspaces to be in roman numerals, which is both very unnecessary and because of that sort of wonderful

So what do I do with this info, besides enjoying using my new set-up. Obviously I want to put this into the things I make somehow. Probably I will do some splitting experiments for some of the constraint systems stuff. But more than that I think it's the excitement that there is a lot of uncharted ground here. (This fits in also with just reading about Linux/Unix history, feeling how arbitrary the conventions are, how much they were developed for different situations.)

Page
of 2