Jekyll2026-02-27T19:57:45+00:00https://cg505.com/feed.xmlchristopher’s blogmy websiteChristopher Cooperhttps://cg505.commy favorite music of 20252025-12-31T00:00:00+00:002025-12-31T00:00:00+00:00https://cg505.com/blog/2025-musicosquinn, FearDorian - Before You Press Play

I’ll admit that this project put FearDorian on the map for me. But as a long-time quinn listener, it’s hard to imagine a better collaborator for her sound. The Atlanta-based duo has delivered a reliably vibey project with some fun lyrics - “I was in the spot, hella fried like chicken,” quinn raps in “L Train Vintage”.

Coincidentally, “L Train Vintage” dropped right before I spent a weekend in NY, so it was fun to pass by its namesake on the way to a rooftop party where I got to spin that track. The track stuck with me, and when the album was released it did a great job of delivering on the core feeling of this track without being too repetitive or too scattered.

kimj, underscores, umru - “1-800-FUCKOFF”

underscores’ singles this year have been standout as she develops the slightly clubbier sound of the “U” era. This track in particular, off kimj’s at times brilliant Korean American, adds an interesting twist. The supporting production from umru gives a punchy and extremely well-executed hit from three powerhouses of the genre. The lyrics are straightforward but unfortunately personally relatable in a chaotic year.

underscores holding a long light behind her underscores at The Regency Ballroom on Nov 25.

I was glad to get a chance to see all three of these artists (separately) in San Francisco this year. kimj and umru both bore the burden of the Club Six basement well (iykyk). However, underscores’ set shone in a stacked lineup on Danny Brown’s tour date at the Regency Ballroom. femtanyl had the crowd screaming for every frenetic drop. Danny Brown’s tour set felt like a huge upgrade from his one-off show at Public Works in February. For me, the underscores set had the highest production value and was a joy to experience. I’ll admit I jumped and screamed when 1-800-FUCKOFF flashed across the screen.

Ninajirachi - I Love My Computer

Nina is another artist that was not on my radar until this year. umru’s remix of her track with MGNA Crrrta - “Angel Music” - was really the first I had heard of this Australian phenom. At that time, she was already releasing singles off ILMC - “All I Am” in February, then “Fuck My Computer” in May, two days after the umru remix. Still, it wasn’t until the full album was released in August that the vision finally clicked for me.

It’s an artful kaleidoscope reflecting on our relationship with technology that has come to define early Gen Z. And except for track 1, I genuinely love every track on this album. Highlights: “iPod Touch”, “Delete”, “All I Am”

Unfortunately I was so late to the game on this one that Ninajirachi’s headline show at Monarch was already sold out, which made me very sad. Hopefully another time!

Jane Remover - “Dreamflasher”

PLEASE GOD SAVE ME, I’M SO TURNT RIGHT NOW. For me, this is the best of JR on Revengeseekerz - I remember listening in my bed on release night and jumping up to scream when the second drop hit.

jane_remover instagram story: "i came to your show with my situation ship and now we aren't talking help i miss him"

As always, Jane delivered a great show in San Francisco this year without having to do anything special, just off the back of the music being excellent. Lucy Bedroque was the perfect opener. I had forgotten Dazegxd was also playing a set, so that was a very happy surprise.

Effie - E

I first found Effie after “MY UNNIES” (kimj, SEBii, The Deep, Effie). But after exploring her catalog, it was E that stood out. This EP is a brief 16 minutes, but packs in a variety of fun tracks from the extended kimj universe. I love that Effie strikes a balance between a poppy but distorted sound, without veering fully into kimj’s dubstep dungeon.

Shout out to the DJ KELSEY and yx2 remix of “put my hoodie on”, which was also one of the first places I came across music from E.

Operelly - Handwriting Practice No. 1

Though Operelly first broke out with singles in 2022, deadAir released her debut EP this year. I was entranced by the songwriting of songs like “It Must Be Bad”, which is the standout track for me. I’m very excited to see what Operelly does next. I was sad to miss her tour date in October opening for quinnie. Hopefully it will work out in the future!

yx2 - memories forever

yx2 and Capturelight DJing yx2 b2b Capturelight during VERTIGO at Temple on Sept 27.

Bay Area local yx2 has created their perfect niche. They executes amazing high energy mixes, straddling anime music, Jersey club, Dariacore, hip-hop, K-pop, and everything in between. This mix from August has it all and feels like a perfect encapsulation of their in-person DJ sets. The setlist for this one includes “latch tool” (yx2, nijikon), which seems to be a rework of “BUBBLE TEA” (dark cat, juu, cinders), which samples “Latch” (Disclosure, Sam Smith). It’s crazy.

Tennyson - aka

This one is easily my favorite of the year. This is my most listened-to album of the year by a significant margin, and it came out in November!

Tennyson shines when he focuses on tasteful musical complexity, and here he excellently applies this approach to EDM, somehow delivering a collection of tracks that are simultaneously at home on a CDJ and such a fun listen on their own. It’s like IDM that isn’t a chore to get through. I need more music like this in my life.

I’m a lifelong Tennyson fan, and I really hope Tennyson does a tour for this album. He typically does live shows, and I’m not sure if that would fit here, but I know I’d love it either way.

username - pair III

username put himself at the forefront of the footwork resurgence this year. Elxnce put out a Twerknation28 footwork remix of a tiktok audio (which was a remix of a BADBADNOTGOOD song btw), and username put out an album whose cover was a painting of a classic 2008 footwork video.

The best way to experience this music is with a DJ on speakers bigger than you. username delivered on that this November at F8 in SF. He played a great set and at one point cut both faders to shout “R.I.P. Rashad”.

username DJing username at F8 on Nov 28.

But whenever you wanna get that juke fix but you’re not at the club, this 17 minute mixtape will get you close. Don’t be put off by the fact that pair III only has two tracks - it weaves in and out of dozens of musical ideas in that time. And username isn’t afraid to meme a bit - “I CANNOT GET STUCK NOW” reminds us that “right now, you can save fifty pounds per person” which as we all know is two hundred pounds off for a family of four.

Swimful - Diecast

I honestly know very little about Swimful or this EP, but the sound design here is inspiring. It’s not necessarily one to listen to while you do dishes, but it works wonders in a mix.

kmoe - K1

After carving out a name for himself as one of the young pioneers of hyperpop, kmoe has floundered. As he sings in “Do I keep you up”: “Got one more chance left to get out / … / One hit song from a TikTok / Six, seven, eight months since the last drop.” But K1 is a huge swing that connects, catapulting kmoe into a new, more mature era. Though it’s melancholic and at times angsty, it comes across as soul-searching rather than overbearing. The production is consistently top-notch. The result is a cohesive album with an innovative sound that makes for a great listen.

Oklou - choke enough

choke enough was another project that I was slow to warm up to. Though Oklou’s work had been bouncing around my head for a while (e.g. “Highest Building” by Flume feat. Oklou), I’d never connected with her solo work. And indeed when choke enough was released, my feeling was closer to that of Fantano’s infamously harsh review. But, surprisingly, with time, I grew very fond of this album. The spare instrumentation sets up some unexpectedly satisfying payoffs, like when the snare finally comes in on “choke enough”. And so somewhere in the listens this transformed into something more than just nice vibes.

me wearing umru's gag "I'm not Oklou, I'm umru" shirt

Shout out to the umru, DJ CARLOZS & DJ LUKINHAS remix of “obvious”, which is very fun :)

Cusp - What I Want Doesn’t Want Me Back

I don’t listen to a lot of music that has slide guitar, but maybe I should. I don’t know much about Cusp or this album, but it’s good.

Jane Remover -

A few weeks ago I was listening to “Magic I Want U” when I realized it sounded different than normal. The mix felt different - more sparse, more clear. And I could swear some of the instrumentation was slightly different.

Sure enough, Jane had quietly updated the mix of “Magic I Want U” on streaming. And I immediately guessed that this signaled an upcoming release.

After the release of Revengeseekerz, Jane claimed in interviews that the poppier singles released in 2024 were intended for an entirely different scrapped album. And while I loved the album we got in 2025, I was still extremely excited for more JR pop music. After all, “Magic I Want U” was one of the best songs of 2024.

Shortly after, was announced. Although I wish it was longer, this project delivers with “Music Baby”, an extremely late contender for song of the year. It hits all the notes you could hope for - immersive and meticulous JR production, super catchy hook, and a touch of Jersey, all perfectly on theme.

Mechatok - Wide Awake

I’ve never been a drainer, so I was quite surprised to find Mechatok’s 2025 LP on my list for this year. Mechatok hits clubbier notes and still delivers a fun album with a Bladee feature. Didn’t know that was possible. Actually, the Tohji feature on the single “200” tipped me off to pay attention to this one, and I was surprised to find super fresh production throughout. I listened to this a lot. It also makes for great mixing.

camoufly - “llamando”

camoufly’s production has been top tier for a while - “Garden” (Jedwill, camoufly) was released way back in 2020 - but after a long string of fun singles he’s finally released his debut LP. It was “llamando” that hit hardest for me.

SOPHIE - “GET HIGHER”

It is crazy that we are still getting new SOPHIE music in 2025. But this was certainly a delightful one to get. What more can I say?

Feel free to email me with recs! [email protected]

]]>
Christopher Cooperhttps://cg505.com
giving up on offline pgp keys2024-06-04T00:00:00+00:002024-06-04T00:00:00+00:00https://cg505.com/blog/giving-up-on-offline-pgpIn 2018, I revamped my PGP keys, deprecating old keys that were created when I was a baby sysadmin, and replacing them with a ~new fancy offline master key with expiring subkeys~. This meant that my keys were on a Raspberry Pi that had its network interfaces disabled. I only ever used the built-in serial terminal to interface with the master key - it was otherwise fully airgapped and more secure than anything else has ever been in my life.

Well, my subkeys expired in 2020, and because it was such a PITA to fix, I just let them expire. To be fair, there was a pandemic going on. But I also never got around to it in any of the four years that followed.

In that time, I gave up on PGP in general. I read The PGP Problem and Filippo’s blog post. SKS died, and we had to kill the keyserver I helped run. So, I didn’t have much incentive to preserve my PGP keys.

But, eventually I realized that they can be useful. PGP keys are still frequently used for package signing or verification of git commits. I’d like to join dn42, and they use PGP keys to prevent AS or IP space takeovers instead of relying on LOAs (lol).1 Like it or not, in many spaces, PGP is the established default.

So I’ve realized that slightly less secure keys are probably better than no keys at all. Rather than having to find my UART adapter, I’ve given up on the Pi setup. To this end, my master key is no longer offline - it’s on the laptop I’m using to publish this post, protected by a passphrase. This puts it in approximately the same class of security as my bank credentials, all the infra I have access to, my email account and all my backups, etc. So I think it’s probably fine.

I’ve updated my keys to include the email I use these days. I also added a non-expired encryption subkey, in case you really need to send me something PGP-encrypted for whatever reason. I don’t have an active signing or authentication key, as I don’t use these at the moment.

My keys are available on keys.openpgp.org, or you can just download it from this website - cg505.com/key.asc. The fingerprint is F1DA0D0FD84CDA4C6FE052E365F6C6C95459F55E. I will not be using WKD as I’d like to be able to read my email - this may require me to remove the key from keys.opepgp.org if I have problems in the future. If you want to sign my key, go ahead, I guess. I’m not going to be making an effort to get into the strong set or anything like that.

If you want to reach me securely, please don’t send me an encrypted email. Message me on Signal, where my username is cg5.05. See you around!

  1. You can also use SSH keys to sign dn42 changes, but this feels like a misuse of SSH keys. I want my SSH keys to do one thing (authenticate me to SSH servers) and nothing else. I’d rather use PGP keys since they’re at least designed to be general-purpose, for better or worse. This argument gernalizes to all use of SSH keys for signing git commits. 

]]>
Christopher Cooperhttps://cg505.com
stop rebasing2020-11-16T00:00:00+00:002020-11-16T00:00:00+00:00https://cg505.com/blog/2020/11/git-rebase-considered-harmfulokay, okay. Maybe the title is a bit strong. I’m describing a phenomenon in which people believe that your git history should always be a straight line, and that rebasing is always preferable to merging. That philosophy runs into problems really quickly. I’ve personally lost many hours of my time dealing with this in a project at a well-known company. How? Let’s start with the background.

First, why do people rebase instead of merging? If you don’t know what a rebase is, the Pro Git book provides a pretty good description. If you never rebase, merges can get pretty crazy. This is how a merge-only flow might work:

  1. You start working on a feature branch
  2. You make some commits
  3. There’s new commits on your main branch, so you merge it into your branch
  4. Repeat steps 2 and 3 a few times
  5. When completed, you merge the feature branch back into main1

network graph for frc461/website-2013

This results in a hard-to-decipher mess of merge commits, such as this example from my first major web development project. This history obscures the fact that your feature branch can usually be represented as simple diffs that can be applied cleanly onto main. Instead of this mess, rebasing lets us directly represent those diffs as clean commits on main, as if we never branched at all. This results in a nice, clean graph that shows the linear progression of new patches hitting main.

That seems good! And, in this most common case, it is. However, there seem to be a growing number of rebase fanatics that take this too far. They will always rebase instead of merging. Here’s why this can be a problem.

Rebasing violates append-only history. Generally speaking, git is based on the assumption that your commit history doesn’t change, except by appending new commits (including merge commits) to the end. Rewriting your history, aka rebasing, completely violates this assumption, and it needs a bunch of kludges to make it work. For example, pushing a rebased branch requires you to use --force-with-lease. (Don’t use --force!2)

Because of this append-only assumption, it is disastrous to rebase a branch that someone else is also working on. You may be aware that you should never force push to main, but the rule is really “you should never force push a branch that another person has checked out”. This is because when the other person pulls this branch, git will attempt to reconcile the local (pre-force-push) branch history with the remote branch… creating a merge AND adding the old history back into the branch! The user now has to notice that this is an issue (hmm… why did git tell me it’s creating a merge commit?) and know how to manually resolve it (okay, the branch must have been force-pushed, gotta run git reset --hard origin/branch). If the other person has local changes, they have to determine how to cherry-pick those changes onto the new history. This is a nightmare, even when you’re super experienced with git. No one should have to do it, ever!

Magit struggling to comprehend a force-pushed feature branch

This example would not have caused any problems if my imaginary teammate had merged instead of rebased.

The reason this gets messy so fast is quite simple: in order to merge diverging histories, git compares to the most recent shared history. By rebasing, you are removing that shared history. In extremely very simple cases, git can recognize the “same” history in a rebased branch, but this detection breaks down as soon as any potential conflict arises.

The logical conclusion is that when you rebase and force-push, you must be confident that NOBODY ELSE has checked out the branch that you’re rebasing. You must never rebase and force-push your main branch. Rebasing is a very powerful tool that you should use, but ONLY on your own branches, ideally before they’re ever been pushed.

You may be thinking: “Why would anyone force-push a shared branch? Isn’t this a case of disproportionate outrage over a tiny issue?” People get in the mindset of “rebase, never merge”, and it is really easy for this to happen. I was on a team that was about 100 commits into a fork of an open source project, when there were some upstream changes that we wanted to pull in. I went ahead and set up the merge, resolved the conflicts, and opened a PR. However, the tech lead told me that they preferred to rebase everything in our fork on top of the upstream master. You should be able to identify this as a violation of the “don’t force-push shared branches” rule. It meant that every active feature branch had to be rebased on top of the new fork, which caused dozens of conflicts each time. What did we have to show for it? A cleaner commit graph. Not worth it.

  1. I use main to refer to your primary development branch, whether you call it main, develop, master, or whatever else. 

  2. Using --force can accidentally overwrite git history that you didn’t expect to be there. --force-with-lease is preferred because it checks that you know about the history that you are overwriting. 

]]>
Christopher Cooperhttps://cg505.com
Kubernetes and open contribution at OCF2020-03-07T00:00:00+00:002020-03-07T00:00:00+00:00https://cg505.com/blog/2020/03/kubernetes-open-contributionThis January, I gave a talk with my fellow OCF officers Patricia Hanus and Ja Wattanawong at the UC Berkeley Cloud Computing Meetup.

The OCF is a student-run, volunteer organization, and we run a lot of stuff. Everything we do is oriented around making sure it is easy for volunteers to jump in and start contributing. If you’ve worked with Kubernetes before, you’d be reasonable to question how it can help us achieve that goal. Well, we decided to explain how and why we use Kubernetes, and show you a few tricks we learned along the way.

The slides in the video are difficult to see, but you can follow along:

]]>
Christopher Cooperhttps://cg505.com