• habitations

    End products, habiting difference

    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 on 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 sifting life’s exposures. Nonetheless, 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.

    But not everyone smiled!

    This “problem” of software: the epistemological endeavor to solve challenges in the world through reasoning about what’s actually happening out there and interpreting it into binary logics, electrical pulses: of taking a shared thought among humans – sometimes only the wispy thrust of a thought – and converting it to instructions for the computer. Zen Master Seung Sahn used to say you have to “digest your mind meal”, your understanding. Making software is a kind of digestion of understanding. Pushing thought stuff through a cheese cloth named Divine.

    The software process is messy, from beginning to middle to end. Which is why, as Zen student, I must utter: Where does the one return? Software’s interpretive act is a mix up, a Deleuzian differencing that flies a-face a unifying core concept. That’s why software is never completed, or doesn’t seem to exist anywhere in particular. Is it the text in your editor, the code running on the server, the git history, the button that is pressed in a browser, the heavy metals of the memory disk? The lines between human, software, software process, the hardware it runs on, the “world out there” the software performs for…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: which is why gate-keepers try to wrest it away from the hacker collective and make it property. 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 algorithmic nebula? Indeed.

    Messy. Material. Just as digestion is wont to be, from mouth mashing through shitting. (Thankfully this physical body process is mostly obscured by our containment sacks.) 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 use “compost” if we needed a corresponding brownish, molten substance for 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.

    Thankfully (we can breath a sigh) there are loving defenders of our end products out there. 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.

    Similar to verbalized language, programming languages provide multiplicities for getting thoughts out whether through your face broom or unadulterated cheeks and lips. Adult English speakers would not be surprised to hear the the idea of reversal expressed by the variations “they retraced their steps”, “they went back”, “they returned”. Back to computers: the “high level” Ruby programming language provides a relatively expressive syntax with multiple lexical pathways for computer instruction. While the variations in high level programming languages like Ruby may not be imbued with the rich cultural context of spoken English phrases, they demonstrate what I’ve always found to be a never gets old trait of programming since the recent invention of modern programming languages now used in heterogeneous postmodern programming environments: there is creative choice!

    Similar to English speakers, Ruby programmers will follow contextual precedence, and are bounded by the limits of the syntax. And yet, when going about telling a computer to reverse something, they can still surprise us.

    Let’s say a Rubyist wants to reverse a word, known in programming parlance as a “string”: any sequence of characters (letters, numbers, symbols). This rubyist might decide to key punch a common implementation using more “imperative” syntax constructs like a while loop, indexed lookups, and string concatenation. Synonymously referred to as language primitives, imperative expressions are more verbose, but 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
    

    That’s one option. But looping over a string is such a common operation that Ruby provides some convenience to do this. In place of a while loop, index references, esoteric symbols like <<, Ruby let’s us slurp all that imperative code into higher order string methods like each_char – as in “loop over each character” – and prepend (self explanatory, I hope). Under the hood, Ruby implements these methods with it’s own primitives, likely similar to what we’ve written above. Let’s try it:

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

    This code is considered easier to read by many programmers because the method names already describe the code’s intent. There’s also less code to mash in the mouth, therefore less information to pack into the brain’s working memory.

    Ruby’s do block syntax which yields control over the looped character logically bounds our new string construction procedure in a semantically associative workspace. Coding with the word. Somewhat different than the unhinged free jazz of a while loop block with throw-away variables.

    A Rubyist interested in a concise way to “one line” this operation might want to do all the work in place without variable initialization. There’s this:

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

    Transforming the original word string back and forth from an array to feed the each_with_object piles on the syntax, but this is useful for writing code in a more functional style.

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

    original_word.reverse
    

    In fact, we often have more time, because software needs to last. Therefore it’s not uncommon to see computational code like this registered into a system of collaborators as a member of a reversing machine that can receive messages for requests like reverse_my_word:

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

    Although, maybe my WordReverserMachine shouldn’t be so opinionated by how to reverse 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
            if reverse_engine? 
                @reverse_engine.new(@word)
            else 
                word.reverse
            end
        end
    
        def reverse_engine?
            @reverser.nil?
        end
    end
    
    # Somewhere else in my sytem...
    WordReverseMachine.new(word).reverse
    

    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.

    Monday June 3, 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.

    Tuesday May 28, 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
    Wednesday April 17, 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

    Wednesday April 17, 2024
  • poetry

    Machinery: Eva Hesse, her machinery

    Monday March 25, 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.”

    Tuesday March 5, 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.

    Wednesday February 21, 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

    Monday February 5, 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. }

    Friday January 19, 2024
  • 2170

    Class warfare on Duolingo 🌹

    Duo lingo lesson
    Wednesday January 3, 2024
  • habitations

    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.

    Saturday December 16, 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?

    Saturday December 16, 2023
  • poetry

    Modern cities are inhuman: Vol 1

    Thursday December 14, 2023
  • poetry

    Le Guin on write what you know

    Tuesday December 5, 2023
  • poetry

    I slept pretty well last night

    Tuesday December 5, 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.

    Wednesday November 29, 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

    Wednesday November 29, 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

    Tuesday November 21, 2023
  • habitations

    DEI Grieving and AI Skepticism

    IYKYK DEI in tech is all but dead. If you’re an outsider, it’s important to understand that employee-led efforts to make workplaces less racist – which began in earnest at the onset of the Obama years – have been steadily blotted out since Trump. The Tech aristocracy has decided to abandon DEI budgets along with other workplace perks. As @betsythemuffin notes (in the thread I’ll be referencing below):

    DEI is seen by a sizable chunk of the funder class as an allowable luxury to keep the peons happy.

    It has been tragically hard to swallow this defeat. @betsythemuffin again:

    Regret that we didn’t do more to build material power when we had the chance.

    And yet, as the movement has regrouped and recentered to reposition the struggle, some have begun to take note of a problematic adaptation in the techy left’s rhetoric. @danilo started a thread on Mastodon that points out a new-born form of absolutist skepticism for emerging technologies – notably AI (of course). Regardless of why the left slips into what @glyph calls a problem of “semasiology” around the term “AI”, point is, the hurt seems to be cutting so deep that the movement has retreated into an unproductive preservationism.

    The abject and understandably heartbreaking defeat of DEI-type progress in tech has moved most leftist critique of the space into a technological conservatism built on denialist, magical thinking.

    You can’t successfully advocate for a dead end when the other side is investing in roads that lead to helpful places.

    You can’t win against technologies people find useful by pretending they aren’t useful.

    Check out the rest of the conversation. There are smart people in here thinking through this “AI” moment. The underlying question seems to be how we can continue the fight without completely disavowing what might be practical revolutions borne out by this albeit early phase of “AI” that is “finally bearing serious fruit.”

    If you’re wondering on what side of the line I fall, my major beef with the LLMs is their wanton extractive consumption of human labor without citation or, god forbid, recompense. Of course, a time honored tradition of slave traders and capitalists. Here is Marc Andreesen with a recent plea written to the US copyright office, hopeful we can just all ignore this blatant theft for the common good of the funder class. This is class warfare:

    Imposing the cost of actual or potential copyright liability on the creators of AI models will either kill or significantly hamper their development.

    I hold that citation is feminist since it combats the authoritative mansplain that obscures collaboration, hardens selfhood, and hoards ideas. Ergo I consider the de-linkified, referent vacuum of effluvium produced by ChatGPT et al as patriarchal in its presentation of “knowledge” and preoccupation with mastery. I’m scare quoting because philosophically I’m confused about what this content even is, so unhinged. Although I recognize that the interplay of this text with the reader and their investigative context does produce meaning.

    UPDATE (minutes after the writing the above): heh, Danilo actually expounds generously about the left’s false critique of AI in a long-form piece on his blog.

    Tuesday November 21, 2023
  • 2170

    From the hunter to the tactical tornado. Man and his-story!

    Sunday November 19, 2023