Chris Padilla/Blog


My passion project! Posts spanning music, art, software, books, and more. Equal parts journal, sketchbook, mixtape, dev diary, and commonplace book.


    Joining the Conversation

    A Gallant Conversation (Conversation galante), Nicolas Lancret
    A Gallant Conversation (Conversation galante), 1719, Nicolas Lancret (French, 1690–1743)

    Taking a moment to express sincere appreciation for forums of all shapes and sizes!

    It's easy to feel isolated in solitary practices — software, art, music, writing, etc. Something thats feels admittedly unnatural for me, having been involved in highly communal music making for ages. But, rejoice! We're all only a quick jump away from a portal to rooms where our kind of people are.

    I just said that I’d enjoyed the book very much. And he said thank you. For a moment, it achieved the most basic and treasured of human communications: you are real, and therefore so am I.

    -- Terry Pratchett on writing fan mail to J.R.R. Tolkien

    I'll never forget my first forum experiences as a kid. The internet already seemed like a great resource, but being able to talk shop over Super Mario 64 was a game changer! At some point I threw the baby out with the bathwater, sticking strictly to lurking. But joining the conversation has helped buoy my creative efforts, connecting with and contributing to folks at a similar junction on the learning journey.


    For anyone looking to make the best use of these channels, my humble advice: give small gifts.

    Why gifts? When you center around a sense of contribution, there is bound to be someone on the other end who appreciates your efforts. From that frame of mind, you seek out people. Instead of waiting for people to come to you, you go out in search of someone you can impact. A brief, 2-3 turn exchange can be the most atomic version of that essential feeling of connection. Our identities are shaped in part by others, and you have cast a vote for an emerging identity through connection.

    Why small? The internet is full of vast resources. It can be discouraging, feeling like you have to have a massive contribution to make any difference. Blockers can include limited experience, lack of audience, or the feeling that your perspective is not unique. So don't get bogged down. Look to make something just a little better.

    "Attention is the rarest and purest form of generosity."

    -- Simone Weil

    Even a simple acknowledgement is enough. "I just started learning to draw, and this website has really helped", "I struggled with the same chord changes, you can do it", and even "Congrats, I see loads of progress from where you started to now!" You'd be surprised how a small interaction can be all it takes to get a positive feeling. And even if they aren't connected, all of those tiny efforts add up to feeling a part of something bigger.


    The ocean is vast, but at that point — with your own droplet, however small — you have joined the body of water. After ages of taking in each tidal wave, you are now, for someone else, part of that massive resource of information, inspiration, and connection.


    Vector Databases

    When initially digging into developing a RAG app, I was introduced to vector databases. It ultimately wasn't the tool for the job at the time, but I've since grown curious about their use and setup.

    It's clear to see why these are useful in the context of AI integration (and beyond!) These are specifically designed to store highly dimensional data, where relationships can span many different attributes across entries.

    2D graph of 4 points, two couples which are related.
    Courtesy of Wikipedia

    Visualization is the fun part. Here is a simplified visual of points on a two dimensional graph. The points have embedded such that "France" and "Paris" are positioned closely together due to their relationship. They are closer than "France" is to "Berlin." Along another dimension, "Paris" is closer to "Berlin" than "France" because they share a relationship of being capitals of their countries.

    That's two dimensions. We could easily leap to three dimensions. BUT! Vector databases have anywhere between 128 to over 4,000!! Unless you are a quantum space creature, that gets tricker to visualize. But, the example is similar. Items that have a similar relationship based on their point in this impossible graph are identified as highly related.

    An example of a vector:

    [
      0.0432, -0.1285, 0.8931, 0.1102, -0.5541, 0.0023, 0.4120, -0.0984,
      0.2215, -0.3342, 0.7612, 0.0543, -0.1120, 0.4901, -0.2234, 0.1089,
      ... 
      /* MANY more floating point values in between */
      ...
      -0.0124, 0.3312, -0.1543, 0.0891, 0.4412, -0.2210, 0.0045, -0.7712
    ]

    Vector DB's work thanks to specialized models that are able to convert human recognizable data into vectors. Deciding on the embedding model is just as important as selecting your database, as they can be specialized for certain mediums and datasets.

    When adding data, you pass an entry through the embedding model. That gets stored in the DB. When you query your db, that query itself is ran through the embedding model, compared, then returns a number of entries returned based on their proximity.

    An additional consideration is what distance calculation algorithm you chose. This is something that's configured at collection creation, so it's worth some thought ahead of time. Options include:

    • Euclidean: a common choice, the straight line distance between two points
    • Cosine: Measure the cosine (angle of divergence of points)
    • Inner Product: Factors in length and direction (distance from 0,0 and angle)

    Usefulness of a vector database go beyond RAG. Semantic search is a maturation of keyword search that allows for finding results based on relevance of simple string matching. Multimodal search also allows queries to span across text, images, and audio. Plenty of flexible use cases.

    Why it ultimately wasn't the fit for the project at the time: maintenance. It takes experimentation to find the right embedding approach, adjusting size of embeds and meta-data, and gathering user feedback on search effectiveness. Full Text Search in less complex cases may get you most of the way there without all of this. Still, contextual search can be combines with FTS and for the best of both for rich searching features.


    Carnival of Venice

    🎠


    Carulli — Waltz

    🌹


    Books and Conversation

    Gabriel Zaid introduces Socrates' criticism of books in So Many Books:

    Thanks to books, we know that Socrates distrusted books... Conversation depends on those who take part in it... In contrast, books are unfeeling monologues... In sum, intelligence, experience, and the creative life develop and are propagated through live speech, not dead letters.

    Zaid argues against this push back on technological progress:

    Intelligent conversations like those engaged in by Socrates and Phaedrus, who meet on the street, begin discussing a clever passage by Lycias on love, and go for a walk outside of Athens to debate its meaning, are only possible in an underdeveloped world, where productivity is low and there is plenty of free time. In the modern world, with everyone traveling by car, and leaving just enough time to get where they are going, Socrates and Phaedrus would never meet.

    ...[W]e no longer have the leisure of free afternoons in Athens. And the simulacrum of inspired life that exists in the great books seems more than a simulacrum: it seems like life, like latent inspiration waiting to be reclaimed. The dead text of Plato's Dialogues preserves the germ of [Socrates'] contagious freedom...

    In his sign off to Socrates back in time, Zaid writes:

    [I]n making us doubt the progress represented by writing, your criticisms have helped us to identify the true role of books, which is to continue our conversation by other means.


    Abs Study

    💪⚾️
    Pec Muscle Studies

    Studying abs! 💪⚾️

    Part of Proko's Anatomy of the Human Body course. Big, thorough, and rich with material.


    Chosing Focal Points with AI Assisted Development

    In conversation with another engineer, we were starting to lament that certain skills are atrophying as a result of ai-assisted development.

    Though, the thought occured to me partway through:

    For certain functionality, we import libraries. For others, we've handwritten solutions. Even so — sometimes we have to crack open the repo for a library to really dig in to what's going on. That seems to go for domain experts as well.

    I think we've always been working with the scenarios of what's solved for us and what we need to solve manually. AI is certainly not an abstraction layer, but there are ways to use it where you are still driving, learning, and shipping.

    There is indeed boiler plate that can be cranked out and skimmed. And, additionally, you likely know the areas where you want to slow down and take more time with.

    I've linked this before, but it's worth resharing Birgitta Bockeler's article on this decision matrix.


    Loose Leaf over Sketchbooks

    For whomever needs to hear this: prefer using loose leaf paper when sketching.

    I have a big stack of printer paper I just pull from when I'm ready to draw. On my shelf are manilla envelopes to stash them in when I'm done.

    Why? To keep the practice loose and free from the expectation of performance. There's nothing romantic about drawing on printer paper, it's cheap, and you won't feel the quiet pressure to keep performing at a certain level.

    The bound sequential nature of pages means, in a sketchbook, if I had a great page, there's a quiet pressure to keep the bar high. Single pages have no continuity.

    But! They can still be collected and organized into a stack. I, for example, have a stack of my figure drawing studies. And another stack for my perspective studies. If I wanted to, I could toss anything I didn't want to keep.

    If the sketchbook is keeping you blocked and stiff, give single sheets a whirl.


    Pec Study

    💪
    Pec Muscle Studies

    Zeroed in on the pecs in June.

    Part of Proko's Anatomy of the Human Body course. Big, thorough, and rich with material.


    Pachabel's Canon (2026)

    🎩

    Another revisit. Aside from weddings, I always think of this guy when I hear ol' Pachabel.


    Carulli — Allegro

    🪩


    Local Polling

    I have a rare process that needs to run on a physical machine rather than via a cloud server. Let's say it's report generation. It ultimately has similar responsibility to a cloud worker — the local machine is meant to be on standby, waiting for requests to come in. But, what I've been doing instead is manually spinning the process up via CLI. The ideal, though, is for it to not need my oversight. Even better if it runs when there's been a change in the reporting data it's based on.

    Polling unlocks this. This past week, I've spun up a few pieces:

    • A queue for holding job requests
    • An adjustment to the report data update that submits a request to the job queue
    • A daemon on the local machine that polls at an interval for jobs waiting to be picked up.
    def run(self):
      try:
          msg = self.store.queue.receive(wait_seconds=20)
          if msg is None:
              continue
          self.handle(msg)
      except Exception as e:
          logger.error(f"Daemon loop error (continuing): {e}")
          time.sleep(LOOP_ERROR_BACKOFF_SECONDS)

    In this model, it's ultimately up to the daemon to be responsible for progressing the queue. The daemon can read the first n messages based on the load it can carry. Once a job completes, it is then responsible for deleting the message from the queue, or marking failed otherwise. On crashing, a queue such as SQS will handle replacing the message in the queue after timeout to be handled again later.

    An interesting bit of glue, I thought. Perhaps it speaks to the ubiquity of cloud compute that I find this novel. All the same, there was a magic to seeing the process spin up on my machine automatically when polled!


    Torso Skeleton Study

    🩻
    Simplified Torso Skeleton

    April & May have been all about simplifying the torso's skeleton.

    Part of Proko's Anatomy of the Human Body course. Big, thorough, and rich with material.


    Playing the Game Wrong

    Gif of mario sleeping alongside a piranha plant from SM64 😴

    The drop in the stomach returns — I sit down at the keyboard, pick up the guitar, or sit at the drawing board. Either way, it all feels the same — ugh.

    The resistance is coming from a long stretch of, well, stretching. After my move back to Texas, I was eager to continue learning new things across all the disciplines. This always starts out as really thrilling, but eventually a few symptoms arise after going strictly on that path in the practice for a while: blank page syndrome, procrastination, and frustration.

    Alas, still learning this one! Something that continually takes defining is how much new and how much familiar to keep in the routine.

    I'm not a great adherent to the 50% rule from drawabox. There's a reason it's hard. It's almost a comforting thing learning new material; the payoff is clearly defined. There's more courage required to goof around. Hoping to make this my written reminder to adhere more closely to keeping a balance!

    Maybe it's just my style. Having spent most of my life in school eaither as a student or a teacher, I'm pretty hard-wired to the rhythm of the academic calendar and the release that comes with summer break.

    Speaking of, a helpful connection: I played Super Mario 64 to death as a kid. I still do — I come back to cruise through 100% it somewhat annually. Part of what makes this game special is how open it is. You are in levels, and there are objectives, but you're given a lot of freedom in what order and how to accomplish them for the most part. Today, I can play it with clear targets. But when I was a kid, it was more about exploration.

    And what made it so engrossing for long stretches of time, and why I don't really remember burning out from it, is that I approached it the way that a kid would. I played the game wrong! I would take in the scenery. Sit and enjoy the music. Make up my own goofy games within the game. (e.g., climbing slides backwards.) When hitting a wall, I found other ways to lighten the load to keep playing.

    So I'm searching for ways to do this in my mediums. Playing familiar pieces. Drawing favorite subjects — flowers, people, and little ghosts. Simply enjoying the production of sound and line. Playing my own goofy games of "what if I improvised with only these three strings?"

    A lot of that requires doing things that don't end up on this site. It has to happen off stage. More on this another time.

    Shifting the goal has helped so far. The question isn't how I can hit a target, but how I can keep playing. That's what it's all about at the end of the day, anyway.


    Manuela Boy

    🏝️

    Trying out Slack Key! From Ozzie Kotani's Guitar Playing Hawaiian Style.