Chris Padilla/Blog
My passion project! Posts spanning music, art, software, books, and more. Equal parts journal, sketchbook, mixtape, dev diary, and commonplace book.
- Go to school, learn how to hold a pencil properly
- Before I nailed that, I had to learn to write accurately - hitting the tops of my letters on the dotted lines
- Strain a bit to get it right, trading good form for accuracy
- The bad habit solidifies once accuracy became more important than technique
- Perfectionism goes out the window quickly when something just needs to get done
- When you can't lean on perfectionism and design, there's only room to follow intuition. A big plus in cultivating that!
- The rhythm helps with any creative process. Routine gets the gears turning for what to make next
- At the start, simply making it to the finish line is it's own reward, regardless of how the music / blog / drawing turned out
- You could be finding the canonical source for documentation in a language.
- You could go down any number of small rabbit holes learning about the intricacies of a language. Say, for example, when to use the
this
keyword in C#. - Maybe you're like me and you're also getting used to another IDE / Text Editor. In my case, I'm using Visual Studio to learn C# instead of VS Code.
E Minor Cowboy Waltz 🤠
Improvising a Dosey Doe in the ol' 3/4 🌵
Polymorphism Through Abstract Classes in C#
One of the 3-7 pillars of Object Oriented Programming (number depending on who you talk to) is Polymorphism.
What is polymorphism?
When designing classes, it's sometimes helpful to have parent-children relationships. A "Vehicle" class could have attributes like "Passengers," "Color," and "Speed". It can have methods like "FuelUp", "LoadPassangers", etc.
Deriving from that, we can then have child classes for Cars and Boats.
Here's what that would look like in C#:
namespace ChrisGarage
{
public class Vehicle
{
private List<string> Passengers = new List<string>();
public readonly string Color;
public void LoadPassenger(string passenger)
{
// . . .
}
public Vehicle(string color)
{
if (String.IsNullOrEmpty(color))
{
throw new ArgumentException("Color String cannot be null");
}
Color = color;
}
}
public class Car : Vehicle
{
public Car(string color) : base(color) { }
}
public class Boat : Vehicle
{
public Boat(string color) : base(color) { }
}
}
Easy!
So that's inheritance, but it's not quite polymorphism. Polymorphism is the manipulation of the inherited classes to suit the needs of the children classes.
Continuing with the vehicle example, it's safe to say that all vehicles move. They'll need a "Move" method.
But a car does not move in the same way a boat moves!
We could define those separately on the children. But it's safe to say, if it's a vehicle, we expect it to move. We want the vehicles to conform to that shape.
Why? Say we're iterating through a list of vehicles and running the move method on them. We want to be sure that there is a move method.
We can enforce that through the abstract
and override
keywords.
// Declaring class as abstract, in other words, incomplete.
public abstract class Vehicle
{
private List<string> Passengers = new List<string>();
public readonly string Color;
public void LoadPassenger(string passenger)
{
// . . .
}
public Vehicle(string color)
{
if (String.IsNullOrEmpty(color))
{
throw new ArgumentException("Color String cannot be null");
}
Color = color;
}
// Adding the move abstract
public abstract void Move();
}
public class Car : Vehicle
{
public Car(string color) : base(color) { }
// Writing custom car algorithm
public override void Move()
{
Console.WriteLine("Drive");
}
}
public class Boat : Vehicle
{
public Boat(string color) : base(color) { }
// Writing custom Boat algorithm
public override void Move()
{
Console.WriteLine("Sail");
}
}
On the parent, we set the class as abstract
and include an abstract
method to signal that we want this method to be completed by developers designing the derived classes.
On the children, we use the override
keyword and do the work of deciding how each vehicle should move.
A note on abstract
: If you wanted to provide some base implementation, you could use the virtual
keyword instead and write out your procedure. Virtual also makes overriding optional.
You then can decide to call the base class's Move method, the way that we do here for the Draw method:
public class Rectangle : Shape
{
public override void Draw()
{
base.Draw();
Console.WriteLine("Rectangle");
}
}
Lessons From a Year of Blogging
My domain renewed and my blog turned a year old! What started as a fun technical project has turned into a wildly gratifying medium for expression. I'm starting to think it might even become my life's work!
I've learned a ton in the process of writing a bit each day. The first draft of this has a list of bullet points a mile long. Here are some of the most salient takeaways, and why I'll keep writing:
Performing on a Stage
The process truly is the product. The greatest gift of sharing online isn't really so that thousands of strangers can see what you create. It's in the making.
But there's something to performing on stage that's different than the practice room.
It's the feeling of elevation and a sense of audience that can really stir the spirit. I write for myself everyday in a journal. But I don't quite reach the same clarity of thought or spiritual sense of communing with the Great Creator.
Put another way — sure, in school you might doodle on your math homework. But when given a canvas that will be framed on a wall, there's a calling to create something more.
Maybe that's overstating things here. It's just a blog, after all.
But the feeling is there. It was the same with music. An audience of 3 is still an audience in a concert hall. Any audience is enough to complete the performance.
Clarity
I thought this was just a point for software, but it goes beyond that.
Writing about code helps clarify thinking around it. That goes for writing what I'm learning, topics reading about, and projects I've built. It even goes for testing.
Turns out, the same is true for everything else. Writing a post about creativity solidifies my thoughts around it. I've had moments in the studio where I was stuck on something, but remembering "hey, didn't you write a blog post about practicing slow?" actually came up.
There's the technical side of it, too. Wanting to record a guitar tune for this site makes my practice on it that much more focused. Same for art — having a platform to share pushes me to want to refine my line quality and try new skills.
Kleon makes a good point that writing helps him figure out what he has to say. The more I write, the more I feel a writing voice coming through. I become aware of what's valuable in what I have to say through — well — saying things.
Long Term Conversations
Alan Jacobs mentions that the best part of blogging is revisting themes and topics.
Everyone who writes a blog for a while knows that one of the best things about it is the way it allows you to revisit themes and topics. You connect one post to another by linking to it; you connect many posts together by tagging. Over time you develop fascinating resonances, and can trace the development of your thought.
I'm just at the start, but I'll echo that already it's been fascinating holding a long term conversation with myself and other blogs and books.
It's Surprisingly Expressive
It's a great answer to the equation of Impression Munis Expression Equals Depression
You know how there's probably that thing you're really into that's pretty niche (say, vintage radio collecting?) Or maybe the work you do is too technical to be good small talk fodder? Or maybe you just have those sensations, feelings, and impressions that are too nuanced to express in a passing conversation? Yeah, writing is good for that.
What makes a personal blog interesting is bringing in the full spectrum of what tickles your brain. Somedays it is executing SQL queries through Python, other days it's musings on books, other days it's leaving memories from a fun weekend. Some of my favorite tech blogs have a wild amount of personality shining through them. It's fun to have many pots boiling!
All creative practices are actually really similar once you get past the details of medium. If you want an outlet but don't feel like you're creative ("I couldn't sing my way out of a paper bag!", "I can only draw stick figures!",) I think you ought to try blogging. You're a Mozart in your own way of speaking and living. Words are a pretty great way to capture your impressions.
👋
A year is just the start. Many of the folks I admire are prolific and diverse bloggers. If you've read, commented, emailed, or been a part of it in anyway — Hey! Thanks! Here's hoping for many more years!
Holding With a Loose Grip
I have a nasty habit of holding my pencil with a mean pinch. I can't write for too long because my palm will get sore.
It's something I'm being mindful of now that I'm drawing regularly.
How it probably happened:
It's easy to imagine that in other disciplines, and on a much more serious scale. On sax, I knew folks that developed tendonitis. I've heard of artists with Focal Dystonia. Even when I taught marching band, I saw students push themselves to overexertion.
So I'm stopping to ask myself: What if it were flipped? What if the way I did things was more important than the end result?
Here's how it's going so far with drawing: comically!
My lines were already pretty inaccurate, now they're hilariously so! It's both frustrating and...fun!?
It's been a weird cheat for another benefit. Focusing more on how I'm holding the pencil has made it so I can let go of the result. In other words, drawing is even more playful than it was before!
I'm already translating this to guitar and piano to pretty great effect. Things are moving more slowly, but I don't leave either instrument with any cramps. Since the physical process was more pleasurably, lo and behold, I'm feeling even more bouncy and light after leaving a session.
W.A. Mathieu has a great essay in The Listening Book that advocates for practicing slowly. The message is different: practice slowly to learn quickly. But the sentiment is similar:
Lentus Celer Est
This is bogus Latin for Slow (lentus) Is Fast (celery). Write it large somewhere. It means you cannot achieve speed by speedy practice. The only way to get fast is to be deep, wide awake, and slow. When you habitually zip through your music, your ears are crystallizing in sloppiness.
Yet almost everyone practices too fast, their own music as well as others'. We want to be the person who is brilliant. This desire is compelling, and it can become what our music is about.
Pray to Saint Lentus for release from zealous celerity. Pray for the patience of a stonecutter. Pray to understand that speed is one of those things you have to give up—like love—before it comes flying to you through the back window.
Does it have to stop there? There's a big life metaphor here, I bet! Say: setting up your days where you actually enjoy them, have energy to do the most important things, and in a way that sustains relationships.
I'm going to keep trying: Holding days and practices with a loose grip.
Childhood Home Sketch
Beethoven - German Dance
🕺
When I started lessons last year, this was my first assignment. It took aaaaalll week to get to a point where I could make my way through it. Now, I'm able to brush it up and play it through in a couple of sessions. A proud moment!
Iterators in C#
In JavaScript, there's a bit of magic in arrays and objects. They have methods themselves like myArray.toString()
, and they also have a special way of accessing entries through iterator selectors myArray[2]
.
C# actually exposes this method of class design through iterators!
To get that functionality, we need a method on the class that uses the this keyword:
public string this[string key]
{
get
{
return _dict[key];
}
set
{
_dict[key] = value;
}
}
Above, we'll assume _dict
is of type Dictionary
, a built in Class that functions just like a Python dictionary or JavaScript object.
I've typed the above iterator value with a string, but you could set is as an int and use a List just as well.
Here's what it looks like if we were to reproduce some of the functionality of a JavaScript object:
using System;
using System.Collections.Generic;
namespace HelloWorld7
public class Object
{
private Dictionary<string, string> _dict = new Dictionary<string, string>();
public Dictionary<string, string>.KeyCollection Keys()
{
return _dict.Keys;
}
public string this[string key]
{
get
{
return _dict[key];
}
set
{
_dict[key] = value;
}
}
}
An exception: we can't really expose keys as a static method like we would in JavaScript here. If Keys()
is made static, we would also have to make the internal _dict
public, which defeats the purpose of encapsulating it.
Once that's set, you can create an object instance and return keys like so:
class Program
{
static void Main(string[] args)
{
var myObj = new Object();
myObj["name"] = "Chris";
myObj["city"] = "Dallas";
myObj["pets"] = "Lucy";
Dictionary<string, string>.KeyCollection keyColl = myObj.Keys();
foreach (string key in keyColl)
{
Console.WriteLine(key);
}
// name
// city
// pets
}
}
Rob Ingles Singing Lord of the Rings
I've been listening to Rob Ingles's narration of the Lord of the Rings audiobook. What a treat!
The books are full of songs and rhyme. Ingles actually puts these to his own singing interpretation. A friend told me that Ingles actually got Tolkien's approval for his compositions!
There's such a sense for mood, style, and melody. Really delightful! He really captures the folk feeling to Sam's Rhyme of the Troll:
Tom Bombadil's is probably my favorite. So bouncy, like a woodland Santa Clause. Rob even contrasts the sections with timbre, range, and articulation!! WOW!!
Deadlines as a Creative Tool
A friend of mine was admiring the honesty of a mutual composer friend in saying "I work by deadline. It's the only way I get things done."
After nearly a year of blogging and over a year of putting music out regularly, I tend to agree!
Listening to Intuition
What's worked for me is the regular interval that's expected of anyone putting things out online. Monthly newsletters, weekly podcasts, daily blogs. Except for me, it's been music, words, and art.
Especially in the beginning, arbitrary deadlines are a great way to kickstart a new practice. Some of the benefits:
Building Identity
Regularly sharing online at an interval is also great for identity. James Clear writes nicely on this in Atomic Habits. The gist being that we are what we regularly do. So to be a musician, you have to music regularly.
Doing it in public helps others recognize that as well. I've been so flattered by the folks that have said that they've really enjoyed my writing or that they bopped to an album during work. Cultural validation is part of that identity.
The Balance
There's a spot to find between two points on a spectrum. On one end, there's the rigidity of creating just to reach a finish line at one end. On the other, there's so much play and exploration and purely following whatever idea comes that nothing ever gets finished.
Personally, my challenge at the moment is being on the rigid side! I'm used to life-long commitments here, I played the sax for 20 years. So a new part of the process for me is taking time to reevaluate what intervals are still serving me and which ones need to change.
In other words, keeping quiet deadlines also means knowing when to let some go.
An example for me: In 2022, I wanted to release an album a month. Great fun! Very proud! So far, I've done that for 17 months.
I've kept that going while also picking up other practices, though. And the excitement for learning, say, to draw, has outpaced wanting to put an album out just because I said I would. And, of course, there are only so many hours in the day. So I'm at a spot where that needs negotiating.
No wrong answers, but taking the time to be intentional is what matters.
Like anything else in the actual creative practice — the structure around it requires both the lightness of play and a bit of detail orientation. When enthusiasm and play drives the decision, then the supporting choices can match effortlessly.
Finishing Sketchbook No. 4
The stack is growing!
This one was filled with more studies as part of the Proko courses I'm taking.
Lots of bean studies as part of the figure drawing course:
On to the next one!
Folkin' in G
I already broke a string and learned how to restring this guitar. What an adventure!
Learning Syntax the Fun Way with Toy Problems
Yes, you could go through tutorials and just type along with the video. Yes you could read documentation.
Most of us get into programming, though, because we like solving puzzles. It's not the only reason, but programmers are just those sort of folks that have an itch that's only scratched by seeing a destination and writing their way to it.
Say I'm prompted to write a method that converts a string into Pascal Case. Sure, I know how to do that in JavaScript! Heck, I can even do it in one line like a COOL PERSON:
string.split(' ').map(x => x.charAt(0).toUpperCase() + x.slice(1).toLowerCase())
The fun part is knowing how to get that solution and discovering the C# way to do it.
static void ConvertToPascalCase()
{
Console.WriteLine("Enter a few words seaerated by spaces:");
string inputValue = Console.ReadLine();
string[] inputWords = inputValue.Split(' ');
string[] processedWords = new string[inputWords.Count()];
for (int i = 0; i < inputWords.Count(); i++)
{
string word = inputWords[i];
string res1 = word.Substring(0, 1).ToUpper();
string res2 = word.Substring(1).ToLower();
processedWords[i] = res1 + res2;
}
string pascalCaseRes = String.Join("", processedWords);
Console.WriteLine(pascalCaseRes);
}
There's a double whammy here: You get to practice programatic thinking, and you get to learn the nuances of syntactical differences in another language.
Plenty of ways to make it a triple whammy, too!
If it's been a while for you, I'd recommend diving in and giving it a try! I think you'll be surprised by how much you enjoy it.
Apples
Faber - Energico!
Faaaaast fingers ⚡️
We're All Just Making Folk Music
My training is primarily in Classical Music, a high and sophisticated art form. 🎩
There's immeasurable value in it, just like classical literature and the impressionist paintings of Cézanne. It's art that transcends the dizzying pace of change.
These days, though, I love folk music.
I think a lot of what's being made today falls into that category, even beyond music: Blog posts, podcasts, videos, illustrations, games...
It's not really the latest and greatest, or the most sophisticated that's exciting. Most nights, I just want to lay back and hear someone preach the truth to me.
Rebecca Solnit, by way of discovery for me by Austin Kleon:
Adults, like children, love hearing the great stories more than once, and most religions have prayers and narratives, hymns and songs that are seen as wells of meaning that never run dry. You can go lay down your sword and shield by the riverside one more time; there are always more ways to say how once you were blind and now can see.
High art typically has an emphasis on correctness, style, and form. Precision and training are required.
What makes folk music really good is that the bar for entry is lower. It doesn't take much to start a blog. Nowadays, you can grab your computer mic or camera and start talking on your opinions, sharing your own twist on something you read today, or a conversation you had.
On top of that, it's much more communal in that way. There's more room for personal expression when the form is simple. But a shared story or theme ties the choir together. No need to chose between joining in or expressing authentically, there's space for both.
If you have a way of sharing online, you have a way of making your own folk music. If you have a guitar and know three chords, you can start singing along.