diff --git a/personal-site/src/main/kotlin/com/github/wakingrufus/website/MyWebsite.kt b/personal-site/src/main/kotlin/com/github/wakingrufus/website/MyWebsite.kt index a36927d..ee4f489 100644 --- a/personal-site/src/main/kotlin/com/github/wakingrufus/website/MyWebsite.kt +++ b/personal-site/src/main/kotlin/com/github/wakingrufus/website/MyWebsite.kt @@ -19,11 +19,13 @@ import com.github.wakingrufus.website.lib.dashboard import com.github.wakingrufus.website.lib.htmlPage import com.github.wakingrufus.website.lib.pageTitle import com.github.wakingrufus.website.lib.website +import com.github.wakingrufus.website.music.essentialMetal import com.github.wakingrufus.website.music.music2020 import com.github.wakingrufus.website.music.music2021 import com.github.wakingrufus.website.music.music2022 import com.github.wakingrufus.website.music.music2023 import com.github.wakingrufus.website.music.music2024 +import com.github.wakingrufus.website.music.music2025 import com.github.wakingrufus.website.slideshows.functionalKotlinSlideshow import com.github.wakingrufus.website.slideshows.kotlin2019Slideshow import com.github.wakingrufus.website.slideshows.staticWebSlideshow @@ -119,6 +121,9 @@ class MyWebsite { page(music2022) page(music2023) page(music2024) + page(music2025) + + page(essentialMetal) page(criterion2021) page(criterion2022) @@ -364,11 +369,13 @@ val myDashboard: DIV.() -> Unit = { +"Other Interests" } panel("Music") { + // h3 { a(href = essentialMetal.path) { +"Essential Metal" } } h3 { a(href = music2020.path) { +"Best Music of 2020" } } h3 { a(href = music2021.path) { +"Best Music of 2021" } } h3 { a(href = music2022.path) { +"Best Music of 2022" } } h3 { a(href = music2023.path) { +"Best Music of 2023" } } h3 { a(href = music2024.path) { +"Best Music of 2024" } } + h3 { a(href = music2025.path) { +"Best Music of 2025" } } } panel("TV / Film") { h3 { diff --git a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/AllLists.kt b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/AllLists.kt new file mode 100644 index 0000000..230c648 --- /dev/null +++ b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/AllLists.kt @@ -0,0 +1,6 @@ +package com.github.wakingrufus.website.music + +val allYearEndLists = listOf( + bestMusic2019, bestMusic2020, bestMusic2021, bestMusic2022, bestMusic2023, bestMusic2024, bestMusic2025 +) +val allAlbums = allYearEndLists.mapNotNull { it.albumOfTheYear } + allYearEndLists.flatMap { it.albums } \ No newline at end of file diff --git a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/EssentialMetal.kt b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/EssentialMetal.kt new file mode 100644 index 0000000..06114df --- /dev/null +++ b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/EssentialMetal.kt @@ -0,0 +1,22 @@ +package com.github.wakingrufus.website.music + +import com.github.wakingrufus.website.lib.article.article +import com.github.wakingrufus.website.lib.htmlPage +import kotlinx.html.a +import kotlinx.html.h1 +import kotlinx.html.id + +val essentialMetal = htmlPage("essential-metal.html") { + article("Best Metal Music") { + htmlSection { + h1 { +"Albums" } + a { id = "Albums" } + albumList(allAlbums.filter { it.tags.contains("metal") }) + } + htmlSection { + h1 { +"Tracks" } + a { id = "Tracks" } + trackList(allYearEndLists.flatMap { it.tracks }.filter { it.tags.contains("metal") }) + } + } +} \ No newline at end of file diff --git a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2019.kt b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2019.kt new file mode 100644 index 0000000..101415f --- /dev/null +++ b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2019.kt @@ -0,0 +1,22 @@ +package com.github.wakingrufus.website.music + +val bestMusic2019 = bestMusicOf(2019) { +// albumOfTheYear("Just Look At That Sky", "Ganser") { +// link("https://ganser.bandcamp.com/album/just-look-at-that-sky") +// } + album("LEGACY! LEGACY!", "Jamila Woods") + album("Nest", "Brutus") + album("Farseer", "Farseer") + album("Futha", "Heilung") + album("Babel", "RANGES") + album("Blood Year", "Russian Circles") + + track("The World of Mercy", "DIR EN GREY"){ + tag("metal") + } + track("Wheels", "The Devil Makes Three") + track("Seventeen", "Sharon Van Etten ft. Norah Jones") + track("Final Form", "Sampa the Great") +} + +val music2019 = bestMusic2019.toHtmlPage() \ No newline at end of file diff --git a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2020.kt b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2020.kt index 4bed4d7..104602c 100644 --- a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2020.kt +++ b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2020.kt @@ -4,17 +4,25 @@ val bestMusic2020 = bestMusicOf(2020) { albumOfTheYear("Just Look At That Sky", "Ganser") { link("https://ganser.bandcamp.com/album/just-look-at-that-sky") } - album("Black Aura My Sun", "Deserta") + album("Black Aura My Sun", "Deserta") { + link("https://deserta.bandcamp.com/album/black-aura-my-sun") + review("Runner up") + tag("shoegaze") + } album("Women in Music Pt. III", "HAIM") album("Spider Tales", "Jake Blount") album("Ghosts of West Virginia", "Steve Earle & The Dukes") + album("Spirituality and Distortion", "Igorrr") { + link("https://igorrr.bandcamp.com/album/spirituality-and-distortion") + } track("Fight Like Ida B & Marsha P", "Ric Wilson") - track("落ちた事のある空", "DIR EN GREY") track("Aspects", "STR4TA") track("Unglitched", "Дeva") track("Sad Music", "Jessica Winter") track("Zepyuri nman", "Ladaniva") + track("Kef Chilini", "Ladaniva") + track("Bullshit Anthem", "Fantastic Negrito") } val music2020 = bestMusic2020.toHtmlPage() \ No newline at end of file diff --git a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2021.kt b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2021.kt index 41d997d..39e058c 100644 --- a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2021.kt +++ b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2021.kt @@ -1,72 +1,75 @@ package com.github.wakingrufus.website.music -import com.github.wakingrufus.website.lib.article.article -import com.github.wakingrufus.website.lib.htmlPage -import com.github.wakingrufus.website.myFooter -import kotlinx.html.* +val bestMusic2021 = bestMusicOf(2021) { + albumOfTheYear("To See the Next Part of the Dream", "Parannoul") { + link("https://parannoul.bandcamp.com/album/to-see-the-next-part-of-the-dream") + review( + "This DIY shoegaze album from South Korea channels the ennui of being stuck in the same day-to-day drudgery, never fulfilling your dreams." + ) + tag("shoegaze") + } + album("Afrique Victime", "Mdou Moctar") { + link("https://mdoumoctar.bandcamp.com/album/afrique-victime") + } + album("Isles", "Bicep") { + link("https://bicep.bandcamp.com/album/isles") + } + album("Collapsed In Sunbeams", "Arlo Parks") { + link("https://arloparks.bandcamp.com/album/collapsed-in-sunbeams") + } + album("Humans in a Pool", "Takeshi's Cashew") { + link("https://lautluise.bandcamp.com/album/humans-in-a-pool-2") + } + album("För Allting", "Makthaverskan") { + link("https://makthaverskan.bandcamp.com/album/f-r-allting") + } + album("Outlaw R&B", "Night Beats") { + link("https://nightbeats.bandcamp.com/album/outlaw-r-b") + } -val music2021 = htmlPage("music-2021.html") { - article("Best Music of 2021") { - htmlSection { - a { id = "Albums" } - h1 { +"Album of the Year" } - h3 { +"To See the Next Part of the Dream - Parannoul" } - p { a(href = "https://parannoul.bandcamp.com/album/to-see-the-next-part-of-the-dream") { +"Bandcamp" } } - p { +"This DIY shoegaze album from South Korea channels the ennui of being stuck in the same day-to-day drudgery, never fulfilling your dreams." } - h1 { +"Great Albums" } - p { +"These albums are good from start to finish, have multiple stand out great songs, or both." } - ul { - li { - a(href = "https://mdoumoctar.bandcamp.com/album/afrique-victime") { +"Afrique Victime - Mdou Moctar" } - } - li { - a(href = "https://bicep.bandcamp.com/album/isles") { +"Isles - Bicep" } - } - li { - a(href = "https://lautluise.bandcamp.com/album/humans-in-a-pool-2") { +"Humans in a Pool - Takeshi's Cashew" } - } - li { - a(href = "https://arloparks.bandcamp.com/album/collapsed-in-sunbeams") { +"Collapsed In Sunbeams - Arlo Parks" } - } - } - } - htmlSection { - h1 { +"Tracks" } - a { id = "Tracks" } - p { +"These are great songs, released this year, excluding songs from top albums." } - ol { - li { a(href = "https://www.youtube.com/watch?v=QDYDRA5JPLE") { +"That's What I Want - Lil Nas X" } } - li { - a( - href = "https://parannoul.bandcamp.com/track/into-the-endless-night" - ) { +"Into the Endless Night - Parannoul" } - } - li { a(href = "https://makthaverskan.bandcamp.com/track/this-time-2") { +"This Time - Makthaverskan" } } - li { a(href = "https://nightbeats.bandcamp.com/track/new-day") { +"New Day - Night Beats" } } - li { a(href = "https://goatgirl.bandcamp.com/track/sad-cowboy-1") { +"Sad Cowboy - Goat Girl" } } - li { a(href = "https://nonameraps.bandcamp.com/track/rainforest") { +"Rainforest - Noname" } } - li { - a( - href = "https://bachelortheband.bandcamp.com/track/stay-in-the-car" - ) { +"Stay in the Car - Bachelor" } - } - li { a(href = "https://coldcave.bandcamp.com/track/psalm-23") { +"Psalm 23 - Cold Cave" } } - li { a(href = "https://longinusrecordings.bandcamp.com/track/colors") { +"Colors - Parannoul" } } - li { - a( - href = "https://hallows.bandcamp.com/track/all-that-is-true-dies-3" - ) { +"All That is True Dies - Hallows" } - } - li { a(href = "https://pixelgrip.bandcamp.com/track/pursuit-2") { +"Pursuit - Pixel Grip" } } - li { a(href = "https://www.youtube.com/watch?v=IGdFAQz35Vc") { +"朧 - DIR EN GREY" } } - li { a(href = "https://longinusrecordings.bandcamp.com/track/insomnia") { +"Insomnia - Parannoul" } } - li { a(href = "https://ghlow.bandcamp.com/track/not-fit-for-this") { +"Not Fit For This - GHLOW" } } - li { a(href = "https://www.youtube.com/watch?v=O5YFSps8wRU") { +"The Creeps - Garbage" } } - li { a(href = "https://justmustard.bandcamp.com/track/i-am-you") { +"I Am You - Just Mustard" } } - li { a(href = "https://www.youtube.com/watch?v=lT4CXVSU18k") { +"Wolves - Garbage" } } - li { a(href = "https://movegentlyrecords.bandcamp.com/track/eva-witchcraft") { +"Witchcraft - Дeva" } } - } - } - footer(myFooter) - } -} \ No newline at end of file + track("That's What I Want", "Lil Nas X") { + link("https://www.youtube.com/watch?v=QDYDRA5JPLE") + } + track("Into the Endless Night", "Parannoul") { + link("https://parannoul.bandcamp.com/track/into-the-endless-night") + tag("shoegaze") + } + track("Sad Cowboy", "Goat Girl") { + link("https://goatgirl.bandcamp.com/track/sad-cowboy-1") + } + track("Rainforest", "Noname") { + link("https://nonameraps.bandcamp.com/track/rainforest") + } + track("Stay in the Car", "Bachelor") { + link("https://bachelortheband.bandcamp.com/track/stay-in-the-car") + } + track("Psalm 23", "Cold Cave") { + link("https://coldcave.bandcamp.com/track/psalm-23") + } + track("Colors", "Parannoul") { + link("https://longinusrecordings.bandcamp.com/track/colors") + tag("shoegaze") + } + track("All That is True Dies", "Hallows") { + link("https://hallows.bandcamp.com/track/all-that-is-true-dies-3") + } + track("Alibis", "Sneaker Pimps") { + link("") + } + track("Pursuit", "Pixel Grip") { + link("https://pixelgrip.bandcamp.com/track/pursuit-2") + } + track("Not Fit For This", "GHLOW") { + link("https://ghlow.bandcamp.com/track/not-fit-for-this") + } + track("The Creeps", "Garbage") { + link("https://www.youtube.com/watch?v=O5YFSps8wRU") + } + track("Wolves", "Garbage") { + link("https://www.youtube.com/watch?v=lT4CXVSU18k") + } + track("Witchcraft", "Дeva") { + link("https://movegentlyrecords.bandcamp.com/track/eva-witchcraft") + } +} +val music2021 = bestMusic2021.toHtmlPage() \ No newline at end of file diff --git a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2022.kt b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2022.kt index d4b61ec..c2a2f69 100644 --- a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2022.kt +++ b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2022.kt @@ -1,13 +1,19 @@ package com.github.wakingrufus.website.music val bestMusic2022 = bestMusicOf(2022) { - albumOfTheYear("Squeeze", "Sasami") { + albumOfTheYear("Unison Life", "Brutus") { + link("https://wearebrutus.bandcamp.com/album/unison-life") + review( + "Brutus is full of raw emotion, culminating in 'What Have We Done' which just floors me with every listen." + ) + } + + album("Squeeze", "Sasami") { link("https://sasami.bandcamp.com/album/squeeze") review( - "Sasami has an eclectic style that risks being scatterbrained, but it works, and showcases her incredible range." + "Runner up for AOTY: Sasami has an eclectic style that risks being scatterbrained, but it works, and showcases her incredible range." ) } - // albums album("El Bueno y el Malo", "Hermanos Gutierrez") { link("https://hermanosgutierrez.bandcamp.com/album/el-bueno-y-el-malo") } @@ -24,6 +30,14 @@ val bestMusic2022 = bestMusicOf(2022) { album("Dimensional Bleed", "Holy Fawn") { link("https://holyfawn.bandcamp.com/album/dimensional-bleed") } + album("Phalaris", "DIR EN GREY") { + link("https://www.youtube.com/playlist?list=OLAK5uy_krSBgFTLs115OUnyGT1_IijO87DMDKurI") + review( + """Not peak Dir en Grey, but 朧 (Oboro) and 落ちた事のある空 (Ochita Koto no Aru Sora) really stand out, + |and the rest of the album is consistent enough to keep this album on the list.""".trimMargin() + ) + tag("metal") + } album("As Above So Below", "Sampa the Great") { link("https://sampathegreat.bandcamp.com/album/as-above-so-below") } @@ -45,6 +59,13 @@ val bestMusic2022 = bestMusicOf(2022) { album("Drif", "Heilung") { link("https://heilung.bandcamp.com/album/drif") } + album("White Jesus Black Problems", "Fantastic Negrito") { + link("https://fantasticnegritomusic.bandcamp.com/album/white-jesus-black-problems") + } + album("Ritmos en cruz", "La Ciencia Simple") { + link("https://lacienciasimple.bandcamp.com/album/ritmos-en-cruz-2022") + } + // tracks track("SLUGS", "Beautiful Freaks") { link("https://fr3aks.bandcamp.com/track/slugs-2") diff --git a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2023.kt b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2023.kt index 7a438c1..17e7516 100644 --- a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2023.kt +++ b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2023.kt @@ -46,7 +46,7 @@ val bestMusic2023 = bestMusicOf(2023) { album("Systemic", "Divide and Dissolve") { link("https://divideanddissolve.bandcamp.com/album/systemic") } - track("& the Charm", "Avalon Emerson") { + album("& the Charm", "Avalon Emerson") { link("https://avalonemerson.bandcamp.com/album/the-charm") } diff --git a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2025.kt b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2025.kt new file mode 100644 index 0000000..1fd6452 --- /dev/null +++ b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Music2025.kt @@ -0,0 +1,122 @@ +package com.github.wakingrufus.website.music + +val bestMusic2025 = bestMusicOf(2025) { + albumOfTheYear("In Ways", "Slung") { + link("https://slungband.bandcamp.com/album/in-ways") + review( + """The debut from Slung is an alt-rock album that goes hard at times but balances that with some deep grooves. +Overall, it is not quite as in-your-face as you might expect after the first track, as there are a lot of slow burns. +But those tracks hit hard once the time is right. The album is solid all the way through. +""" + ) + } + // albums + album("V", "Naxatras") { + link("https://sprintsmusic.bandcamp.com/album/letter-to-self") + review("This was a close runner-up for AOTY for me. Really good spaced-out stoner prog-rock.") + } + album("Are We All Angels", "Scowl") { + link("https://scowl831.bandcamp.com/album/are-we-all-angels") + review("Another runner-up: This album is from a hardcore band with great pop sensibilities.") + } + album("Le Point de Non-Retour", "Point Mort") { + link("https://pointmortband.bandcamp.com/album/le-point-de-non-retour") + tag("metal") + } + album("LUX", "ROSALÍA") { + link("https://www.amazon.com/dp/B0FXHD7CKY/") + } + album("Distimia", "Los Membrillos") { + link("https://losmembrillos.bandcamp.com/album/distimia") + tag("shoegaze") + } + album("Pirouette", "Model/Actriz") { + link("https://modelactriz.bandcamp.com/album/pirouette") + } + album("The Age Of Ephemerality", "BRUIT ≤") { + link("https://bruitofficial.bandcamp.com/album/the-age-of-ephemerality-2") + } + album("The Exodus of Gravity", "Arcadea") { + link("https://arcadea.bandcamp.com/album/the-exodus-of-gravity") + review("Ever wondered what Mastodon would sound like with synths instead of guitars? Check it out here.") + } + album("My First Album", "Jessica Winter") { + link("https://jessicawinter.bandcamp.com/album/my-first-album") + } + album("We Were Just Here", "Just Mustard"){ + link("https://justmustard.bandcamp.com/album/we-were-just-here") + } + album("The Spin", "Messa"){ + link("https://messa.bandcamp.com/album/the-spin") + } + // tallah? + + // tracks + track("I Feel Numb", "Rosa Bordallo") { + link("https://rosabordallo.bandcamp.com/track/i-feel-numb") + } + track("Junior", "Great Grandpa") { + link("https://greatgrandpa.bandcamp.com/track/junior") + } + track("Hard Times", "The Devil Makes Three") { + link("https://thedevilmakesthree.bandcamp.com/track/hard-times") + } + track("Don't Be Seen with Me", "Avalon Emerson") { + link("https://avalonemerson.bandcamp.com/track/don-t-be-seen-with-me") + } + track("Elegantly Wasted", "Hermanos Gutiérrez Ft. Leon Bridges") { + link("https://hermanosgutierrez.bandcamp.com/track/elegantly-wasted") + } + track("Cityscape", "Hibou") { + link("https://hibouband.bandcamp.com/track/cityscape-2") + } + track("Beneath a Lightless Star", "HOLY FAWN") { + link("https://holyfawn.bandcamp.com/track/beneath-a-lightless-star") + } + track("Blastbeat Falafal", "Igorrr") { + link("https://igorrr.bandcamp.com/track/blastbeat-falafel-2") + } + track("Expressionless", "la lune") { + link("https://lalunelalunelalunelalune.bandcamp.com/track/expressionless") + } + track("Reincarnation of a Witch", "Lamp of Murmuur") { + link("https://lampofmurmuur.bandcamp.com/track/reincarnation-of-a-witch") + tag("metal") + } + track("HelloWorld.java", "Nanowar of Steel") { + link("https://nanowarofsteel.bandcamp.com/track/helloworld-java-fix-metal-true-version-feat-intellij") + tag("metal") + } + track("Afterlife", "Sharon Van Etten & The Attachment Theory") { + link("https://sharonvanetten.bandcamp.com/track/afterlife") + } + track("Elderberry Wine", "Wednesday") { + link("https://wednesdayband.bandcamp.com/track/elderberry-wine-2") + } + track("My Type", "Sudan Archives") { + link("https://sudanarchives.bandcamp.com/track/my-type") + } + track("Jealousy is Lethal", "Pixel Grip") { + link("https://pixelgrip.bandcamp.com/track/jealousy-is-lethal") + } + track("Split", "Pixel Grip") { + link("https://pixelgrip.bandcamp.com/track/split-2") + } + track("Behind the Green Door", "Night Beats"){ + + } + track("Indelible", "Pelican"){ +tag("metal") + } + track("Tanana", "Portugal. The Man"){ + + } + track("Descartes", "SPRINTS"){ + + } + track("Adagio", "Σtella"){ + + } +} + +val music2025 = bestMusic2025.toHtmlPage() diff --git a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/MusicListHtml.kt b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/MusicListHtml.kt index 47e6619..b6edb9b 100644 --- a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/MusicListHtml.kt +++ b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/MusicListHtml.kt @@ -33,26 +33,13 @@ fun yearEndPage(yearEndList: YearEndList): HtmlPage { } h1 { +"Great Albums" } p { +"These albums are good from start to finish, have multiple stand out great songs, or both." } - ul { - yearEndList.albums.forEach { album -> - li { - a(href = album.link) { +"${album.title} - ${album.artist}" } - album.review?.also { - span { +" - $it" } - } - } - } - } + albumList(yearEndList.albums) } htmlSection { h1 { +"Tracks" } a { id = "Tracks" } p { +"These are great songs, released this year, excluding songs from top albums." } - ol { - yearEndList.tracks.forEach { track -> - li { a(href = track.link) { +"${track.title} - ${track.artist}" } } - } - } + trackList(yearEndList.tracks) } footer(myFooter) } diff --git a/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Snippets.kt b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Snippets.kt new file mode 100644 index 0000000..45e5e3c --- /dev/null +++ b/personal-site/src/main/kotlin/com/github/wakingrufus/website/music/Snippets.kt @@ -0,0 +1,28 @@ +package com.github.wakingrufus.website.music + +import kotlinx.html.ARTICLE +import kotlinx.html.a +import kotlinx.html.li +import kotlinx.html.span +import kotlinx.html.ul + +fun ARTICLE.albumList(list: List) { + ul { + list.forEach { album -> + li { + a(href = album.link) { +"${album.title} - ${album.artist}" } + album.review?.also { + span { +" - $it" } + } + } + } + } +} + +fun ARTICLE.trackList(list: List) { + ul { + list.forEach { track -> + li { a(href = track.link) { +"${track.title} - ${track.artist}" } } + } + } +} \ No newline at end of file