I had to do some bugfixing of my album reviews section this morning (had to do with artist altnames, which were still buggy), so I took the opportunity to lay some groundwork for some features I wanna implement and polish up some of what was already there. You see, now that I have over a hundred of these things and no intentions of stopping any time soon, I want to turn it from a simple "Cammy talks about albums" section into a way to turn people on to stuff they like outside of simply my opinions. Discovering new music can be a little hit-and-miss, so I've come up with some ideas based on how it usually works for me.
(I'll be linking to the lofi version of mari.somnol through this journal entry, but all these features work on nofi to the same extent they currently work on lofi, just in case you were curious.)
Improved browsing of years and scores
So here's the easy one. I think it was when I was porting everything from nofi to lofi, I refactored what was formerly a single PHP script into three, an index, a review page, and a browse page. This browse page was what was bloating everything up before, because it pulls multiple duties. It lists artists and albums, of course, but sometimes, you're looking by year, sometimes by grade, and sometimes by artist name.
Before this, the only actual navigation on the browse page was artist alphabetical, which doesn't help you if you want to browse by year or by score. So now, it does some checking for which you're looking for and gives you a timeline view with decade skipping if you're browsing by year, and a grade-based navigation if you're browsing by rating.
There's probably a ton of different ways to glitch this out with fuzzy inputs or combining different HTTP GET variables, but it works if we're all playing nice. Some other time, I'll handle the checking better.
Cammy's Pick
Here's where we get into stuff I only have on the backend right now. If I go to anyone for album reviews I actually believe, it's probably AllMusic. They have many different writers on staff, but a lot of them seem to agree with me or at least use my methodology for rating albums. (Meanwhile, I've never had much luck with Pitchfork, who seem to write entirely based on what will get the most attention, and Sputnikmusic is a total crapshoot on whether or not the reviewer can even write a decent review. We don't go to RYM.)
AllMusic has an "album pick" function that lets you see which album from a specific artist's catalog the AllMusic staff has designated as the best, and I rather like this, so I added another column in the database for a "Cammy's Pick" flag, which will display on the artist page and probably in the artist browse as well. It's not visible yet, but the browse.php page is already set up to allow searches based on which albums have the Cammy's Pick flag.
I'll only be giving the Cammy's Pick designation for artists whose back catalog I'm really familiar with and therefore can judge a "best album" from, or artists who have albums I like so much, I doubt they can really be topped by future digging. More the former than the latter, a bit of both.
Mood search
Here's the one that'll take the most work and the most research from me—but it's definitely doable. Pandora continues to be the only streaming service that actually gives me relevant recommendations, and that's because it has the best classification system of any streaming service. Spotify and Apple Music rely on playlists and guesses based on what listeners of [x] band also listen to, but Pandora recommends music based on how similar its musical traits are to what it knows you like. They call this the Music Genome Project, where a human will listen to a track and give it "genes", stuff like "heavy use of syncopation" or "minor key tonality".
I love the Music Genome Project, because it completely removes genre (a classification nightmare that I could write a book on how much it sucks on) from the equation. Instead, you set up an artist station, it knows which traits are most common in that artist's music, and goes based on what traits that artist shares with others. This is how, as a preteen, I could create a station like Brad Sucks Radio and end up with artists as varied as Greenskeepers (who Brad has since covered, curiously enough), Fischerspooner, and RL goddamn Burnside. I like 'em all! The songs played on this station all have that same beat-heavy, muted vocal delivery, loopy, slightly electronic thing, despite the artists being indie rock, electroclash, and a salty old bluesman who got hooked up with hip hop producers shortly before his death, respectively.
I want to implement something similar for my album review section. Nowhere near as in-depth (and although they'd never actually go after me because I'm nobody, I'm obviously not trying to directly clone somebody's patented technology), but similar enough to where someone can say "I want textured, hooky, female singer rock" and would immediately be led to Last Splash by the Breeders, or "downbeat dreamy acoustic" would give someone Mutations by Beck.
Now, here's where this gets tricky. I rely on a MySQL database for my album reviews. This is great, and it's really simple to go "all Nirvana reviews", find the Nirvana entries under the artist
column, and send those to the reader. How do you do a tag search though? If you're simple like me, you might just think to stuff all the tags in CSV into a new column next to all the other data pertaining to that review and then search through, but this is a really bad and slow idea, and I'm interested, at least a bit, in doing this right and thinking in terms of scale. What runs fast with only 116 reviews in a database might be a fuck of a lot slower with 500, or 1,000 reviews in a database.
Tag searching led me down a rabbit hole, but here's the plan I hear everyone recommend, roughly:
- You have the normal review database. Each review is given a number, which starts at 1. They call this the primary key, because it's the way your reviews will be addressed from now on. This is quick because it's easier to match numbers down the line than it is to match text.
- You have a second database that gives a primary key to each tag. At current, I have about 30 tags, ranging from singer qualities (male, female, gentle, extreme) to instrumentation (acoustic, ambient, strange) to the way the album was recorded and mood.
- You have a third database where the primary key of reviews and the primary key of tags get matched up. In my head, I assumed I would need [x] number of fields for each row so I could attach multiple tags to one review, but no. You have a new row for each tag attached to a review. Say review #1 has six tags, you would have six entries in that third database, each one with the same review ID, but a different tag ID.
- You then do a "database join" (which effectively temporarily makes a brand new table) that merges all the previous data together. You can then search this new, joined, phantom fourth table in a really efficient way and return all albums that have the tags you're searching for.
On the user end, this is implemented with an HTML form with checkboxes and the like. This is where you'd give it your aforementioned "textured hooky female singer rock" search. I can add an additional filter as well for rating, in case you only want albums of a certain score to appear in your search.
This is going to majorly improve the way someone can actually use my music recommendations section to find music that's relevant to their tastes. Everyone can think of a specific musical trait they like, like "I really like music with gentle singing", and now, any albums with that trait that I've covered, you can pull up and immediately find. Read a few reviews, see what sounds most interesting to you, go and listen—Cammy has helped you find some new music ya like.
That's also a lot of work, but I'll definitely make it happen at some point. Right now, I'm really focused on getting through the last couple pieces of art I'm sending out with copies of Last Summer, which now will include my 2024 mix CD in the package to save me having to spend another $60 to ship out a mix CD to all the Somnolians in December. I can make that October 31st deadline I've set for myself, I know I can! And then I can just play Alpha Minecraft for two months. (Did I mention I've got old Minecraft fever lately? So cozy. I love this game.)