• poetry

    Sarah Hurwitz has a Zen “don’t know” before-thinking enlightenment moment on a hitbodedut retreat. I love this.

    That’s all I could say: “I don’t know. I don’t know.” I was saying that over and over again until I said, “I don’t know, but I can’t do this alone.”

    It was a moment of openness, of some surrender. I was so astounded that I started to cry and I thought, “I don’t know what that was about.”

    Don’t know about don’t know! Real talk. She’s staying in that don’t know, letting go. Warmth in my chest as I hear her vocal audio bits through my WH-1000MX4s.

    Monday September 2, 2024
  • rutabagas

    Rutabagas vol. 4: Notes from the other week

    1. There are too many people to listen to out there. (Not sure why I wrote this. Was I overwhelmed by my podcast feed?)
    2. The vulnerabilities of the supply chain undo software’s hard surface. (Also, as Thomas Depierre intones in the hurdy-gurdy of I am not a supplier)
    3. These first two things are about overwhelm, not being able to squeeze the gestalt in your fingers.
    4. My body is a wispy cloud all this content flows through.
    5. Ambient women.
    6. Shze-Hui Tjoa’s remarks from Between the Covers:

    Well, I don’t want to generalize but for me, certainly I feel like fiction and non-fiction feel like they’re the same thing a lot of the time because as you said, for me, my experience of the world incorporates a lot of fiction and if I were to try and tell somebody what it feels like to be me, the most authentic thing to do would be to also tell them about the many fantasies I have in my head and that I’m brewing up all the time, sometimes without my own control or without consciously trying to do it. But they’re always there like a parallel stream of thought that’s happening in my head.

    Monday September 2, 2024
  • speculative nonfiction

    End products, habiting difference

    Chapter 1

    It’s Wednesday evening. Incandescence lazes out from the rectangle in the southeast corner of my home work station. Zen Master Bon Seong, a fiery bushel on screen, a big circle face in the biggest square. He is using the figurative Zen Stick to short-circuit our cognition. He is fond of saying things like “You are stardust” or “What is I?”.

    Jeff breathes hot air through the broom on his face. Those bits go through audio processing and seem to emanate from nowhere around the work station. “The infinite expansion of the same thing” is uttered. We’re discussing how people can interpret the same phenomena differently. As we say: “The whole world is made by mind alone.” And: “The whole world is a single flower.” As the Heart Sutra says: “form is emptiness, emptiness is form”. You cough. I’m startled. I freeze. I think you have COVID. I think I’m going to get it. Then get long COVID. Someone else sees you cough, they think it’s a sneeze and continue on. Perhaps it is.

    The dharma talk continues. There’s nothing wrong with our kaleidoscope of perspectives. They are regular. This is the human mind being itself, resting in its station, but painting a tale on snake, coloring it’s ridiculous karma all over “the small box” that is our little piece of understanding of the universe.

    Gosh, we’re talking about boxes from within boxes. Our thinking creates this separate, enclosed being. (Consciousness bound by a skin sack? Not today, the microbiome field transforms you. (Sigh. No help lugging our sacks and their biomic nerve fields closer together. We have decades of men making the Bay car-friendly, but I can’t get across conveniently. I can’t get to Berkeley from Potrero without spending as much time commuting as the duration sitting meditation with the other sacks for Wednesday night dharma talks.)) The problem is getting attached to difference. Not understanding our “universal substance” – what we say as a convenience. That’s why Zen is about returning to before thinking, accessing the truth before difference. So maybe instead: you cough, then I hand you a tissue.

    I don’t want this post to be about the negatives of the human mind’s proclivity to be a multiversal agent. It’s not really a negative, is it? It’s a matter of fact about our minds as atoms floating in space. Space dust. So, instead: let’s relish in the generative creativities that difference making unleashes when multiple human minds are applied to a problem of interpretation.

    Zen students say: “All things return to the one.” Once again, I have returned to software. One of my favorite ones for organizing and observing life’s exposures, like Scrabble tiles. Despite the one, I’m thinking about difference. The way the one refracts and playfully escapes. Our turn here will be akin to Jewish monotheism – a personal return to spiritual foundations – a spiritual tradition where the only official doctrine claims one god but there’s no consensus about what that means.

    An often-cited medieval midrash asserts that each of the Israelites at Mount Sinai heart God’s revelation differently according to their own capacity to understand it. They each had their own individual experience of the Divine. – Sarah Hurwitz, Here All Along

    A long time passed but the Buddha did not open his mouth to say a single word. He then reached down, picked up a flower and, without a word, held the flower aloft. Nobody in the assembly understood what the Buddha meant by this action. Only Mahakasyapa, sitting at the far back, smiled. – Gye Mun Sunim JDPS, The Birth of Zen

    But not everyone smiled!

    This “problem” of software:

    The epistemological endeavor to solve challenges in the world, happening out there, with(in) reason. Then squeezing all that into binary logics and electrical pulses. Holding a shared thought among humans – sometimes only the wispy thrust of a thought – and making it instructions for the computer.

    Zen Master Seung Sahn used to say you have to “digest your mind meal." He meant your understanding. Making software is a kind of digestion of understanding. Pushing thought stuff through a cheese cloth named Divine. A streetcar named Desire.

    The software process is messy, from beginning to middle to end.

    As a Zen student, I must declare: Where does the one return? Software’s interpretive act is a mix up, a Deleuzian differencing that flies a-face a unifying core concept. Software is never completed, and is not easily located anywhere in particular. Is it those words on the screen, dormant? You could print them. Is it the code as it runs, sonic or electrical (im)pulses amidst fibers, plastics, and metals. Is it what the mouse clicked? When was it conceived? Was it the idea?

    Not the cleanest of lines, but lines in flight.

    I want to argue here that the distinction between the software system and its development–that is, between the process and product–is another “point of opacity” of software engineering since, albeit necessary, it cannot be kept up at all times. – Federica Frabetti, Software Theory

    Software is subversive to hard-dick narratives. It’s feminist, it’s counter-cultural in its essence. That’s why the gate-keepers are relentless trying to wrest it away from the hacker collective with a trademark.

    The wisp of generative artificial intelligence hallucinatory resonance is hardly surprising. It’s a re-run run amok. Where does the one return inside your stolen nebula of documents? No citations, indeed. Where is your mind, Algorithm?

    Messy. Material. Just as digestion is wont to be, from mouth mashing through shitting. The physical body process is mostly obscured by our containment sacks. But it leaks. It’s hacked.

    The metaphor is apt. The world is messy as it is, and software is in it, made from it, made for it. This is why the end product of the software process inspires programmers of acrimonious humor, sometimes of low emotional intelligence, or of self-deprecatedness, or simply exasperated, exhausted… these programmers must declare that which comes from the butt. “This code is crap.” “Who wrote this shit code?”

    It’s generally a pessimistic view to call code crap. I’d offer compost to lift us out of the sour sap to a corresponding brownish, molten tree sappy substance. A brighter horizon. Effluent cream - a regenerative solar punk version. Or something like “the best with what we had.” We need less snark in the industry, more heart, don’t you think?

    Thankfully (we can breath a sigh) there are loving defenders of our end products out there. (Com)posters on the Net. Rachel Kroll is one, synonymously online as rachelbythebay. She emancipates some lines (of code) and litigates her own “crap code” through a simulated trial judged by such an exasperated panel, and then performs my favorite type of “if I knew now what I knew then” refactor blogging with a procedural splunk. It’s a beautiful example of husbanding thought stuff a second time through.

    Chapter 2

    Regarding playful escapings of difference.

    Like verbalized language, programming languages provide multiplicities for getting thoughts out. In English spoken about town, adults will be overheard in conversation to utter variations on simple themes such as bipedal reversal, for example, with such enriched phrases as “they retraced their steps”, or “they went back”, or “they returned to”. Similarly, the general purpose Ruby programming language invented by Yukihiro “Matz” Matsumoto toward the end of the last century was composed with a syntax of including many lexical pathways to express its computer instructions. Of course, while these variations may not be imbued with the rich cultural context of spoken English idioms, they demonstrate what I’ve always found to be a never gets old trait of modern programming languages used in heterogeneous postmodern programming environments: there is creative choice!

    Like English speakers, Ruby programmers will follow contextual precedence and are bounded by syntax constraints. And when going about telling a computer to execute a simple command, they can still do so in ways that delight and surprise us.

    Let’s say a Rubyist wants to reverse a word. In programming parlance we refer to that word as a “string” which represents any sequence of characters including letters, numbers, or symbols. Such a rubyist might reach for an implementation using “primitive,” “imperative” syntax constructs like a while loop, indexed lookups, and string concatenation. These expressions are common across different programming languages. Additionally, they yield more control and flexibility back to the programmer. To wit:

        counter_index = original_word.length
        # create empty string to contain new reversed word
        reversed_word = "" 
        # start processing reversal
        while counter_index > 0
          # decrement the counter
          counter_index = counter_index - 1
          current_letter = original_word[counter_index]
          # add letter to the result
          reversed_word << current_letter
        end
    

    So that’s one option. But looping over a string is such an everyday procedure that Ruby provides conveniences to do this with less code. In place of a while loop, index references, esoteric symbols like <<, the Ruby language includes higher order methods: a bit of logic slurped behind a human-readable name. Like each_char, which means “loop over each character”. And prepend, add something to the beginning of a string. Under the hood, Ruby implements these methods with its own primitives, likely similar to what we’ve written above. Let’s try reversal using the each_char method and see how it fits:

    reversed_word = ""
    original_word.each_char do |letter|
        # optional debuggers
        # puts letter
        # puts reversed
      reversed_word.prepend(letter)
    end
    

    This code is considered easier to read by many programmers because the method names makes the code’s intent obvious. Less code to mash in the mouth also means less information to pack into the brain’s working memory.

    Above we see Ruby’s do block syntax in action. It creates a syntactical wrapper that logically bounds each letter in a semantically associative workspace. Somewhat different than the unhinged free jazz of a while loop block with throw-away variables.

    Generally, declarative methods for strings can play nice together. They can be “chained” together and called sequentially. This makes it easy for a Rubyist to write concisely and fit a complete reversal procedure into one line. No need for instantiating a variable. Just push the word through multiple operations down an assembly line. Programmers verbalize this into one lining:

    original_word
        .chars
        .each_with_object("") { |index, reversed_word| reversed_word.prepend(index) }
        .join
    

    It’s subtle, but there’s actually some extra processing in the above statement by transforming the original word string back and forth from an array to feed the each_with_object. It’s conceptually funky, but since the complicatedness is hidden behind the alluring veil of each_with_object, the statement is still pleasantly terse.

    Of course, who even has all this time on their hands to f*** around. Let’s just make Ruby do all the work for us:

    original_word.reverse
    

    Well, in reality, that quotidien commercial workplace, we often have more time. Because we need to build software to last. Which mean it’s uncommon to see these concise computational lines of code registered into a higher order architecture of collaborators. Our reversal code becomes a member of a reversing machine – a Ruby object – that can receive messages for requests with commands like reverse_my_word:

    class WordReverseMachine
        def initialize(word)
            @word = word
        end
    
        def reverse_my_word
            @word.reverse
        end
    end
    
    # Somewhere else in my system...
    WordReverseMachine.new(word).reverse_my_word
    

    Although, maybe my WordReverserMachine shouldn’t be so opinionated in how it reverses things. Perhaps I want to borrow a reverse engine from other distant cyberscapes. Let’s allow our machine to swap engines as needed:

    class WordReverseMachine
        def initialize(word, reverse_engine)
            @word = word
            @reverse_engine = reverse_engine
        end
    
        def reverse_my_word
            if reverse_engine? 
                @reverse_engine.new(@word)
            else 
                word.reverse_my_word
            end
        end
    
        def reverse_engine?
            @reverser.nil?
        end
    end
    
    # Somewhere else in my sytem...
    WordReverseMachine.new(word).reverse_my_word
    

    Reversing a word is a simplistic task, which is why languages like Ruby come with a reverse method on all String objects out of the box. And yet, programmers can dream wildly different expressions as demonstrated above.

    Let’s take a look at the diversity of expression that unfolds from interpreting a task in a more culturally rich and relevant problem space. This is one is from an actual mess in the wild – unruly realism – where the task at hand is to look at all the products currently on sale in a restaurant website product inventory database that are not assigned to any particular menu.

    Ok: so imagine this shop management software lets managers add products, but wait till later to figure out what menus those products go in. After all, does a croissant go in Breakfast or Pastries? It may not be obvious at first. Splitting up the administration of products this way creates efficiency for product inventory management and menu design. Which allows for more general flexibility and adaptability of a restaurant’s ordering experience. It lets a shop not use menus at all, or have some products in menus and some just floating on their own as standalone products.

    These requirements imply that software developers working with this database will need to care about querying for products in a few different ways. Let’s play with a use case where a restaurant manager wants to display a website menu with products that are both in menus as well as a section for all other products. For example, there might be menus for Breakfast, Lunch, Dinner, and then a general list of other products under an…“Other” heading.

    The software that supports this shop management software implements this data model for relating products to menus: Marketplace Products have many Marketplace Tags, and these two data types are associated with each other through a bridge table of Marketplace Product Tags. This is a fairly typical way of modeling a tagging system in a Ruby on Rails project with a relational database. Here’s what the model definitions might look like in Rails code leveraging ActiveRecord as an ORM:

    # Product Model
    class Marketplace::Product
    	has_many :tags, through: :product_tags, inverse_of: :products
    end
    
    # Tag Model
    class Marketplace::Tag
    	has_many :product_tags, inverse_of: :tag, dependent: :destroy
      has_many :products, through: :product_tags, inverse_of: :tags
    	scope :menu_tag, -> { where(is_menu: true) }
    	scope :not_menu, -> { where(is_menu: false) }
    end
    

    Ok: so menus, or groups of products, are formed by products sharing a Marketplace Tag where a special boolean field called is_menu is set to true on that tag.

    For our case, where this restaurant’s ordering page lists both products in menus and the rest beneath an “Other” heading, querying the right content for our others is the tricky part. This system allows shop managers to tag products freely. There is no restricted set of tags, or other constraints for product and tag associations. Therefore we’ll need to join across three different tables, marketplace_products, marketplace_products_tags, and marketplace_tags, and then collect any Marketplace Products where none of their associated marketplace_tags have an is_menu flag set to TRUE.

    Lets start the beautiful differencing!

    With the help of my fellow coders at Zinc Coop with whom I workshopped this problem, I’ve cooked three ways to query our postgres database for products without a menu tag with both postgres-flavored SQL and ActiveRecord ORM. (More ways left to be discovered.)

    Even if you’ve got a mature ORM like ActiveRecord at hand, it can be pragmatic to express your query in SQL so the selection logic you enshrine in code is blatantly evident. What if, for our initial cook, we code with oneness. Get the data with a single select statement. Not necessarily bravado, or premature consideration for performance characteristics just yet. Let’s see what we can do with that generative single origin select start point.

    Mario Kart starting line count down anticipation…

     select
                mp.*
            from
                marketplace_products mp
                full join marketplace_product_tags mpt on mpt.product_id = mp.id
                full join marketplace_tags mt on mt.id = mpt.tag_id
            where
                mp.marketplace_id = '#{id}'
            group by
                mp.id
            having not
                't' = any(array_agg(mt.is_menu));
    

    The cleverness on the last line creates a collection of boolean markers for each Marketplace Productt or f – representing whether the corresponding Marketplace Tag is a menu tag. The resulting row would look like {f, f, t, f}. Moving out left from the aggregate function, a filter computation is applied against the collection for any existence of a TRUE/t flag. The lispy parentheticals are sleek!

    Thought: while the above option foregoes a subquery, I find the combination of group by and having clauses with the aggregating semantics notionally similar to a subquery insofar as we are selecting over a secondary “view” into the data.

    It’s dawning on us: getting all the products without menu tags is not complex, although it may have seemed tricky at the jump. We’re only narrowing the product result set based on a single condition, it’s just that the condition happens to live a distance away. Let’s try again without the single select cleverness and consider nested queries:

    select
        mp.*
    from
        marketplace_products mp
    where
    		 mp.marketplace_id = '#{id}' AND
        mp.id not in(
            select
                mp.id from marketplace_products mp
                inner join marketplace_product_tags mpt on mpt.product_id = mp.id
                inner join marketplace_tags mt on mt.id = mpt.tag_id
            where
                mt.is_menu = true);
    

    Because we now know that this query is shallow, both wide across only a few tables, and deep with only a single subquery, let’s see if Active Record’s query interface can provide similar conveniences like we achieved earlier with Ruby in our toy string reversal fractals above. As it turns out, we can one-line all that SQL!:

    Marketplace::Product.where.not(id: joins(:tags).merge(Tag.where(is_menu: true)))
    

    This is slick, but might not be easy to come by without our previous work or deep knowledge of ActiveRecord. Our subquery version is informative for getting a mental handle on this terseness. We can reverse engineer. Notice how the entire subquery is captured in the outer parens pair. Now: the need for merge and passing in the Tag model as the argument is a bit elusive because we might expect to be able to simply joins(:tags).where(is_menu: true). But this would error because Active Record would think we were applying the where clause to Product instead of Tag, despite chaining on the join. merge is a logical separator that let’s us filter across these two relations with more discreet semantics.

    Refine. Refine.

    We can utilize the is_menu scope on our Tag class, hiding our where(is_menu: true) filter behind a shorthand that minimizes keystrokes:

    Marketplace::Product.where.not(id: joins(:tags).merge(Tag.is_menu))
    

    Ruby on Rails scopes are a brevity blessing. You can imagine where this might be going. Adding a scope for without_menu_tag on Product will make querying and displaying results on our restaurant odering page a triviality. Dropping into the view layer we can grab the data and splat it into components with human-readable phrasing:

    <h1>Other</h1>
    <div class="grid lg:grid-cols-3 gap-3">
      <%- marketplace.products.without_menu_tag.each do |product| %>
        <%= render Marketplace::Menu::ProductComponent.new(product:, cart:) %>
      <%- end %>
    </div>
    

    The without_menu_tag scope can play well with other chainable scopes for quick prototyping and iteration for restaurant managers.

    <h1>Other</h1>
    <div class="grid lg:grid-cols-3 gap-3">
      <%- marketplace.products.unarchived.without_menu_tag.sort_alpha.each do |product| %>
        <%= render Marketplace::Menu::ProductComponent.new(product:, cart:) %>
      <%- end %>
    </div>
    

    How shitty is that?

    Mind meal tests your mind: do you go for the bait? If you check the Ten Gates, the ten kong-ans, does hungry mind, desire mind, not-enough-mind appear? If so, you must eat your mind meal. You must completely digest your understanding. Then finishing your mind meal is possible. Then you get enough-mind, no-hindrance mind, no I-myme mind. Enough-mind does not go for the bait, so everything is clear and you can perceive any situation in your life and kong-an clearly, and save all beings. – A DOG’S “WOOOF WOOF” IS BETTER THAN ZEN MASTER JOJU, Only Don’t Know by Zen Master Seung Sahn

    Monday July 22, 2024
  • poetry

    Tu B'shvat

    Having made the journey from the front yard to the back, beneath the weight of the second story where morning light was filling rooms, I was comfortable with the progress of our adolescent wildflowers. Then light filled me up between the backdoor and backfence, mild flakes of disappointment at my temples that the poppies stubbornly refuse to bloom. For a moment I considered the preposterous notion of watering the Redwood Tree. Erect there, concentric symmetrics, wheels blooming over our rented house. Me, corrected, sighing. Sharing the embarrassment with the pointed bamboo that lived partially in their shadow, flakes brushed aside. I stepped into the shadow and gazed up into the vortex of leaves. You don’t need tepid municipal sink juice. (But I’ll get some for you, you potted co-dependents that dot the interior landscape, scrubbing and smoothing the nervy corners of brutal Puritan design. You little fuckers, in comparison.) I remember where Dottie scratched your delicate conifer skin when she was given a chance to roam wild. (Too few moments with that champion, I miss you.) I push on that spot with my imagination from a mile away through my keyboard, where Dottie, me, Redwood, and microbes had a chance encounter on earth in space. I’m reminded of one time I tried striking the Redwood. The is the way that you do as a martial artist who’s curious about surfaces and transfer. There was a sharp, uneven slap, because of that sketched conifer texture. More impenetrable than cement, completely full of form. Not the satisfying feedback of leather wrapped compressed textile. There are few living things that are so dense to human body sacks, I suspect.

    Sunday June 2, 2024
  • poetry

    Guy outside Ritual Coffee on 5/27/24, I had a hot chocolate inside

    The guy in combat boots with a skull reading Love In the Time of Cholera on a call through the over ear headphones with coffee.

    Monday May 27, 2024
  • poetry

    Seung Sahn's Dropping Ashes on the Buddha, and chat with Seraph and Marshall

    Dottie on koans.

    Good morning

    A man came into the Zen center and dropped ashes on the Buddha.

    One hundred and fifty years ago men put metal penises in the earth and started burning fuel in earnest, beginning to fill the atmosphere with ash.

    These men claim “Buddha is everything.” They are very strong and will hit you if you say otherwise. How do you fix their minds?

    In a stroke of brilliance, I piped the morning meditation’s Zoom call audio through the Sonos. It’s quite silly though I waited so long to figure this out. Clifford’s Morning Bell Chant is wailing now. Felicitous: pausing the onslaught on my geriatric iPhone’s speakers eliminated the rheumatic gargles and burps.

    Good evening

    There was a moment yesterday, around the routine crepuscular slide, when Seraph mentions how the diaspora broke us. (Sambal moves around the gums.) We broke, to assimilate. We discontinued mentions of the moon cycle’s importance in our rituals. We cleared the forest from the imagination. My chest balled up. I could cry. It had been a tough Sunday already in one of those classic disorientations of a fleeting weekend. Just as a week or two of life pressures edged to the pinnacle for a breath and place to lookout with a panoramic view. (I’m thinking of the top of Bernal hill.)

    I don’t love the language of broken and fixed because it’s hard, phallic. It makes me think of split wood. (I have too many planks, not enough logs to build Atul’s workshop!) My own notional machine of my mind body conjures gushier platelets. Like a pre-cum immured into being across a white plane with a left-to-right, slightly downward stroke of a palette knife squishing a wave of paint across a plain surface. I love the way paint breaks. How air bubbles create a torn moon surface. Within this mode perhaps I’m become dabs and waves. Uneven, partial, preparation for art, art substance, also a soothing transitioning item from globular mound to wave. So that’s why it’s hard to feel broke, or whatever the reverse, some architectural rebar. Nonetheless, the near-tears I felt at the invocation of brokenness are a clear indication that the door has been shut on joy before.

    Monday May 20, 2024
  • poetry

    How to read A Hacker Manifesto

    McKenzie Warks' A Hacker Manifesto is so bergizi (trans from indonesian: nutrient-stuffed) so I skipped to the end notes. Reading ass backwards might be the trick here. (Or spin the bottle to choose an entry point.) As you make progress, reprint and scatter the individuated sections that you’ve read, then affix them to posts along Triton’s surface.

    “A free yet not merely random productivity”: this sentence gets me thinking about open source collaborations.

    End note on Gregory Bateson from McKenzie Warks' A Hacker Manifesto
    Tuesday April 16, 2024
  • poetry

    The kind of extro, outside RItual coffee on Valencia

    Being around people Benching just outside the coffee shop Heads pointing down Talking Tap clink Passersby entering and exiting Entering and exiting is the point

    Tuesday April 16, 2024
  • poetry

    Machinery: Eva Hesse, her machinery

    Sunday March 24, 2024
  • poetry

    From Amy Kurzweil at The Ruby in San Francisco on February 29th, 2024

    The room was cold. The light a little caustic. Acoustics wan. From the back row I had to squirm to the side to see Kurzweil’s full face. Like 17 people there, maybe? Intimate, secret, and in on it. Rugged cool!

    “Paper is pleasurable.”

    “My life for a while was in pages.”

    “My visual secret is that all my characters look like me.”

    Monday March 4, 2024
  • poetry

    Two drinks max or else

    The bartender at Berreta is asking if I like bitterness and I answer yes. At this point I’m open to interpretation and open to interpretations. I get Cynar, a hefty portmanteau that smoothes out my technologies of resistance across the bar plane. An incubation space for monsters. To the right of my glass, an open challah bag is a gaping hole.

    Tuesday February 20, 2024
  • poetry

    Sunday Prayer before heading to altitude

    Saying no to Lucy Ives everywhere and hitchhiking Leather Blvd. sipping cool aid

    Kita anak-anak keren

    Sunday February 4, 2024
  • poetry

    Hangry

    Can you eat here
    Can you get food here
    I can get food here
    I will get food here
    This place is too expensive for you
    I will eat at this place
    There is another food for you over there

    Wednesday January 24, 2024
  • poetry

    Relationships in this economy

    “I didn’t realize what we had.”

    He couldn’t see from the view within his stomach. Nerves are too high.

    Well, you work full-time, overtime frequently because it’s only a five-day work week. Your hands are full cutting a path through what the racists made today.

    Your Yeezies are barely scuffing the stacked monomers, my guy! Where did you come from? There are dicks the size of city blocks clouding your view. Same-day tsukumogami are drilled into the soil and rock and you trip on them.

    You weren’t taught to realize her/they from the muscles between your shoulder blades, reaching behind you to turn it around, reaching in all four directions with the somaticists. Need I remind you that we only had one chance to spin the title track. (Ascenseur pour l’échafaud). You barely heard the record pops. The time that remained didn’t leave us one breath to talk about the sound before the rich were on the ballot again.

    Written at the kitchen counter. My overcooked omelette lays on the cutting board. The sangha relaxing down into the sunrise and into memory.

    Wednesday January 24, 2024
  • 2170

    Kelsey Blackwell's Race and the Body: Why Somatic Practices Are Essential for Racial Justice

    “Racism is a visceral experience” - Coates

    &&

    “Including the body…towards social justice…is the primary path forward” - Blackwell

    &&

    “We focused our efforts in the wrong direction…white supremacy doesn’t live in our thinking brains…it lives and breathes in our body.” - Resmaa Menakem

    &&

    “The only path forward requires dismantling who we think we are.” - Blackwell

    &&

    “The body…says, this is true…this is happening…this is honest.” -Blackwell

    “Few skills are more essential than the ability to settle your body.” - Menakem

    { This one. A superpower. Also, settle your body vs settle on your body or your land vs settle an argument. }

    “There’s a saying in Guinea that ‘knowledge is only rumor until it’s in the muscle.'” - Blackwell

    “Rocking, humming, and making physical contact with each other…” - Blackwell

    { Sitting, bowing, chanting, walking, eating, cooking, cleaning. To retreat, to practice. To leap like a tiger while sitting. }

    Thursday January 18, 2024
  • 2170

    Class warfare on Duolingo 🌹

    Duo lingo lesson
    Tuesday January 2, 2024
  • speculative nonfiction

    My sparse margin note couplet from Jon Bentley's Programming Pearls, also bit of a book review, and a whole ass

    comic frame of Batman on top of a man who says 'I'm Fine' keyboard laying on top of an oyster shell and a pearl necklace
    In 2015 I bought this book.    
    7, or 8 years ago.    
    Year one into my software career.   
    This book is canon.   
    I've had little use for its studies of algorithms. # thus far, see below     
    I don't think Bentley would be offended.    
    First sentence: "Computer programming has many faces."    
    

    I’m sure I glanced at its pages before entering the corporate interview gauntlet, to get in the vigilante mood. Like shaking out the shoulders when staring down a twenty two minute treadmill run (or pile of laundry Sunday evening). (You must to armor up for the algos in the kingdom of men.)

    You know, Bentley’s pearls are usually the type of polished wisdom earned through real life experience I drift with, but this book never became the vade mecum for my quotidian affairs. Is it for others? Most of it, after Part I, was too metallic for an early-career front-end Rails dev. But the book can quickly be pragmatic in the earlier pages – see 3.2 Form-Letter Programming!. Templating is up there with the best of them.

    The book is pedagogically caring (great headings). It’s pornographically geeked in thoroughness. The cases are so well-situated. Bentley spoils you with opinionated further reading and subjective sidebars that add the kind of first-hand-account historical/social context that remind you that the metal has been worked over by person hands.

    It reminds you that software is not lonely.

    Look out, there’s a modest amount of myth-making for his contemporaries and mentors. But who wouldn’t. The most honest plagiarisms. Yes/and he’s humbler than many. Ok maybe I have to read it again now that I have more years behind me.

    Although I am a visual learner and thinker: logical word-problems were always a pain. In recent years I tend to reach for Bhargava’s Grokking Algorithms for a refresher on binary search or walking trees. It has cute pictures. It’s stacked next to other faves like Land of Lisp and Why’s (Poignant) Guide to Ruby.

    Hmmm (thinking emoji, I will not look you in the eye as I cock my head buried in thots). After all the solstice konmari of my bookshelf – which I thought would elicit a reflection on some forgotten paper taking up space – has become the discovery of lost treasure. And yet, I’m still tickled by the scant amount of notes taken. I can’t read without a pen. Perhaps we’re time-traveling, then.

    It's year one. 
    Young Rails dev. 
    He makes only two liner notes in a book considered staple grocery. 
    I don't remember if I even read the whole thing. 
    I bet I got through Part 1's wider lens, then started to gloss over.
    

    One note is an exaggerated check mark next to this principle listed on p29 (Second Edition, published 2000):

    Rework repeated code into arrays. A long stretch of similar code is often best expressed by the simplest of data structures, the array.

    With “the array” also underlined from the outer left edge of the “t” to the outer right edge of the last “a.”

    This one has stuck. Arrays, especially maps, can be more durable when staring down change. Before long any thoughtful software developer will realize that the components of a software system will become ordered and/or multiple.

    There is no lonely software.

    Data, whether as scalar, “bags” of properties, even subroutines and processes, even the manual lever pulling human tasks must be sequenced, serial, bound, reversed, indexed, sorted. The maintenance cost of housing data in ordered collections is generally low.

    [<anything>, <anything>] 
    

    Whole ass languages, like Clojure, were designed to favor ordered, associative arrays. As I learned after finding Hickey’s seminal talk Simple Made Easy. (Richly simple and luxurious as Hockney’s bathers.)

    hockney's sunbather painting

    A second mark: a vertical line next to the opener for section 12.2 One Solution. This was (yet another moment in my lifetime) I learned that we never have to go it alone when staring down the void of what we’re building next:

    As soon as we settled on the problem to be solved, I ran to my nearest copy of Knuth’s Seminumerical Algorithms (having copies of Knuth’s three volumes both at home and at work has been well worth the investment).

    This has also stuck, reified after seasons.

    Saturday December 23, 2023
  • rutabagas

    Rutabagas Vol. 3: The Softest Ware: Is

    1. What are probably appropriate attacks on assigning calamity to the hand-wavy concept of “human error”. Lorin strengthens his theory that human error probably doesn’t exist by considering complex, fault-tolerant systems like Amazon S3 incapable of receiving “human error” as apology or eulogy when there’s a hard drive failure.

    2. WHAT. Secret guerrilla human rights interventions by the artist collective GALA Committee on Melrose fucking Place.

    For three years, as the denizens of the Melrose Place apartment complex loved, lost, and betrayed one another, the GALA Committee smuggled subversive leftist art onto the set, experimenting with the relationship between art, artist, and spectator. The collective hid its work in plain sight and operated in secrecy. Outside of a select few insiders, no one—including Aaron Spelling, Melrose’s legendary executive producer—knew what it was doing.

    1. There are widely acknowledged “hard things” in software development, but the pith used to describe them usually falls short or flat for me. But in less than 100 words jenniferplusplus achieves serious depth:

    It’s a little bit shitposty, but it’s 100% true. People think cache invalidation is hard because it has no right answer, so it’s a question of iterating until you get a right-enough answer.

    People think naming things is hard because it’s about communicating with each other.

    People don’t even think about managing dependencies. It’s invisible. It’s about cooperating across time and organizations to do maintenance chores. It’s so hard and so unglamorous that people can’t even see it.

    What’s important to observe here is (the appropriate, warranted, overlooked) framing of these software problems as social problems, not logical puzzles or struggles with language and framework semantics. Even cache invalidation, despite being a requirement in nearly any useful application that nearly every developer must address, escapes a general solution – meaning developers must continuously arrive at socially acceptable, technically sufficient solutions – but not total – as the seasons change and the desires of forces and actors in the system change. There is always more than one person at large in negotiating the solution, if even only a developer and a single someone using the software.

    1. jenniferplusplus again, but this time bringing Peter Naur’s lasting insights into the AI conversation: programming is theory building. Software developers are quickly discovering the usefulness of LLMs trained on code to assist in some of their more menial daily work – especially when working with common constructs (languages, frameworks) that are personally unfamiliar – but it’s hard to imagine LLMs replacing the core intellectual work which requires understanding: like the socially syrupy hardness they discuss in the above toot. Although we might imagine a generative computer program giving semi-useful suggestions for the complex|complicated|sophisticated|confusing real-world development scenarios if trained on the correct historical inputs for that milieu; and if you were stuck in a vacuum somewhere without recourse to more senior colleagues who possess similar tokens of guidance to steer you toward the right away to handle background jobs (without such an exhaustive cataloging as you’ll see ChatGPT 3.5 vomit below):
    
    Handling background jobs is a common requirement in software development, especially in scenarios where certain tasks need to be executed asynchronously or in the background to avoid blocking the main application thread. There are various ways to handle background jobs, and the choice often depends on the specific requirements and the technology stack being used. Here are some common approaches:
    
    Task Queues:
    
    Message Queues: Use message queuing systems like RabbitMQ, Apache Kafka, or Redis to enqueue and dequeue tasks. Popular libraries for this approach include Celery (Python), Sidekiq (Ruby), and Resque (Ruby).
    Job Queues: Platforms like AWS Simple Queue Service (SQS) or Google Cloud Tasks can be utilized to manage queues of tasks.
    Asynchronous Programming:
    
    Async/Await: In languages that support asynchronous programming (e.g., Python with asyncio, JavaScript with Node.js), you can use async/await to perform tasks concurrently without blocking the main thread.
    Multithreading/Multiprocessing: Use threads or processes to run background tasks concurrently with the main application. Be cautious with shared resources and synchronization.
    Background Job Processing Frameworks:
    
    Delayed Job Processing: Libraries like Sidekiq, Delayed Job (Ruby), or Hangfire (.NET) allow you to schedule and execute background jobs at a specified time or after a certain delay.
    Job Scheduler: Tools like cron (Unix/Linux) or Windows Task Scheduler (Windows) can be used to schedule recurring background jobs.
    Serverless Computing:
    
    Functions as a Service (FaaS): Platforms like AWS Lambda, Azure Functions, or Google Cloud Functions enable you to run individual functions in the cloud without managing the underlying infrastructure.
    Database-backed Queues:
    
    Database Queues: Store tasks in a database table and have worker processes periodically check for and process these tasks. This approach can use a library like Active Job (Ruby on Rails) or Hangfire (C#).
    Container Orchestration:
    
    Kubernetes: Container orchestration platforms like Kubernetes can be used to deploy and manage background job processing containers.
    Job Management Services:
    
    Job Management Platforms: Use specialized services like Jenkins, CircleCI, or GitLab CI/CD for scheduling and executing background jobs.
    Webhooks and Event-Driven Architectures:
    
    Event-Driven: Design your system as an event-driven architecture, where background tasks are triggered by events. Webhooks can be used to notify the system of events.
    Choose the approach that aligns with your application's architecture, scalability requirements, and the specific nature of the background tasks you need to handle. Keep in mind factors such as reliability, scalability, and ease of maintenance when making your decision.
    

    Quoting Nauru’s seminal vintage paper (1985, the year my brother was born):

    The fundamental task of software development is not writing out the syntax that will execute a program. The task is to build a mental model of that complex system, make sense of it, and manage it over time.

    1. Another entry from tobi on the contempt culture of software engineers. (Where does this come from?)

    So anyway this post is both a big “thank you” to the many nerds who are chill and easygoing and joyful, and an exhortation to others to free yourself of contemptuous, competitive attitudes, and re-embrace the intellectual curiosity that presumably once brought you into programming in the first place.

    Friday December 15, 2023
  • 2170

    Goings on about town: Iowa teen grew 7,000 pounds of veggies, then gave them all away

    Over morning coffee, mixed with used iron goddess king tea leaves. Questions about things in paper.

    kopi pagi tambah daun teh raja dewi besi

    Why ya why ya why ya why ya why ya wanna why ya wanna

    1. Some people just have acres of arable land lying around to play with
    2. Why didn’t Lauren work with her family to give this land back to indigenous tribes? In 2022 tribes finally won 7 acres back after 200 years. If the Schroeder’s gave back their 2 acres, they would increase the footprint of sovereign native lands in Iowa by 30%.
    3. What happens if Lauren loses interest in this project? Or goes off to college? Will the people served by the food banks and other orgs she’s supporting suffer as a result?
    4. How is hunger an issue in a heavily agricultural state?
    5. Is this an acceptable form of child labor, especially with her two siblings also working with her?
    6. I wonder if Lauren offered the unnamed domestic violence survivor a chance to help with the project and give her kids a chance to grow their own food again.

    Why did Dr. J shave his beard and mustache?

    Friday December 15, 2023
  • poetry

    Modern cities are inhuman: Vol 1

    Wednesday December 13, 2023
  • poetry

    Le Guin on write what you know

    Monday December 4, 2023
  • poetry

    I slept pretty well last night

    Monday December 4, 2023
  • rutabagas

    Rutabagas: Vol. 2: Japan transform , museums saving the web, c apitalism makes software bad again, and more

    1. Aaron Straup Cope’s talk notes for Wishful Thinking
    postcard finnaire Sud Aviation Caravelle 1970s sfo museum

    VIBES.

    I read this post a few days ago and have since wandered through the hyperlinks to his other stuff. It’s clear that for some time Cope has been baking thoughts about the cultural heritage sector and its responsibility - “relationship” - to engage with emerging “virtualization” technologies and the techno-capitalist system.

    (As I’m learning: he’s been committed to the web writ large, you can see it through numerous cyber- and hyper- textual projects playing freely in the “network of patient documents”; his own delightful euphemism. In these projects he goes deep for the web’s inherent nature of democratic, atemporal revisiting and recall." “That access to recall is what makes the Network special to me.” At first blush, these are not impossible conservationisms. As he says: “The point is not that our relationship with technology should end with the web.”

    Reminds me of Avdi Grimm’s discussion of conservation:

    “Healthy growth starts where it is, and both builds on and repurposes what came before. No clean slates, but also no bans on knocking down walls.”

    Cope has chosen not to wave the white flag, and fends off the grievings, misgivings, and saudade of laments starting a decade ago.

    We managed to build a lot of cool shit on the back of 56Kb modems. We built a lot of cool shit – including entire communities – on top of a technical infrastructure that is a pale shadow of what we have available to us today. We know how to do this.

    )

    Cope is saying: The (open) web is good, actually. Which is what Cory Doctorow picked up and so it found it’s way into my inbox.

    In Cope’s newer account at hand from the 2023 Museum Computer Network conference, we get these thoughts reapplied to emerging virtualization technologies, VR, AR, particularly the “so called ‘metaverse’” (the name scare-quoted out of exasperation, maybe?). He wants to remind us that we’re not done with the web yet.

    At the outset, Cope moves quickly to invoke a reminder about the museum’s networked power - it’s webiness; at the same time its implication in the network of patient documents:

    …the practice of revisiting is the bedrock of the humanities. Revisiting is what distinguishes entertainment from culture.

    The decade+-long struggle continues. We must understand how our bargains with techno-capital hegemony (apps, ad-driven social networks) deepens the threat against ideas (I’d add emotions, evolutions, revolutions) flourishing outside the corporate fence. What Cope describes as “time to warm up to ideas.”

    I’m game. And Oh! The cultural heritage sector seems a perfect backdrop to wrestle with the threats of new tech. The material threats are lived: even pragmatically, the museum can not, may not, should not be able to afford the costs of bug-eye headsets and visors. The larger scheme is almost dialectic, smooth: the plunder and seizure of open-access-egress recall power while the cats keep entertaining my eyeballs. While Facebook’s controlled metering of power to content creators (colonial policemen) transforms cultural value from something that moves freely across past and future, geography; that’s cheap, abundant; that’s allowed to take root…organically (for lack of a better term): transforms into something judged too quickly, cast away, spent, ephemeral. (Remember, DIGITAL != EPHEMERAL). Prepping us for some greedy end, like recording everything we see because Cambridge Analytica and genocide, and… He says:

    Namely that if you publish something online – whether it’s a selfie, a “hot take”, an essay or a multi-year project; anything really – and it is not immediately successful or viral then it was a waste of time and effort. It was not worth doing.

    Which is insane. It is insane because that’s not how ideas take root.

    It takes people time to warm up to ideas, especially new or challenging ideas, if only because we are busy just juggling the ideas and beliefs we already hold with the complexities of our lives in relation to one another.

    It is also hard not to understand this idea as a deliberate of attempt to gaslight the web and everything that makes the web important.

    Later..

    We would do well to understand the web not just as a notch in the linear progression of technological advancement but, in historical terms, as an unexpected gift with the ability to change the order of things; a gift that merits being protected, preserved and promoted both internally and externally.

    On time-traveling temporality, from back in www.aaronland.info/weblog/20…

    The web gave us the ability to return to a thing outside the shared (or master) narrative at a time of one’s own choosing. Of shifting time in the service of one’s own interest or in the service of simply coming to an understanding of one’s own interests.

    1. Japan’s haiku poets lost for words as climate crisis disrupts seasons

    2. Ship/Show/Ask: More often than not web dev shops I’ve worked in are weighted toward the “Ask” strategy because of blanket policies. So even in cases where a team had reached a degree of trust that would allow for releasing with “Ship” or “Show” there were mechanical bulwarks in place. For example, physical restrictions to self-merge a Github Pull Request.

    3. It’s amazing what a small amount of imagination + green can do to the built world. In Japan, the Federation of Landscape Contractors holds a contest each year for best-looking garden on the back of a pickup truck. Some winners.

    4. Having worked tangentially to direct patient care in the health tech biz building industrial pharmacy software, these insights about how bad healthcare software can be resonate. Paper: You want my password or a dead patient?. Good summary with pull quotes from Fred Herbert from a short draft paper.

    Tuesday November 28, 2023
  • rutabagas

    Rutabagas: Vol. 1: Careful with Octavia Butler, the Sex Forest Movement, Nat King Cole Sampler, and of course tech doomsayers

    Originally posted as a micro website at https://ross-rutabagas.neocities.org/. Rutabagas are now sprouting here when the time is right. Volume 1 includes “found dates” – but later volumes will be less temporally registered (I think).

    (Why “Rutabagas”? This was Zee’s fault when he extemporaneously blurted “Ross' Rutabagas” as a fake shop name to stand in for an example during a Zinc Coop ensemble sesh.)

    1. 10/06/23 - [r/Jazz] Nat King Cole Appreciation Post & [r/Jazz] Nat King Cole Piano Recordings

      When you need to deep dive into the influential piano playing of Nat King Cole that influenced greats like Oscar Peterson.

    2. 10/02/23 - Make the Golf Course a Public Sex Forest!: An excerpt by Anna Aguiar Kosicki

      <p>Discovered via Sophie Lewis’ <a href="https://www.patreon.com/posts/repro-utopian-11-89509663">Patreon</a>.
      Book ordered!</p>
      
    3. 09/25/23 - Block the Bots that Feed “AI” Models by Scraping Your Website by Neil Clarke

    4. 09/25/23 - The Unreal Writer by Joanne McNeil

      Discovered via my mastodon feed, shared by Betsy Haibel:

      “This is happening with Octavia Butler in real time. Her daring and the moral complexity of her characters is swept away in recent assessments to create a coherent legacy—that of an earth mother tote bag caricature-icon. This is reading authors as flap copy, accessing the top layer of the writing, and refusing to convene with the messy human elements in the work. What are their books—any books—even for, other than for us to approach as humans, wandering around with their words and experience the extraordinary workings of another human’s mind?

      The snobbery against science fiction in the past and today’s cartoon icons of some of its weirdest authors comes from the same root: an establishment that doesn’t know how to read or appreciate it. The establishment needs the work digestible as buzzy fragments. The feral elements in what are now science fiction classics—the originality and experimentation—isn’t legible to them; which means even the most famous authors, when you encounter the work on your own, are likely to surprise you. Their mysteries as authors remain mysteries and to a more generous reader—that mystery is exactly what hooks you.”

    5. 09/24/23 - Apple fucked us on right to repair (again): “Parts-pairing” is a scam by Cory Doctorow

    6. 09/24/23 - 🎧 Bizarre and Dangerous Utopian Ideology Has Quietly Taken Hold of Tech World by Kelly Hayes

    Tuesday November 28, 2023
  • habitations

    But night software is not like that. It’s not written for the day job. It’s not written to see the light of day at all. It’s not written to be looked at and scrutinized by anybody. It’s intimate and personal, it’s messy and buggy. To take a look is to transgress.

    Boundary cross. Sex.

    From a small heap software that helps make software. By way of Devine Lu Linvega

    Monday November 20, 2023