sept 2024 progress

This commit is contained in:
David Eisinger
2024-09-11 12:15:45 -04:00
parent 1b667eb337
commit 711ea39ba6
12 changed files with 2285 additions and 13 deletions

View File

@@ -4,33 +4,107 @@ date: 2024-09-04T15:33:21-04:00
draft: false
tags:
- dispatch
references:
- title: "It's okay to lower the bar"
url: https://rachsmith.com/lower-the-bar/
date: 2024-09-11T16:15:07Z
file: rachsmith-com-8l0g9q.txt
- title: "Cultural Stasis Produces Fewer Cheesy Relics like Rocky IV"
url: https://culture.ghost.io/cultural-stasis-produces-fewer-cheesy-relics-like-rocky-iv/
date: 2024-09-15T20:39:02Z
file: culture-ghost-io-yb12ir.txt
- title: "Okay, I really like WezTerm | Alex Plescan"
url: https://alexplescan.com/posts/2024/08/10/wezterm/
date: 2024-09-15T20:40:18Z
file: alexplescan-com-ffcy9q.txt
- title: "P(Dumb)"
url: https://doriantaylor.com/p-dumb
date: 2024-09-15T20:41:25Z
file: doriantaylor-com-ua6hkk.txt
- title: "Stock and flow / Snarkmarket"
url: https://snarkmarket.com/2010/4890/
date: 2024-09-15T20:45:50Z
file: snarkmarket-com-axj6mr.txt
---
Some thoughts here...
<!--more-->
{{<dither IMG_6588.jpeg "782x600" />}}
{{<dither IMG_6709.jpeg "782x600" />}}
{{<dither IMG_6790.jpeg "782x600" />}}
{{<dither IMG_3614.jpeg "782x600" />}}
* Travel
* Rehoboth
* Beaufort
* Running
* Running in Rehoboth was great
We got Nev's art table set up in the living room. It has been a delight to see her take to it, defaulting to creative pursuits during downtime. I added some [LED lighting][1] and [coat hooks][2]. That's the nice thing about making your own stuff: the freedom to modify and adapt.
{{<dither IMG_6732.jpeg "782x900" />}}
{{<dither IMG_6818.jpeg "782x900" />}}
[1]: https://www.amazon.com/dp/B08R66Z71S
[2]: https://www.amazon.com/dp/B09M3Q6QHN
Musically, I found a good deal on a pretty nice [polyphonic analog synthesizer][3] which I think will be helpful in properly learning how subtractive synthesis works (though this thing has a _lot_ going on). So far just enjoying poking around w/ all the various settings. I'm also slowly working through a [book on drum programming][4].
[3]: https://sequential.com/product/prophetrev2/
[4]: https://www.goodreads.com/en/book/show/6399596-drum-programming
I finished [_Moonbound_][5] -- I liked it, though it didn't knock me over. It was definitely unlike anything I've read before, which I appreciate. I also listened to the [_Brotherhood of the Rose_][6] trilogy during my runs and long drives. I liked these a lot -- tight, efficient spy thrillers.
[5]: https://www.robinsloan.com/moonbound/
[6]: https://www.goodreads.com/series/60498-mortalis
### Links
This month:
* Adventure: Beaufort, Falls Lake, Pigeon Forge
* Adventure: [Pigeon Forge, TN][7] for my birthday
* Project:
* Skill:
* Skill: drum programming; I'd like to get a good set of samples (hi-hats in all positions, multiple toms, etc.) and actually program in all of the patterns the [drum programming book][4] I mentioned earlier
[7]: https://www.pigeonforge.com/
Reading:
*Author Fiction: [_Son of the Black Sword_][1], Larry Correia
* <https://kevquirk.com/blog/son-of-the-black-sword>
* Non-fiction: [_Title_][2], Author
* Fiction: [_Son of the Black Sword_][8], Larry Correia (recommended by [Kev Quirk][9])
* Non-fiction: [_The World Beyond Your Head_][10], Matthew B. Crawford (still)
[1]: https://bookshop.org/p/books/son-of-the-black-sword-volume-1-larry-correia/7419811?ean=9781476781570
[2]: https://bookshop.org/
[8]: https://bookshop.org/p/books/son-of-the-black-sword-volume-1-larry-correia/7419811?ean=9781476781570
[9]: https://kevquirk.com/blog/son-of-the-black-sword
[10]: https://bookshop.org/p/books/the-world-beyond-your-head-on-becoming-an-individual-in-an-age-of-distraction-matthew-b-crawford/8484056?ean=9780374535919
Links:
* [Title][3]
* [Title][4]
* [Title][5]
* [It's okay to lower the bar][11]
[3]: https://example.com/
[4]: https://example.com/
[5]: https://example.com/
> I had to remind myself that its okay to lower the bar. That an average version of something is better than a perfect version of nothing. All I can do is have a go.
* [Cultural Stasis Produces Fewer Cheesy Relics like Rocky IV][12]
> The much-maligned 1985 boxing film provides a few hints about the causes of 21st century artistic stagnation: namely, popular artists now work in a risk-averse creative paradigm that avoids making instantly-outmoded artworks
* [Okay, I really like WezTerm][13]
> I tried it again with a bit more patience and Im glad I did. My terminal is prettier than its ever been, more functional, and I can finally justify my mechanical keyboard purchase with all the keybindings Ive configured.
* [P(Dumb)][14]
> I think this is a fantasy. Its concocted by people rich enough to already enjoy human servants, assuming—probably correctly—that there are people out there of lesser means who want the same kind of access. My instinct is that a product like this would be extremely touchy, and thats assuming you could even get it to work.
* [Stock and flow][15]
> But I actually think stock and flow is a useful metaphor for media in the 21st century. Heres what I mean: Flow is the feed. Its the posts and the tweets. Its the stream of daily and sub-daily updates that reminds people you exist. Stock is the durable stuff. Its the content you produce thats as interesting in two months (or two years) as it is today. Its what people discover via search. Its what spreads slowly but surely, building fans over time.
[11]: https://rachsmith.com/lower-the-bar/
[12]: https://culture.ghost.io/cultural-stasis-produces-fewer-cheesy-relics-like-rocky-iv/
[13]: https://alexplescan.com/posts/2024/08/10/wezterm/
[14]: https://doriantaylor.com/p-dumb
[15]: https://snarkmarket.com/2010/4890/

View File

@@ -0,0 +1,966 @@
[1]Alex Plescan
[2]Blog [3]Projects [4]Newsletter
Okay, I really like WezTerm
10 August 2024 | [5]Permalink
A while back [6]my friend recommended that I try [7]WezTerm. Id been an iTerm
2 stalwart for the better part of a decade, but not to be too narrow-minded I
conceded, started it up, and saw this:
screenshot of WezTerm's default look
Does the job, sure, but doesnt feel quite right. Okay then, experiment over.
Back to iTerm…
Fast forward a couple of months and I got the itch to try a new terminal again.
I wanted to use one whose config was entirely text based so I could pop it in
to my dotfiles and share it across my work and personal machines. A few
terminals already do this, but whispers of WezTerms powerful API and Lua
config got me particularly interested.
I tried it again with a bit more patience and Im glad I did. My terminal is
prettier than its ever been, more functional, and I can finally justify my
mechanical keyboard purchase with all the keybindings Ive configured.
This post is an introduction to configuring WezTerm based on the setup that I
eventually landed on. Id consider it relatively low-frills. Most of what I
talk about here can already be found in WezTerms [8]docs, but as theyve got a
large surface area, Im hoping this post will be a useful jumping off point for
WezTerm beginners.
We wont be looking at some of WezTerms key features, like custom hyperlinks
highlighting rules, searchable scrollback, quick copy mode, and image support
(you can find [9]more details here).
The feature I find most exciting about WezTerm is the flexibility of its Lua
config, so well be focusing on that. This includes configuring appearance,
keybindings, multiplexing, workspace navigation, status bar setup, and dynamic
theming. By the end of it all, well have a terminal that looks like this:
screenshot of the WezTerm look we'll end up with at the end of this post
Subtly prettier than the default, and with some great features to boot.
I use macOS, so what follows is focused on ergonomics that make WezTerm great
there. I havent tested my config on other systems, but Im not doing anything
too bespoke so things should be portable (WezTerm works pretty much
everywhere).
tl;dr? Heres [10]a gist containing the config well end up with.
Pre-flight checks
Start by installing WezTerm. Instructions for this are on [11]WezTerms site.
If youre on macOS and reading this you probably have Homebrew installed, so $
brew install wezterm will do the trick.
Now launch WezTerm, and youre already winning.
A note on Lua
My favourite WezTerm feature is its use of Lua for defining config. Unlike
terminals where your settings are adjusted via the UI (iTerm 2), your WezTerm
config lives in your dotfiles and is portable across all your machines.
And unlike other terminals where your configuration is written using a data
serialization format like YAML or TOML (Alacritty, kitty), with Lua you can
more easily achieve complex configs by leveraging dynamic scripts.
Granted, Lua is a programming language so it is trickier to learn than YAML or
TOML, but its still remarkably simple. If youve used another dynamic
programming language (e.g. Ruby, Python, JavaScript) - you should be able to
read the Lua code in this post easily. For achieving more complex configs, Id
recommend diving deeper into the language. Its [12]Getting Started guide is a
good place to… get started.
Config files, and the best feedback loop in town
WezTerm supports loading in its config from all the usual places on your system
([13]docs). For this guide were going to be creating our config in
$XDG_CONFIG_HOME/wezterm/wezterm.lua. On most systems (including macOS) this
resolves to ~/.config/wezterm/wezterm.lua. Using a directory to store our
config instead of dumping it in ~/.wezterm.lua will let us keep our config
logically grouped as we split some of it out into different files.
Create the wezterm.lua file on that path, and add this boilerplate to it:
-- Import the wezterm module
local wezterm = require 'wezterm'
-- Creates a config object which we will be adding our config to
local config = wezterm.config_builder()
-- (This is where our config will go)
-- Returns our config to be evaluated. We must always do this at the bottom of this file
return config
Save the file and all going well… nothing will happen. Well, at least nothing
appeared to happen, but what WezTerm did behind the scenes is quite magical. It
watched your config file, and when it changed it auto-reloaded instantly. This
feature makes for a wonderfully tight feedback loop where you dont need to
restart your terminal to see the effects of your new config.
We can quickly test this auto-reload by adding some invalid syntax and seeing
what happens. Replace the call to wezterm.config_builder() with
wezterm.config_builderZ(), save, and you should immediately see a window pop-up
with:
runtime error: [string "/Users/alex/.config/wezterm/wezterm.lua"]:2: attempt
to call a nil value (field 'config_builderZ')
stack traceback:
[string "/Users/alex/.config/wezterm/wezterm.lua"]:2: in main chunk
Hows that for a feedback loop? Fix the error and save the file again.
This time, have your config log something:
wezterm.log_info("hello world! my name is " .. wezterm.hostname())
Save. Now… where did that log go? Press CTRL + SHIFT + L to bring up the debug
overlay ([14]docs) and lo and behold, your beautiful log was waiting for you
all along. Not only that but what youre looking at is a full Lua REPL. Enter 1
+ 1 and youll see the result. Enter wezterm.home_dir and youll see the result
of accessing the home_dir entry on the wezterm module ([15]docs).
screenshot of the WezTerm's debug overlay
The combination of hot reloading and the debug overlay makes experimenting with
WezTerm configs extremely low friction and low consequence. The feedback loop
is so tight now its more like a feedback lp.
Configuring appearance
Okay enough gushing - lets cut to the chase and make this thing prettier. Add
a few lines to the config to start customising the look of the terminal. Well
start with a colour scheme ([16]docs):
-- Pick a colour scheme. WezTerm ships with more than 1,000!
-- Find them here: https://wezfurlong.org/wezterm/colorschemes/index.html
config.color_scheme = 'Tokyo Night'
Save, and you should immediately see it update. Thanks Wez!
screenshot of applying a colour scheme to WezTerm
(if the hot config reload doesnt work for whatever reason, you can manually
reload it by pressing CMD + R).
Many colours, all at once
With over 1,000 colour choices to choose from, its tough to decide on your
favourite. Why not outsource that work to your computer? Lets explore the
power of WezTerms dynamic config by randomly assigning a colour scheme for
each new window you open:
-- Creates a lua table containing the name of every color scheme WezTerm
-- ships with.
local scheme_names = {}
for name, scheme in pairs(wezterm.color.get_builtin_schemes()) do
table.insert(scheme_names, name)
end
-- When the config for a window is reloaded (i.e. when you save this file
-- or open a new window)...
wezterm.on('window-config-reloaded', function(window, pane)
-- Don't proceed if the config has already been overriden, otherwise
-- we'll enter an infinite loop of neverending colour scheme changes.
-- If that sounds like your kinda thing, then remove this line ;) - but
-- don't say you haven't been warned.
if window:get_config_overrides() then return end
-- Pick a random colour scheme name.
local scheme = scheme_names[math.random(#scheme_names)]
-- Assign it as an override for this window.
window:set_config_overrides { color_scheme = scheme }
-- And log it for good measure
wezterm.log_info("Your colour scheme is now: " .. scheme)
end)
Open up a few windows (CMD + N on macOS) and each one will have a different
colour scheme. A cornucopia of terminals, each more surprising than the last.
We, my friends, are truly innovating now.
screenshot of many WezTerm terminal windows, each with a distinctive colour
scheme
But really, that was kind of a dumb idea meant to prove a point. Now that
youve gotten a taste for dynamic config, you probably wanna remove those lines
and stick to a colour scheme you do like.
(You may find that after you remove that code and add your static color_scheme
config back in, it doesnt hot reload. Thats because our script set an
override on the config specific to each window. To clear your overrides, you
can go to your debug terminal and type window:set_config_overrides({}) - or you
can just close and reopen your WezTerm window).
Respecting the systems appearance
Light themes, dark themes… why not both? Lets have the terminals colour
scheme automatically change when the operating systems appearance changes.
While were at it, well learn how to split up WezTerm config into different
modules.
Create a new file alongside wezterm.lua and call it appearance.lua. Add this to
it:
-- We almost always start by importing the wezterm module
local wezterm = require 'wezterm'
-- Define a lua table to hold _our_ module's functions
local module = {}
-- Returns a bool based on whether the host operating system's
-- appearance is light or dark.
function module.is_dark()
-- wezterm.gui is not always available, depending on what
-- environment wezterm is operating in. Just return true
-- if it's not defined.
if wezterm.gui then
-- Some systems report appearance like "Dark High Contrast"
-- so let's just look for the string "Dark" and if we find
-- it assume appearance is dark.
return wezterm.gui.get_appearance():find("Dark")
end
return true
end
return module
Back in wezterm.lua:
-- Import our new module (put this near the top of your wezterm.lua)
local appearance = require 'appearance'
-- Use it!
if appearance.is_dark() then
config.color_scheme = 'Tokyo Night'
else
config.color_scheme = 'Tokyo Night Day'
end
Toggle your system appearance between dark mode and light mode, and watch your
theme change right before your eyes.
screenshot of WezTerm in light and dark mode
Fonts
Next up lets look at fonts. WezTerm ships with the lovely JetBrains Mono, and
Nerd Font Symbols ([17]docs) so theres nothing to complain about there. I do
prefer Berkeley Mono at 13 points though, so:
-- Choose your favourite font, make sure it's installed on your machine
config.font = wezterm.font({ family = 'Berkeley Mono' })
-- And a font size that won't have you squinting
config.font_size = 13
Theres good support for ligatures and other fancy font settings if youre into
that ([18]docs), but Im not so lets move on.
Window styling
Lets style our terminals window. This controls the chrome that appears around
it, and can vary between operating systems. On macOS, I like the below:
-- Slightly transparent and blurred background
config.window_background_opacity = 0.9
config.macos_window_background_blur = 30
-- Removes the title bar, leaving only the tab bar. Keeps
-- the ability to resize by dragging the window's edges.
-- On macOS, 'RESIZE|INTEGRATED_BUTTONS' also looks nice if
-- you want to keep the window controls visible and integrate
-- them into the tab bar.
config.window_decorations = 'RESIZE'
-- Sets the font for the window frame (tab bar)
config.window_frame = {
-- Berkeley Mono for me again, though an idea could be to try a
-- serif font here instead of monospace for a nicer look?
font = wezterm.font({ family = 'Berkeley Mono', weight = 'Bold' }),
font_size = 11,
}
screenshot of WezTerm after we've styled its window
Now, lets do something a little kitsch. See that empty space to the right of
our terminals tab bar? Lets fill it with a powerline looking status bar.
Well add an update-status callback:
wezterm.on('update-status', function(window)
-- Grab the utf8 character for the "powerline" left facing
-- solid arrow.
local SOLID_LEFT_ARROW = utf8.char(0xe0b2)
-- Grab the current window's configuration, and from it the
-- palette (this is the combination of your chosen colour scheme
-- including any overrides).
local color_scheme = window:effective_config().resolved_palette
local bg = color_scheme.background
local fg = color_scheme.foreground
window:set_right_status(wezterm.format({
-- First, we draw the arrow...
{ Background = { Color = 'none' } },
{ Foreground = { Color = bg } },
{ Text = SOLID_LEFT_ARROW },
-- Then we draw our text
{ Background = { Color = bg } },
{ Foreground = { Color = fg } },
{ Text = ' ' .. wezterm.hostname() .. ' ' },
}))
end)
screenshot of WezTerm with a right status bar showing the system's hostname
A few interesting things happening here:
1. We just used WezTerms events API with wezterm.on. Events are things that
happen to the terminal (e.g. window resize) that we can define callbacks
for. The update-status event is emitted periodically when the terminal is
ready to have its status updated. WezTerm manages this cleverly to ensure
that only one such update can run at any given time, and if your code takes
too long to execute, a timeout will be hit and your handler will be
abandoned… protecting your terminal from bogging down.
2. Were grabbing the effective_config() of the window to get the “effective”
configuration, which is the config with any overrides applied. From this we
can get the resolved_palette, which is the currently active colour scheme.
To see what this data looks like you can enter the debug overlay (CTRL +
SHIFT + L) and execute window:effective_config().resolved_palette.
3. Were using the wezterm.format function ([19]docs) to style our string with
colours. Other ways you could format text include setting font weight,
underlining text, and more.
4. Finally, the wezterm.hostname() function ([20]docs) gives us the hostname
of the machine were running on. WezTerm ships with a bunch of useful
functions for getting the state of your system, and also… were doing stuff
in Lua - so you have full access to your file system, are able to make
network requests, etc.
Altogether this gives us a powerline…ish. Its a bit sad with only one segment
isnt it? Dont you worry, well be adding more soon…
Keys
Heres the part where we justify our mechanical keyboard purchases. Lets set
up some key assignments. During this section well look at WezTerms deep key
handling capabilities and ability to take action based on your input.
By default, WezTerm defines some standard key assignments ([21]docs). I leave
them on because theyre very sensible, but if you wanna really wrest total
control of your config, you can turn them off with
config.disable_default_key_bindings = true.
Our first key assignment will be a humble start for us macOS users… you might
be used to Option + Left Arrow and Option + Right Arrow jumping between words
on your terminal. Thats the default in iTerm 2 and Terminal.app, but not in
WezTerm. However, we can map it!
We do this by adding a keys table to our config:
-- Table mapping keypresses to actions
config.keys = {
-- Sends ESC + b and ESC + f sequence, which is used
-- for telling your shell to jump back/forward.
{
-- When the left arrow is pressed
key = 'LeftArrow',
-- With the "Option" key modifier held down
mods = 'OPT',
-- Perform this action, in this case - sending ESC + B
-- to the terminal
action = wezterm.action.SendString '\x1bb',
},
{
key = 'RightArrow',
mods = 'OPT',
action = wezterm.action.SendString '\x1bf',
},
}
By now youve probably figured out that youre gonna be spending more time
configuring WezTerm than doing actual work. Theres no shame in admitting this
reality, so lets encode it into our config. On macOS, the default shortcut for
opening an applications preferences is CMD + , - lets make it so when we
press this, our favourite editor opens up the WezTerm config. Im using neovim,
but feel free to substitute with your own:
config.keys = {
-- ... add these new entries to your config.keys table
{
key = ',',
mods = 'SUPER',
action = wezterm.action.SpawnCommandInNewTab {
cwd = wezterm.home_dir,
args = { 'nvim', wezterm.config_file },
},
},
}
Try that out, but you may see an error along the lines of:
Unable to spawn nvim because:
No viable candidates found in PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
If that error showed up, its typically because the process that launched
WezTerm didnt include a PATH environment variable that led to your editors
binary (e.g. on macOS, Finder is usually WezTerms parent). We can work around
this by specifying the full path to your editor in the SpawnCommandInNewTab
properties ([22]docs), or by updating the default environment variables WezTerm
spawns commands with. I prefer the latter, since it means that any other places
in our config where we might spawn new commands will also inherit the same env
vars:
config.set_environment_variables = {
PATH = '/opt/homebrew/bin:' .. os.getenv('PATH')
}
Try that again, and it should work.
We really are just scratching the surface of all the commands available ([23]
WezTerm supports a lot). In the next section, well be growing our key bindings
further.
Multiplexing terminals, levelling up key assignments
Lets move on to WezTerms multiplexing capabilities. If you make use of a
multiplexer (i.e. tmux) then you may consider using WezTerms builtin
capabilities instead. Theyll generally give you a more integrated experience,
with individual scrollback buffers per pane, better mouse control, easier
selection functionality, and generally faster performance.
Hit CTRL + SHIFT + P to bring up WezTerms command palette. (Yes, WezTerm has a
command palette. Yes, its as customisable as everything else weve seen so
far. No, we wont dwell on it here). Type split horizontally until the “Shell:
Split Horizontally” option is selected and hit ENTER. Ta-da! Your shell split
horizontally! Do the same for split vertically and… you get the idea.
screenshot of WezTerm's command palette
You may have noticed that the command palette displays the keyboard shortcut
assigned to each action. The ones for splitting are quite a fingerful, e.g.
SHIFT + CTRL + OPTION + ". I get why theyre this complicated - because theyre
trying not to clash with any other shortcuts you may have on your system, but
we can do a lot better - and WezTerm gives us the tools do so easily!
Splitting panes, leader key
A leader key ([24]docs) is a special key combination that you press first,
followed by another key combination, to perform a specific action. It can help
you create complex shortcuts without needing to push a lot of keys all at once.
Sounds like a perfect fit for splitting panes, right? Well bind our leader to
CTRL + A, and in case you accidentally type the leader without following it up
with another key, well have it automatically deactivate after 1,000
milliseconds.
-- If you're using emacs you probably wanna choose a different leader here,
-- since we're gonna be making it a bit harder to CTRL + A for jumping to
-- the start of a line
config.leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 1000 }
Next lets define some key assignments for splitting panes:
config.keys = {
-- ... add these new entries to your config.keys table
{
-- I'm used to tmux bindings, so am using the quotes (") key to
-- split horizontally, and the percent (%) key to split vertically.
key = '"',
-- Note that instead of a key modifier mapped to a key on your keyboard
-- like CTRL or ALT, we can use the LEADER modifier instead.
-- This means that this binding will be invoked when you press the leader
-- (CTRL + A), quickly followed by quotes (").
mods = 'LEADER',
action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' },
},
{
key = '%',
mods = 'LEADER',
action = wezterm.action.SplitVertical { domain = 'CurrentPaneDomain' },
},
}
Give it a go now. Press CTRL + A, quickly followed by ", and youll get a
horizontal split. Use the other assignment and youll get a vertical split.
screenshot of WezTerm's with split panes
Before we move on - you might be wondering what happens if you actually want to
send the CTRL + A keypress without invoking the leader? CTRL + A is useful in
and of its own as pressing it jumps to the start of a line on your shell (and
on operating systems like Emacs).
Well theres a solution for that. We can map CTRL + A quickly followed by CTRL
+ A to send a CTRL + A to our terminal. Thats a confusing sentence! Itll be
simpler to just look at the config:
config.keys = {
-- ... add these new entries to your config.keys table
{
key = 'a',
-- When we're in leader mode _and_ CTRL + A is pressed...
mods = 'LEADER|CTRL',
-- Actually send CTRL + A key to the terminal
action = wezterm.action.SendKey { key = 'a', mods = 'CTRL' },
},
},
Moving around panes
Okay with that done, lets get back to multiplexing. Next up, navigating our
splits. I like to use vim direction keybindings, but feel free to replace with
arrow keys instead.
config.keys = {
-- ... add these new entries to your config.keys table
{
-- I like to use vim direction keybindings, but feel free to replace
-- with directional arrows instead.
key = 'j', -- or DownArrow
mods = 'LEADER',
action = wezterm.action.ActivatePaneDirection('Down'),
},
{
key = 'k', -- or UpArrow
mods = 'LEADER',
action = wezterm.action.ActivatePaneDirection('Up'),
},
{
key = 'h', -- or LeftArrow
mods = 'LEADER',
action = wezterm.action.ActivatePaneDirection('Left'),
},
{
key = 'l', -- or RightArrow
mods = 'LEADER',
action = wezterm.action.ActivatePaneDirection('Right'),
},
}
Look at all that duplication - Were using a dynamic language for our config
here, we dont need to stand for that! Lets go on a little side quest and see
if we can extract it to a function.
local function move_pane(key, direction)
return {
key = key,
mods = 'LEADER',
action = wezterm.action.ActivatePaneDirection(direction),
}
end
config.keys = {
-- ... remove the previous move bindings, and replace with
move_pane('j', 'Down'),
move_pane('k', 'Up'),
move_pane('h', 'Left'),
move_pane('l', 'Right'),
}
Ooh so much smaller, but it could be smaller still. I dare you to keep code
golfing this down to 6 lines. Go on - I believe in you!
Resizing panes, and introducing key tables
You mightve figured out that you can resize panes by dragging the edge of one
with your mouse, but were developers here, not olympic athletes. Whatre we
expected to move our hands away from the safety of our keyboard and over to the
mouse?! No! I wont stand for it and neither should you!
Itd be really nice to use the same keys that we use for moving between the
panes for resizing (h, j, k, l)… but theyve already been mapped… we could add
another key modifier that needs to be held down when we want to resize vs. move
between the panes:
config.keys = {
-- ... add this new entry to your config.keys table
{
key = 'h',
mods = 'LEADER|CTRL',
-- "3" here is the amount of cells we wish to resize
-- the terminal by
action = wezterm.action.AdjustPaneSize { 'Left', 3 },
},
}
But thats no good really. We have to first push our leader CTRL + A, then push
CTRL + H, and keep repeating that each time we wanna resize the pane to the
left. Fingers getting sore. Send help. Oh, here comes WezTerm with the
antidote: [25]key tables.
When you activate a key table youre entering a different mode with its own set
of assignments for whatever youre doing. This allows you to have multiple
layers of assignments that are context specific.
Its a similar kind of concept to the leader key, but unlike it, our key table
will not automatically deactivate after an action is invoked, so itll be a
good fit for resizing, where we want to keep pressing the same button over and
over again until were happy with our panes new size.
With all that… this is easier done that said, so lets check out the code:
local function resize_pane(key, direction)
return {
key = key,
action = wezterm.action.AdjustPaneSize { direction, 3 }
}
end
config.keys = {
-- ... remove the yucky keybinding from above and replace it with this
{
-- When we push LEADER + R...
key = 'r',
mods = 'LEADER',
-- Activate the `resize_panes` keytable
action = wezterm.action.ActivateKeyTable {
name = 'resize_panes',
-- Ensures the keytable stays active after it handles its
-- first keypress.
one_shot = false,
-- Deactivate the keytable after a timeout.
timeout_milliseconds = 1000,
}
},
}
config.key_tables = {
resize_panes = {
resize_pane('j', 'Down'),
resize_pane('k', 'Up'),
resize_pane('h', 'Left'),
resize_pane('l', 'Right'),
},
}
Now you can push CTRL + A to activate leader, then R to activate the resizing
layer… and movement keys to resize to your hearts content. When 1,000
milliseconds have elapsed, youll automatically exit the resizing layer and be
back to the default keytable.
WezTerm intensifies…
(While were on multiplexing, if youre using neovim, Id recommend checking
out [26]smart-splits.nvim - thatll let you jump between your vim panes and
your WezTerm ones).
Project workspaces
Okay lets graduate from WezTerm university with one final assignment… project
workspaces.
Im often working across a few different projects at a time, and need to be
able to quickly switch between them. I want each project to maintain its own
multiplexer instance with its own windows, panes, and tabs. In tmux you might
achieve this with different sessions. In WezTerm well do it with [27]
workspaces.
Creating and switching between workspaces
Create a new file in your config directory and call it projects.lua. Well use
this to provide some project switching functions to our main config file.
local wezterm = require 'wezterm'
local module = {}
local function project_dirs()
return {
'~/Projects/mailgrip',
'~/Projects/alexplescan.com',
'~/Projects/wezterm_love_letters',
-- ... keep going, list all your projects
-- (or don't if you value your time. we'll improve on this soon)
}
end
function module.choose_project()
local choices = {}
for _, value in ipairs(project_dirs()) do
table.insert(choices, { label = value })
end
-- The InputSelector action presents a modal UI for choosing between a set of options
-- within WezTerm.
return wezterm.action.InputSelector {
title = 'Projects',
-- The options we wish to choose from
choices = choices,
-- Yes, we wanna fuzzy search (so typing "alex" will filter down to
-- "~/Projects/alexplescan.com")
fuzzy = true,
-- The action we want to perform. Note that this doesn't have to be a
-- static definition as we've done before, but can be a callback that
-- evaluates any arbitrary code.
action = wezterm.action_callback(function(child_window, child_pane, id, label)
-- As a placeholder, we'll log the name of what you picked
wezterm.log_info("you chose " .. label)
end),
}
end
return module
… and in your wezterm.lua:
local projects = require 'projects'
config.keys = {
-- ... add these new entries to your config.keys table
{
key = 'p',
mods = 'LEADER',
-- Present in to our project picker
action = projects.choose_project(),
},
{
key = 'f',
mods = 'LEADER',
-- Present a list of existing workspaces
action = wezterm.action.ShowLauncherArgs { flags = 'FUZZY|WORKSPACES' },
},
}
Lots going on here, take your time to read it and the comments. And give it a
go! Push LEADER + P, and youll see the project input selector come up. Pick a
project by highlighting one and pushing ENTER, or push CTRL + C to close the
picker. Once youve picked a project youll see its directory logged to your
debug overlay (CTRL + SHIFT + L).
screenshot of WezTerm's with the workspace switcher we've configured
Still a couple of issues though… its really annoying to type out all your
projects by hand in that file, and, uh, what was the other issue? Oh yeah! When
you pick a project nothing happens. Okay, lets fix these. Back in
projects.lua, well start by having the list of projects automatically
populate.
-- The directory that contains all your projects.
local project_dir = wezterm.home_dir .. "/Projects"
local function project_dirs()
-- Start with your home directory as a project, 'cause you might want
-- to jump straight to it sometimes.
local projects = { wezterm.home_dir }
-- WezTerm comes with a glob function! Let's use it to get a lua table
-- containing all subdirectories of your project folder.
for _, dir in ipairs(wezterm.glob(project_dir .. '/*')) do
-- ... and add them to the projects table.
table.insert(projects, dir)
end
return projects
end
(This all assumes that you like to keep your projects grouped together in a
folder, if not… well youve got Lua at your fingertips to implement whatever
you want!)
Now launch the project picker, and what do you see? All those projects staring
back at thee.
One thing left to do, lets add the functionality that opens your project in a
new WezTerm workspace. Still in projects.lua lets change up choose_project:
function module.choose_project()
local choices = {}
for _, value in ipairs(project_dirs()) do
table.insert(choices, { label = value })
end
return wezterm.action.InputSelector {
title = "Projects",
choices = choices,
fuzzy = true,
action = wezterm.action_callback(function(child_window, child_pane, id, label)
-- "label" may be empty if nothing was selected. Don't bother doing anything
-- when that happens.
if not label then return end
-- The SwitchToWorkspace action will switch us to a workspace if it already exists,
-- otherwise it will create it for us.
child_window:perform_action(wezterm.action.SwitchToWorkspace {
-- We'll give our new workspace a nice name, like the last path segment
-- of the directory we're opening up.
name = label:match("([^/]+)$"),
-- Here's the meat. We'll spawn a new terminal with the current working
-- directory set to the directory that was picked.
spawn = { cwd = label },
}, child_pane)
end),
}
end
Try that out, select a new project, and youll see a workspace get created for
it. Switch back to your default workspace (we bound so LEADER, CTRL + F to show
you a list of active workspaces) and youll see everything is right where you
left it.
Bonus: improving the powerline, and more colour stuff
Lets add a couple of polishing touches to this workflow and then I promise
well be done…
Remember that sad powerline we set up earlier? Lets make it happier by adding
another segment to it which contains the name of the current workspace. In true
powerline fashion, each subsequent segment on the powerline will display in a
different colour. Well explore some of WezTerms colour maths support and do
this all dynamically based on our theme. Back in wezterm.lua:
-- Replace the old wezterm.on('update-status', ... function with this:
local function segments_for_right_status(window)
return {
window:active_workspace(),
wezterm.strftime('%a %b %-d %H:%M'),
wezterm.hostname(),
}
end
wezterm.on('update-status', function(window, _)
local SOLID_LEFT_ARROW = utf8.char(0xe0b2)
local segments = segments_for_right_status(window)
local color_scheme = window:effective_config().resolved_palette
-- Note the use of wezterm.color.parse here, this returns
-- a Color object, which comes with functionality for lightening
-- or darkening the colour (amongst other things).
local bg = wezterm.color.parse(color_scheme.background)
local fg = color_scheme.foreground
-- Each powerline segment is going to be coloured progressively
-- darker/lighter depending on whether we're on a dark/light colour
-- scheme. Let's establish the "from" and "to" bounds of our gradient.
local gradient_to, gradient_from = bg
if appearance.is_dark() then
gradient_from = gradient_to:lighten(0.2)
else
gradient_from = gradient_to:darken(0.2)
end
-- Yes, WezTerm supports creating gradients, because why not?! Although
-- they'd usually be used for setting high fidelity gradients on your terminal's
-- background, we'll use them here to give us a sample of the powerline segment
-- colours we need.
local gradient = wezterm.color.gradient(
{
orientation = 'Horizontal',
colors = { gradient_from, gradient_to },
},
#segments -- only gives us as many colours as we have segments.
)
-- We'll build up the elements to send to wezterm.format in this table.
local elements = {}
for i, seg in ipairs(segments) do
local is_first = i == 1
if is_first then
table.insert(elements, { Background = { Color = 'none' } })
end
table.insert(elements, { Foreground = { Color = gradient[i] } })
table.insert(elements, { Text = SOLID_LEFT_ARROW })
table.insert(elements, { Foreground = { Color = fg } })
table.insert(elements, { Background = { Color = gradient[i] } })
table.insert(elements, { Text = ' ' .. seg .. ' ' })
end
window:set_right_status(wezterm.format(elements))
end)
screenshot of WezTerm with an enhanced status line, showing multiple segments
in different colours
WezTerm delivers yet again. This updated callback supports arbitrary numbers of
segments for its powerline. Weve specified 3 but you could add way more. All
this without needing to manually configure what colour we want on each segment,
but rather have WezTerm do it for us by creating a gradient based on the
currently active theme. Some highlights:
• We use wezterm.color.parse to convert a string containing a hex colour code
into a Color object ([28]docs) - this lets us perform more advanced
operations on the color.
• The colour schemes background colour is still what we want to use as the
value that our gradient draws to, but to figure out where the gradient
should start, we use either color:darken ([29]docs) or color:lighten to
create a new colour.
• The gradient itself is made with wezterm.color.gradient ([30]docs), which
returns a table containing a evenly spaced colours between our gradient_to
and gradient_from.
• We then iterate over our powerline segments to create the items required
for wezterm.format.
Where to from here?
Theres a [31]lot more that WezTerm does and that [32]you can do with WezTerm.
By now youll have a good understanding of WezTerm config fundamentals, but I
encourage you to keep exploring!
If youve followed this guide step by step, Id recommend pruning the config
down to things that youll actually use, rewriting it in your own style, then
start sprinkling in your own stuff. Take ownership of this thing! Make your own
beautiful WezTerm snowflake!
When you want some inspiration for what you could do next, browse through the
[33]WezTerm API docs to see whats possible.
And if you find that you too really like WezTerm, please consider [34]
supporting Wez for his great open-source work.
Receive an email when I post
[35][ ] [36][Subscribe]
(You'll get no more than one email per post. I manage this list with [37]
Buttondown).
Want to get in touch? [38]Send me an email, [39]a tweet, or [40]check out my
GitHub.
How about an email when I next post something? [41]Subscribe to my newsletter.
This website is [42]open source, and built using [43]Jekyll. Photos are © Alex
Plescan (2024).
References:
[1] https://alexplescan.com/
[2] https://alexplescan.com/posts/
[3] https://alexplescan.com/projects/
[4] https://buttondown.email/alexplescan
[5] https://alexplescan.com/posts/2024/08/10/wezterm/
[6] https://blog.lambo.land/
[7] https://wezfurlong.org/wezterm/
[8] https://wezfurlong.org/wezterm/config/lua/general.html
[9] https://wezfurlong.org/wezterm/features.html
[10] https://gist.github.com/alexpls/83d7af23426c8928402d6d79e72f9401
[11] https://wezfurlong.org/wezterm/installation.html
[12] https://www.lua.org/start.html
[13] https://wezfurlong.org/wezterm/config/files.html#configuration-files
[14] https://wezfurlong.org/wezterm/troubleshooting.html#debug-overlay
[15] https://wezfurlong.org/wezterm/config/lua/wezterm/home_dir.html
[16] https://wezfurlong.org/wezterm/config/appearance.html
[17] https://wezfurlong.org/wezterm/config/fonts.html
[18] https://wezfurlong.org/wezterm/config/font-shaping.html
[19] https://wezfurlong.org/wezterm/config/lua/wezterm/format.html
[20] https://wezfurlong.org/wezterm/config/lua/wezterm/hostname.html
[21] https://wezfurlong.org/wezterm/config/default-keys.html
[22] https://wezfurlong.org/wezterm/config/lua/SpawnCommand.html
[23] https://wezfurlong.org/wezterm/config/lua/keyassignment/index.html
[24] https://wezfurlong.org/wezterm/config/keys.html#leader-key
[25] https://wezfurlong.org/wezterm/config/key-tables.html
[26] https://github.com/mrjones2014/smart-splits.nvim
[27] https://wezfurlong.org/wezterm/recipes/workspaces.html
[28] https://wezfurlong.org/wezterm/config/lua/color/index.html
[29] https://wezfurlong.org/wezterm/config/lua/color/darken.html
[30] https://wezfurlong.org/wezterm/config/lua/wezterm.color/gradient.html
[31] https://wezfurlong.org/wezterm/features.html
[32] https://wezfurlong.org/wezterm/config/lua/general.html
[33] https://wezfurlong.org/wezterm/config/lua/general.html
[34] https://wezfurlong.org/sponsor/
[37] https://buttondown.email/
[38] https://alexplescan.com/cdn-cgi/l/email-protection#b0d1dcd5c8f0d1dcd5c8c0dcd5c3d3d1de9ed3dfdd
[39] https://twitter.com/alexplescan
[40] https://github.com/alexpls
[41] https://buttondown.email/alexplescan
[42] https://github.com/alexpls/alexplescan.com
[43] https://jekyllrb.com/

View File

@@ -0,0 +1,200 @@
[1] Culture: An Owner's Manual
[2]
Login
Jul 29, 2024 7 min read
Cultural Stasis Produces Fewer Cheesy Relics like Rocky IV
Cultural Stasis Produces Fewer Cheesy Relics like Rocky IV [4]Let's get ready
to crumble
The much-maligned 1985 boxing film provides a few hints about the causes of
21st century artistic stagnation: namely, popular artists now work in a
risk-averse creative paradigm that avoids making instantly-outmoded artworks
Sylvester Stallones 1985 film Rocky IV is so infamously schlocky that its
become a cliché to even discuss its flaws. The Cold War Russia-versus-America
plot is cartoonish, and Stallones direction is thoroughly over-the-top, from
the opening sequence with exploding American and Russian flag boxing gloves to
the superfluous montage sequences of pre-existing footage meant to stretch the
film to feature length. Compared to other cinematic masterpieces, Rocky IV is
not a well-made film, and no one has ever thought it to be. In his
contemporaneous review, Roger Ebert called it “a film so predictable that
viewing it is like watching one of those old sitcoms where the characters never
change and the same situations turn up again and again.”
But unlike most bad films made in 1985, Rocky IV remains fascinating nearly
forty years later. It has great value to us in 2024 as a relic — an artwork
that embodies the unique stylistic choices of a particular point in time. Rocky
IV is a time-traveling passport to 1985: the Manichaean Reaganite politics, the
sassy robot maid, the soundtrack of power ballads and cold digital synths, the
artless action-film editing and over-use of freeze-frame fade-outs, the casual
lack of verisimilitude in using Wyoming as a stand-in for the Russian
countryside.
There can be good relics, of course. Nothing represents the artistic decisions
of 1967 better than Sgt. Peppers Lonely Hearts Club Band, and until recently,
it was long canonized as the best album of all time. By comparison, almost all
of Rocky IVs bold aesthetic choices quickly soured. Just five years later,
movies no longer looked or sounded like Rocky IV, and the end of the Cold War
calmed the American spiritual anxiety powering its ridiculous plot. “Eye of the
Tiger” became a joke. So did Carl Weathers. And in the last few decades, weve
seen so many [5]parodies of Eighties montage sequences that it is nearly
impossible to watch the originals as earnest filmmaking. The musical montage in
the middle of Rocky IV, where Stallone remembers clips from the previous Rocky
films, is absolutely ludicrous.
Watching Rocky IV in 2024, however, was clarifying to me in the ongoing debate
around "21st century cultural stasis." The basic argument is that culture is
less healthy because there are fewer significant aesthetic changes. This
implies a healthy ecosystem produces a large quantity of relics, as new styles
outmode old ones. Songs that are "so Eighties" imply that the Nineties rejected
all of those artistic choices. In the logic of the stasis narrative, if The
Bourne Identity doesnt scream 2002 with the same volume as Rocky IV screams
1985, culture must be slowing down.
Of course, the 21st century produced many now-outmoded looks: “early 2000s
gel-spike-hair guy,” “2012-era pork pie hat speakeasy bartender,” “background
extra in Legally Blonde.” At the same time, 2003's “Hey Ya” and "Drop It Like
It's Hot" feel timeless rather than ludicrous. The 21st century seems to
produce fewer novel aesthetics that humiliate the previous attempt at novel
aesthetics.
Debates about the causes of 21st century cultural stasis always begin by
blaming the economy and technology: monopolistic control of the media industry,
the hollowing out of the middle class, rising health care costs, algorithmic
feeds, the proliferation of media-making tools, etc. These are certainly
legitimate factors and set the horizon for our social activity. Yet Rocky IV
makes it clear that stasis also must involve how artists think about
production. In 1985, Stallone made most choices as director that broke with
pre-Eighties filmmaking techniques, and unfortunately for him, very few of
these radical decisions became conventional in the future. He swung, and he
missed. Compare that with original Rocky director John G. Avildsen who chose to
do his film as a grainy, naturalistic underdog story. Both are products of
their times, but the original is canonical, while part four is famous as the
world's most dated film.
But Stallone was doing what a lot of 20th century artists felt was their core
responsibility: pursuing bold aesthetics. He operated from a vague avant-garde
mindset of wanting to make something that felt au courant. A major part of
cultural stasis, then, may stem from most artists refusing to embrace
contemporary aesthetic choices. In fact, I would argue that the Nineties
ushered in a paradigm of rationalized, naturalistic aesthetics anchored in the
meta-knowledge that artworks have a longer shelf life when they feel “real” and
avoid mannerist/over-indulgent faddish aesthetics.
Technology and economy do play an indirect role in this change, but there seem
to be three values guiding the anti-relic school of art:
1. A Rejection of Radical Stylization
In many cultures, art is expected to involve mannerism. Even today older
Japanese audiences expect and enjoy “overacting." For maybe the last century,
however, Western acting has instead emphasized acting that attempts to recreate
real-life human expression.
This second approach itself is an aesthetic — not the lack of aesthetics. As
Susan Sontag wrote in her 1965 essay “On Style,” “There is no neutral,
absolutely transparent style.” Hemingways bare prose, for example, is its own
style. Sontag complained in her day that “Today styles do not develop slowly
and succeed each other gradually, over long periods of time which allow the
audience for art to assimilate fully the principles of repetition on which the
work of art is built; but instead succeed one another so rapidly as to seem to
give their audiences no breathing space to prepare.” And perhaps as a backlash
to this failure of new aesthetics to stick in the postmodern era, there was a
move to naturalism — an attempt to find a common universal artistic language.
This meant fewer obvious breaks with the past — and with the future.
Alternative music in the 1990s stripped down production back to basic live
instrumentation, making it sound like 1970s rock and teenage garage bands. Same
goes for fiction: Most contemporary fiction avoids the overly stylized prose of
a Woolf, a Gaddis, or a Pynchon, thereby making it seem era-less.
In clothing, the overall de-formalization of society led to a similar outcome.
Men in suits gave the suit industry a literal canvas to direct sequential
changes in silhouette, lapel sizes, and jacket lengths. This created clear
chronological differences in looks. In a world where the baseline is T-shirts
and shorts and the brands/graphics are primary over silhouettes, there is less
opportunity for subtle stylizations that mark the eras. A Supreme T-shirt in
1998 doesn't look that different than a Supreme T-shirt in 2024.
2. Rationalization of Techniques
The cultural industry has always had a core business problem of not being able
to anticipate demand for its products. The more these companies can reduce
risk, the more they can profit. One way to mitigate risk is to collect audience
data and try to create goods that better respond to human psychology. This has
produced formulas and templates that increase the odds of success. Streaming TV
episodes, for example, mostly end with small cliffhangers so that audiences
will click to watch the next one episode immediately.
This kind of rationalization crowds out the possibility of idiosyncratic
choices that can be made by a single auteur (and then sour). Moreover most
big-budget films and albums are no longer made by a single person. Big studio
productions — especially those made with computer graphics — require massive
bureaucratic planning and technocratic decision making. Larger staff numbers
are likely to pull the work towards an “average” approach based on time-held
conventions.
3. A Deeper Respect for Pre-Existing Audience Tastes
Avant-garde art bombarded the audience with aesthetic choices that made them
uncomfortable. More naturalistic art avoids this by conforming to the
audience's conventional understanding of artistic forms. Everyone knows that a
woman singing with an acoustic guitar is "music"; aleatoric composition on a
prepared piano requires the audience to work harder.
Whether meant for market maximization or as a sign of respect for the audience,
21st century artists seem more interested in speaking their fans pre-existing
aesthetic languages rather than pushing them into new styles. This results in
the use of more classic artistic techniques. Simon Reynolds idea of [6]
“retromania” now makes sense as an audience-pleasing strategy. And the more
that things pull directly from canonized past artworks, the less theyre likely
to end up as embarassing relics. Janelle Monaes [7]“Tightrope” today sounds
like a take on Sixties soul rather than “so 2010.”
That being said, the overuse of a particular retro sound can become associated
with a specific contemporary era. Robin Thickes “Blurred Lines” so resembled a
[8]Marvin Gaye song that royalties now go to his estate. But as that song
became de-canonized, it's now starting to sound “very 2013.” Same for “Uptown
Funk” being “very 2014.” Yet Id still argue that “Blurred Lines” is much
weaker as a relic than Rocky IV, which is solely "1985."
[caomart]
The question is simply: are artists themselves choosing to reduce aesthetic
risk-taking in their art? In an era where past and present songs all exist on
the same Spotify playlist, few musical artists would want to create songs that
may be ridiculed as passé a few years later. And all artists have the
historical knowledge that helps them avoid mistakes of the past like Rocky IV.
But this result — a lack of embarrassing relics — is what makes us feel that
culture is less healthy. New genres like trap and drill feel vibrant because
they outmoded "boom bap," yet it's this vibrancy that puts them at risk of
feeling dated in the future. When artists stick with the classics, it's good
for stabilizing their careers. But if they don't push for outrageously now
sounds, we're left with the feeling of stagnation.
[9]
Published by:
[10] W. David Marx
[11] Share [12] Tweet
Culture: An Owner's Manual © 2024
[13]Published with Ghost
[14]
References:
[1] https://culture.ghost.io/
[2] https://twitter.com/wdavidmarx
[4] https://www.youtube.com/watch?v=KrXxGf1lDd0
[5] https://www.youtube.com/watch?v=C0Q2F6QYiD4&t=65s&ref=culture.ghost.io
[6] https://pitchfork.com/features/paper-trail/8010-paper-trail-simon-reynolds/?ref=culture.ghost.io
[7] https://www.youtube.com/watch?v=pwnefUaKCbc&ref=culture.ghost.io
[8] https://www.youtube.com/watch?v=iStrNY_8n_U&ref=culture.ghost.io
[9] https://culture.ghost.io/culture-is-an-ecosystem-a-manifesto-towards-a-new-cultural-criticism-3/
[10] https://culture.ghost.io/author/wdavidmarx/
[11] https://www.facebook.com/sharer.php?u=https://culture.ghost.io/cultural-stasis-produces-fewer-cheesy-relics-like-rocky-iv/
[12] https://twitter.com/intent/tweet?url=https://culture.ghost.io/cultural-stasis-produces-fewer-cheesy-relics-like-rocky-iv/&text=Cultural%20Stasis%20Produces%20Fewer%20Cheesy%20Relics%20like%20Rocky%20IV
[13] https://ghost.org/
[14] https://twitter.com/wdavidmarx

View File

@@ -0,0 +1,13 @@
Not Acceptable
An appropriate representation of the requested resource could not be found on
this server.
Available variants:
• [1]e64e45a6-7f23-4679-99bd-a88e987aca7e.xml , type application/xml
References:
[1] https://doriantaylor.com/e64e45a6-7f23-4679-99bd-a88e987aca7e.xml

View File

@@ -0,0 +1,101 @@
[1]Rach Smith [2]
Rach Smith'sdigitalgarden
• [3]Notes
• [4]Tags
• [5]About
• [6]Subscribe image/svg+xml
• rainbows[7][ ]
• cursor trails[8][ ]
• dark mode[9][ ]
It's okay to lower the bar
Added: August 13, 2024
• [10]#journaling
I had a journal entry in my [11]Hobonichi Techo Cousin for every day this year
until July, where I have a string of blank pages.
I was doing so well, and I was really in to the swing of journaling every day…
until I wasnt.
The cause? Doing a little too well at journaling, actually. I got inspired by
the fancy spreads of other Hobonichi enthusiasts on Instagram, and started
making my own pretty layouts. My pages were looking beautiful until things got
busy and my mental health/energy [12]took a dive.
Id raised the bar for my daily entries, and didnt have the energy to meet it.
But instead of just lowering the bar and going back to boring/ugly entries,
perfectionist thinking kicked in. If I couldnt make it good, why do it at all?
So I missed a couple of days, at which point the all-or-nothing thinking
started up. Ive broken my journaling streak, why even continue? Ive basically
ruined my Hobonichi now, for the rest of 2024!
Thankfully, I was eventually able to shake myself out of those thoughts and
come back to just getting something, anything on the page at the end of the
day. But there was a while there were I really thought I may as well put the
journal in the bin.
I had to remind myself that its okay to lower the bar. That an average version
of something is better than a perfect version of nothing. All I can do is have
a go.
Thanks for reading! If you'd like to share your thoughts you can [13]leave a
comment, [14]send me an email, hit me up [15]on Mastodon, or [16]add an issue
on GitHub.
Comments
Leave a Comment
💯 Thanks for submitting your comment! It will appear here after it has been
approved.
Comment (You can use [19]Markdown syntax if you wish) [ ]
Name[21][ ]
Website[22][ ]
URL[23][ ]
Submit
Acknowledgement of Country
I acknowledge the [25]Gubbi Gubbi people, the Traditional Owners of the land
and waterways where I live. I would like to pay my respects to Elders past,
present and emerging.
• [26] codepen.io/rachsmith
• [27]github.com/rachsmithcodes
• [28] mastodon.social/@rachsmith
• [29]contact@rachsmith.com
© 2024 Rachel Smith
References:
[1] https://rachsmith.com/
[2] https://rachsmith.com/
[3] https://rachsmith.com/
[4] https://rachsmith.com/tags/
[5] https://rachsmith.com/about/
[6] https://rachsmith.com/feed.xml
[10] https://rachsmith.com/tags/#journaling
[11] https://rachsmith.com/hobonichi-techo-cousin/
[12] https://rachsmith.com/mnnm-7/
[13] https://rachsmith.com/lower-the-bar/#comments
[14] mailto:contact@rachsmith.com?subject=re%3A%20It's%20okay%20to%20lower%20the%20bar
[15] https://mastodon.social/@rachsmith
[16] https://github.com/rachsmithcodes/rachsmith.com/issues
[19] https://www.markdownguide.org/basic-syntax/
[25] https://gubbigubbidyungungoo.com/gubbi-gubbi-country/
[26] https://codepen.io/rachsmith
[27] https://github.com/rachsmithcodes
[28] https://mastodon.social/@rachsmith
[29] mailto:contact@rachsmith.com

View File

@@ -0,0 +1,918 @@
The murmur of the snarkmatrix…
Jennifer § [1]Two songs from The Muppet Movie / 2021-02-12 15:53:34
A few notes on daily blogging § [2]Stock and flow / 2017-11-20 19:52:47
El Stock y Flujo de nuestro negocio. redmasiva § [3]Stock and flow /
2017-03-27 17:35:13
Meet the Attendees edcampoc § [4]The generative web event / 2017-02-27
10:18:17
Does Your Digital Business Support a Lifestyle You Love? § [5]Stock and flow /
2017-02-09 18:15:22
Daniel § [6]Stock and flow / 2017-02-06 23:47:51
Kanye West, media cyborg MacDara Conroy § [7]Kanye West, media cyborg /
2017-01-18 10:53:08
Inventing a game MacDara Conroy § [8]Inventing a game / 2017-01-18 10:52:33
Losing my religion | Mathew Lowry § [9]Stock and flow / 2016-07-11 08:26:59
Facebook is wrong, text is deathless Sitegreek !nfotech § [10]Towards A
Theory of Secondary Literacy / 2016-06-20 16:42:52
[11]Snarkmarket
/ [12]whatmarket?
[13]Stock and flow
/ [14]Robin
I was an economics major in college, and Ive been grateful ever since for a
few key concepts those courses drilled into me: things like opportunity cost,
sunk cost, and marginal cost. I think about this stuff all the time in my
everyday life. I think about the sunk cost of waiting for a slow elevator; I
think about the marginal cost of making myself another sandwich.
I think most of all about the concept of stock and flow.
Do you know about this? It couldnt be simpler. There are two kinds of
quantities in the world. Stock is a static value: money in the bank or trees in
the forest. Flow is a rate of change: fifteen dollars an hour or three thousand
toothpicks a day. Easy. Too easy.
But I actually think stock and flow is a useful metaphor for media in the 21st
century. Heres what I mean:
• Flow is the feed. Its the posts and the tweets. Its the stream of daily
and sub-daily updates that reminds people you exist.
• Stock is the durable stuff. Its the content you produce thats as
interesting in two months (or two years) as it is today. Its what people
discover via search. Its what spreads slowly but surely, building fans
over time.
Flow is ascendant these days, for obvious reasons—but I think we neglect stock
at our peril. I mean that both in terms of the health of an audience and, like,
the health of a soul. Flow is a treadmill, and you cant spend all of your time
running on the treadmill. Well, you can. But then one day youll get off and
look around and go: oh man. Ive got nothing here.
Im not saying you should ignore flow! This is no time to hole up and work in
isolation, emerging after years with your work in hand. Everybody will go: huh?
Who are you? And even if they dont—even if your exquisite opus is the talk of
the tumblrs for two whole days—if you dont have flow to plug your new fans
into, youre suffering a huge (get ready for it!) opportunity cost. Youll have
to find those fans all over again next time you emerge from your cave.
Heres a case study. My pal Alexis Madrigal has got the stock/flow balance
down. On one end of the spectrum, hes [15]a Twitter natural and [16]a
fast-paced writer. Madrigals got mad flow; you plug in, and you get a steady
stream of interesting stuff. But on the other end of the spectrum—and man, this
is just so important—hes written a deep, nuanced [17]history of green tech in
America. This is a book intended to stand the test of time.
You can tell that I want you to stop and think about stock here. I feel like we
all got really good at flow, really fast. But flow is ephemeral, while stock
sticks around. Stock is capital. Stock is protein.
And the real magic trick is to put them both together. To keep the ball
bouncing with your flow—to maintain that open channel of communication—while
you work on some kick-ass stock in the background. Sacrifice neither. The
hybrid strategy.
So, I was thinking about stock and flow just now while I was standing in my
kitchen doing the dishes, and I thought, wait, there are all these
super-successful artists and media people today who dont think about flow at
all. Like, Wes Anderson? Come on. Hes all stock. And he seems to be
doing okay.
But I think the secret is that somebody else does his flow for him. I mean,
what are PR and advertising but flow, bought and paid for? Rewind history and
put Wes Anderson on his own—proprietor of an extremely symmetrical YouTube
channel—and I dont think you get the same result, not if its one video every
three years.
So, if youre in the position to have somebody else handle your flow while you
tend to your stock: great. But thats true for almost no one, and will I think
be true for even fewer over time, so you need to have your own plan for
this stuff.
Anyway, this is not a huge insight, I know. Mostly I just wanted to share the
terminology, because its been echoing in my head since my first microeconomics
course. Today, whenever I put my hands on the keyboard, Im asking myself: Is
this stock? Is this flow? Hows my mix? Do I have enough of both?
[18]January 18, 2010 / [19]Greatest hits
[20]73 comments
[21]Joshua Dance [22]says…
Great ideas. I feel like most of the “Social Media Guru” people are all flow
and no stock. They dont every produce anything that stands the test of time.
And for that matter a lot of bloggers are just flow as well. 33 Ways to Make
Money posts get outdated pretty quick. I feel that I also have neglected stock
with my own stuff and have trying to get back to more stock producing. Thanks
for the great ideas.
/ [23]Reply
[24]Saheli [25]says…
This is a good mental model, with a nice Anglo-Saxon poetic ring to it, for
balancing ones daily management. Nice.
/ [26]Reply
[27]Robin Sloan [28]says…
Im glad you picked up on the linguistics of it. Its just nice to say: stock
and flow.
[29]PoN [30]says…
I prefer hustle and flow.
[31]http://www.pp2g.tv/vZ3pwZnM_.aspx
/ [32]Reply
[33]typofi [34]says…
Thanks for the lingo!
Ive been thinking lately how the flow (I just didnt have a good word for it
before) can be seen as noise (from communication theories) in situations where
you are trying to get to the stock.
I mean moments where you know that the information you seek is out there, but
you cant find what you want because all you get is, as said by Joshua, “33
ways of doing x” and tag clouds bursting with #ashtonkutchner, #lol, and #
retweetthis. Even if youre not looking for something in particular, the
problem often arises when you are trying to find deeper articles in general.
Im not against the social media, far from it. Im just acknowledging that we
need better search algorithms and other tools to balance or even battle the
pure attention-seeking flow conventions. (e.g. celebrity gossip, or people
blogging top lists and how-to articles just because they know those will
attract traffic)
/ [35]Reply
[36]Carlos [37]says…
Awesome. I think people should think more about the legacy they will leave to
the future generations. Could be a small business or some nice paintings,
everyone wants to be remembered, and thats the stock you are talking about
here. The flow is the thing that comes in the meantime you are building your
stock.
/ [38]Reply
[39]milann [40]says…
ahahah
you took the words out of my mouth.
thank you for giving the phantoms in my head some form,
me and my business associates have been going about this for months now and it
still felt like we were trying to give words to some silent moments in a Godard
film or something.
/ [41]Reply
[42]J. Smith [43]says…
great stuff. couldnt agree more. file this under “read or die.”
/ [44]Reply
[45]Frank Chimero [46]says…
This is fantastic, Robin. Really.
I get a lot of questions from creatives just beginning (or about to begin) in
their respective fields about how to get started promoting themselves.
I had been using a similar idea, but a poor analogy: you breadcrumb your
audience along like Hansel and Gretel did, leading your fans along a trail of
small bits of information and tiny delicious morsels of output. Its important
that these tasty morsels have a clear point of view and a consistent flavor.
Then, every once in a while, deliver a house of candy. But dont eat your
audience. Thatd be bad.
In retrospect, stock and flow is a way better way to say this.
/ [47]Reply
[48]Robin Sloan [49]says…
Ha hahahahahaha. I love this. Its the sinister version of stock. Now I want to
come up w/ more analogies. Like,
flow : stock :: stormtroopers : DEATH STAR
[50]Basti Hirsch ッ [51]says…
“Social Media Guru” people are all flow and no stock. It really is fun to say,
but I also still love the “all hat and no cattle” idiom.
Perhaps we need search engines that give us the explicit choice of asking
“Whats in stock”? I mean we already do that a bit when deciding to search
amazon, delicious, twitter, or Google scholar. Only show me results that have
stood the test of time. Words that last.
/ [52]Reply
[53]Robin Sloan [54]says…
Thats interesting! Some sense of measuring whats held up… if nothing else, a
graph in Google Analytics that shows which content has had a durable audience.
Durability is a key word.
[55]IQpierce [56]says…
I think that Google already works this way… which might be why its so
successful.
In college a professor told me that fundamentally, Googles algorithm works
around the concept of “hubs” and “content.” This is actually a very old idea:
because socially, people themselves have always been about “hubs” and
“content.” If youre the socially-awkward brilliant programmer, youre the
content: you can make stuff. If youre the incredibly outgoing HR lady who
seems to know every other person in her industry, youre a hub.
Googles job is to help people get to content; but they do it by using hubs.
Kottke.org, twitter posts, blogs these are hubs/flow that people use to point
their friends towards the content/stock pages of useful information. Google
rates a hub higher when it links to high-quality content; and they link content
higher when its linked-to by a highly-rated hub (in a nice chicken-and-egg
paradox).
JTS [57]says…
To be honest, theres a lot of runners who train on treadmills all the time (or
a lot of the time), and it can be a fairly effective way of building up miles.
So that metaphor is a little confusing.
Other than that, I think this is a fairly effective way of explaining the
relationship that many creatives should have/need to have to the web. I work in
publishing, and many of the editors/writers that I interact with on a regular
basis are great stock people — its what theyve been doing for decades. They
are just not very good at flow. On the other hand, I look at what a lot of
other media companies/bloggers/creatives/etc are doing and it looks like a
whole lot of flow which feels like a whole lot of spinning of the proverbial
wheels. The ideal mix is something like Franks relationship as described
above.
/ [58]Reply
[59]Robin Sloan [60]says…
Good point re: treadmills. If I wanted to torture the analogy I could say:
“Aha, precisely! Sometimes flow helps you cross-train on your way to making
great stock!”—but mostly, I think I just used too many (different/conflicting)
analogies 🙂
[61]Alexis Madrigal [62]says…
Thanks for the shout out! We need to convene another meeting of the mutual
admiration society soon…
Now that you mention it, heres how I think about stock and flow. Flow is how I
see the world. Stock is what happens when I apply my worldview to something
that matters for long enough that I fundamentally transform how I see the
world. Recording that process is what creates the thing of lasting value. (I
hope.)
And now, heres a thought that is related but sort of tangentially. Ive become
obsessed with Tumblr as a medium for historical investigation recently. Its
just so good at defamiliarization in that Bakhtin sense… One minute youre
looking at pony made out of vegan donuts, the next youre staring at a
little-known stunt from 1955. People who would not read David McCullough in a
million years suddenly find history fascinating. The strangeness and pastness
of the past come to dominate the backcasted ideas that we have about what those
times were like.
But… Tumblr records only the flow of our histories without ever taking stock of
why and how we ended up where we are. There is no record of decisions made or
the worlds forces brought to bear. Tumblrs version of history has no
explanatory power. It does not synthesize what the images from the past with
where we are in the present or with the other things we know of the past. So,
to me, the meaning that the flow of photos has is fundamentally limited, even
if its beautiful and fascinating.
/ [63]Reply
[64]Saheli [65]says…
Flow is how I see the world. Stock is what hap pens when I apply my world
view to some thing that mat ters for long enough that I fun da men­tally
trans form how I see the world. Record ing that process is what cre ates
the thing of last ing value.
Daccord!, she cried, in the most emphatic voice. You describe what I want out
of good writing. This is what makes it so magically, and it hits all the points
of why I value such stock to begin with.
Though what the hell, Snarkmarket? What is up with the kerning in “trans form”
“fun da mentally” “Record ing” “cre ates” and “last ing” when I just copy and
paste? Are you secretly trying to trick me into thinking like some sort of
crazed poet? That is a weird way to generate stock.
[66]Robin Sloan [67]says…
(They are wee microspaces that allow the words to break gracefully across the
page. They only become evident when ungainly humans rip these words from their
perfect habitat.)
[68]Basti Hirsch ッ [69]says…
“Tumblrs version of history has no explanatory power.”
This is a great sentence, and of course also applies to twitter or your daily
news segment.
Ryan McAdam [70]says…
I understand and agree with stock & flow as it pertains to social media, et al.
However, I think you may want to take another look at the premise you use to
describe stock. In practice, money is made from thin air in ever increasing
amounts. Trees are a natural resource and as such are finite whether based
upon available land, growth cycles, or environmental influences. Im suspect
your friend who is writing about green technology would agree.
/ [71]Reply
[72]TRMW [73]says…
Thanks for this. Well said.
/ [74]Reply
[75]Nathan Bowers [76]says…
Speaking of flow, wheres your Twitter feed Robin? Looked around, cant find
it.
Thats another strength of things like Tumblr and Twitter, it just takes one
click to form a lightweight “I want to know more about you” relationship.
“Flow” is stickier than “Stock”.
/ [77]Reply
[78]Robin Sloan [79]says…
Im [80]@robinsloan! And somewhat discouraged it was hard to find. Hmm.
Youre totally right about the interplay; when everythings working together,
stock leads to flow leads to stock.
[81]Tim Maly [82]says…
I think youre right on about how we tend to feel like we got good at flow
really fast. Ive also been coming around to thinking that this might often be
an illusion. Its really, really easy to reblog, retweet, reshare without
thinking and to clog the flow with stuff that other people have seen or that
arent on topic (for whatever value of “on topic” you feel like your feed
should have).
This is one of the things that recommends the official retweet feature. If
dozens of your friends retweet the same thing, you dont have to see it dozens
of times. Think about the nature of the problem that this is solving.
My watchphrase for the latter quarter of 2009 and all of 2010 is “Less often,
higher quality”. I hope that as many of my Quiet Babylon posts as I can manage
will be of stock caliber and Id like to put out at least one project thats
even better. But I think that this needs to apply to the flow work as well. The
best feeds are the ones where I am delighted every time there is an update. I
aspire to be one of those.
One of the best things that I ever did for my feelings about my work was to
more carefully distinguish between my stock and my flow and to distinguish
between even types of flow (I didnt know that was what they were called at the
time). Do I link up my Tumblr with my Twitter with my gReader share with
Facebook with my blog? I find that the more I answer “no” to this question, the
happier I feel with the output of my work in any given arena, and the more that
people who might be interested in what Im up to can pick and choose how much
of the firehose they have to consume.
This has been an episode of “Tim responds to a comment and ends up
pontificating at length about his plans for the year” starring Tim as Tim.
/ [83]Reply
[84]Robin Sloan [85]says…
My current stock/flow hero (besides A. Madrigal) is [86]Jonathan Harris. Just
one photo every day. And each one is great.
And importantly, as he wanders around & shares this flow of photos, hes
working on generative art projects that end up being totally genre-defining and
museum-worthy. Serious stock.
[87]Alexis Madrigal [88]says…
And it was you, in fact, who convinced me to unlink my Twitter and Tumblr,
which was a fantastic idea. It freed me up to think about my Tumblr as its own
thing, not an adjunct to my Twitter flow.
[89]Adam Rice [90]says…
This sounds like the stuff that Ben Hammersley has been writing about lately.
/ [91]Reply
Sarah [92]says…
I was thinking about the same thing yesterday, though not in economic terms,
since I was the opposite of an economics major in college. I was feeling a bit
worried about the constancy with which were all now butting up against the
real-time state of our immediate (if virtual) surroundings, and wondering what
impact this has on our ability to be truly reflective and to produce writing
that represents moments spent *out* of contact with that perpetual flow. We not
only need the time to have the realizations that come with distance and
reflection, we also need time to examine and articulate them in terms that go
beyond the staccato of twitter and tumblr. I dont generally fall in the camp
of people who express an urgent, woeful need to “unplug,” since I dont like
thinking that the majority of my time (during which Im “plugged in”) is
somehow doing me a terrible long-term disservice. However I do think we do
ourselves a disservice when we forget to alter our levels of immersion in the
real-time networked conversations. It doesnt have to happen in a cabin in the
woods but itd be awfully sad if it stopped happening altogether.
/ [93]Reply
[94]TheChad [95]says…
Great post. Your words are invaluable. Finding the right balance between stock
and flow is key to being a success and relevant.
/ [96]Reply
[97]JtFaber [98]says…
Great, pressure is off. I can delegate my tweets to the intern and work on
building my… umm… thing, that I do…
/ [99]Reply
[100]Jason Robinson [101]says…
Really nice post. Extremely relevant when it comes to individuals and small
orgs. Although time-consuming (is it in fact cost-beneficial?), balancing stock
and flow is clearly a necessary evil in todays business world.
Whats also interesting is looking at organizations who facilitate and/or
manage stock and flow. The first successful dotcoms created businesses out of
“stock” think Amazon. Twitter and Facebook made huge businesses out of
“flow”. Now that I think about it, didnt Google do this twice once with
indexing a growing number of webpages, the second with YouTube?
As we look forward, I wonder how many new businesses will make stock out of
flow magazines from blog posts, Google/Bing indexing Twitter feeds. I know
this was just a metaphor but I wonder whats next? The answer could make
someone rich.
/ [102]Reply
[103]Dan Conover [104]says…
I have nothing eloquent to add. I am your geek fanboy. Thats all.
/ [105]Reply
[106]Betty Ann [107]says…
I would add that in the world of flow and stock a hook (tweetable, quotable,
crisp headline, or ? ) embedded in each stock entry gets it into flow.
/ [108]Reply
[109]Robin Sloan [110]says…
Yes, totally! Designing for flow. Building bridges between stock and flow.
[111]Tim Maly [112]says…
Ive often thought that Id like Matthew Battles of HILOBROW to write the
tweets promoting all my posts. When he does see one worth passing on, his
summaries are generally better than mine.
[113]Saheli [114]says…
BettyAnn, are you an editor? Because that succinctly summarizes the secret of
producing a great magazine thats also a popular magazine.
[115]JMO [116]says…
Thanks for this Robin. It really gets me thinking about what I make and intake.
I often find myself in the space smack in the middle: I create Flock. I write
things. I dont have the time or discipline to focus and make things that are
very durable. Nor do I have the time or discipline to just publish and make a
constant Flow. I feel stuck with something that is not good on any front. I
write about 1,000 words once a week and nothing seems to stick after hitting
publish.
On top of my day job, I do quite a bit of consuming other peoples Flow and
Stock. I value learning and I truly enjoy by daily sit-down with Google Reader.
How do you create the balance necessary to have light but constant Flow and
solid Stock while still keeping up with everything?
/ [117]Reply
[118]Elizabeth Madrigal [119]says…
Great piece and I agree, Alexis has got it all.
His mom.
/ [120]Reply
[121]Kate [122]says…
Absolutely brilliant Robin. Thank you, genius person.
/ [123]Reply
[124]Jay [125]says…
When launching my web design shops blog, we divided it along these exact
lines. Literally, divided it in half; short, ephemeral posts—i.e. flow—on [126]
one side, considered, polished, long-form posts—i.e. stock—on the [127]other
side.
/ [128]Reply
[129]Matthew Battles [130]says…
Coming late to this, feasting on the flow of commentary and its glimmers of
great stock beyond. (And thanks for the h/t, Tim—I love tweeting your posts.
But my Twitter stream may be even harder to find than Robins ;-])
But I wonder about the analogy a little bit. Because the stock were talking
about here isnt exactly like the economists stock, is it? I mean, in
economics, flow can deplete stock (or add to it, if youre really lucky). But
it seems like our stock kind of feeds on flow—out- as well as in-. Without flow
it dies, or fails to thrive, goes dark. If youve got your flow on, your stock
only grows. And flows not a matter of simple exchange, but current, of
circuitry. Currency! Flows about moving it on down the line.
You probably know where Im going with this: “Increase comes to a gift when it
moves from second to third party,” writes Lewis Hyde, “not in the simpler
passage from first to second. The increase begins when the gift has passed
through someone…. Capital earns profit… but gifts that remain gifts do not earn
profit, they give increase.”
Its like particle and wave, maybe. Increase follows the gift—wavelike, it
rides the flow, lighting up everyones stock as it goes.
/ [131]Reply
[132]jrome [133]says…
Stow is flow thats been stocked.
/ [134]Reply
Kirstin Butler [135]says…
Hi Robin,
In just one blog post you defined the heuristic (yup, I wrote that) Ive been
trying to figure out for the last few months. This is proving to be such a
difficult balance for me to strike creativelymostly because the respective
returns on stock and flowdog years vs. immediateare so different. I find the
connection, and dialogue, and real-time feedback around flow to be really
addictive.
I wonder whether theres a lifelog application that could capture which state
youre in at various points, so that you could review a receipt at the end of
the day and then make adjustments.
Thanks so much for this-
Kirstin
p.s. I thought the blog [136]http://weloveyouso.com/ was a great flow
compliment to the stock that is Where the Wild Things Are.
/ [137]Reply
[138]Debbie [139]says…
Very powerful concepts. You blended economics, about which I know little, with
writing, which Ive been practicing for 36+ years. By doing so, not only did
you make economic concepts understandable to me, but palpable. Thank you.
/ [140]Reply
[141]tara - scoutie girl [142]says…
Spot on. I just adapted the editorial style of my blog to improve my “stock.”
Instead of just constantly using a flow of cool stuff to attract page views,
Im concentrating more on stories and people. I think these types of posts
automatically have a longer tail.
Im also packaging each weeks posts as “issues” so that even the smaller pieces
fit into a type of stock.
Thank you so much for giving me language to explore this idea further!
/ [143]Reply
[144]jane stevens [145]says…
This is a great way to look at categorizing info, Robin. I think that the best
stock is presented in context, in a format where the visual structure adds to
the context in the stock. e.g. [146]http://vis.stanford.edu/protovis/ex/
jobs.html and many of the other examples on protovis.
Theres one more aspect to this that weve been working on at LJWorld.com — how
to develop a structure for flow & stock so that a local community can use both
in an integrated manner to take action to solve local problems.
Were launching a local health site called HealthCommons next month in which
were integrating social media with journalism in a way that I hope will give
the local community the tools to improve community health.
/ [147]Reply
[148]Jen Bekman [149]says…
Perfect.
I think I love you. For your mind, of course.
/ [150]Reply
[151]ToastyKen [152]says…
I was just thinking that even more fundamental than your stock:flow ratio is
your creation:consumption ratio. I spend so much time consuming information and
art these days, but not enough time giving back.
/ [153]Reply
[154]Aaron Marshall [155]says…
If you had a donate button on this post, I would give 20 bucks right now.
I only heard a verbal summary of it from my friend David ([156]http://
designintellection.com) and I was already using “stock and flow” in client
meetings.
BIG thank you.
/ [157]Reply
[158]Alek Tarkowski [159]says…
hi Robin, I really like the concept of a stock/flow balance. I have two
comments on that: 1) it applies not only to production, but also to consumption
of content: you need both an intake of flow, and some serious stock; 2) flow
can sometimes become stock. have you ever found a new blog and read it from
“now” until its beginning, treating it like a one big book? with a good blog,
the experience is one of dealing with some serious stock content. Having said
that, theres a limit, I think, to how granular flow can be and still be able
to transform into stock a years worth of twitter stream wont become stock no
matter what (unless youre a haiku poet). Thanks for this inspiration!
/ [160]Reply
[161]Liz Dorland [162]says…
Hate to be a nitpicker, but…
While I agree that the relationship between the two things is as you describe,
one of the words (actually the concept behind the word) doesnt work.
The output on twitter and facebook to me much more like a “stream”. The
definition that began the piece: “Flow is a rate of change” doesnt fit. A
twitter stream as a whole has no denominator, if you will.
Using the stream analogy, twitter output is like the water in the stream. There
is a quantity of water that passes by, and the total quantity depends on the
rate of flow. But the “rate” is not the stream! The scientist in me made me
write this post I think. And the late hour. 😉
Try an electrical analogy. Is the twitter and facebook “stream” measured in
amperes, or in coulombs? Ask your favorite physicist. Im not sure, but I think
I vote for coulombs.
/ [163]Reply
[164]Christie Nicholson [165]says…
Hi Robin, Thought you might be interested in this Globe&Mail article,
“Information Rich and Attention Poor” published last fall, that also describes
the metaphor of stock and flow.
[166]http://bit.ly/3oJXjn
Heres the relevant pgraph:
Knowledge is evolving from a “stock” to a “flow.” Stock and flow for example,
wealth and income are concepts familiar to accountants and economists. A
stock of knowledge may be thought of as a quasi-permanent repository such as
a book or an entire library whereas the flow is the process of developing the
knowledge. The old Encyclopedia Britannica was quintessentially a stock;
Wikipedia is the paradigmatic example of flow. Obviously, a stock of knowledge
is rarely permanent; it depreciates like any other form of capital. But
electronic information technology is profoundly changing the rate of
depreciation. By analogy with the 24-hour news cycle (which was an early
consequence of the growing abundance of video bandwidth as cable television
replaced scarce over-the-air frequencies), there is now the equivalent of a
24-hour knowledge cycle “late-breaking knowledge,” as it were. Knowledge is
becoming more like a river than a lake, more and more dominated by the flow
than by the stock. What is driving this?
Then Nicholson goes on to describe the possible (and awesome) drivers behind
WHY knowledge has evolved from stock to flow. You say its for obvious reasons,
but I think the reasons are still quite fascinating and worthwhile.
(It is an excerpt from a much longer speech he gave at the Fiesole Retreat in
Glasgow, Scotland, July 09.)
Interesting stuff!
lemme know your thoughts,
christie
/ [167]Reply
Jay [168]says…
nice post!! i would like to add that it takes time and patience to develop the
stock whereas to develop the flow you can start anytime. So one should
start working on stock asap.
I am no economist,so am not sure youll agree, but this is what my conclusion
is.
/ [169]Reply
[170]Susan Friedmann [171]says…
Just learned about flow and stock from Dennis Callahan at PodCamp 5. After
doing a search I found this post which I absolutely love. It makes so much
sense and certainly helps put much of the social media revolution into
perspective for me. Thanks!
/ [172]Reply
[173]Arsene Hodali [174]says…
Hey, just wanted to comment about how much this post inspired me to reflect on
my own inner conflicts with media and life.
I actually wrote about it on my blog in details (1700+ words) and I added my
own views to it. Check it out below, see whether or not Im onto something or
just full of crap. And btw, yes this does sound like a shameless self-promotion
but…
> Stock & Flow: The Hard Parts The Switch [175]http://ow.ly/34d8q
/ [176]Reply
Jessica [177]says…
I love this so much. You should know that this idea is still making the
conference circuit. I heard about it at the recent Confab content strategy
conference. A really helpful analogy thanks for writing it up so
thoughtfully!
/ [178]Reply
Daniel [179]says…
Briliant, thanks. I like the cornerstone content concept that Copyblogger put
together. So its the stock, and then the flow is essential. Value content over
time.
/ [180]Reply
References:
[1] https://snarkmarket.com/2021/8283#comment-593203
[2] https://snarkmarket.com/2010/4890#comment-577756
[3] https://snarkmarket.com/2010/4890#comment-571194
[4] https://snarkmarket.com/2010/5979#comment-570664
[5] https://snarkmarket.com/2010/4890#comment-569688
[6] https://snarkmarket.com/2010/4890#comment-569555
[7] https://snarkmarket.com/2010/6262#comment-568744
[8] https://snarkmarket.com/2011/6811#comment-568743
[9] https://snarkmarket.com/2010/4890#comment-552719
[10] https://snarkmarket.com/2009/3115#comment-551896
[11] https://snarkmarket.com/
[12] https://snarkmarket.com/2010/4890/#what
[13] https://snarkmarket.com/2010/4890
[14] https://snarkmarket.com/author/robin
[15] http://twitter.com/alexismadrigal
[16] https://www.theatlantic.com/author/alexis-madrigal/
[17] http://www.greentechhistory.com/
[18] https://snarkmarket.com/2010/4890
[19] https://snarkmarket.com/category/greatest-hits
[20] https://snarkmarket.com/2010/4890/#comments
[21] http://www.joshuadance.com/
[22] https://snarkmarket.com/2010/4890#comment-7243
[23] https://snarkmarket.com/2010/4890?replytocom=7243#respond
[24] http://www.sahelidatta.com/
[25] https://snarkmarket.com/2010/4890#comment-7244
[26] https://snarkmarket.com/2010/4890?replytocom=7244#respond
[27] http://robinsloan.com/
[28] https://snarkmarket.com/2010/4890#comment-7245
[29] http://pointsofnote.com/
[30] https://snarkmarket.com/2010/4890#comment-7246
[31] http://www.pp2g.tv/vZ3pwZnM_.aspx
[32] https://snarkmarket.com/2010/4890?replytocom=7246#respond
[33] http://www.parafovea.com/
[34] https://snarkmarket.com/2010/4890#comment-7247
[35] https://snarkmarket.com/2010/4890?replytocom=7247#respond
[36] http://desparchando.com/
[37] https://snarkmarket.com/2010/4890#comment-7248
[38] https://snarkmarket.com/2010/4890?replytocom=7248#respond
[39] http://stompingintheyard.blogspot.com,milann.blogspot.com/
[40] https://snarkmarket.com/2010/4890#comment-7249
[41] https://snarkmarket.com/2010/4890?replytocom=7249#respond
[42] http://twitter.com/jdotsmith
[43] https://snarkmarket.com/2010/4890#comment-7250
[44] https://snarkmarket.com/2010/4890?replytocom=7250#respond
[45] http://www.frankchimero.com/
[46] https://snarkmarket.com/2010/4890#comment-7251
[47] https://snarkmarket.com/2010/4890?replytocom=7251#respond
[48] http://robinsloan.com/
[49] https://snarkmarket.com/2010/4890#comment-7252
[50] http://twitter.com/cervus
[51] https://snarkmarket.com/2010/4890#comment-7253
[52] https://snarkmarket.com/2010/4890?replytocom=7253#respond
[53] http://robinsloan.com/
[54] https://snarkmarket.com/2010/4890#comment-7262
[55] http://deepplaid.com/
[56] https://snarkmarket.com/2010/4890#comment-7270
[57] https://snarkmarket.com/2010/4890#comment-7254
[58] https://snarkmarket.com/2010/4890?replytocom=7254#respond
[59] http://robinsloan.com/
[60] https://snarkmarket.com/2010/4890#comment-7263
[61] http://www.greentechhistory.com/
[62] https://snarkmarket.com/2010/4890#comment-7255
[63] https://snarkmarket.com/2010/4890?replytocom=7255#respond
[64] http://www.sahelidatta.com/
[65] https://snarkmarket.com/2010/4890#comment-7276
[66] http://robinsloan.com/
[67] https://snarkmarket.com/2010/4890#comment-7277
[68] http://twitter.com/cervus
[69] https://snarkmarket.com/2010/4890#comment-7283
[70] https://snarkmarket.com/2010/4890#comment-7256
[71] https://snarkmarket.com/2010/4890?replytocom=7256#respond
[72] http://trmw.org/
[73] https://snarkmarket.com/2010/4890#comment-7257
[74] https://snarkmarket.com/2010/4890?replytocom=7257#respond
[75] http://uxhero.com/
[76] https://snarkmarket.com/2010/4890#comment-7258
[77] https://snarkmarket.com/2010/4890?replytocom=7258#respond
[78] http://robinsloan.com/
[79] https://snarkmarket.com/2010/4890#comment-7261
[80] http://twitter.com/robinsloan
[81] http://quietbabylon.com/
[82] https://snarkmarket.com/2010/4890#comment-7260
[83] https://snarkmarket.com/2010/4890?replytocom=7260#respond
[84] http://robinsloan.com/
[85] https://snarkmarket.com/2010/4890#comment-7264
[86] http://www.number27.org/today.php
[87] http://www.greentechhistory.com/
[88] https://snarkmarket.com/2010/4890#comment-7265
[89] http://8stars.org/
[90] https://snarkmarket.com/2010/4890#comment-7266
[91] https://snarkmarket.com/2010/4890?replytocom=7266#respond
[92] https://snarkmarket.com/2010/4890#comment-7267
[93] https://snarkmarket.com/2010/4890?replytocom=7267#respond
[94] http://thechadblog.com/
[95] https://snarkmarket.com/2010/4890#comment-7268
[96] https://snarkmarket.com/2010/4890?replytocom=7268#respond
[97] http://twitter.com/JtFaber
[98] https://snarkmarket.com/2010/4890#comment-7269
[99] https://snarkmarket.com/2010/4890?replytocom=7269#respond
[100] http://www.planetyou.net/
[101] https://snarkmarket.com/2010/4890#comment-7271
[102] https://snarkmarket.com/2010/4890?replytocom=7271#respond
[103] http://danconover.com/
[104] https://snarkmarket.com/2010/4890#comment-7272
[105] https://snarkmarket.com/2010/4890?replytocom=7272#respond
[106] http://bettyann.tumblr.com/
[107] https://snarkmarket.com/2010/4890#comment-7273
[108] https://snarkmarket.com/2010/4890?replytocom=7273#respond
[109] http://robinsloan.com/
[110] https://snarkmarket.com/2010/4890#comment-7275
[111] http://quietbabylon.com/
[112] https://snarkmarket.com/2010/4890#comment-7278
[113] http://www.sahelidatta.com/
[114] https://snarkmarket.com/2010/4890#comment-7280
[115] http://jmoswalt.com/
[116] https://snarkmarket.com/2010/4890#comment-7274
[117] https://snarkmarket.com/2010/4890?replytocom=7274#respond
[118] http://greenlandlady.com/
[119] https://snarkmarket.com/2010/4890#comment-7279
[120] https://snarkmarket.com/2010/4890?replytocom=7279#respond
[121] http://mccaffery.ca/kate2.0/
[122] https://snarkmarket.com/2010/4890#comment-7281
[123] https://snarkmarket.com/2010/4890?replytocom=7281#respond
[124] http://www.fullstopinteractive.com/
[125] https://snarkmarket.com/2010/4890#comment-7282
[126] http://www.fullstopinteractive.com/blog/#/full-exposure
[127] http://www.fullstopinteractive.com/blog/#/full-disclosure
[128] https://snarkmarket.com/2010/4890?replytocom=7282#respond
[129] http://hilobrow.com/
[130] https://snarkmarket.com/2010/4890#comment-7284
[131] https://snarkmarket.com/2010/4890?replytocom=7284#respond
[132] http://lessonsinordinary.blogspot.com/
[133] https://snarkmarket.com/2010/4890#comment-7285
[134] https://snarkmarket.com/2010/4890?replytocom=7285#respond
[135] https://snarkmarket.com/2010/4890#comment-7286
[136] http://weloveyouso.com/
[137] https://snarkmarket.com/2010/4890?replytocom=7286#respond
[138] http://breathingcolorintoteal.com/
[139] https://snarkmarket.com/2010/4890#comment-7287
[140] https://snarkmarket.com/2010/4890?replytocom=7287#respond
[141] http://www.scoutiegirl.com/
[142] https://snarkmarket.com/2010/4890#comment-7288
[143] https://snarkmarket.com/2010/4890?replytocom=7288#respond
[144] http://www.rejurno.com/
[145] https://snarkmarket.com/2010/4890#comment-7289
[146] http://vis.stanford.edu/protovis/ex/jobs.html
[147] https://snarkmarket.com/2010/4890?replytocom=7289#respond
[148] http://www.personism.com/
[149] https://snarkmarket.com/2010/4890#comment-7290
[150] https://snarkmarket.com/2010/4890?replytocom=7290#respond
[151] http://subjunctive.net/
[152] https://snarkmarket.com/2010/4890#comment-7291
[153] https://snarkmarket.com/2010/4890?replytocom=7291#respond
[154] http://aaronmarshall.co.za/
[155] https://snarkmarket.com/2010/4890#comment-7292
[156] http://designintellection.com/
[157] https://snarkmarket.com/2010/4890?replytocom=7292#respond
[158] http://creativecommons.pl/
[159] https://snarkmarket.com/2010/4890#comment-7293
[160] https://snarkmarket.com/2010/4890?replytocom=7293#respond
[161] http://visualization.ning.com/
[162] https://snarkmarket.com/2010/4890#comment-7295
[163] https://snarkmarket.com/2010/4890?replytocom=7295#respond
[164] http://www.christienicholson.com/
[165] https://snarkmarket.com/2010/4890#comment-7297
[166] http://bit.ly/3oJXjn
[167] https://snarkmarket.com/2010/4890?replytocom=7297#respond
[168] https://snarkmarket.com/2010/4890#comment-7299
[169] https://snarkmarket.com/2010/4890?replytocom=7299#respond
[170] http://www.richesinniches.com/
[171] https://snarkmarket.com/2010/4890#comment-7300
[172] https://snarkmarket.com/2010/4890?replytocom=7300#respond
[173] http://www.danceproof.com/
[174] https://snarkmarket.com/2010/4890#comment-7301
[175] http://ow.ly/34d8q
[176] https://snarkmarket.com/2010/4890?replytocom=7301#respond
[177] https://snarkmarket.com/2010/4890#comment-7308
[178] https://snarkmarket.com/2010/4890?replytocom=7308#respond
[179] https://snarkmarket.com/2010/4890#comment-569555
[180] https://snarkmarket.com/2010/4890?replytocom=569555#respond