diff --git a/README.markdown b/README.markdown index 61535cd4..7a30ca13 100644 --- a/README.markdown +++ b/README.markdown @@ -1,3 +1,16 @@ Assignment 4 - Creative Coding === http://a4-owen-blaufuss.glitch.me + + + +Requirements +------------ +- Server, created using Express +- [D3.js](https://d3js.org) +- User interface + +Special thanks: +----------- +- [TMBW](https://tmbw.net), the They Might Be Giants wiki +- [TMBotG's web scraper](https://github.com/bgporter/tmbotg), for collecting the lyrics \ No newline at end of file diff --git a/data/1980_Make-It-The-Same_Empty-Boulevards.lyric b/data/1980_Make-It-The-Same_Empty-Boulevards.lyric deleted file mode 100644 index eed62ed8..00000000 --- a/data/1980_Make-It-The-Same_Empty-Boulevards.lyric +++ /dev/null @@ -1,53 +0,0 @@ -Sunlight streams the dark cafe -But people's feet, they don't pass this way -Nobody bothers about yesterday -On the empty boulevards - -Up to the east side, down to the west -I like the boy with the brown suit and vest -Remember the way Fifth Avenue dressed -On the empty boulevards - -Beautiful toys in the windows of shops -Look at the faces on all the stopped clocks -Plenty of parking and nowhere to talk -On the empty boulevards - -Now I know that we all -We have to cry, have to -Cry, have to cry sometimes -But the faces are gone -There's nowhere to moan -There's nobody left -The streets are forlorn - -And someday, you'll have to return -To the empty, empty boulevards -Empty, empty boulevards - -Down to the playground -Up to the street -Everywhere there's silent concrete -So we know the story's complete -On the empty boulevards - -Perhaps they moved up -And their money was spent -But I don't think that's how the story went -Whoa-oh oh-oh -On the empty boulevards - -Now I know that we all -We have to cry, have to -Cry, have to cry sometimes -But the faces are gone -There's nowhere to moan -There's nobody left -The streets are forlorn - -Someday, you'll have to return -On the empty, empty boulevards -Empty, empty boulevards -Empty, empty boulevards -Empty, empty boulevards -Empty, empty boulevards diff --git a/data/1980_Make-It-The-Same_Funnier-Than-Love.lyric b/data/1980_Make-It-The-Same_Funnier-Than-Love.lyric deleted file mode 100644 index 777407e8..00000000 --- a/data/1980_Make-It-The-Same_Funnier-Than-Love.lyric +++ /dev/null @@ -1,40 +0,0 @@ -Table for one, please -Nobody else is comin' -I got a message sayin' -Other plans, she's got her fans -And don't you think I know what kinda times these are - -I'll take it lightly -I wander around a lot these days -I bob around the street -Familiar secrets -Beamin' [???] -Bobbin' around till I get the nerve to call - -I can't think of anything that's funnier than love -I can't think of anything that's funnier than love - -Answer your phone, please -I just got one more dime -I'll even say please politely -I'd go see Jimmy but I don't want him to see -I need a place where they'll say it's all right to cry - -Let me down gently -I'll stuff all my mail and split then -I'll look for a way to explain it -Now if I speak badly -And she's happy -I'm gonna push to prove I could stand to stay - -I can't think of anything that's funnier than love -I can't think of anything that's funnier than love - -I'm tryin' to push to prove I could stand to stay - -I can't think of anything that's funnier than love -I can't think of anything that's funnier than love -I can't think of anything that's funnier than love -I can't think of anything that's funnier than love -I can't think of anything that's funnier than love -I can't think of anything that's funnier than love diff --git a/data/1980_Make-It-The-Same_Make-It-The-Same.lyric b/data/1980_Make-It-The-Same_Make-It-The-Same.lyric deleted file mode 100644 index b22d750d..00000000 --- a/data/1980_Make-It-The-Same_Make-It-The-Same.lyric +++ /dev/null @@ -1,44 +0,0 @@ -Was it the first time you were there -That we talked about my hair? -There was nothing in your way -Because you knew just what to say - -Now do you understand my mind? -Or do you not recall the time? -There was something in your hair -Or was it you weren't really there? - -Try to make it the same (Let's try to make it the same) -Like it was the first night (Let's try to make it the same) -Try to make it the same (Let's try to make it the same) -Like it was the first night - -Was I wrong to let you go? -Looking back, I need to know -It was a certain ambule -It was the way you walked my way - -Now do it again (Let's try to do it again) -Like it was the first night (Let's try to do it again) -Try to do it again (Let's try to do it again) -Like it was the first night - -If I called you on Sunday (I'll place a call) -Would you be there? (Will you be there?) -Could you spare me a Monday? (What should I wear?) -I need to plan out what I want to wear - -A serenade for someone used -You got the names a bit confused -And now you say you are my friend -Is this the way it has to end? - -Make it the same (Let's try to make it the same) -Like it was the first night (Let's try to make it the same) -Try to make it the same (Let's try to make it the same) -Like it was the first night - -Do it again (Let's try to do it again) -Oh, like it was the first night (Let's try to do it again) -Try not to do it again (Let's try to do it again) -Like it was the first night, night diff --git a/data/1987_Disco-Lover--Plastic-Rap_Disco-Lover-Extended-Version.lyric b/data/1987_Disco-Lover--Plastic-Rap_Disco-Lover-Extended-Version.lyric deleted file mode 100644 index d67cb190..00000000 --- a/data/1987_Disco-Lover--Plastic-Rap_Disco-Lover-Extended-Version.lyric +++ /dev/null @@ -1,74 +0,0 @@ -I was settling down to watch Home Shopping Club with a bag of fried pork rinds -I was pasting pictures into my "Can't Stop the Music" scrapbook — I'm a handicraft nut! -I had a mitten pattern for mittens that were little hand puppets -I promised two small friends that I would knit them a pair of puppet mittens as soon as I got over the Mother's Day rush -During the Mother's Day cleanup, I accidentally burned the pattern — Does anybody out there have this pattern? -Anyway, I was feeling kinda lonely, so I said to myself -"Frieda? Let's boogie!" - -It was Friday night -I was feeling all right -So I went out to the disco -It was Friday day -I decided to stay -This is my favorite disco - -I looked around -I said "Frieda? Get down! -Let's make this a happenin' disco" -What should I spy -But some fabulous guy? -This is my kind of disco - -He was standing there -He started to stare -He wore the finest clothes in any disco -Halston! Gucci! Fiorucci! -Sergio! Alessio! -Ooh! From head to toe! - -He boogied up to me -And proceeded to sing -He was dark and tall -He said "You're a doll" -I said "Mais oui, -Bonjour, c'est la me" - -He said "???" -I said "Takamakie! -Umi sumi futomakie!" -I said "Oh, oh, ohhh!" - -Won't you be my disco lover tonight? (Lover tonight, disco lover tonight) -I'm gonna take you to those disco heights (Lover tonight, disco lover tonight) -Let's spend some ??? (We'll be in disco heaven) - -It was Friday night -I was feeling all right -So I went out to the disco -It was Friday day -I decided to stay -This is my favorite disco - -I looked around -I said "Frieda? Get down! -Let's make this a happenin' disco" -What should I spy -But some fabulous guy? -This is my kind of disco - -Hey, come worship your disco empress (Lover tonight, disco lover tonight) -Come admire my disco queeny airs (Lover tonight, disco lover tonight) -I got disco dance floor agility (It's my ??? mobility) - -You know, disco is so important in my life -To me, it's more like a religion! (Hail Mary full of grace, blessed is this disco place) -And this disco is a faaabulous cathedral! (Blessed the Lord, ???, the DJ, the boogie, the disco disc!) -This sunday, we'll just partake in holy disco communion (Sanctus, Sanctus, Sanctus, The Boogie in spiritus) -Let's shake thy body, and boogie thy blood (My body, your body, everybody, his body, her body, their body, our body, this body) - -I am disco royalty (She is queen of the disco scene, she's got a lot of rhythms, if you know what I mean) -Get down on your knees and worship me (??? of the disco song) -Get up on your feet and come adore (Get out on the dance floor, dance some more) - -Mmhm, uh huh, mmhm, too much! diff --git a/data/1987_Disco-Lover--Plastic-Rap_Disco-Lover-Regular-Version.lyric b/data/1987_Disco-Lover--Plastic-Rap_Disco-Lover-Regular-Version.lyric deleted file mode 100644 index cd5397b4..00000000 --- a/data/1987_Disco-Lover--Plastic-Rap_Disco-Lover-Regular-Version.lyric +++ /dev/null @@ -1,60 +0,0 @@ -It was Friday night -I was feeling all right -So I went out to the disco -It was Friday day -I decided to stay -This is my favorite disco - -I looked around -I said "Frieda? Get down! -Let's make this a happenin' disco" -What should I spy -But some fabulous guy? -This is my kind of disco - -He was standing there -He started to stare -He wore the finest clothes in any disco -Halston! Gucci! Fiorucci! -Sergio! Alessio! -Ooh! From head to toe! - -He boogied up to me -And proceeded to sing -He was dark and tall -He said "You're a doll" -I said "Mais oui, -Bonjour, c'est la me" - -He said "???" -I said "Takamakie! -Umi sumi futomakie!" -I said "Oh, oh, ohhh!" - -Won't you be my disco lover tonight? (Lover tonight, disco lover tonight) -I'm gonna take you to those disco heights (Lover tonight, disco lover tonight) -Let's spend some ??? (We'll be in disco heaven) - -It was Friday night -I was feeling all right -So I went out to the disco -It was Friday day -I decided to stay -This is my favorite disco - -I looked around -I said "Frieda? Get down! -Let's make this a happenin' disco" -What should I spy -But some fabulous guy? -This is my kind of disco - -Hey, come worship your disco empress (Lover tonight, disco lover tonight) -Come admire my disco queeny airs (Lover tonight, disco lover tonight) -I got disco dance floor agility (It's my ??? ability) - -I am disco royalty (She is queen of the disco scene, she's got a lot of rhythms, if you know what I mean) -Get down on your knees and worship me (??? of the disco song) -Get up on your feet and come adore (Get out on the dance floor, dance some more) - -Mmhm, uh huh, mmhm, too much! diff --git a/data/1993_Hello-The-Band-EP_Hello-Hello.lyric b/data/1993_Hello-The-Band-EP_Hello-Hello.lyric deleted file mode 100644 index f45780ae..00000000 --- a/data/1993_Hello-The-Band-EP_Hello-Hello.lyric +++ /dev/null @@ -1,71 +0,0 @@ -Hello, hello -It's good to be back, it's good to be back -Hello, hello -It's good to be back, it's good to be back -Hello, hello -It's good to be back, it's good to be back -Hello, hello, hello - -Did you miss me when I was away? -Did you hang my picture on your wall? -Did you miss me every single day -Although you couldn't see me at all? - -Did you love me in your own little way? -Did you tell that naughty boy not to call? -Did you hug me in your own little world -Although you didn't see me at all? -Although you didn't see me at all - -Hello, hello -It's good to be back, it's good to be back -Hello, hello, hello - -Did you miss me while I was gone? -Did you hug your pillow in your bed? -Did you kiss me all night long -And tell them every word that I said? - -Did you want me to come back again? -Did you know I've been too far away? -Do you want me? -Did you tell all your friends -To think about me every day? -To think about me every day - -Hello, hello -It's good to be back, it's good to be back -Hello, hello, hello - -Hello, hello -I'm back again -I'm back, I'm back -I'm on the right track -Hello, hello -Tell all of your friends -I'm back, I'm back, as a matter of fact -As a matter of fact, I'm back - -Did you miss me when I was away? -Did you hang my picture on your wall? -Did you miss me every single day -Although you couldn't see me at all? -Although you couldn't see me at all - -Hello, hello -It's good to be back, it's good to be back -Hello, hello -It's good to be back, it's good to be back -Hello, hello -It's good to be back, it's good to be back -Hello, hello, hello - -Goodness gracious! - -Hello, hello -It's good to be back, it's good to be back -Hello, hello -It's good to be back, it's good to be back -Hello, hello -It's good to be back, it's good to be back -Hello, hello, hello diff --git a/data/1993_Hello-The-Band-EP_Lullaby-To-Nightmares.lyric b/data/1993_Hello-The-Band-EP_Lullaby-To-Nightmares.lyric deleted file mode 100644 index acc412e4..00000000 --- a/data/1993_Hello-The-Band-EP_Lullaby-To-Nightmares.lyric +++ /dev/null @@ -1,24 +0,0 @@ -Have you ever seen a bloody egg -Glass in hand, lying up in bed? -That's the time to sing this cowardly lullaby -And you ought to know why - -Lullaby to nightmares -Whisper low -In the night where bat wings flow -That's where all the frightmares go -When the elephants die -Wouldn't you like to try? - -Have you ever heard the blackbird's song? -Summer days all summer long -Underneath the shady tree -A shadow sitting next to me -And we stare at the sun - -Lullaby to nightmares -Whisper low -In the night where bat wings flow -That's where all the frightmares go -When the elephants die -Wouldn't you like to try diff --git a/data/1993_Hello-The-Band-EP_Since-You-Joined-The-Corporation.lyric b/data/1993_Hello-The-Band-EP_Since-You-Joined-The-Corporation.lyric deleted file mode 100644 index 10ed107b..00000000 --- a/data/1993_Hello-The-Band-EP_Since-You-Joined-The-Corporation.lyric +++ /dev/null @@ -1,41 +0,0 @@ -When you told me that you loved me -Did you promise not to tell? -I wasn't thinking to stop and ask you why -Girl, I wonder what's inside - -Since you joined the corporation -Things just haven't been the same -First I loved you, in that service suit -Secret handshake, smart and bullet-proof - -Truth-drug lies, won't set me free -Now I see -Painful smile, on the 44th floor -Ask for more -Ask for more - -Since you joined the corporation -You've been acting kinda strange -Is there something, you're not fit to tell? -Break this combination, change it every day - -Truth-drug lies, won't set me free -Now I see -Painful smile, on the 44th floor -Ask for more -Ask for more -Ask for more - -Truth-drug lies, won't set me free -Now I see -Painful smile, on the 44th floor -Ask for more - -Truth-drug lies, won't set me free -Now I see -Painful smile, on the 44th floor -Ask for more -Ask for more -Ask for more -Ask for more -Ask for more diff --git a/data/1993_Hello-The-Band-EP_Sodium-Mask.lyric b/data/1993_Hello-The-Band-EP_Sodium-Mask.lyric deleted file mode 100644 index e69de29b..00000000 diff --git a/data/1993_Hello-The-Band-EP_Town-To-Town.lyric b/data/1993_Hello-The-Band-EP_Town-To-Town.lyric deleted file mode 100644 index 870a14f0..00000000 --- a/data/1993_Hello-The-Band-EP_Town-To-Town.lyric +++ /dev/null @@ -1,51 +0,0 @@ -Tom Vu, won't you help me? -I want to think like you -Tom Vu, won't you help me? -I want to think like you - -With all the things you say -You put my mind through college -With all the things you say -You make my mind an institute of super-thinking - -Tom Vu, won't you help me? -I want to think like you -Tom Vu, won't you help me? -I want to think like you - -With all the things you say -You put my mind through college -With all the things you say -You make my mind an institute of super-thought - -Words are moving from town to town -Houses moving from town to town -Money moving from town to town -Cabs are moving from town to town - -Words are moving from town to town -Houses moving from town to town -Money moving from town to town -Cabs are moving from town to town - -Hey Mr. Vu -Fly away home -Your house is so lovely -Your children so nice - -Hey Mr. Vu -Hey Mr. Vu - -Words are moving from town to town -Houses moving from town to town -Money moving from town to town -Cabs are moving from town to town - -Words are moving from town to town -Houses moving from town to town -Money moving from town to town -Cabs are moving from town to town - -Town to town -Town to town -Town to town diff --git a/data/2002_People-Are-Wrong-Promo_At-The-Agway.lyric b/data/2002_People-Are-Wrong-Promo_At-The-Agway.lyric deleted file mode 100644 index 4efcf9c9..00000000 --- a/data/2002_People-Are-Wrong-Promo_At-The-Agway.lyric +++ /dev/null @@ -1,21 +0,0 @@ -At the Agway we'll meet all your needs (At the Agway) -Agway -Acorn squash to zinnia seeds -At the Agway -Agway -We'll even find a man for you -To make your garden dreams come true -At the Agway Agway Agway - -What you need is someone who can dig your scene completely -Not another planless schmuck who's out to make bucks easily -And just because he owns a truck and trims your bushes neatly -He's not from Agway Agway Agway - -And because you're from the big city we call you bright lighters -Just a little friendly jive -'Cause after all, our town survives -On your unceasing need to drive -Property values higher -Around the Agway Agway Agway -Agway diff --git a/data/2002_People-Are-Wrong-Promo_Boomerang.lyric b/data/2002_People-Are-Wrong-Promo_Boomerang.lyric deleted file mode 100644 index 692db0d0..00000000 --- a/data/2002_People-Are-Wrong-Promo_Boomerang.lyric +++ /dev/null @@ -1,36 +0,0 @@ -Life -Life is -Life is like -A boomerang -Life is like a boomerang -It takes a while to get the hang -A leap of faith that must exist -Between the head bone and the wrist - -Power to the people -All the deer and all the flowers -Now everything is equal -And the power now is ours - -Love -Love is -Love is like -A boomerang -Love is like a boomerang -A supreme continuum -Ride the vibe and follow through -It will be returned to you - -Power to the people -All the deer and all the flowers -Now everything is equal -And the power now is ours - -(Boomerang) -(Boomerang) - -Karma -Karma -Karma's like -A boomerang -Yeah diff --git a/data/2002_People-Are-Wrong-Promo_Car-Alarms.lyric b/data/2002_People-Are-Wrong-Promo_Car-Alarms.lyric deleted file mode 100644 index c6c19668..00000000 --- a/data/2002_People-Are-Wrong-Promo_Car-Alarms.lyric +++ /dev/null @@ -1,41 +0,0 @@ -We can't hear your car alarms -From our renovated barn -We can't hear your car alarms -From our renovated barn - -We're tired of the pushy people tryin' to make it to the top -'Cause we got dreams of gravel roads and leavin' the doors unlocked - -They say we can't make it in the country, 'cause our shit is too extreme -But we'll take the best of both worlds and forget the in-between - -We can't hear your car alarms -From our renovated barn -We can't hear your car alarms -From our renovated barn - -The new fast is going slow -The new high is living low - -We can't hear your car alarms -From our renovated barn - -Our lives are pretty killer -We're hangin' with the downtown crowd -Man, you know, our condo -Makes us feel so proud -Gritty heartage of the city -Keeps us on our toes -But we'll detox in the warm heart -Of our modest, weekend home - -We can't hear your car alarms -From our renovated barn -We can't hear your car alarms -From our renovated barn - -The new fast is going slow -The new high is living low - -We can't hear your car alarms -From our renovated barn diff --git a/data/2002_People-Are-Wrong-Promo_Dear-Old-Plants.lyric b/data/2002_People-Are-Wrong-Promo_Dear-Old-Plants.lyric deleted file mode 100644 index 5853663e..00000000 --- a/data/2002_People-Are-Wrong-Promo_Dear-Old-Plants.lyric +++ /dev/null @@ -1,26 +0,0 @@ -Now that we've got these critters taken care of -There's yet another thing to be aware of -What's the deal with the dead plants on our lawn? -Strewn about with no regard for what the neighbors might think -Xanthus, we think we've got a problem - -These plants are dormant, they're not gone -They're gonna grow and carry on -When the spring arrives, a new seedling thrives -And it's thanks to the dear old plants -Thanks to the dear old plants - -Sun, seed and water, soil and sky -Working together, side by side -And the nutrients will pay the rent to the earth for the dear old plants -To the earth for the dear old plants - -Grow, plants, grow (grow, plants, grow) -Grow, plants, grow -Move on, to the sun - -Please let me gather up these souls -And formulate a rich compost -To be used by you, and the town folks too -As they bring forth divine new plants -From the souls of the dear old plants diff --git a/data/2002_People-Are-Wrong-Promo_Dimension-Six-Rock.lyric b/data/2002_People-Are-Wrong-Promo_Dimension-Six-Rock.lyric deleted file mode 100644 index 11f6e7e6..00000000 --- a/data/2002_People-Are-Wrong-Promo_Dimension-Six-Rock.lyric +++ /dev/null @@ -1,45 +0,0 @@ -Forget the house, ditch the houseboy -Prepare yourself for a new dimension - -(Dimension one) -Ain't nothing but a railroad track -(It ain't no fun) -It's skinny as a sidewalk crack -The joints are pinner, the boys are thin as a line -In dimension number ein - -(Dimension two) -It's flat as a frying pan -(Not much to do) -Layin' 'round working on your tan -You can't stand tall or bend down to touch your toes -Not in dimension number dos - -(Dimension three) -Sound, fury, and tragedy -(Not what you see) -It's Olive Garden and Applebee's -Counter-revolution and pollution and whoa! killer bees -No more dimension number three - -(Dimension four) -It's the time between now and then -(Can give you more) -What you are and what you might have been -The cause for grief and sorrow for tomorrow, whatchyou want that for? -That's dimension number four - -(Dimension five) -Let the sun shine in my friends -(We can fly) -Go where you wanna go my friends (Go! Go! Go!) -It was rockin' in the sixties, but lately it sounds so jive -That's dimension number five - -(Dimension six) -Forget your check, forget your cash -(Do the splits) -Just bring your spirit and your funky ass -The human race will prosper, along with trees and rocks and sticks -That's dimension number six -That's dimension six diff --git a/data/2002_People-Are-Wrong-Promo_Healer's-Lament.lyric b/data/2002_People-Are-Wrong-Promo_Healer's-Lament.lyric deleted file mode 100644 index 047d8f16..00000000 --- a/data/2002_People-Are-Wrong-Promo_Healer's-Lament.lyric +++ /dev/null @@ -1,35 +0,0 @@ -You find a good space (a quiet space) -A tranquil space (a loving space) -But the search for salvation (around this place) -Comes up empty (comes up empty) -Produces no one - -Why am I so alone? -I'd swear this place was evil -But evil's just an absence of light, an absence of light -It's just an absence of light - -Come into my crystal garden -I've got salves, balms, fusions, and teas -Come into my mystic right on -All I really need/want is for you to believe in me -Come into my crystal garden -(Come into my crystal garden) -I've got salves, balms, fusions, and teas -(I've got salves, balms, fusions, and teas) -Come into my mystic right on -(Come into my mystic right on) -All I really need/want is for you to believe in me -(All I really need/want is for you to believe in me) -And tea tree oil - -Why am I so alone? - -You're feeling down, down (you're feeling low, low) -I've got just the thing (I've got just the thing) -A tall glass of aloe -Let it flow (let it flow) (let it flow) - -Talkin' about your jive - -Let it flow (let it flow) (let it flow) diff --git a/data/2002_People-Are-Wrong-Promo_I-Know-What-I-Saw.lyric b/data/2002_People-Are-Wrong-Promo_I-Know-What-I-Saw.lyric deleted file mode 100644 index ba7cd37b..00000000 --- a/data/2002_People-Are-Wrong-Promo_I-Know-What-I-Saw.lyric +++ /dev/null @@ -1,14 +0,0 @@ -I know what I saw, I want to unsee it -I know what I saw, no one would believe it -I know what I saw -I know what I saw - -My friends, my neighbors, come hear my strange tale -About Xanthus, a man you'll grow to know well -It began several months ago, right where we stand -There's a lovely young couple, bought a house and some land - -They started a new life, they hardly can wait -They hired a gardener to make their place great -I'll tell you what I saw, I'll tell you in song -Though intentions are good, sometimes people are wrong diff --git a/data/2002_People-Are-Wrong-Promo_Ponytail.lyric b/data/2002_People-Are-Wrong-Promo_Ponytail.lyric deleted file mode 100644 index 8055d82f..00000000 --- a/data/2002_People-Are-Wrong-Promo_Ponytail.lyric +++ /dev/null @@ -1,60 +0,0 @@ -Let me tell you 'bout this thing -Grows out of the back of my head -It's not a cliché, it's not laziness -It's a bona fide white man's version of dred - -Well, I forsook the man a long time ago -I resolved not to play his game -Well, my shirt has never been tucked -And my head, well, it's never been tamed - -Whoa, ponytail (hoohoo) -Ponytail (hoohoo) -Look at me! -I'm a man with long hair -Ponytail (hoohoo) -Ponytail (hoohoo) -Look at me! -I'm a man with long hair - -Well, the pressure is relentless: -"Cut it off! Cut it off!" -But these negative vibes you know I scoff -I simply scoff (simply scoff) -Mohawks, mullets -- they're just crampin' my style -Well, I have learned to love it -While others revile my - -Ponytail (ponytail) -Ponytail (ponytail) -Look at me! -I'm a man with long hair -Ponytail (ponytail) -Ponytail (ponytail) -Look at me! (oooooh) -I'm a man with long hair - -Now let me tell you how it feels -Each moment as it cascades on down -Majestic rope between my shoulderblades -A cross between honey blonde and golden brown - -So check it out! (OUT!) -While I sway, oww! (oooh) -I am a man who is completely enamored of his very own -Ponytail (ponytail) -Ponytail (ponytail) -Look at me! -I'm a man with long hair (look at him with long hair) -Ponytail (ponytail) -Ponytail (ponytail) -Look at me! (ooh) -I'm a man with long hair -Ponytail (ponytail) -Ponytail (ponytail) -Look at me! -I'm a man with long hair (look at him with long hair) -Ponytail (ponytail) -Ponytail (ponytail) -Look at me! (ooh) -I'm a man with long hair diff --git a/data/2002_People-Are-Wrong-Promo_The-Gravel's-Coming-With-Us.lyric b/data/2002_People-Are-Wrong-Promo_The-Gravel's-Coming-With-Us.lyric deleted file mode 100644 index cfeef69c..00000000 --- a/data/2002_People-Are-Wrong-Promo_The-Gravel's-Coming-With-Us.lyric +++ /dev/null @@ -1,38 +0,0 @@ -We've got the gig, the work begins, the contract has been signed -This is what I prepped you for, it's gonna blow your mind -When our work here is done, we'll have almost broken through -To the magic sixth dimension, let me lay it out for you - -We're gonna build a path, so let's start ripping up the grass -We're gonna build a runway and we're gonna build it fast -To accomodate a rocket, which we're also gonna build -Take you to the place I mentioned, I promise you'll be thrilled - -The gravel's coming with us when we go, when we go -To the magic sixth dimension, because Xanthus tells us so -There'll be trees, lots of trees, and a castle made of snow -In the magic sixth dimension, because Xanthus tells us so - -We're gonna build a path, so let's start ripping up the grass -We're gonna build a runway and we're gonna build it fast -To accomodate a rocket, which we're also gonna build -Take you to the place I mentioned -No more cares and no more tensions -Just prepare for the ascension, I promise you'll be thrilled - -The children will dance with us when we go, when we go -And they'll learn to keep their mouths shut and lay low, and lay low -There'll be trees, lots of trees, and a castle made of snow -In the magic sixth dimension, because Xanthus tells us so - -And we'll take your stories with us as we rise up on high -To a crystalline castle that is six dimensions high -And we'll share your faults and foibles with a more enlightened kind -And we'll laugh at your existence, bullshit insignificance -And with dear Xanthus' assistance, we'll learn to say goodbye - -The gravel's coming with us when we go, when we go -To the magic sixth dimension, because Xanthus tells us so -There'll be trees, lots of trees, and a castle made of snow -In the magic sixth dimension (sixth dimension, sixth dimension) -Because Xanthus tells me so diff --git a/data/2002_People-Are-Wrong-Promo_Xanthus-Saves.lyric b/data/2002_People-Are-Wrong-Promo_Xanthus-Saves.lyric deleted file mode 100644 index e9952f0b..00000000 --- a/data/2002_People-Are-Wrong-Promo_Xanthus-Saves.lyric +++ /dev/null @@ -1,64 +0,0 @@ -New friends -New neighbors are you -I see his words touched you too -I can see it in your eyes -So it's really no surprise -That it's only your first night in town -And you're already coming around - -Xanthus saves -What does he save? -That's not the point -Don't question his ways - -Xanthus heals -What does he heal? -Don't bother to ask -Just let yourself feel -Xanthus saves - -New friends -New homeowners too -You own the house that had once been the home of Mr. John -'Til they foreclosed on his farm -But we welcome brightlighters 'round here -And the path ahead is clear - -Xanthus saves -What does he save? -That's not the point -Don't question his ways - -Xanthus heals -What does he heal? -Don't bother to ask -Just let yourself feel -Xanthus saves - -Don't sell yourself short -Don't hang a pricetag on your dreams -Let him help you -This is one you say yes to -Let him help you - -So let's give it a shot -If this guy's half of what he seems -It's a no-brainer -Welcome to town! -What's his retainer? -Ten percent down -Well, that sounds fine! -Where do we sign? -Right on the line. - -Xanthus saves -What does he save? -That's not the point -Don't question his ways - -Xanthus heals -What does he heal? -Don't bother to ask -Just let yourself feel -Xanthus saves -Xanthus saves diff --git a/public/script.js b/public/script.js index 330d7f2b..562b988f 100644 --- a/public/script.js +++ b/public/script.js @@ -1,50 +1,273 @@ "use strict"; -var lyricData = [{},{}]; +//song data to be filled in +var lyricData = []; -const submit = function(e) { +//for drawing chart +var xYearStart = 1985; +var xYearEnd = 2022; +var xAlbumsList = []; +const chartHeight = 400 +const chartWidth = 600 +const chartMargin = { left: 60, top: 10, right: 50, bottom: 25 } + +//chart data +var xArray = []; +var data = []; +let maxVal = 0; + + +const submit = function (e) { // prevent default form action from being carried out e.preventDefault(); console.log("Submit"); return false; }; -window.onload = function() { +const showStatus = function (msg) { + const progress = document.getElementById("go"); + progress.value = msg; +} +window.onload = function () { - const progress = document.getElementById("progress"); + //showStatus("fetching albums..."); - progress.innerHTML = "fetching albums..."; - fetch("/lyrics") .then(response => response.json()) - .then( data =>{ - progress.innerHTML = "fetching songs..."; - let lyricData = []; - for (let i = 0; i < data.length; i++) { - let split = data[i].split("_"); - lyricData[i] = {}; - //filename, year, - lyricData[i][0] = data[i]; - lyricData[i][1] = split[0]; - lyricData[i][2] = split[1].replace(/-/g, " "); - lyricData[i][3] = split[2].slice(0, -6).replace(/-/g, " "); - progress.innerHTML = lyricData[i][3]; - } + .then(data => { + //showStatus("fetching songs..."); + for (let song of data) { + let split = song.split("_"); + let songData = {}; + songData.filename = song; + songData.year = split[0]; + songData.album = split[1].replace(/-/g, " "); + songData.name = split[2].slice(0, -6).replace(/-/g, " "); + //console.log(songData); + lyricData.push(songData); + } - progress.innerHTML = "fetching lyrics..." - for (let song of lyricData){ - fetch(song[0]) - .then(response => response.text()) - .then(textString => { - song[0] = textString; - }); - } - progress.innerHTML = "Ready!" - - }); - - //enable submit button - const button = document.querySelector("button"); + //sort by year, + lyricData = lyricData.sort((a, b) => (a.year > b.year ? 1 : -1)); + + //showStatus("fetching lyrics..."); + for (let song of lyricData) { + fetch(song.filename) + .then(response => response.text()) + .then(textString => { + song.lyrics = textString; + + //get album names while we're at it + if (!xAlbumsList.includes(song.album)) { + xAlbumsList.push(song.album); + } + + showStatus("Search!"); + //data is all set up, enable form controls + enableForm(); + chartDisplay(); + }); + } + }); +}; + +const enableForm = function () { + //enable submit button + const button = document.getElementById('go'); button.onclick = submit; + + //changing any radio button redraws chart + for (let radio of document.querySelectorAll('input[type="radio"]')) { + radio.onclick = chartDisplay; + } + document.getElementById("xYears").checked = true; + document.getElementById("wordCount").checked = true; + const setX3selector = document.getElementById('albumSelect'); + setX3selector.onchange = chartDisplay; + + //enable form elements + var inputs = document.getElementsByTagName("input"); + for (var i = 0; i < inputs.length; i++) { + inputs[i].disabled = false; + } }; + + +//set up bar chart +const chartDisplay = function () { + drawX(); //draws X and fills in xArray' + //console.log(xArray); + data = []; + for (let x of xArray) { + let dataVal = 0; + for (let song of lyricData) { + if (x == relevantValue(song) && !(song.lyrics === undefined)) { + dataVal += evalMetric(song.lyrics); + } + } + data.push({ name: x, value: dataVal }); + } + //find maximum value for the y axis + maxVal = Math.max(...data.map(d => d.value)); + drawY(maxVal); + + drawBars(data); + console.log("Displaying:") + console.log(lyricData); +} + +/* + Switch functions based on radio buttons +*/ + +const drawX = function () { + let type = document.querySelector('input[name="xAxis"]:checked').value; + switch (type) { + case "xAlbums": + setXAlbums(); + break; + case "xSongs": + setXSongs(); + break; + default: + setXYears(); + } + +} + +const relevantValue = function (song) { + let type = document.querySelector('input[name="xAxis"]:checked').value; + switch (type) { + case "xAlbums": + return song.album; + case "xSongs": + return song.name; + default: + return song.year; + } +} + +const evalMetric = function (text) { + let type = document.querySelector('input[name="yAxis"]:checked').value; + switch (type) { + case "wordCount": + return evalWords(text).length; + case "wordCountUnique": + return evalUniqueWords(text).length; + default: + return evalChars(text).length; + } +} + +/* + Functions to set the bottom X axis of the graph +*/ + +const setXYears = function () { + allowXSongs(false)//disable album selection + chartMargin.bottom = 25; + xArray = []; + for (let i = xYearStart; i <= xYearEnd; i++) { + xArray.push(i); + } + let yearScale = d3.scaleLinear().domain([xYearStart, xYearEnd]).range([chartMargin.left, chartWidth - chartMargin.right]); + let axisBottom = d3.axisBottom(yearScale).tickFormat(d3.format("d")); + d3.select('#bottom').call(axisBottom).attr('transform', 'translate(0,' + (chartHeight - chartMargin.bottom) + ')'); +} + +const setXAlbums = function () { + allowXSongs(false)//disable album selection + chartMargin.bottom = 90; + //console.log(xAlbumsList); + xArray = xAlbumsList;//all albums + let albumScale = d3.scaleBand().domain(xArray).range([chartMargin.left, chartWidth - chartMargin.right]).padding(0.5); + let axisBottom = d3.axisBottom(albumScale); + d3.select('#bottom').call(axisBottom).attr('transform', 'translate(0,' + (chartHeight - chartMargin.bottom) + ')') + .selectAll("text") + .attr("transform", "translate(-10,0)rotate(-45)") + .style("text-anchor", "end");; +} + +const setXSongs = function () { + populateXSongs(); + chartMargin.bottom = 90; + allowXSongs(true)//enable album selection + let albumNames = document.querySelector("#albumSelect").value; + xArray = lyricData.filter(song => song.album === albumNames).map(song => song.name);//all song names in this album + let albumScale = d3.scaleBand().domain(xArray).range([chartMargin.left, chartWidth - chartMargin.right]).padding(0.5); + let axisBottom = d3.axisBottom(albumScale); + d3.select('#bottom').call(axisBottom).attr('transform', 'translate(0,' + (chartHeight - chartMargin.bottom) + ')') + .selectAll("text") + .attr("transform", "translate(-10,0)rotate(-45)") + .style("text-anchor", "end");; +} + +const allowXSongs = function (allowed) { + const selector = document.getElementById('albumSelect'); + selector.disabled = !allowed; +} + +const populateXSongs = function () { + //populate album name selector + let albumSelect = document.getElementById("albumSelect"); + if (albumSelect.childElementCount === 0) {//if not already populated + for (let album of xAlbumsList) { + var opt = document.createElement("option"); + opt.value = album; + opt.innerHTML = album; + albumSelect.appendChild(opt); + } + } +} + +/* + Functions to determine the scoring and display of the Y of the graph. the length of whatever is returned is the score. +*/ + +const drawY = function (max) { + let scale = d3.scaleLinear().domain([max * 1.1, 0]).range([chartMargin.top, chartHeight - chartMargin.bottom]); + let axisLeft = d3.axisLeft(scale).tickFormat(d3.format("d")); + d3.select('#left').call(axisLeft).attr('transform', 'translate(' + (chartMargin.left) + ', 0)'); +} + +const evalChars = function (text) { + text = text.replace("\n", ""); + return text; +} + +const evalWords = function (text) { + text = text.replace("\n", " ") //remove newlines + .replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, "") //remove punctuation + .replace(/\s{2,}/g, " "); //strip out extra spaces + let words = text.split(" "); + return words; +} + +const evalUniqueWords = function (text) { + let words = evalWords(text); + return [...new Set(words)]; +} + +const drawBars = function (data) { + //clear all bars + d3.selectAll('g.bar').remove(); + //start over again + let barWidth = (chartWidth - chartMargin.left - chartMargin.right) / data.length; + let y = d3.scaleLinear() + .domain([maxVal * 1.1, 0]) + .range([0, chartHeight]) + let svg = d3.select('#chart'); + let bar = svg + .selectAll('g.bar') + .data(data.map(d => d.value)) + .enter() + .append('svg:g') + .attr('class', 'bar') + .attr('transform', (_, i) => 'translate(' + (1 + chartMargin.left + i * barWidth) + ', 0)'); + bar + .append('rect') + .attr('width', barWidth - 1) + .attr('y', d => y(d) - chartMargin.bottom) + .attr('height', d => chartHeight - y(d)) +} \ No newline at end of file diff --git a/public/style.css b/public/style.css index e69de29b..d0ed1faf 100644 --- a/public/style.css +++ b/public/style.css @@ -0,0 +1,10 @@ +body{ + max-width: 1000px; +} +form { + flex-wrap: wrap; +} +form div { + padding:16px; + flex-grow:0.5; +} \ No newline at end of file diff --git a/views/index.html b/views/index.html index d3a01214..91863c77 100644 --- a/views/index.html +++ b/views/index.html @@ -1,22 +1,53 @@ -
-loading...
- -