diff --git a/config.yaml b/config.yaml
index 7a5e5ed..8065da7 100644
--- a/config.yaml
+++ b/config.yaml
@@ -1,20 +1,22 @@
author: Jim Shepich III
templates_folder: ./templates
site_defaults:
- base_url: http://localhost:8000
- web_root: ./dist
templates:
partials: ./templates/partials
components: ./templates/components
pages: ./templates/pages
sites:
main:
+ base_url: http://localhost:8000
+ web_root: ./dist
build_cache: ./site
assets:
- /assets
articles:
- ./pages/*.md
resume:
+ base_url: http://localhost:8000
+ web_root: ./dist
git_repo: ssh://gitea/jim/resume.git
build_cache: ./build/resume
assets:
diff --git a/data/lists.json b/data/lists.json
deleted file mode 100644
index 5608897..0000000
--- a/data/lists.json
+++ /dev/null
@@ -1,1137 +0,0 @@
-{
- "master":{
- "title":"Master List",
- "type":"master",
- "description":"A lot of the things I want to convey on this website (my likes, my dislikes, useful links, helpful tips, etc.) can be sorted into lists. So, I thought that it would be a good idea to make a page of all my lists instead of having all this information scattered across a bunch of different articles. I was inspired in large part by a book I saw called Listography: Your Life in Lists, which is a journal with a bunch of prompts for making lists of things about yourself."
- },
- "quotes":{
- "title":"My Favorite Quotes",
- "type":"quotes",
- "description":"This list contains quotes that I live by, quotes that have shaped my fundamental understanding of things, and quotes that I otherwise just like.",
- "list":[
- {
- "quote":"You're not going crazy. You're going sane in a crazy world!",
- "quotee":"The Tick (Ben Edlund)",
- "source":"The Tick vs. The Idea Men"
- },
- {
- "quote":"Disrespect is a two-way street.",
- "quotee":"Henry Rollins",
- "source":"Get in the Van: On the Road with Black Flag"
- },
- {
- "quote":"No man has the right to be an amateur in the matter of physical training. It is a shame for a man to grow old without seeing the beauty and strength of which his body is capable.",
- "quotee":"Socrates",
- "translated":true
- },
- {
- "quote":"A fascist worked out today. Did you?",
- "quotee":"Unknown Anarchist"
- },
- {
- "quote":"To progress again, man must remake himself. And he cannot remake himself without suffering. For he is both the marble and the sculptor. In order to uncover his true visage he must shatter his own substance with heavy blows of his hammer.",
- "quotee":"Alexis Carrel",
- "source":"Man, The Unknown",
- "translated":true
- },
- {
- "quote":"To train the mind, first train the body.",
- "quotee":"Izumi Curtis (Hiromu Arakawa)",
- "source":"Fullmetal Alchemist",
- "translated":true
- },
- {
- "title":"Bene Gesserit Litany Against Fear",
- "quote":"I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past, I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.",
- "quotee":"Frank Herbert",
- "source":"Dune"
- },
- {
- "quote":"It's not a bug, it's a feature."
- },
- {
- "quote":"...do these things happen to other people or am I just the chosen one? I decided it was the latter...",
- "quotee":"Charles Bukowski",
- "source":"the freeway life"
- },
- {
- "quote":"There are two possible outcomes: if the result confirms the hypothesis, then you've made a measurement. If the result is contrary to the hypothesis, then you've made a discovery",
- "quotee":"Enrico Fermi"
- },
- {
- "quote":"No gods, no masters"
- },
- {
- "quote":"One must imagine Sisyphus happy.",
- "quotee":"Albert Camus",
- "source":"The Myth of Sisyphus",
- "translated":true
- },
- {
- "quote":"It is important to draw wisdom from many different places. If we take it from only one place, it becomes rigid and stale. Understanding others, the other elements, and the other nations will help you become whole.",
- "quotee":"Uncle Iroh",
- "source":"Avatar: the Last Airbender"
- },
- {
- "quote":"It is better to be a warrior in a garden than a gardener in a war."
- },
- {
- "quote":"Sucking at something is the first step towards being sorta good at someething.",
- "quotee":"Jake the Dog",
- "source":"Adventure Time"
- },
- {
- "quote":"You know, I mean, like, Old-Lady Science, you know? She's a real — You got to hang on tight, you know? Because she — she — she bucks pretty hard.",
- "quotee":"Morty Smith (Justin Roiland)",
- "source":"Rick & Morty"
- },
- {
- "quote":"Through even our darkest days, we must never cease creating. Each new invention brings value to the world, be it beauty, utility, or both.",
- "quotee":"Rashmi, Aether-Seer",
- "card":"Ornithopter of Paradise",
- "multiverseid":"522308"
- },
- {
- "quote":"What senses do we lack that we cannot see or hear another world all around us?",
- "quotee":"Frank Herbert",
- "source":"Dune"
- },
- {
- "quote":"Humankind cannot gain anything without first giving something in return. To obtain, something of equal value must be lost.",
- "quotee":"Hiromu Arakawa",
- "source":"Fullmetal Alchemist",
- "title":"Law of Equivalent Exchange"
- },
- {
- "quote":"I would rather have had you by my side than all the blue in the world.",
- "quotee":"Maggie Nelson",
- "source":"Bluets"
- },
- {
- "quote":"Where the head goes, the body follows.",
- "quotee":"Sensei Steve Tack"
- },
- {
- "quote":"When you enter the dojo, leave your emotions at the door.",
- "quotee":"Richard Goist"
- },
- {
- "quote":"You're in the top half of any group.",
- "quotee":"Houston Webb"
- },
- {
- "quote":"A fool knows no fear. A hero shows no fear.",
- "card":"Intrepid Hero",
- "multiverseid":"280320"
- },
- {
- "quote":"Only in mirrors do heroes find their equal.",
- "card":"Mirror Gallery",
- "multiverseid":"74555"
- },
- {
- "quote":"You can't truly call yourself “peaceful” unless you're capable of great violence. If you're not capable of violence you're not peaceful, you're harmless.",
- "quotee":"Stefan Grant"
- },
- {
- "quote":"The convoluted wording of legalisms grew up around the necessity to hide from ourselves the violence we intend toward each other. Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. You have done violence to him, consumed his energy. Elaborate euphemisms may conceal your intent to kill, but behind any use of power over another the ultimate assumption remains: \"I feed on your energy.\"",
- "quotee":"Frank Herbert",
- "source":"Dune Messiah"
- },
- {
- "quote":"If you don't think your life is worth more than someone else's, sign your donor card and kill yourself.",
- "quotee":"Dr. Gregory House",
- "source":"House MD (S5E09 Last Resort)"
- },
- {
- "quote":"If there can be no victory, then I will fight forever.",
- "quotee":"Koth of the Hammer",
- "card":"Darksteel Plate",
- "multiverseid":"213749"
- },
- {
- "quote":"If you want something done right, do it yourself.",
- "quotee":"Grandma Mary Kay Shepich"
- },
- {
- "quote":"Now, look, we're gonna be dealing with some real serious stuff today. You might have heard of it. It's called math! And without it, none of us would even exist, so let's jump right in.",
- "quotee":"Mr. Goldenfold",
- "source":"Rick & Morty"
- },
- {
- "quote":"Life was not gentle to him,\n And the elements so mixed in him\nThat he made warfare on life\nIn the which he was slain.",
- "quotee":"Edgar Lee Masters",
- "source":"Spoon River Anthology (Cassius Hueffer)"
- },
- {
- "quote":"You don't tug on superman's cape, you don't spit into the wind, you don't pull the mask off that old lone ranger, and you don't mess around with Jim.",
- "quotee":"Jim Croce",
- "source":"You Don't Mess Around with Jim"
- },
- {
- "quote":"Inspiration is reciprocal: we all have a responsibility to each other to create.",
- "card":"Oviya Pashiri, Sage Lifecrafter",
- "multiverseid":"417738"
- },
- {
- "quote":"You're the only one who can get up when you're down. No one else.",
- "quotee":"Daniel LaRusso",
- "source":"Cobra Kai"
- },
- {
- "quote":"A true champion never stops training. You gotta keep moving forward, or else you could get stuck exactly where you are.",
- "quotee":"Johnny Lawrence",
- "source":"Cobra Kai"
- },
- {
- "quote":"Some convictions are so strong that the world must break to accommodate them.",
- "card":"Vindicate",
- "multiverseid":"19135"
- },
- {
- "quote":"Madness and genius are separated only by degrees of success.",
- "quotee":"Sidar Jabari",
- "card":"Inspiration",
- "multiverseid":"3642"
- }
-
- ]
- },
- "words":{
- "title":"Words I Like",
- "description":"This list contains a bunch of words I like. Some of them I like because of how they sound, some of them I like because of what they mean, and some of them I like because of what I associate with them.",
- "list":["guppy","wrought","confectionery","immaculate","phantasmal","imperious","chevalier","glisten","hasami","genuflect","spectre","delineate","confluence","libation","Pythonic"]
- },
- "mal":{
- "title":"All of the Anime I've Watched",
- "description":"MyAnimeList",
- "type":"external",
- "link":"https://myanimelist.net/animelist/epicshepich"
- },
- "goodreads":{
- "title":"Books I've Read Since High School",
- "description":"My Goodreads list",
- "type":"external",
- "link":"https://www.goodreads.com/review/list/110528977-jim-shepich?shelf=read"
- },
- "mnemonics":{
- "title":"Mnemonics I Use",
- "type":"key-value",
- "description":"When you've been in school as long as I have, you pick up a few tricks to help remember things.
Since antiquity, culture was passed down throughout the ages via oral tradition. Grand works of epic poetry, sacred knowledge, and more were passed from generation to generation, with each new generation memorizing these works through the use of mantras, chants, and verse. Sounds and rhythms carved out a place in people's memories that stood the test of time.
When I memorized the Periodic Table of the Elements, I found that my general strategy was to just say a group of symbols as if they spelled out a word, and then I memorized that sound (it got a little bit awkward with dysprosium-holmium-erbium). A lot of the mnemonics I present here are short, otherwise-meaningless mantras such as Roy G. Biv, SOH CAH TOA, etc. And with these mantras, I welcome you into my own oral tradition.",
- "list":[
- {
- "k":"An Ox and a Red Cat",
- "v":"In electrochemical cells (both voltaic/galvanic and electrolytic), oxidation occurs at the anode, and reduction occurs at the cathode."
- },
- {
- "k":"Oil Rig",
- "v":"Oxidation is loss of electrons, Reduction is gain of electrons."
- },
- {
- "k":"M Vem Jsun P",
- "v":"Listed in order of distance from the sun, the planets of the solar system are: Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, (Pluto)"
- },
- {
- "k":"Ben Stiller's Grandma Likes Corn",
- "v":"Strata of the epidermis listed in deep-to-superficial order: basale, spinosum, granulum, lucidum, corneum"
- },
- {
- "k":"WX water xylem, OP organics phloem",
- "v":"The types of transport tissue in vascular plants, xylem transports fresh water up from the roots, while phloem transports sugars and other organics down from the leaves."
- },
- {
- "k":"SOH CAH TOA",
- "v":"the trigonometric functions are ratios of the side lengths of a right triangle: sine is opposite over hypotenuse, cosine is adjacent over hypotenuse, and tangent is opposite over adjacent."
- },
- {
- "k":"HOMES",
- "v":"The Great Lakes of Michigan are: Huron, Ontario, Michigan, Erie, Superior."
- },
- {
- "k":"Roy G. Biv",
- "v":"The colors of a rainbow (visible light) in order of increasing wavelength is: red, orange, yellow, green, blue, indigo, violet."
- }
- ]
- },
- "albums":{
- "type":"gallery",
- "subtype":"album",
- "title":"My Favorite Albums",
- "description":"Albums I listen to in the car, albums I listen to when I'm going to sleep, albums I listen to while I work, and more. Since, I was a kid, I've had an unhealthy relationship with collecting things (bordering on hoarding), so I won't allow myself to get into collecting vinyls, but think of this as my digital \"vinyl\" collection. I've noticed that an unusally large fraction of these albums were released in 1977 and/or have covers that depict spaceships.",
- "list":[
- {
- "title":"Boston",
- "artist":"Boston",
- "year":"1976",
- "link":"https://youtu.be/wu77H0gsAYY",
- "cover":"https://i.pinimg.com/736x/53/4c/6e/534c6e1931b4c123d1c14d0e65ad25eb--more-than-a-feeling-boston-boston.jpg"
- },
- {
- "title":"Rumours",
- "artist":"Fleetwood Mac",
- "year":"1977",
- "link":"https://youtu.be/uzEt9cATWFw",
- "cover":"https://qph.fs.quoracdn.net/main-qimg-b3593ea30145790da58d4f39f4ed0231"
- },
- {
- "title":"Fleetwood Mac",
- "artist":"Fleetwood Mac",
- "year":"1975",
- "link":"https://youtu.be/qs-hn1y7T7c",
- "cover":"https://static-musique.qub.ca/images/covers/7b/ov/n65tnqwnjov7b_max.jpg"
- },
- {
- "title":"The Green Letter",
- "artist":"Mitsukiyo",
- "year":"2017",
- "link":"https://youtu.be/e2MhdE9szv8",
- "cover":"https://i.discogs.com/8x-MsOu_eY-RZkr1qyyxT3jyYWMYw5IteCG3KbHoQ-Y/rs:fit/g:sm/q:90/h:600/w:600/czM6Ly9kaXNjb2dz/LWltYWdlcy9SLTEz/NDQzMzA5LTE1NTQz/MTAxMjktMzExNi5q/cGVn.jpeg"
- },
- {
- "title":"Moenie and Kitchi",
- "artist":"Gregory and the Hawk",
- "year":"2008",
- "link":"https://youtu.be/EMZOtHIL7QM",
- "cover":"https://f4.bcbits.com/img/0011833953_10.jpg"
- },
- {
- "title":"Don't Look Back",
- "artist":"Boston",
- "year":"1978",
- "link":"https://youtu.be/s2_xH7vOK7k",
- "cover":"https://i.etsystatic.com/20562574/r/il/6769bc/2377662835/il_570xN.2377662835_juft.jpg"
- },
- {
- "title":"Out of the Blue",
- "artist":"Electric Light Orchestra",
- "year":"1977",
- "link":"https://youtu.be/2f9CoaIH9FE",
- "cover":"https://m.media-amazon.com/images/I/71-4vcunM+L._SL1500_.jpg"
- },
- {
- "title":"Master of Puppets",
- "artist":"Metallica",
- "year":"1986",
- "link":"https://youtu.be/K6LA7v1PApU",
- "cover":"https://m.media-amazon.com/images/I/71SziOTzXrL._AC_SL1425_.jpg"
- },
- {
- "title":"Ride the Lightning",
- "artist":"Metallica",
- "year":"1984",
- "link":"https://youtu.be/H0XGswUuZU0",
- "cover":"https://www.revolvermag.com/sites/default/files/styles/original_image__844px_x_473px_/public/media/section-media/ridethelightning.jpg?itok=Fd0KtaS2×tamp=1549044407"
- },
- {
- "title":"The Black Album",
- "artist":"Metallica",
- "year":"1991",
- "link":"https://youtu.be/DqDeH3hwxfw",
- "cover":"https://m.media-amazon.com/images/I/71z4zm5yohL._SL1425_.jpg"
- },
- {
- "title":"Point of Know Return",
- "artist":"Kansas",
- "year":"1977",
- "link":"https://youtu.be/LepSiqpC6hA",
- "cover":"http://static-1.ivoox.com/audios/2/9/5/0/7241500500592_XXL.jpg"
- },
- {
- "title":"Leftoverture",
- "artist":"Kansas",
- "year":"1976",
- "link":"https://youtu.be/f5jom_YYeGU",
- "cover":"https://m.media-amazon.com/images/I/91CLL0FhHbL._SL1500_.jpg"
- },
- {
- "title":"Heroes",
- "artist":"David Bowie",
- "year":"1977",
- "link":"https://youtu.be/TFLLE8LPA_k",
- "cover":"https://m.media-amazon.com/images/I/81VycvvC49L._SL1300_.jpg"
- },
- {
- "title":"Frontiers",
- "artist":"Journey",
- "year":"1983",
- "link":"https://youtu.be/eD7HC7g0dG8",
- "cover":"https://m.media-amazon.com/images/I/81RPFmr49sL._SL1500_.jpg"
- },
- {
- "title":"...And Justice For All",
- "artist":"Metallica",
- "year":"1988",
- "link":"https://youtu.be/7PktvdsPXjI",
- "cover":"https://images.genius.com/79908883b42660f49d71b42f4f82216c.1000x1000x1.jpg"
- },
- {
- "title":"Escape",
- "artist":"Journey",
- "year":"1981",
- "link":"https://youtu.be/T8gTlHInJIA",
- "cover":"https://i.discogs.com/J6fEDZdk6kTWDArqmpjsTo5rrHnl9jUr655FedNoErU/rs:fit/g:sm/q:90/h:600/w:600/czM6Ly9kaXNjb2dz/LWltYWdlcy9SLTU0/MzIwNS0xMzY1NDUw/ODczLTkzMTQuanBl/Zw.jpeg"
- },
- {
- "title":"Babymetal",
- "artist":"Babymetal",
- "year":"2014",
- "link":"https://youtu.be/yIVRs6YSbOM",
- "cover":"https://pbs.twimg.com/media/D0QrY-UX0AUTyfe?format=jpg&name=4096x4096"
- },
- {
- "title":"OMNI",
- "artist":"Minus the Bear",
- "year":"2010",
- "link":"https://www.youtube.com/watch?v=0RsY_mjiqk4&list=PL9B0A0664758349FA",
- "cover":"https://m.media-amazon.com/images/I/91DhrWe+g4L._SL1500_.jpg"
- },
- {
- "title":"The Stranger",
- "artist":"Billy Joel",
- "year":"1977",
- "link":"https://youtu.be/DglOd7Wdueg",
- "cover":"https://m.media-amazon.com/images/I/71JxCGwe9cL._SL1500_.jpg"
- },
- {
- "title":"Planet of Ice",
- "artist":"Minus the Bear",
- "year":"2007",
- "link":"https://www.youtube.com/watch?v=iZaBD3pymH0&list=OLAK5uy_lvNJl_TeMmqtjJJj0qH3ZhW5msijTqhvQ",
- "cover":"https://f4.bcbits.com/img/a2748888567_10.jpg"
- },
- {
- "title":"idyll",
- "artist":"Steven Naylor",
- "year":"2021",
- "link":"https://youtu.be/dN6KMdvx8sM",
- "cover":"https://i.scdn.co/image/ab67616d0000b2739117378d83714dd38a0340b7"
- },
- {
- "title":"Ocean Eyes",
- "artist":"Owl City",
- "year":"2009",
- "link":"https://www.youtube.com/watch?v=Kiwea1iV6cs&list=PLOKKW8hN_oU8Tc41hbE8QzuL6Zi8Ri0pt",
- "cover":"https://m.media-amazon.com/images/I/51wQ1iymmsL.jpg"
- },
- {
- "title":"All Things Bright and Beautiful",
- "artist":"Owl City",
- "year":"2011",
- "link":"https://www.youtube.com/watch?v=LhTHXZfw3vY&list=PL23315D4CDDFE9D6C",
- "cover":"https://m.media-amazon.com/images/I/71pTeXLg9kL._SL1200_.jpg"
- },
- {
- "title":"An Airplane Carried Me To Bed",
- "artist":"Sky Sailing",
- "year":"2010",
- "link":"https://www.youtube.com/watch?v=SlOQPOR8z7g&list=PL7MiJHw2jDfFJOh3NoL6x_2EtYExminHg",
- "cover":"https://m.media-amazon.com/images/I/91nhQdHvTrL._SL1500_.jpg"
- },
- {
- "title":"You Don't Mess Around with Jim",
- "artist":"Jim Croce",
- "year":"1972",
- "link":"https://youtu.be/38B81cpwjNA",
- "cover":"https://m.media-amazon.com/images/I/71ld2tNpCEL._SL1425_.jpg"
- }
- ]
- },
- "_test":{
- "title":"Test",
- "hidden":true,
- "list":["My Favorite Movies",{"test":"It works"},"My Favorite Food",{"nested lists":["Useful Websites","Favorite foods",{"title":"cereals","dropdown":true,"list":["Cocoa Pebbles","Froot Loops"]}]}]
- },
- "foods":{
- "title":"My Favorite Foods",
- "dropdown":true,
- "sections":[
- {
- "title":"Breakfast",
- "list":[{"Cereal":["Reese's Puffs","Honeycombs","Frosted Mini Wheats","Eggo Cereal","Froot Loops","Frosted Flakes"]}, "Crepes", "Pancakes","Bacon","Hash browns","Smokey links","French toast","French fries"]
- },
- {
- "title":"Snacks",
- "list":["Pretzels (especially Old Dutch)","Popcorn (especially Orville Redenbacher)",{"Cheese":["Swiss","Colby Jack","Cheddar","Mozzarella"]},{"Candy":["Take 5","Kit Kat","Snickers","Reese's cups","Milky Way",{"Gummy bears":["Albanese","Meijer brand"]}]}]
- },
- {
- "title":"Fruits",
- "description":"Here are some of my favorite fruits presented in a tier-list along with tips on how to get the best experience out of them. One metric I use to rank the fruits that you might find odd is the shelf life. The reason I care about the shelf life of my fruits is that I hate going to the grocery store, so I prefer fruits that I can stockpile.",
- "sections":[
- {
- "title":"S-Tier",
- "list":[{"Mango":"When you can smell the aroma through the skin, the mango is ready to eat. Usually takes around a week from when you buy them. I loved Rubicon mango juice so much as a kid that my grandparents went to Toronto to buy it for me. Mango is my preferred flavor of smoothie."},{"Watermelon":"The best watermelons sound hollow when you knock on them and have a faded spot on their rind. Nothing beats a cool, juicy watermelon on a warm summer afternoon."},{"Lychee":"Out of all the fruits on my list, I think lychees and watermelons are the only ones that are consistently sweet. Lychees dry out your mouth a little bit, which annoying, but it's also kinda neat because that's not what you'd expect from a fruit. Lychee flavored Ramune is awesome."}]
- },
- {
- "title":"A-Tier",
- "list":[{"Apple":"Loses points because they can be tough and hard to eat, and sometimes they just taste too sour, but follow my instructions and they'll usually be good. Plus, they can last up to 3 weeks on the shelf, and they're very versatile (apple juice, cider, doughnuts, pies, etc.). Honeycrisp is my favorite cultivar, and the best honeycrisps are the biggest and the yellowest. Apples usually taste better a week after you buy them. I'm also a fan of the Opal cultivar, which tastes like a cross-breed with pears."},{"Banana":"Taste is A-tier, but the short shelf life (and concomitant fruit flies) is a big negative. What brings them back is that bananas have such good synergy with other fruits (and other foods: see peanutbutter banana sandwich). Healthiest when they're green, sweetest when they're brown, and best when they're just yellow. I like to make banana smoothies: 150 mL milk, two bananas, a tablespoon of sugar, optionally a spoon or two of yogurt, and 7 ice cubes."},{"Peach":"Taste is S-tier, but they go bad way too fast and the window where they are soft enough to eat but not overripe is way too small. I've heard you can tell that a peach is ready to eat when it's as squishy as the meat of your thumb, but obviously I've still had issues."},{"Pear":"Like peaches, ripe pears taste divine. I don't like flavors that are too overpowering, and I find that pears are perfectly subtle. However, unless the pear is at the perfect point of ripeness, it is too tough to bite into and tastes starchy like an unripe banana."},{"Cherry":"It's hard to come by bad cherries in Michigan (just avoid the maraschinos). I'd say that the taste is B-tier, but they get points because the seeds are so fun to spit."},{"Clementine":"Ironically, the \"sweet orange\" can often be a bit too sour for my taste. Plus, I got the stomach flu during my orange juice phase, so I developed a bit of an aversion. But, clementines are usually pretty sweet, don't have that undertone that I dislike, and they last pretty long on the shelf."},{"Grape":"Grapes taste pretty good. They aren't super sweet or really juicy like other fruits, but they still taste good. The great advantage of grapes over all other fruits is that you don't need to wash your hands or your face after eating them because of their durable dry skin."}]
- },
- {
- "title":"B-Tier",
- "list":[{"Blueberry":"Good blueberries can be really good, but bad blueberries can be really sour and nasty, and the worst thing is that since they're so small, it's always a mixed bag when you buy them. I've noticed that blueberries, like apples, tend to follow a bigger is better rule."},{"Raspberry":"Like blueberries, raspberries are a mixed bag. On average, I'd say the taste of plain raspberries is C-tier, but raspberry jelly is really good, so here they are."},{"Apricot":"They have a good flavor, but like peaches and pears, apricots have a small window where they are squishy but not overripe."}]
- }
- ]
- },
- {
- "title":"Sandwiches",
- "list":[{"Peanut butter and...":["Jelly","Banana","M&M","Chocolate chip","Nutella"]},"Ham and Cheese","Hamburger"]
- }
- ]
- },
- "mtg":{
- "title":"My Favorite Magic: the Gathering Cards",
- "type":"gallery",
- "subtype":"mtg-card",
- "description":"",
- "sections":[
- {
- "title":"Best of the Best",
- "list":[
- {
- "name":"Battle of Wits",
- "multiverseid":"83133"
- },
- {
- "name":"Enter the Infinite",
- "multiverseid":"366411"
- },
- {
- "name":"Intrepid Hero",
- "multiverseid":"280320"
- },
- {
- "name":"Ral Zarek",
- "multiverseid":"470744"
- },
- {
- "name":"Tamiyo, the Moon Sage",
- "multiverseid":"240070"
- },
- {
- "name":"Zuran Spellcaster",
- "multiverseid":"184683"
- },
- {
- "name":"Sublime Epiphany",
- "multiverseid":"485397"
- },
- {
- "name":"Ponder",
- "multiverseid":"519160"
- },
- {
- "name":"Force of Will",
- "multiverseid":"489724"
- },
- {
- "name":"Niv Mizzet, the Firemind",
- "multiverseid":"96952"
- }
- ]
- },
- {
- "title":"Best Art/Aesthetics",
- "list":[
- {
- "name":"Divination",
- "multiverseid":"447187"
- },
- {
- "name":"Syr Elenora, the Discerning",
- "multiverseid":"473029"
- },
- {
- "name":"Serra Angel",
- "multiverseid":"370602"
- },
- {
- "name":"Captain of the Watch",
- "multiverseid":"394354"
- },
- {
- "name":"Sunblade Elf",
- "multiverseid":"383406"
- },
- {
- "name":"Angelic Destiny",
- "multiverseid":"220230"
- },
- {
- "name":"Island",
- "multiverseid":"289315"
- },
- {
- "name":"Island",
- "multiverseid":"473219"
- },
- {
- "name":"Aether Storm",
- "multiverseid":"184722"
- },
- {
- "name":"Leviathan",
- "multiverseid":"26619"
- },
- {
- "name":"Time of Ice",
- "multiverseid":"442958"
- },
- {
- "name":"Auramancer",
- "multiverseid":"441995"
- },
- {
- "name":"Wall of Frost",
- "multiverseid":"383432"
- },
- {
- "name":"Gift of Orzhova",
- "multiverseid":"366339"
- },
- {
- "name":"Fylgja",
- "multiverseid":"2686"
- },
- {
- "name":"Call to Mind",
- "multiverseid":"208218"
- },
- {
- "name":"Thassa's Bounty",
- "multiverseid":"373662"
- },
- {
- "name":"Ephara, God of the Polis",
- "multiverseid":"378517"
- },
- {
- "name":"Ephara's Radiance",
- "multiverseid":"378381"
- },
- {
- "name":"Stream of Unconsciousness",
- "multiverseid":"152720"
- },
- {
- "name":"Hana Kami",
- "multiverseid":"370475"
- }
- ]
- },
- {
- "title":"Best Mechanics",
- "list":[
- {
- "name":"Cheatyface",
- "multiverseid":"479416"
- },
- {
- "name":"Pestilence",
- "multiverseid":"2119"
- },
- {
- "name":"Underworld Connections",
- "multiverseid":"545758"
- },
- {
- "name":"Isochron Scepter",
- "multiverseid":"292752"
- },
- {
- "name":"Cramped Bunker",
- "multiverseid":"439518"
- },
- {
- "name":"Skywise Teachings",
- "multiverseid":"438639"
- },
- {
- "name":"Serpent Generator",
- "multiverseid":"159826"
- },
- {
- "name":"Judge's Familiar",
- "multiverseid":"460143"
- },
- {
- "name":"Elite Arcanist",
- "multiverseid":"370747"
- },
- {
- "name":"Crackling Perimeter",
- "multiverseid":"366255"
- },
- {
- "name":"Aetherflux Reservoir",
- "multiverseid":"417765"
- },
- {
- "name":"Lighthouse Chronologist",
- "multiverseid":"193590"
- },
- {
- "name":"Intruder Alarm",
- "multiverseid":"5174"
- },
- {
- "name":"Lobber Crew",
- "multiverseid":"289218"
- },
- {
- "name":"Dream Halls",
- "multiverseid":"397553"
- },
- {
- "name":"Arcane Melee",
- "multiverseid":"376246"
- },
- {
- "name":"Disruptive Student",
- "multiverseid":"21123"
- },
- {
- "name":"The Magic Mirror",
- "multiverseid":"473013"
- },
- {
- "name":"Chalice of Life / Chalice of Death",
- "multiverseid":["226735","226721"]
- },
- {
- "name":"Ovinomancer",
- "multiverseid":"108863"
- },
- {
- "name":"Talrand, Sky Summoner",
- "multiverseid":"253701"
- },
- {
- "name":"Odric, Master Tactician",
- "multiverseid":"259670"
- },
- {
- "name":"Quicksilver Dagger",
- "multiverseid":"292757"
- },
- {
- "name":"Young Pyromancer",
- "multiverseid":"370600"
- },
- {
- "name":"Koth of the Hammer",
- "multiverseid":"266362"
- },
- {
- "name":"Curiosity",
- "multiverseid":"489304"
- },
- {
- "name":"Censorship",
- "multiverseid":"9747"
- },
- {
- "name":"Bureaucracy",
- "multiverseid":"9778"
- },
- {
- "name":"Stuffy Doll",
- "multiverseid":"509639"
- },
- {
- "name":"Epic Struggle",
- "multiverseid":"33697"
- },
- {
- "name":"Azor's Elocutors",
- "multiverseid":"265418"
- }
- ]
- },
- {
- "title":"Best Flavor Text",
- "list":[
- {
- "name":"Ornithopter of Paradise",
- "multiverseid":"522308"
- },
- {
- "name":"Mirror Gallery",
- "multiverseid":"74555"
- },
- {
- "name":"Darksteel Plate",
- "multiverseid":"213749"
- },
- {
- "name":"Oviya Pashiri, Sage Lifecrafter",
- "multiverseid":"417738"
- },
- {
- "name":"Vindicate",
- "image":"https://c1.scryfall.com/file/scryfall-cards/large/front/2/c/2c2d88dd-813a-4cd5-9a6a-ca6f80564078.jpg?1561756842",
- "link":"https://scryfall.com/card/g07/4/vindicate"
- },
- {
- "name":"Raging Goblin",
- "multiverseid":"393980"
- },
- {
- "name":"Inspiration",
- "multiverseid":"3642"
- },
- {
- "name":"Pygmy Giant",
- "multiverseid":"74333"
- }
- ]
- },
- {
- "title":"Best Fake Cards",
- "list":[
- {
- "name":"Slidshocking Krow",
- "image":"https://i.imgur.com/57fkA9S.jpg",
- "link":"https://www.reddit.com/r/MTGLardFetcher/comments/6la7e4/roborosewater_slidshocking_krow/"
- },
- {
- "name":"Eight Fucking Bears",
- "image":"https://i.imgur.com/QT4H77w.jpg",
- "link":"https://www.reddit.com/r/magicTCG/comments/3x2qwu/eight_fucking_bears/"
- },
- {
- "name":"Soulbond Giant",
- "image":"http://cdn.themis-media.com/media/global/images/library/deriv/940/940220.jpg",
- "link":"https://www.escapistmagazine.com/the-most-interesting-magic-the-gathering-cards-made-by-artificial-intelligence/"
- },
- {
- "name":"Black Lotus But Bri'ish",
- "image":"https://i.redd.it/zv7jw7bur6871.png",
- "link":"https://www.reddit.com/r/magicthecirclejerking/comments/oa5yc8/black_lotus_but_briish/"
- },
- {
- "name":"Countercounterspell",
- "image":"https://i.imgur.com/wjm2Haw.png",
- "link":"https://www.reddit.com/r/MTGLardFetcher/comments/ghi157/countercounterspell/"
- },
- {
- "name":"Stroke",
- "image":"https://i.redd.it/onnf1xqgk7d51.png",
- "link":"https://www.reddit.com/r/MTGLardFetcher/comments/hy8vk7/stroke/"
- },
- {
- "name":"Enter the Finite",
- "image":"https://i.redd.it/5hi1qup8l7661.jpg",
- "link":"https://www.reddit.com/r/MTGLardFetcher/comments/kggc1a/enter_the_finite/"
- },
- {
- "name":"[V]indicate",
- "image":"https://i.redd.it/k4ng1j106dw71.jpg",
- "link":"https://www.reddit.com/r/MTGLardFetcher/comments/qi9haz/indicate/"
- },
- {
- "name":"Crip Moon",
- "image":"https://i.redd.it/9zwqyay1aiz71.png",
- "link":"https://www.reddit.com/r/MTGLardFetcher/comments/qtjwg3/an_idea_that_came_to_me_visionlike/"
- },
- {
- "name":"Krenko's Command",
- "image":"https://i.redd.it/7w67a5ml3wb51.png",
- "link":"https://www.reddit.com/r/MTGLardFetcher/comments/hu9ij2/krenkos_command/"
- },
- {
- "name":"Strict Denial",
- "image":"https://i.redd.it/2mp6r83ywlc41.jpg",
- "link":"https://www.reddit.com/r/MTGLardFetcher/comments/et0vjw/strict_denial/"
- }
- ]
- }
- ]
- },
- "movies":{
- "title":"My Favorite Movies",
- "description":"This list has most of the movies I consider to be my favorites, except for the ones I forgot to add. I am not much of a film buff, so if something is missing that it seems should be on here, it's either because I forgot it or because I haven't seen it.",
- "type":"gallery",
- "subtype":"movie",
- "list":[
- {
- "title":"The Road to El Dorado",
- "year":"2000",
- "poster":"https://m.media-amazon.com/images/M/MV5BOTEzNWIwMzctOTE1YS00YjIyLTgwZGEtMTMxZDAzNzlmODMxXkEyXkFqcGdeQXVyMjgyMDk1MzY@._V1_FMjpg_UX1000_.jpg"
- },
- {
- "title":"Shrek",
- "year":"2001",
- "poster":"https://m.media-amazon.com/images/M/MV5BOGZhM2FhNTItODAzNi00YjA0LWEyN2UtNjJlYWQzYzU1MDg5L2ltYWdlL2ltYWdlXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_FMjpg_UX1007_.jpg"
- },
- {
- "title":"Click",
- "year":"2006",
- "poster":"https://m.media-amazon.com/images/M/MV5BMTA1MTUxNDY4NzReQTJeQWpwZ15BbWU2MDE3ODAxNw@@._V1_FMjpg_UX450_.jpg"
- },
- {
- "title":"Princess Mononoke",
- "year":"1997",
- "poster":"https://m.media-amazon.com/images/M/MV5BNGIzY2IzODQtNThmMi00ZDE4LWI5YzAtNzNlZTM1ZjYyYjUyXkEyXkFqcGdeQXVyODEzNjM5OTQ@._V1_.jpg"
- },
- {
- "title":"Spirited Away",
- "year":"2001",
- "poster":"https://m.media-amazon.com/images/M/MV5BMjlmZmI5MDctNDE2YS00YWE0LWE5ZWItZDBhYWQ0NTcxNWRhXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_.jpg"
- },
- {
- "title":"Space Jam",
- "year":"1996",
- "poster":"https://m.media-amazon.com/images/M/MV5BMDgyZTI2YmYtZmI4ZC00MzE0LWIxZWYtMWRlZWYxNjliNTJjXkEyXkFqcGdeQXVyNjY5NDU4NzI@._V1_.jpg"
- },
- {
- "title":"Fight Club",
- "year":"1999",
- "poster":"https://m.media-amazon.com/images/M/MV5BMmEzNTkxYjQtZTc0MC00YTVjLTg5ZTEtZWMwOWVlYzY0NWIwXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_.jpg"
- },
- {
- "title":"Shrek 2",
- "year":"2002",
- "poster":"https://m.media-amazon.com/images/M/MV5BMDJhMGRjN2QtNDUxYy00NGM3LThjNGQtMmZiZTRhNjM4YzUxL2ltYWdlL2ltYWdlXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_.jpg"
- },
- {
- "title":"Elf",
- "year":"2003",
- "poster":"https://m.media-amazon.com/images/M/MV5BMzUxNzkzMzQtYjIxZC00NzU0LThkYTQtZjNhNTljMTA1MDA1L2ltYWdlL2ltYWdlXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_FMjpg_UX1000_.jpg"
- },
- {
- "title":"Die Hard",
- "year":"1988",
- "poster":"https://m.media-amazon.com/images/M/MV5BZjRlNDUxZjAtOGQ4OC00OTNlLTgxNmQtYTBmMDgwZmNmNjkxXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_.jpg"
- },
- {
- "title":"The Karate Kid",
- "year":"1984",
- "poster":"https://m.media-amazon.com/images/M/MV5BNTkzY2YzNmYtY2ViMS00MThiLWFlYTEtOWQ1OTBiOGEwMTdhXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_.jpg"
- },
- {
- "title":"Tim and Eric's Billion Dollar Movie",
- "year":"2012",
- "poster":"https://m.media-amazon.com/images/M/MV5BMTU0NTQ5NDYwMV5BMl5BanBnXkFtZTcwNjUzNzUxNw@@._V1_.jpg"
- },
- {
- "title":"Monty Python and the Holy Grail",
- "year":"1975",
- "poster":"https://m.media-amazon.com/images/M/MV5BN2IyNTE4YzUtZWU0Mi00MGIwLTgyMmQtMzQ4YzQxYWNlYWE2XkEyXkFqcGdeQXVyNjU0OTQ0OTY@._V1_.jpg"
- },
- {
- "title":"Dragon Quest: Your Story",
- "year":"2019",
- "poster":"https://m.media-amazon.com/images/M/MV5BM2Q5YTI0NTQtOGFlOC00MTEzLTg2NDYtM2VhNDk1ZTllNTNiXkEyXkFqcGdeQXVyMjU0ODQ5NTA@._V1_FMjpg_UX1000_.jpg"
- },
- {
- "title":"Dune",
- "year":"2021",
- "poster":"https://m.media-amazon.com/images/M/MV5BN2FjNmEyNWMtYzM0ZS00NjIyLTg5YzYtYThlMGVjNzE1OGViXkEyXkFqcGdeQXVyMTkxNjUyNQ@@._V1_.jpg"
- },
- {
- "title":"The Princess Bride",
- "year":"1987",
- "poster":"https://m.media-amazon.com/images/M/MV5BMGM4M2Q5N2MtNThkZS00NTc1LTk1NTItNWEyZjJjNDRmNDk5XkEyXkFqcGdeQXVyMjA0MDQ0Mjc@._V1_.jpg"
- },
- {
- "title":"Sky High",
- "year":"2005",
- "poster":"https://m.media-amazon.com/images/M/MV5BZjA2NmY1OTQtMjE4Mi00NGRkLWFmODUtM2Q3ZTRlYjZhNWYwXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_.jpg"
- },
- {
- "title":"The Pacifier",
- "year":"2005",
- "poster":"https://m.media-amazon.com/images/M/MV5BMTE5MTcxOTQxNl5BMl5BanBnXkFtZTYwMzk3Nzg2._V1_FMjpg_UX1000_.jpg"
- },
- {
- "title":"Back to the Future",
- "year":"1985",
- "poster":"https://m.media-amazon.com/images/M/MV5BZmU0M2Y1OGUtZjIxNi00ZjBkLTg1MjgtOWIyNThiZWIwYjRiXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_.jpg"
- },
- {
- "title":"Matilda",
- "year":"1996",
- "poster":"https://m.media-amazon.com/images/M/MV5BNzRhYmZhOWEtZjA4NC00MTU1LWE1ODgtN2Q5Y2QxN2JlNDljXkEyXkFqcGdeQXVyMjUzOTY1NTc@._V1_.jpg"
- },
- {
- "title":"Kung Fu Panda",
- "year":"2008",
- "poster":"https://m.media-amazon.com/images/M/MV5BODJkZTZhMWItMDI3Yy00ZWZlLTk4NjQtOTI1ZjU5NjBjZTVjXkEyXkFqcGdeQXVyODE5NzE3OTE@._V1_.jpg"
- },
- {
- "title":"Megamind",
- "year":"2010",
- "poster":"https://m.media-amazon.com/images/M/MV5BMTAzMzI0NTMzNDBeQTJeQWpwZ15BbWU3MDM3NTAyOTM@._V1_.jpg"
- },
- {
- "title":"Labyrinth",
- "year":"1986",
- "poster":"https://m.media-amazon.com/images/M/MV5BMjM2MDE4OTQwOV5BMl5BanBnXkFtZTgwNjgxMTg2NzE@._V1_.jpg"
- },
- {
- "title":"Frozen",
- "year":"2013",
- "poster":"https://m.media-amazon.com/images/M/MV5BMTQ1MjQwMTE5OF5BMl5BanBnXkFtZTgwNjk3MTcyMDE@._V1_.jpg"
- },
- {
- "title":"Tangled",
- "year":"2010",
- "poster":"https://m.media-amazon.com/images/M/MV5BMTAxNDYxMjg0MjNeQTJeQWpwZ15BbWU3MDcyNTk2OTM@._V1_.jpg"
- },
- {
- "title":"Cloudy with a Chance of Meatballs",
- "year":"2009",
- "poster":"https://m.media-amazon.com/images/M/MV5BMTg0MjAwNDI5MV5BMl5BanBnXkFtZTcwODkyMzg2Mg@@._V1_.jpg"
- },
- {
- "title":"Joe Dirt",
- "year":"2001",
- "poster":"https://m.media-amazon.com/images/M/MV5BMTE5NDgxNzU1MV5BMl5BanBnXkFtZTYwODQ4ODE3._V1_.jpg"
- },
- {
- "title":"Star Wars III: Revenge of the Sith",
- "year":"2005",
- "poster":"https://m.media-amazon.com/images/M/MV5BNTc4MTc3NTQ5OF5BMl5BanBnXkFtZTcwOTg0NjI4NA@@._V1_.jpg"
- },
- {
- "title":"Deadpool",
- "year":"2016",
- "poster":"https://m.media-amazon.com/images/M/MV5BYzE5MjY1ZDgtMTkyNC00MTMyLThhMjAtZGI5OTE1NzFlZGJjXkEyXkFqcGdeQXVyNjU0OTQ0OTY@._V1_FMjpg_UX1000_.jpg"
- },
- {
- "title":"Kung Pow: Enter the Fist",
- "year":"2002",
- "poster":"https://m.media-amazon.com/images/M/MV5BMGQxZDEwZDctMjNkMi00YmIxLTgyN2MtYmJhYjEzZGY0NjljXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_FMjpg_UX1000_.jpg"
- },
- {
- "title":"Django Unchained",
- "year":"2012",
- "poster":"https://m.media-amazon.com/images/M/MV5BMjIyNTQ5NjQ1OV5BMl5BanBnXkFtZTcwODg1MDU4OA@@._V1_.jpg"
- },
- {
- "title":"The Prestige",
- "year":"2006",
- "poster":"https://m.media-amazon.com/images/M/MV5BMjA4NDI0MTIxNF5BMl5BanBnXkFtZTYwNTM0MzY2._V1_FMjpg_UX1000_.jpg"
- },
- {
- "title":"Oldboy",
- "year":"2003",
- "poster":"https://m.media-amazon.com/images/M/MV5BMTI3NTQyMzU5M15BMl5BanBnXkFtZTcwMTM2MjgyMQ@@._V1_FMjpg_UX1000_.jpg"
- },
- {
- "title":"Zombieland",
- "year":"2009",
- "poster":"https://m.media-amazon.com/images/M/MV5BMTU5MDg0NTQ1N15BMl5BanBnXkFtZTcwMjA4Mjg3Mg@@._V1_FMjpg_UX1000_.jpg"
- }
- ]
- },
- "countries":{
- "title":"Countries I've Visited",
- "description":"This list does not include countries that I have been in but not outside an airport (e.g. Germany).",
- "list":["United States","Canada","Mexico","Belize","Puerto Rico","Jamaica","Bahamas","Japan","India"]
- },
- "internet":{
- "title":"Guide to the Internet",
- "description":"This is a collection of all of the websites on the Internet I like to use.",
- "type":"key-value",
- "dropdown-open":"true",
- "sections":[
- {
- "title":"Computer Science",
- "description":"When I was in middle school, I taught myself how to program using various tutorials and resources on the Internet. Here are the resources that I've found useful over the years.",
- "sections":[
- {
- "title":"General Purpose",
- "list":[
- {"k":"StackOverflow","link":"https://stackoverflow.com/","v":"A Q&A forum about all things computer science. If you're trying to figure out how to do something, Google it, and most of the time you'll find a StackOverflow thread about it. If you're trying to debug an error, just paste the error into Google and again, StackOverflow will probably have the answer."},
- {"k":"Codecademy","link":"https://www.codecademy.com/","v":"This was my starting point for learning most of the languages I know. Codecademy has courses of tutorials to get you up and running with almost all of the most popular languages. It has in-browser interpreters/compilers, which are really convenient. In the last few years, a lot of the content has become paid, which is really a travesty, but the free courses can still get you started."},
- {"k":"GitHub","link":"https://github.com/","v":"The most popular platform for hosting code. GitHub allows developers to manage and track changes with a version control software called Git."},
- {"k":"Esolang Wiki","v":"A Wiki about esoteric programming languages (esolangs). Many of these languages were created as jokes, but trying to use these languages can be a genuinely beneficial exercise. Because of how different esolangs are from normal languages, they make you approach problems in new and creative ways.","link":"https://esolangs.org/"},
- {"k":"Atom Editor","dropdown":true,"link":"https://atom.io/","v":"Atom is my IDE of choice. It's free, open-source, integrates nicely with GitHub, and has a slick, uncluttered UI (as compared to something like Eclipse). Some of the packages I've found that improve my Atom experience are:","list":[
- {"script":"By far the most important Atom package, script allows you to run code from most popular languages within the Atom editor. Hit CTRL+SHIFT+B and the console will pop up at the bottom and your code will do its thing. Go to the settings and change the first setting (CWD) to \"Directory of the script\"."},
- {"autoclose-html":"Pretty self-explanatory; this package will automatically create the corresponding close tag when you type in an open HTML tag. If you don't want the close tag on the next line, then type the wildcard (*) in the Force Inline field."},
- {"markdown-preview-plus":"Will render Markdown syntax in a new pane when you press CTRL+SHIFT+M. If you want to include LaTeX-formatted math script in your Markdown, tick \"Enable Math Rendering By Default\" in the Math Options."},
- {"minimap":"Shows a zoomed-out view of your code, which can be helpful for moving through a long script, especially if you know what regions of the code look like."},
- {"pentagons":"Animates floating polygons in the background of the code, just for fun :)"},
- {"php-server":"Allows you to spin up a localhost PHP server in the directory of your choosing, which is really convenient for if you want to develop PHP and actually be able to run it."},
- {"sync-settings":"Allows you to sync your Atom settings and installed packages across multiple devices/installations by storing data in a private GitHub gist."}
- ]}
- ]
- },
- {
- "title":"Web Development",
- "list":[
- {"k":"W3Schools","link":"https://www.w3schools.com/","v":"The best documentation for learning JavaScript, HTML, and CSS. You can often learn a lot by just browsing through documentation to learn what you can do with the language."},
- {"k":"Font Awesome","link":"https://fontawesome.com/start","v":"A huge library of icons that you can use on your website. Font Awesome integrates beautifully with CSS, and it's what I used to make those silver social media icons on the footer of this website. There are paid upgrades, but the basic free package still offers a huge selection of icons. Check out some cool Font Awesome icons: "}
- ]
- },
- {
- "title":"Home Server",
- "list":[
- {"k":"Installing Apache","v":"Apache HTTP Server is a widely popular open-source server software. This link is to a tutorial for setting up Apache on a Windows machine.","link":"https://www.sitepoint.com/how-to-install-apache-on-windows/"},
- {"k":"Configuring PHP","v":"Back-end development is a key component of creating a dynamic, interactive website, and PHP is a popular language for back-end. This link is a tutorial for installing and configuring PHP on your Apache server.","link":"https://www.sitepoint.com/how-to-install-php-on-windows/"},
- {"k":"Certbot","link":"https://certbot.eff.org/instructions","v":"A free SSL/TLS certificate generator application. Just follow the instructions, and Certbot will take care of the rest for you. Make sure you renew your certificate periodically or set up automatic renewal."},
- {"k":"DokuWiki","link":"https://www.dokuwiki.org/","v":"If you want to create a wiki on your server, DokuWiki is the way to do it. It's free, open-source, and user-friendly. All you have to do is download a version of it and extract the files into whatever directory of your server that you want to be the root of the wiki. After that, everything can be configured in your browser through the wiki's settings."}
- ]
- }
- ]
- },
- {
- "title":"Websites for Students",
- "sections":[
- {
- "title":"General",
- "list":[
- {"k":"BibMe","v":"Generates formatted citations (MLA, APA, ACS, etc.) from the link to or title of a source. Makes writing a bibliography a lot less painful.","link":"https://www.bibme.org/"}
- ]
- },
- {
- "title":"Johns Hopkins Engineering for Professionals",
- "list":[
- {"k":"Course Evaluation Results Database","v":"This is where all the course/instructor evaluations are compiled.","link":"https://ep.jhu.edu/course-evaluation-results-public-reports"}
- ]
- },
- {
- "title":"University of Michigan",
- "list":[
- {"k":"LSA Course Guide","link":"https://www.lsa.umich.edu/cg/","v":"This may have changed, but when I was a student, the course catalog on Wolverine Access had an awful interface, so I always used the LSA Course Guide."},
- {"k":"Vertere","v":"The inventory management system for the chemistry department. This link was always way too difficult for me to find, so I finally ended up bookmarking it. You'll need login credentials, which are hard to come by.","link":"http://chem-vim.chem.lsa.umich.edu/VimWebV2/(S(jao5q1jgvvfjwzqi0rlpwejc))/Login.aspx"},
- {"k":"NMR Scheduler","v":"If you want to use the department NMR spectrometers, schedule your time here.","link":"https://apps-prod.chem.lsa.umich.edu/nmr/horarios/index.php#now"},
- {"k":"GC-MS Scheduler","v":"If you want to use the department GC-MS, schedule your time here.","link":"https://sites.google.com/a/umich.edu/lsa-chemistry-instrumentation-reservations/home/shimadzu-gcms"}
- ]
- },
- {
- "title":"Learning Japanese",
- "list":[
- {"k":"Free Japanese Lessons","v":"Using this website, I learned enough Japanese to find my way around Japan as well as place out of the first year of college Japanese. \"Free\" is not entirely accurate, but the one-time payment of $12.95 is well worth it. The site had a major update since I last used it, but I checked it out and it seems even higher quality than before.","link":"https://freejapaneselessons.com/"},
- {"k":"Rikaikun","v":"A Google Chrome extension that displays the reading and English translation of Japanese words when you hover over them. Rikaikun is very helpful when you're trying to read something that has a bunch of kanji that you don't know.","link":"https://chrome.google.com/webstore/detail/rikaikun/jipdnfibhldikgcjhfnomkfpcebammhp?hl=en"},
- {"k":"Suzuki-Kun","v":"This software analyzes inputted Japanese text and predicts the pitch-accent of the text. It displays pitch contours over the text and will generate synthesized speech so you can listen along. Use this tool if you want to take your pronunciation to the next level, or if you want an mp3 of some text (maybe for help memorizing a speech).","link":"http://www.gavo.t.u-tokyo.ac.jp/ojad/eng/phrasing/index"},
- {"k":"Vocabulary Lists","v":"Free Japanese Lessons has a lot of great wordbanks, but if you're looking for some esoteric subjects, you're going to go off the beaten path. These are some of the lists that I've found useful:",
- "list":[
- "Board Games",
- "Chemical Elements",
- "Pokemon Names"
- ]
- }
- ]
- }
- ]
- },
- {
- "title":"Digital Acquisitions",
- "description":"Useful links for all you 21st century swashbucklers out there.",
- "list":[
- {"k":"Library Genesis (libgen)","link":"https://libgen.is/","v":"Textbooks, comic books, novels, you name it and there's a good chance that libgen has it."},
- {"k":"SciHub","link":"https://sci-hub.se/","v":"Paste in the link or DOI of a scientific article, SciHub will almost always get the PDF for you. Research is paid for largely by government grants funded by tax dollars, so you should be entitled to its results."},
- {"k":"YT1s","link":"https://yt1s.com/","v":"Allows you to download videos or audio files from YouTube."},
- {"k":"WatchCartoonOnline","link":"https://www.wcostream.com/","v":"This has my site for cartoons and anime since around 2013."},
- {"k":"Nyaa","link":"https://nyaa.si/","v":"The best magnets for torrenting anime."},
- {"k":"AnimeShow","link":"https://www2.animeshow.tv/","v":"The only site I've found for watching raw (unsubtitled) anime, in case you want to practice your Japanese listening comprehension."},
- {"k":"AQ Stream","link":"https://aqstream.com/jp","v":"For streaming live Japanese television. It only has a few channels, but they're the big ones: TV Asahi, TV Tokyo, Fuji TV, TBS, NHK, and a few others."},
- {"k":"Lj Video Downloader","v":"This is an app for Android, but it is the best video downloader I've found. Paste in any website with a video in it, and Lj will find the m3u8 link and let you download the video.","link":"https://play.google.com/store/apps/details?id=com.leavjenn.m3u8downloader&hl=en_US&gl=US"},
- {"k":"r/Piracy","link":"https://www.reddit.com/r/Piracy/","v":"If you're trying to figure out how to pirate something, chances are that somebody else has tried too. Maybe they posted about it in the Piracy subreddit."},
- {"k":"Internet Archive","link":"https://archive.org/","v":"The Internet Archive isn't traditionally considered a piracy website, but if you can rent a book, you can flip through all the pages and get scans of them in your browser cache. If your browser is Chrome, you can use ChromeCacheView to extract those scans. Then, just use an image to PDF converter, like this one I made, and you're in business."}
- ]
- }
- ]
- }
-}
diff --git a/data/pages.json b/data/pages.json
deleted file mode 100644
index 29791ab..0000000
--- a/data/pages.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "home" : {
- "name" : "Home",
- "query_value" : "home",
- "file" : "home.html",
- "index" : 0
- },
-
- "404" : {
- "name" : "404",
- "query_value" : "404",
- "file" : "404.html",
- "index" : -1
- },
-
- "about" : {
- "name" : "About",
- "query_value" : "about",
- "file" : "about.html",
- "index" : 1
- },
-
- "resume" : {
- "name" : "Resume",
- "query_value" : "resume",
- "link" : "pages/shepich resume.pdf",
- "index" : 2
- },
-
- "epics" : {
- "name" : "Epics & Emprises",
- "query_value" : "epics",
- "link" : "https://epics.shepich.com",
- "index" : -1
- },
-
- "lists" : {
- "name" : "Lists",
- "query_value" : "lists",
- "file" : "lists.html",
- "index" : -1
- },
-
- "don-info" : {
- "name" : "Info for Don",
- "query_value" : "don-info",
- "file" : "don-info.html",
- "index" : -1
- }
-}
diff --git a/data/socials.json b/data/socials.json
deleted file mode 100644
index 85d4e4c..0000000
--- a/data/socials.json
+++ /dev/null
@@ -1,27 +0,0 @@
-[
- {
- "platform": "Instagram",
- "icon": "instagram",
- "link": "https://instagram.com/epicshepich"
- },
- {
- "platform": "GitHub",
- "icon": "github",
- "link": "https://github.com/epicshepich"
- },
- {
- "platform": "Facebook",
- "icon": "facebook-square",
- "link": "https://www.facebook.com/jim.shepich/"
- },
- {
- "platform": "LinkedIn",
- "icon": "linkedin",
- "link": "https://www.linkedin.com/in/jshepich/"
- },
- {
- "platform": "Discord",
- "icon": "discord",
- "link": "https://discordapp.com/users/epicshepich#0131"
- }
-]
diff --git a/jimsite.py b/jimsite.py
deleted file mode 100644
index f8e3fbc..0000000
--- a/jimsite.py
+++ /dev/null
@@ -1,342 +0,0 @@
-import os
-import re
-import glob
-import shutil
-import subprocess
-import markdown
-import yaml
-import pydantic
-from typing import Optional
-from datetime import datetime, date
-from dotmap import DotMap
-
-class GlobalVars(pydantic.BaseModel):
- '''Static-valued global variables to be interpolated into any HTML templates.'''
- today: date = datetime.today()
-
-
-def filepath_or_string(s: str) -> str:
- '''Loads the contents of a string if it is a filepath, otherwise returns the string.'''
- if os.path.isfile(s):
- with open(s, 'r') as f:
- return f.read()
- else:
- return s
-
-
-def extract_placeholders(s: str) -> set:
- '''Extracts placeholder variables in the format `{variable}` from
- an unformatted template string.'''
-
- # Regex pattern to match placeholders with alphanumerics, dots, and underscores.
- placeholder_pattern = r'\{([\w\.]+)\}'
-
- # Find all matches in the string.
- matches = re.findall(placeholder_pattern, s)
-
- # Return the set of distinct placeholders.
- return set(matches)
-
-
-def find_cyclical_placeholders(s: str, _parents: tuple = None, _cycles: set = None, **kwargs) -> set[tuple]:
- '''Recursively interpolates supplied kwargs into a template string to validate
- that there are no cyclical dependencies that would cause infinite recursion.
-
- Returns a list of paths (expressed as tuples of nodes) of cyclical placeholders.
- '''
-
- # Track the lineage of each placeholder so we can see if it is its own ancestor.
- if _parents is None:
- _parents = tuple()
-
- # Keep track of any cycles encountered.
- if _cycles is None:
- _cycles = set()
-
- # Extract the placeholders from the input.
- placeholders = extract_placeholders(s)
-
- # Recursion will naturally end once there are no more nested placeholders.
- for p in placeholders:
-
- # Any placeholder that has itself in its ancestry forms a cycle.
- if p in _parents:
- _cycles.add(_parents + (p,))
-
- # For placeholders that are not their own ancestor, recursively
- # interpolate the kwargs into the nested placeholders until we reach
- # strings without placeholders.
- else:
- find_cyclical_placeholders(
- ('{'+p+'}').format(**kwargs),
- _parents = _parents+(p,),
- _cycles = _cycles,
- **kwargs
- )
-
- return _cycles
-
-
-with open('config.yaml', 'r') as config_file:
- config = yaml.safe_load(config_file.read())
-
-class SiteConfig(pydantic.BaseModel):
- base_url: Optional[str] = config['site_defaults'].get('base_url')
- git_repo: Optional[str] = config['site_defaults'].get('git_repo')
- build_cache: Optional[str] = config['site_defaults'].get('build_cache')
- assets: Optional[list] = config['site_defaults'].get('assets')
- web_root: Optional[str] = config['site_defaults'].get('web_root')
- articles: Optional[list] = config['site_defaults'].get('articles')
-
-class ArticleMetadata(pydantic.BaseModel):
- title: str
- author: Optional[str] = config.get('author')
- date: date
- lastmod: Optional[date] = None
- published: bool
- tags: list
- thumbnail: Optional[str] = None
-
-
-
-def load_markdown(md: str) -> tuple[ArticleMetadata|None, str]:
- '''Loads a Markdown file into a (metadata: ArticleMetadata, content: str) pair.'''
-
- # Load the file contents if a filepath is specified, and strip document delimiters ('---').
- md = filepath_or_string(md).strip().strip('---').strip()
-
- # If there is no `---` delimiter, then the article has no metadata.
- if '---' not in md.strip('---'):
- return None, md
-
- # Split the metadata from the contents.
- [raw_metadata, raw_article] = md.split('---')
-
- # Use YAML to parse the metadata.
- metadata = yaml.safe_load(raw_metadata)
-
- # Convert the contents to a HTML string.
- content = markdown.markdown(raw_article)
-
- return ArticleMetadata(**metadata), content
-
-
-def format_html_template(template: str, **kwargs) -> str:
- '''Interpolates variables specified as keyword arguments
- into the given HTML template.
-
- # Example
-
- ```python
- kwargs = {'a': '1', 'b': '2', 'c': '{d}+{e}', 'd': '3', 'e': '{c}'}
- s = '{a} + {b} = {c}'
- find_cyclical_placeholders(s, **kwargs)
-
- >>> {('c', 'e', 'c')}
- ```
- '''
-
- # Load the template if a filepath is given.
- template = filepath_or_string(template)
-
- # Ensure the template does not have cyclical placeholder references.
- cycles = find_cyclical_placeholders(template, globalvars = GlobalVars(), **kwargs)
-
- if len(cycles) > 0:
- raise ValueError('Template has cyclical dependencies: {cycles}')
-
- # Iteratively interpolate global variables and the kwargs into the template until
- # there are no more placeholders. The loop is used to account for nested template references.
- formatted_html = template
- while len(extract_placeholders(formatted_html)) > 0:
- formatted_html = formatted_html.format(globalvars = GlobalVars(), **kwargs)
-
- # Return the formatted HTML.
- return formatted_html
-
-
-run = lambda cmd: subprocess.run(cmd.split(' '), stdout = subprocess.PIPE, stderr = subprocess.PIPE)
-def pull_git_repo(repo: str, build_cache: str) -> None:
- '''Pulls/clones a repo into the build cache directory.'''
- if os.path.exists(f'{build_cache}/.git'):
- run(f'git -C {build_cache} pull origin')
- else:
- run(f'git clone {repo} {build_cache}')
-
-
-def load_partials() -> dict:
- """Loads partial templates from the templates/partials directory."""
- partials = {}
- for filename in os.listdir('templates/partials'):
- with open(f'templates/partials/{filename}') as partial_file:
- partial_template = partial_file.read()
-
- partials[f'partials.{os.path.splitext(filename)[0]}'] = format_html_template(
- partial_template,
- current_year = datetime.now().year
- )
- return partials
-
-
-def import_resume():
-
- # Use a sentinel value for the loop.
- max_date = '0000-00-00'
-
- # Loop through the folders in the resume repo to find the most recent one.
- for resume_folder in os.listdir('build/resume'):
-
- # Skip folders that are not in YYYY-MM-DD format.
- try:
- datetime.strptime(resume_folder,'%Y-%m-%d')
- except Exception:
- continue
-
- # Keep track of the most recent date.
- if resume_folder > max_date:
- max_date = resume_folder
-
- # Copy the resume into the /dist directory.
- run(f'cp build/resume/{max_date}/shepich_resume.pdf dist/shepich_resume.pdf')
-
-
-def format_blog_tags(tags: list[str], template = 'templates/components/blog_tag.html') -> list[str]:
- '''Generates HTML blog tag components from a list of tag names.'''
- return [
- format_html_template(template, tag_name = t) for t in tags
- ]
-
-
-def build_blog_archive(
- index: dict[str, tuple[str, str]],
- page_template = 'templates/pages/default.html',
- li_template = 'templates/components/blog_archive_li.html',
- **kwargs
- ) -> str:
- '''Converts an index, formatted as filestem: (metadata, contents) dict,
- into an HTML page containing the list of articles, sorted from newest to oldest.
-
- Note: partials must be expanded into the kwargs, as they are needed to generate
- the overall page.
- '''
-
- # Add each article as a list item to an unordered list.
- archive_html_content = '