Compare commits

...

11 Commits

Author SHA1 Message Date
HumanoidSandvichDispenser 8ef38e3876
update files 2024-03-09 17:31:25 -08:00
HumanoidSandvichDispenser 8a52e5752b
comments notice 2023-07-04 02:08:04 -07:00
HumanoidSandvichDispenser a5adc4672c
clarification LULE 2023-07-04 01:56:44 -07:00
HumanoidSandvichDispenser ecbbb5615c
Create hugo.yml 2023-07-04 01:39:07 -07:00
HumanoidSandvichDispenser d6def0b961
site appearance 2023-07-04 01:35:55 -07:00
HumanoidSandvichDispenser d0b550789d
updated posts 2023-07-04 01:35:21 -07:00
HumanoidSandvichDispenser 426389c078 SUPA MAKEOVER 2022-10-30 19:47:39 -07:00
HumanoidSandvichDispenser 3f0d96ba61 images 2022-10-29 10:26:10 -07:00
HumanoidSandvichDispenser 2049db1f5e
Merge branch 'master' of github.com:HumanoidSandvichDispenser/sandvich.xyz 2022-10-10 20:08:02 -07:00
HumanoidSandvichDispenser 4d36ed7206
edits 2022-10-10 20:07:23 -07:00
HumanoidSandvichDispenser 30b1a521b6 removed analytics PagMan 2022-10-08 20:48:37 -07:00
99 changed files with 1151 additions and 201 deletions

75
.github/workflows/hugo.yml vendored 100644
View File

@ -0,0 +1,75 @@
# Sample workflow for building and deploying a Hugo site to GitHub Pages
name: Deploy Hugo site to Pages
on:
# Runs on pushes targeting the default branch
push:
branches: ["master"]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
# Default to bash
defaults:
run:
shell: bash
jobs:
# Build job
build:
runs-on: ubuntu-latest
env:
HUGO_VERSION: 0.108.0
steps:
- name: Install Hugo CLI
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Install Dart Sass Embedded
run: sudo snap install dart-sass-embedded
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Setup Pages
id: pages
uses: actions/configure-pages@v3
- name: Install Node.js dependencies
run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
- name: Build with Hugo
env:
# For maximum backward compatibility with Hugo modules
HUGO_ENVIRONMENT: production
HUGO_ENV: production
run: |
hugo \
--minify \
--baseURL "${{ steps.pages.outputs.base_url }}/"
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
with:
path: ./public
# Deployment job
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2

View File

@ -3,21 +3,19 @@ languageCode: "en-us"
title: "sandvich.xyz"
taxonomies:
tag: tags
tag: tags
Params:
remark42SiteID = "sandvich"
remark42Url = "https://remark42.sandvich.xyz"
remark42SiteID: "sandvich"
remark42Url: "https://remark42.sandvich.xyz"
markup:
highlight:
codeFences: true
hl_Lines: ""
hl_inline: false
lineNoStart: 1
lineNos: true
lineNumbersInTable: true
tabWidth: 4
style: "doom-one"
googleAnalytics: "G-PD0SR7PGT8"
highlight:
codeFences: true
hl_Lines: ""
hl_inline: false
lineNoStart: 1
lineNos: true
lineNumbersInTable: true
tabWidth: 4
style: "dracula"

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 806 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 528 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -6,15 +6,16 @@
~humanoidsandvichdispenser@gmail.com~
Encrypt with [[https://sandvich.xyz/sandvich.gpg][GPG key]] \\
~curl https://sandvich.xyz/sandvich.gpg | gpg --import~ \\
~1643 9496 7ED2 8385 A5FE DBCD 9A39 BE37 E602 B22D~
[[https://sandvich.xyz/sandvich.gpg][Click here to download GPG key]] or use
the command below to import: \\
~curl https://sandvich.xyz/sandvich.gpg | gpg --import~
All emails from me will be signed with my GPG key.
All emails from me will be signed with my GPG key. \\
Signature: ~1643 9496 7ED2 8385 A5FE DBCD 9A39 BE37 E602 B22D~
* Discord/Matrix
Discord: ~pyro from csgo#6740~ \\
Discord: ~pyrofromcsgo~ \\
Matrix: ~@humanoidsandvichdispenser:matrix.org~
* Other

View File

@ -0,0 +1,15 @@
#+TITLE: Contact Information
* Email
Please email me at [[mailto:humanoidsandvichdispenser@gmail.com][humanoidsandvichdispenser@gmail.com]] and, if possible or know how, encrypt your mail with [[/sandvich.gpg][my GPG key]].
My GPG signature is ~1643 9496 7ED2 8385 A5FE DBCD 9A39 BE37 E602 B22D~. If you receive a different signature, it is most likely not from me.
* Discord
Instead, you can also send a message ~pyro from csgo#6740~ on Discord
* Other Methods
You can also leave a comment below anonymously or by signing into GitHub.

View File

@ -0,0 +1,2 @@
#+TITLE: Login to Canvas with this One Trick! 😱😱 (Teachers HATE HIM)
#+DRAFT: true

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,22 @@
---
title: "Greenpath (Piano & Guitar Duet Arrangement)"
subtitle: "From \"Hollow Knight\""
artist: "Christopher Larkin"
musescore: https://musescore.com/user/40262822/scores/12893104
date: "2023-02-15"
parts:
- "Piano"
- "Classical Guitar"
---
- [Score (.mscz)](./greenpath-duet-new.mscz)
- [Score (.pdf)](./greenpath-duet-new.pdf)
- [Piano (.pdf)](./greenpath-duet-new-Piano.pdf)
- [Classical Guitar (.pdf)](./greenpath-duet-new-Classical_Guitar.pdf)
# Old Version (2023-11-05)
- [Score (.mscz)](./greenpath-duet.mscz)
- [Score (.pdf)](./greenpath-duet.pdf)
- [Piano (.pdf)](./greenpath-duet-Piano.pdf)
- [Classical Guitar (.pdf)](./greenpath-duet-Classical_Guitar.pdf)

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,14 @@
---
title: "Moskau"
artist: "Dschinghis Khan"
musescore: https://musescore.com/user/40262822/scores/12107134
date: "2022-03-01"
parts:
- "Piano"
---
Probably very hard to read with the amount of jumps but at least it's only
3 pages
- [Score (.mscz)](./Moskau.mscz)
- [Score (.pdf)](./Moskau.pdf)

View File

@ -0,0 +1,20 @@
---
title: "Sad Piano"
subtitle: "FeelsOkayMan Outro"
artist: "Naoya Sakomata"
musescore: https://musescore.com/user/40262822/scores/13804264
date: "2024-01-05"
parts:
- "Piano"
---
Transcription of Naoya Sakamata - Sad Piano, specifically the part played
during FeelsOkayMan's outro, with a short additional ending not present in the
original composition.
I mainly wrote this for a forsen dead shitpost:
{{< youtube "t9q1j6th0wM" >}}
- [Score (.mscz)](./feelsokayman-outro-sad-piano.mscz)
- [Score (.pdf)](./feelsokayman-outro-sad-piano.pdf)

View File

@ -0,0 +1,12 @@
---
title: "Winter (The Wind Can Be Still) Guitar Arrangement"
subtitle: "From \"Stardew Valley\""
artist: "Eric Barone (ConcernedApe)"
musescore: https://musescore.com/user/40262822/scores/10277098
date: "2023-03-24"
parts:
- "Guitar"
---
- [Score (.mscz)](./the-wind-can-be-still.mscz)
- [Score (.pdf)](./the-wind-can-be-still.pdf)

View File

@ -0,0 +1,71 @@
#+TITLE: Batch download music into your Jellyfin server!
#+DATE: <2023-01-25 Wed>
#+TAGS[]: jellyfin software technology
/Disclaimer: this guide is only for educational purposes and I do not recommend or condone any of this./
[[https://cdn.7tv.app/emote/60ae3804259ac5a73e2bff3d/3x.png]]
* Deemix
[[https://gitlab.com/Bockiii/deemix-docker][Docker container]]
I have no association with this software (educational purposes only).
* Docker Compose
Here's my ~docker-compose.yml~ that sets up both Deemix and Jellyfin (just an example, I don't actually use this 👍 +500 social credit)
#+begin_src yaml
version: "2.1"
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=America/Los_Angeles
volumes:
- /data/jellyfin/config:/config
- /data/jellyfin/deemix:/data/deemix-downloads
ports:
- 8096:8096
restart: unless-stopped
deemix:
image: registry.gitlab.com/bockiii/deemix-docker
container_name: Deemix
volumes:
- /data/deemix/config:/config
- /data/jellyfin/deemix:/downloads
environment:
- PUID=1000
- PGID=1000
- UMASK_SET=022
- DEEMIX_SINGLE_USER=true
ports:
- 6595:6595
restart: unless-stopped
#+end_src
* How use [[https://cdn.7tv.app/emote/603caa69faf3a00014dff0b1/1x.png]] ❓
Make sure that the Deemix download directory is mounted to both Deemix and Jellyfin to automate the process.
#+attr_org: :width 256px
#+attr_html: :src /assets/deemix-download.png
[[../assets/deemix-download.png]]
In my ~docker-compose.yml~, the container directory ~/downloads~ is mounted/bound to the host directory ~/data/jellyfin/deemix~.
#+attr_org: :width 256px
#+attr_html: :src /assets/jellyfin-deemix.png
[[../assets/jellyfin-deemix.png]]
...which is also bound to my Jellyfin server at the container directory ~/data/deemix-downloads~
#+attr_org: :width 256px
#+attr_html: :src /assets/deemix.png
[[../assets/deemix.png]]
Now I just search up any song, album, or discography, and it will instantly show up on the Jellyfin server.

View File

@ -0,0 +1,16 @@
---
date: 2023-07-04
tags:
- misc
title: "WHERE ARE THE COMMENTS?? HOW CAN I TYPE \"forsen\" NOW?? please clarify"
---
If you're wondering why there are no comments or why it is broken, my mom
![](https://cdn.betterttv.net/emote/6102dd6f2d1eba5400d24784/1x.webp)
temporarily disconnected my Raspberry Pi which is hosting the Remark42 server
with all the comments. Yes, it is hosted at her house
![](https://cdn.frankerfacez.com/emoticon/587063/1). And I just can't tell
her which cables go where.
It will be back probably Friday when I finally get there to plug it back in,
shirley ![](https://cdn.betterttv.net/emote/60419081306b602acc5972c9/1x.webp)

View File

@ -0,0 +1,2 @@
#+title: dinit
#+draft: true

View File

@ -1,6 +1,6 @@
#+TITLE: Discord Sucks
#+TITLE: Discord SUCKS!!! 😡😡💥
#+DATE: <2022-09-17 Sat>
#+TAGS[]: software
#+TAGS[]: software technology
I've been a long-time Discord user, but over the past few years, I have come to realize that Discord /really/ sucks.
@ -26,7 +26,7 @@ The client is not open source either. This means that we, as users, have no way
The interface is not good either. People love to joke about how much of a flashbang Discord's light theme is---because it's true, and it's not an exageration. It took them 5 years to make the light theme not as jarring. The tab navigation isn't that great either, since the client was not even designed for keyboard navigation (although it is getting better).
I wouldn't really care about any of these problems /if/ Discord let you use another client. However, using an alternative client (even changing the CSS with BetterDiscord) is considered self-botting, which is against the Terms of Service.
I wouldn't really care about any of these problems /if/ Discord let you use another client. However, using an alternative client (even changing the CSS with BetterDiscord) is against Discord ToS. Even though Discord does not actively enforce it, there is some Hyde Park middle-class boot-licker that wouldn't mind to report you just for using a different client.
* You sound like a schizo.
@ -38,4 +38,4 @@ Discord probably will not go away anytime soon, and I do not see it being replac
One that I would really recommend is Matrix. It is an open protocol for decentralized real-time communication, and it is already being used by a lot of people and organizations. It has end-to-end encryption, and you can host your own server if you want. If you're already using Discord, you'll already be familiar with the Element client.
It's like Telegram but usable as a means of communication between your friends and connection between communities. It's like Discord but without the bad things that I do not like it for.
It's like Telegram but scalable from small group chats to communities. It's like Discord but without the bad things that I do not like it for.

View File

@ -6,9 +6,9 @@ Today, my school had their morning announcements, and one of the activities incl
Later in my government class, we were forming groups for a club. My classmate asked me for my contact info and asked me to input my Instagram username. Is social media really the only way to contact people and share information with others?
You are probably assuming that I am antisocial, but there is rather a good reason that I avoid social media and instead host my own website to establish an online presence.
There is rather a good reason that I avoid social media and instead host my own website to establish an online presence other than "I don't have any friends".
* Why is social media bad?
* Super huge schizo rant about social media
** Psychological Manipulation
@ -60,4 +60,4 @@ Additional resources I found:
People will often see a problem and ask, "If I'm going to start using my own website, how am I going to be able to track what's going on with all of my friends and my favorite content creators without having to constantly check all of their websites or social media profiles?"
The solution is RSS feeds. Most websites, blogs, and social media have an RSS feed that you can subscribe to in order to stay up-to-date on their content. They allow you to present all of the content in one place in a consistent format, which is even easier than having to check all of the different places you contact your friends on.
The solution is RSS feeds. Most websites, blogs, and social media already implement an RSS feed that you can subscribe to in order to stay up-to-date on their content. Some social media do not have RSS feeds, but there are third party services that can fetch information and deliver them in a simple feed. They allow you to present all of the content in one place in a consistent format, which is even easier than having to check all of the different places you contact your friends on.

View File

@ -1,65 +1,30 @@
#+TITLE: Duolingo is a Video Game
#+DATE: <2022-09-11 Sun>
#+TAGS[]: language
#+DRAFT: true
Do you ever wonder what a 2000-day streak on a Duolingo course would be like? You would be imagining that you would be extremely attractive to every single woman and man on the planet with your hyperpolyglot gigachad alpha male tongue.
But 99.9% of the time, that isn't the case.
* The Problem with Duolingo
A lot of people seem to have the misconception that Duolingo will teach you how to speak a language. Duolingo is a video game. The main issue with Duolingo is that you're learning how to /translate/ rather than learning how to /speak/ a language.
A lot of people seem to have the misconception that Duolingo will teach you how to speak a language. Duolingo is a video game. A very addictive one at that. The main issue with Duolingo is that you're learning how to /translate/ rather than learning how to /speak/ a language.
This wouldn't normally be a huge issue if you're learning a language gramatically closer to English, such as German, but even 2000-day streakers can make occasional grammar mistakes.
It does, however, get more difficult to use Duolingo to learn distant languages.
** You don't learn to think in your target language
As you spend more time playing Duolingo, you have a false sense of achievement. It certainly does feel like you have learned something, but instead, all you have learned was to repeat the same five sentences. Even 2000-day streakers can make occasional grammar mistakes [[https://www.reddit.com/r/languagelearningjerk/comments/x7vmk3/op_cant_speak_fluently_and_only_understands_about/infz9oi/][FeelsBadMan]].
As you learn a language, you should ask yourself: am I thinking in my target language as I read? Let's take this example sentence in Latin.
#+begin_quote
Write this in English: Marcus nōn solus habitat.
#+end_quote
...
You would normally interpret it in English as:
** Postscript: Duolingo Stories
#+begin_quote
Marcus does not live by himself.
#+end_quote
A feature I had loved in Duolingo was its Stories. Yes, Duolingo still has them. But about a year ago, they had changed it so you have to complete a certain amount of crowns to unlock stories rather than finishing the previous stories.
Because Latin is a highly inflected language, there would be many forms of the same word that would mean different things. The words "habitat" and "habitāre" and "habitō" and "habitāverītis" all mean "to live", but they each mean something different when put in context.
Now if you were prompted to write the same sentence in Latin, you would have trouble trying to decide which inflection to use. Your head is still thinking in English.
Not only that, but how would you translate "by himself" in Latin? At this point, you're writing a Latin sentence with English constructions.
** You're only learning how to translate
After passing your first few lessons in German Duolingo, you would know that:
#+begin_quote
"Mir geht es gut" = "I am fine"
"und" = "and"
"du" = "you"
#+end_quote
If you wanted to translate "I am fine, and you?" then you would string those phrases together in your head.
#+begin_quote
Mir geht es gut, und du?
#+end_quote
The word "du" (nominative) would be incorrect because it is not in the same grammatical case as "mir" (dative).
Duolingo wouldn't teach you this, but if you study the language's grammar, you would understand why it is not correct.
This made it a lot difficult as I found Stories to be far more useful learning the conversational, spoken part of the language and understanding nuance and tone.
* What should I use Duolingo for then?
As stated before, Duolingo is a video game. You can learn the basics of a language, but you will never learn the grammar and semantics of your target language.
As stated before, Duolingo is a video game. You can learn the basics of a language with it pretty fast. However, please do not rely on Duolingo to achieve fluency.
And for some languages, it will instead develop nasty translation habits that would hinder your progress if you continue to pursue learning it.
And for some languages, it will instead develop nasty translation habits (looking at you, Latin) that would hinder your progress rather than help you grasp a good natural understanding of the language.
Depending on the language, it's best that you learn it in context, especially through the [[https://en.wikipedia.org/wiki/Direct_method_(education)][direct method]].

View File

@ -1,16 +1,13 @@
#+TITLE: Everyone should learn C
#+DATE: <2022-09-12 Mon>
#+TAGS[]: computer-science
#+TAGS[]: computer-science technology
#+DRAFT: true
Everyone that is going into computer science should learn how to write C.
Everyone that is going into computer science and/or software development should learn how to write C.
I can hear people saying, "But who uses C in 2022? That's for boomers and a waste of time. I'm just going to write everything in my epic wholesome language like Python or JS. That way, I have more time to play Valorant and look at my phone more than my parents."
My reasons that I will list here isn't because C is fast. We all know that C is fast. However, not all of us are going to build an entire operating system, web browser, text editor, etc. And it's also not because there is a lot of demand for C either.
I am going to appear arrogant and unapologetic, but I assume anyone that doesn't know basic C knows less of what they are doing when they program in another language. That, however, does not actually bar you from writing anything good if you have no knowledge of C; plenty of popular software have been written by people who do not know any C.
But how are you going to know how a computer works or how a computer thinks?
My reasons that I will list here isn't because C is fast. We all know that C is fast. However, not all of us are going to build an entire operating system, web browser, text editor, etc. And it's also not because there is a lot of demand for C either. Here is my question: how are you going to know how a computer works or how a computer thinks?
* You will start thinking like a computer
@ -98,7 +95,7 @@ The index operator is only simply another way of writing pointer arithmetic.
Higher level languages hide this from you. They won't show you how memory is laid out in a program, and they won't show you why an array is a reference type. They just give you an easy way to use an array.
In C, you have to understand how memory is laid out, and you have to understand how an array is just a contiguous block of memory. This understanding will help you when you need to use a lower level language, or when you need to understand how a higher level language works.
In C, you have to understand how memory is laid out, and you have to understand how an array is just a contiguous block of memory. This understanding will help you not only when you need to use a lower level language, but also when you need to understand how a higher level language works.
* You will understand what you write
@ -192,4 +189,4 @@ Although you will not write everything in C, it is good to have a fundamental kn
It would be easier to teach a student C as it gives them the practical concepts of programming rather than logical concepts and paradigms. Just like in math, it is far easier to understand it if you are able to understand proofs rather than simply memorizing equations.
Unlike other languages, C is a rather simple language compared to the abstracted high-level languages they commonly teach in high school (and sometimes college) computer science courses.
Unlike other languages, C is a rather simple language compared to the abstracted high-level languages they commonly teach in high school computer science courses.

View File

@ -1,6 +1,6 @@
#+TITLE: The Fish and Young Argument
#+DATE: <2022-09-09 Fri>
#+TAGS: english language
#+TAGS[]: english language
What is the write way to right?

View File

@ -0,0 +1,14 @@
---
title: godot bros
date: 2023-09-14
tags:
- misc
---
GODOT BROS WE ARE SO BACK
![](/assets/unity.png)
![](/assets/godot.png)
![](https://cdn.frankerfacez.com/emoticon/387513/2)

View File

@ -0,0 +1,6 @@
#+TITLE: Hot Take
#+DATE: <2022-11-04 Fri>
#+TAGS[]: misc
Using Chrome in the year of Our Lord 2022 should both be a crime and a punishment

View File

@ -1,6 +1,7 @@
#+TITLE: If you write websites in Org Mode...
#+DATE: <2022-09-10 Sat>
#+TAGS[]: emacs tutorial
#+DRAFT: true
If you're an Emacs user, you would probably already know how powerful Org Mode is. You can organize notes, manage to-do lists, and write articles. Almost anything can be written with Org Mode. [[https://notes.sandvich.xyz][I write my lecture notes in Org Mode]]. Even this entire article was written in Org Mode.

View File

@ -0,0 +1,47 @@
#+TITLE: Images
#+DATE: <2022-10-22 Sat>
#+TAGS[]: misc
# more
* Boat
#+attr_org: :width 256
#+attr_html: :src /assets/boat.jpg
[[../assets/boat.jpg]]
* Kitchenware
#+attr_org: :width 256
#+attr_html: :src /assets/kitchenware.png
[[../assets/kitchenware.png]]
* Hic sunt dracones
#+attr_org: :width 256
#+attr_html: :src /assets/hic-sunt-dracones.png
[[../assets/hic-sunt-dracones.png]]
* Forsen's streaming setup
#+attr_org: :width 256
#+attr_html: :src /assets/forsen-streaming-setup.png
[[../assets/forsen-streaming-setup.png]]
* Hair
#+attr_org: :width 256
#+attr_html: :src /assets/hairE.png
[[../assets/hairE.png]]
* Salad
#+attr_org: :width 256
#+attr_html: :src /assets/salad.png
[[../assets/salad.png]]
* Bowl of grapes
#+attr_org: :width 256
#+attr_html: :src /assets/bowl-of-grapes.png
[[../assets/bowl-of-grapes.png]]

View File

@ -0,0 +1,8 @@
---
title: "15:28 forsenSmug"
date: "2023-10-20"
---
I called him every name and every insult under the sun
But never once did I doubt

View File

@ -0,0 +1,4 @@
#+TITLE: 18:10
#+DATE: <2023-03-22 Wed>
NEVER DOUBT

View File

@ -0,0 +1,10 @@
#+TITLE: On Integrated Development Environments
#+draft: true
If you encounter a Linux user, there might be a good chance that they will base their entire personality over what operating system they use.
"Guys look, I'm a Linux user! That means I'm better than Winplebs."
"Guys look, I'm an Arch user! That means I'm better than Noobuntu."
"Guys look, I'm an Artix user! That "

View File

@ -0,0 +1,7 @@
#+TITLE: Redesign
#+DATE: <2022-10-31 Mon>
#+TAGS[]: misc
Site has been redesigned to look more simple in terms of colors. More attractive and normandie friendly.
# more

View File

@ -1,6 +1,6 @@
#+TITLE: Schule
#+DATE: <2022-08-27 Sat>
#+TAGS: school education
#+TAGS[]: school education
You'd always hear the kids say "School is useless because they don't teach you anything useful, and you can get a job without going to school!"
@ -37,11 +37,3 @@ I have had similar conversations and overheard many others. If students are only
The competitive school culture has become normalized. Students are told that they need to get into the best schools, so they can get into the best jobs, so they can live in the best places. As more students get higher GPAs, it raises the average, and now to be above the curve, you must work even more.
This becomes a cycle, and it continues until students no longer have any interests or hobbies outside of school. To put it in better words, here's what my friend has told me: "In an ideal world, the purpose of academia would be to help one discover and advance their interests and hobbies. Instead, the way education is structured forces students to participate in what can only be described as a rat race."
* Learning by Memorization
One of the biggest reasons why people never actually "learn" the information taught in their classes is because they aren't taught /why/ or /how/. This applies to every subject in school. The reason why this is so important is because when you understand why something is important, you're more likely to remember it and be able to form further conclusions.
For example, if you're taught that the square root of 64 is 8, you might be able to remember that for a test. But if you're taught that the square root of 64 is 8 because it's the number that, when multiplied by itself, equals 64, then you're more likely to actually understand and use that information in the future. In fact, if you only knew the square root of 64 is 8 but not why, then you wouldn't be able to determine what the square root of 81 is.
Some classes seem to emphasize memorization, but students never learn. We're called /homo sapiens/ because we're /wiser/ compared to other species, which is why we became an extremely successful and invasive species. We've specifically evolved to be able to process and deduce information. When we simply memorize a fact, we are not thinking about it. It's a simple recall task that other species are much better at. Limiting students to repetitive memorization will not teach them anything nor help them develop the proper deductive reasoning skills they need to succeed.

View File

@ -1,6 +1,6 @@
#+TITLE: Software I Use/Recommend
#+DATE: <2022-09-05 Mon>
#+TAGS: software emacs
#+TAGS[]: software emacs
Dotfiles can be viewed [[https://github.com/humanoidsandvichdispenser/dotfiles][here]] (emacs config in a separate repo).

View File

@ -0,0 +1,31 @@
#+TITLE: Self-hosting a Stardew Valley and SVE Server
#+DRAFT: true
Here I show very quick guide on how to set up a Stardew Valley server with Docker.
* Vanilla Stardew
This [[https://github.com/printfuck/stardew-multiplayer-docker][git repository]] lets you start up a server as quickly as possible. Note that this will install SMAPI, but it will still be considered "vanilla" since the clients do not have to install any mods, and the gameplay will remain like vanilla. The mods included in this repository are only necessary for automatically hosting a game.
* CPU
On a decent machine, you might notice that the CPU usage might be a little bit high, and your temps will increase to about 60 C. This is because the game also has to render, and it is running under an X server. This introduces too much overhead.
You can decrease CPU usage by decreasing the resolution in your ~docker-compose.yml~.
#+begin_src conf
services:
valley:
# ...
environment:
# ...
- "DISPLAY_HEIGHT=640" # default is 900
- "DISPLAY_WIDTH=480" # default is 1200
# ...
#+end_src
* Modded
The
**

View File

@ -0,0 +1,8 @@
#+TITLE: Stateful vs. Stateless Analogy
#+DATE: <2023-03-21 Tue>
#+DRAFT: true
#+TAGS[]: technology
Let's say your father went out to get milk.

View File

@ -0,0 +1,30 @@
---
date: 2023-11-04
tags:
- misc
title: "Two Cans & String Question Heatmap"
draft: true
---
Since March, I have collected thousands of questions on Two Cans & String. Most
of these questions were activated questions, but some were randomly sampled by
selecting every n post.
I used a Python script that uses the Two Cans & String API to archive questions
and insert it into an SQLite DB.
![](/assets/tcdb.png)
The data was transformed into a CSV and imported into Google Sheets, which
allowed me to create a heatmap by counting the frequency based on the day of
the week.
Here was the heatmap of the questions posted on the website from 2nd of March
to 2nd of April.
![](https://i.ibb.co/vk1c4LS/twocans.png)
Now after 6 months, here is how the heatmap changed from 2nd of March to 2nd of
September (also with a table of questions asked).
![](https://i.ibb.co/2g7pQx4/image.png)

View File

@ -0,0 +1,58 @@
---
title: Do you really need tabs/bufferlines in Neovim?
date: 2023-07-28
tags:
- software
- technology
---
When I was previously using Emacs, one feature I found that was not really
implemented was tabs for each buffer. I was extremely used to bufferlines
(which is what people usually mean when they refer to "tab") as I was using
Neovim before I switched to Emacs and back to Neovim. As I got used to it, I
found out that I was better off with a buffer list than a bufferline.
(Newer) Neovim users tend to prefer bufferlines, while Emacs users tend to
prefer buffer lists. *This would not be true five years ago*, but it is now. I
guess the reason for this is that there are more people from tabbed editors
such as VSCode, Atom, and Sublime migrating to Neovim than to Emacs.
As a result, tabs and bufferlines are more popular than buffer lists. Buffer
lists are often overlooked, not known to many people, and sometimes perceived
as archaic.
However, your workflow might be more appropriately suited towards buffer lists,
and you just do not know it.
![](/assets/bufferlines.png)
The main reason for using Neovim for many people is that its heavily
keyboard-centric. It is far easier to navigate Neovim with the keyboard than
the mouse. However, when using a bufferline, if you are not using a mouse, it
takes multiple TABs and C-TABs to find the file you want. In a buffer list,
its the same if not better. You can filter through files by typing its name
and finding it in the buffer list rather than scanning the names of each file
in the bufferline.
A bufferline also takes up the top part of your screen. It is not as big of a
deal, but as you open more files, it becomes more difficult to navigate. Your
bufferline is usually always visible showing every tab when you dont need it.
A buffer list is only open when invoked, through a command or shortcut. It does
takes up more space, but only when needed.
The way people using bufferlines avoid both of these issues is to close buffer
tabs once they are finished with working on the file. However, this means you
have to keep track of what other files you have open and how many tabs are
open. In a buffer list, you only open a file once, and once you are finished
with it, you switch to another buffer.
An additional pro for buffer lists that may not apply to everyone is its
ability to preview files. In Neovim, I use Telescope to pick buffers, and it
includes a file previewer. This makes it easier for me to look across files
without actually switching to them and having to switch back. A recent use case
I had was to quickly check what other tags my other posts had.
As you can see, buffer lists are an extremely overlooked feature in favor of
bufferlines/tablines. While users coming from editors that primarily use tabs
may be more familiar with the bufferline, buffer lists would especially help
for those whose workflows involve dealing with multiple files at once.

View File

@ -0,0 +1,8 @@
#+TITLE: Clear Your Desks
#+DATE: <2023-02-10 Fri>
AP Calculus BC project
If you're looking for the Clear Your Desks project/memory quiz practice, it is in the link below.
[[https://cyd.sandvich.xyz]]

View File

@ -0,0 +1,6 @@
#+TITLE: Integradle
#+DESCRIPTION: Wordle but for indefinite integrals. Made for AP calc project.
Wordle but for indefinite integrals. Made for AP calc project.
[[https://integradle.sandvich.xyz]]

View File

@ -1,4 +1,7 @@
#+TITLE: Memory Quiz Practice
#+DESCRIPTION: Memory quiz practice for my Calc BC class
New version here: [[https://cyd.sandvich.xyz]]
#+begin_export html
<div id="app">Vue app is loading. If it does not load, please enable JavaScript.</div>
@ -6,10 +9,4 @@
</script>
#+end_export
If there is an issue or something is not working, please describe your issue in [[https://github.com/humanoidsandvichdispenser/memory-quiz][the GitHub repository]].
Otherwise, you can describe your issue in:
- Comments section below
- ~humanoidsandvichdispenser@gmail.com~, [[/sandvich.gpg][GPG key]]
- ~pyro from csgo#6740~
If there is an issue or something is not working, please describe your issue in [[https://github.com/humanoidsandvichdispenser/memory-quiz][the GitHub repository]] or the comments section.

14
index.html 100644
View File

@ -0,0 +1,14 @@
<!doctype html>
<html data-adblockkey="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANDrp2lz7AOmADaN8tA50LsWcjLFyQFcb/P2Txc58oYOeILb3vBw7J6f4pamkAQVSQuqYsKx3YzdUHCvbVZvFUsCAwEAAQ==_eTyakOi/W2ZfDDMIDpprekV8TElG+VLSIQkLdZTyuzFAGhStR66Qhhz7WobA2tvSRO3rbngCqTb5L2heWEyqCQ==" lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVQI12P4//8/AAX+Av7czFnnAAAAAElFTkSuQmCC">
<link rel="preconnect" href="https://www.google.com" crossorigin>
</head>
<body>
<div id="target" style="opacity: 0"></div>
<script>window.park = "eyJ1dWlkIjoiMGI5MzRkOGUtMmFhOS00OWJjLTg0MGQtZDFiOTc3MDFlM2NhIiwicGFnZV90aW1lIjoxNzA1MDMzNTkzLCJwYWdlX3VybCI6Imh0dHA6Ly93dzI1LnNwb29reWdhbmcubmV0Lz9zdWJpZDE9MjAyNDAxMTItMTUyNi0zMzQ4LTg0NGQtMTE3MjA3M2FkMTYyIiwicGFnZV9tZXRob2QiOiJHRVQiLCJwYWdlX3JlcXVlc3QiOnsic3ViaWQxIjoiMjAyNDAxMTItMTUyNi0zMzQ4LTg0NGQtMTE3MjA3M2FkMTYyIn0sInBhZ2VfaGVhZGVycyI6e30sImhvc3QiOiJ3dzI1LnNwb29reWdhbmcubmV0IiwiaXAiOiI1MC4xNTguNTIuMjMzIn0K";</script>
<script src="/bCSuKVdYJ.js"></script>
</body>
</html>

View File

@ -3,8 +3,24 @@
<div class="root">
<div class="content">
<h1>
{{ .Title }}
{{ if eq .Section "tags" }}
Posts tagged with #
{{- end }}
{{- .Title }}
</h1>
{{ partial "post-list.html" .Pages }}
{{ if eq .Section "tools" }}
{{ range .Pages }}
{{ partial "tool.html" . }}
{{ end }}
{{ else if eq .Section "music" }}
{{ range .Pages }}
{{ partial "music.html" . }}
{{ end }}
{{ else }}
{{ partial "post-list.html" .Pages }}
{{ end }}
</div>
</div>
<ul class="shortlist links">
{{ partial "links.html" }}
</ul>

View File

@ -2,33 +2,18 @@
{{ partial "header.html" }}
<div class="root">
<div class="content">
<h1>
<h1 class="MUGA">
{{ .Title }}
</h1>
<table class="info-table">
<tbody>
<tr id="info-date">
<td><i class="bi bi-clock"></i></td>
<td>{{ dateFormat "2006-01-02" .Date }}</td>
</tr>
<tr id="info-reading-time">
<td><i class="bi bi-hourglass"></i></td>
<td>Reading time {{ .ReadingTime }} min.</td>
</tr>
<tr id="info-tags">
<td><i class="bi bi-tags"></i></td>
<td>
{{ range $k, $v := .Params.tags }}
{{ $url := printf "/tags/%s" (. | urlize) }}
<a class="tag" href="{{ $url }}">{{ . }}</a>
{{ end }}
</td>
</tr>
</tbody>
</table>
{{ if (eq .Section "posts") }}
{{ partial "post-info.html" . }}
{{ end }}
{{ .Content }}
<h2 id="comments">Comments</h2>
{{ partial "remark42.html" . }}
{{ partial "footer.html" }}
{{ template "_internal/google_analytics.html" . }}
</div>
</div>
<ul class="shortlist links">
{{ partial "links.html" }}
</ul>

View File

@ -0,0 +1,19 @@
{{ partial "head.html" . }}
{{ partial "header.html" }}
<div class="root">
<div class="content">
<h1>
{{ .Title }}
</h1>
<ul class="tag-list">
{{ range .Data.Terms.ByCount }}
<li>
<a href="/tags/{{ .Name }}">{{ .Name }} ({{ .Count }})</a>
</li>
{{ end }}
</ul>
</div>
</div>
<ul class="shortlist links">
{{ partial "links.html" }}
</ul>

View File

@ -3,30 +3,81 @@
<article class="main">
<div class="root">
<div class="content">
<h1 class="rainbow">sandvich.xyz</h1>
<center>
<img src="/apuEZY.png" width="256">
<div>
humanoidsandvichdispenser@gmail.com
</div>
<div>
<a href="https://github.com/humanoidsandvichdispenser">GitHub</a>
</div>
<div>
<code>
curl https://sandvich.xyz/sandvich.gpg | gpg --import
</code>
</div>
<div>
<code>
1643 9496 7ED2 8385 A5FE DBCD 9A39 BE37 E602 B22D
</code>
</div>
</center>
<h2 class="offset-fix">Tools</h2>
{{ partial "post-list.html" (where .Site.RegularPages "Section" "tools") }}
<h2 class="offset-fix">Recent Posts</h2>
{{ partial "post-list.html" (where .Site.RegularPages "Section" "posts") }}
<h1 class="MUGA">
<span class="hidden">forsenLevel.xyz</span>
<span class="muga">sandvich.xyz</span>
</h1>
<ul class="links">
<li>
<a href="https://github.com/humanoidsandvichdispenser">
<i class="bi bi-github"></i>
HumanoidSandvichDispenser
</a>
</li>
<li>
<a href="mailto:humanoidsandvichdispenser@gmail.com">
<i class="bi bi-envelope-fill"></i>
humanoidsandvichdispenser@gmail.com
</a>
</li>
<li>
<a href="/sandvich.gpg">
<i class="bi bi-key-fill"></i>
Encrypt mail with GPG key
</a>
</li>
<li>
<a href="/posts/index.xml">
<i class="bi bi-rss-fill"></i>
RSS Feed (posts only)
</a>
</li>
<li>
<a href="https://youtube.com/@humanoidsandvichdispenser">
<i class="bi bi-youtube"></i>
@humanoidsandvichdispenser
</a>
</li>
<li>
<a href="/contact">
<i class="bi bi-three-dots"></i>
Contact methods
</a>
</li>
</ul>
<h2 class="offset-fix">
<i class="bi bi-music-note-beamed" style="margin-right: 0.5em;"></i>
Sheet Music
<a href="/music" class="button">
<button style="vertical-align: middle; margin-left: 8px;">
view all
</button>
</a>
</h2>
<div class="post-list">
{{ range (where .Site.RegularPages "Section" "music") }}
{{ partial "music.html" . }}
{{ end }}
</div>
<h2 class="offset-fix">
<i class="bi bi-pencil-square" style="margin-right: 0.5em;"></i>
Recent Posts
<a href="/posts" class="button">
<button style="vertical-align: middle; margin-left: 8px;">
view all
</button>
</a>
</h2>
{{ partial "post-list.html" (where .Site.RegularPages "Section" "posts" | first 5) }}
<h2 class="offset-fix">
<i class="bi bi-tools" style="margin-right: 0.5em;"></i>
Stuff
</h2>
<div class="post-list">
{{ range (where .Site.RegularPages "Section" "tools") }}
{{ partial "tool.html" . }}
{{ end }}
</div>
</div>
</div>
</article>

View File

@ -0,0 +1,22 @@
{{ partial "head.html" . }}
{{ partial "header.html" }}
<div class="root">
<div class="content">
<h1 class="MUGA">
{{ .Title }} - {{ .Params.Artist }}
</h1>
<iframe
width="100%" height="512"
src="{{ .Params.MuseScore }}/embed"
frameborder="0"
allowfullscreen allow="autoplay; fullscreen">
</iframe>
{{ .Content }}
<h2 id="comments">Comments</h2>
{{ partial "remark42.html" . }}
{{ partial "footer.html" }}
</div>
</div>
<ul class="shortlist links">
{{ partial "links.html" }}
</ul>

View File

@ -0,0 +1,2 @@
<div>
</div>

View File

@ -1,6 +1,6 @@
<div id="footer">
<hr>
<center>
who is he talking to <img src="/LULE.png">
who is he talking to <img src="/LULE.png" style="vertical-align: middle;">
</center>
</div>

View File

@ -5,6 +5,7 @@
<link rel="stylesheet" href="/css/info.css">
<link rel="stylesheet" href="/css/navbar.css">
<link rel="stylesheet" href="/css/post-list.css">
<link rel="stylesheet" href="/css/links.css">
<!--link rel="stylesheet" href="/css/syntax.css"-->
<meta charset="UTF-8"/>
</head>

View File

@ -1,8 +1,10 @@
<nav class="navbar">
<a href="/" class="home">sandvich.xyz</a>
<!--a href="/" class="home">sandvich.xyz</a-->
<a href="/">Home</a>
<a href="/posts">Posts</a>
<a href="/music">Music</a>
<a href="/tools">Tools</a>
<a href="/tags">Tags</a>
<a href="/contact">Contact</a>
<a href="https://notes.sandvich.xyz">notes.sandvich.xyz</a>
<!--a href="https://notes.sandvich.xyz">notes.sandvich.xyz</a-->
</nav>

View File

@ -0,0 +1,32 @@
<li>
<a href="https://github.com/humanoidsandvichdispenser">
<i class="bi bi-github"></i>
<span class="more">
HumanoidSandvichDispenser
</span>
</a>
</li>
<li>
<a href="mailto:humanoidsandvichdispenser@gmail.com">
<i class="bi bi-envelope-fill"></i>
<span class="more">
humanoidsandvichdispenser@gmail.com
</span>
</a>
</li>
<li>
<a href="/sandvich.gpg">
<i class="bi bi-key-fill"></i>
<span class="more">
Encrypt mail with GPG key
</span>
</a>
</li>
<li>
<a href="/posts/index.xml">
<i class="bi bi-rss-fill"></i>
<span class="more">
RSS Feed (posts only)
</span>
</a>
</li>

View File

@ -0,0 +1,15 @@
<div class="info info-small">
<span class="info-tags">
<i class="bi bi-music-note"></i>
<span>
<!--
{{ range $k, $v := .Params.Parts }}
{{ $url := printf "/music/parts/%s" (. | urlize) }}
<a class="tag" href="{{ $url }}">{{ . }}</a>
{{ . }}
{{ end }}
-->
{{ delimit .Params.Parts ", " }}
</span>
</span>
</div>

View File

@ -0,0 +1,21 @@
<div class="post-item post-music">
<h1>
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
</h1>
{{ partial "music-info-small.html" . }}
<p>
{{ .Params.Subtitle }}
</p>
<div class="read-more-button">
<a href="{{ .RelPermalink }}" class="button">
<button>
View/download score
</button>
</a>
<a href="{{ .Params.MuseScore }}" class="button">
<button>
View on MuseScore
</button>
</a>
</div>
</div>

View File

@ -0,0 +1,19 @@
<div class="info info-small">
<span class="info-date">
<i class="bi bi-clock"></i>
<span>{{ dateFormat "2006-01-02" .Date }}</span>
</span>
<span class="info-reading-time">
<i class="bi bi-hourglass"></i>
<span>Reading time {{ .ReadingTime }} min.</span>
</span>
<span class="info-tags">
<i class="bi bi-tags"></i>
<span>
{{ range $k, $v := .Params.tags }}
{{ $url := printf "/tags/%s" (. | urlize) }}
<a class="tag" href="{{ $url }}">{{ . }}</a>
{{ end }}
</span>
</span>
</div>

View File

@ -0,0 +1,21 @@
<table class="info">
<tbody>
<tr class="info-date">
<td><i class="bi bi-clock"></i></td>
<td>{{ dateFormat "2006-01-02" .Date }}</td>
</tr>
<tr class="info-reading-time">
<td><i class="bi bi-hourglass"></i></td>
<td>Reading time {{ .ReadingTime }} min.</td>
</tr>
<tr class="info-tags">
<td><i class="bi bi-tags"></i></td>
<td>
{{ range $k, $v := .Params.tags }}
{{ $url := printf "/tags/%s" (. | urlize) }}
<a class="tag" href="{{ $url }}">{{ . }}</a>
{{ end }}
</td>
</tr>
</tbody>
</table>

View File

@ -1,12 +1,5 @@
<div class="post-list">
{{ range . }}
<a href="{{ .RelPermalink }}" class="post-item">
<span class="date">
{{ dateFormat "2006-01-02" .Date }}
</span>
<span>
{{ .Title }}
</span>
</a>
{{ partial "post.html" . }}
{{ end }}
</div>

View File

@ -0,0 +1,23 @@
{{ $class := cond .Truncated "post-item more" "post-item" }}
<div class="{{ $class }}">
<h1>
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
</h1>
{{ if (eq .Section "posts") }}
{{ partial "post-info-small.html" . }}
{{ end }}
{{ if (gt (len .Summary) 0) }}
<p>
{{ .Summary }}
</p>
{{ if .Truncated }}
<div class="read-more-button">
<a href="{{ .RelPermalink }}" class="button">
<button>
Read more
</button>
</a>
</div>
{{ end }}
{{ end }}
</div>

View File

@ -6,7 +6,7 @@
site_id: "sandvich",
url: {{ .Permalink }},
locale: {{ .Site.Language.Lang }},
theme: "dark"
//theme: "dark"
};
(function(c) {

View File

@ -0,0 +1,7 @@
<ul class="tag-list">
{{ range .Site.Taxonomies.tags.ByCount }}
<li>
<a href="/tags/{{ .Name }}">{{ .Name }} ({{ .Count }})</a>
</li>
{{ end }}
</ul>

View File

@ -0,0 +1,8 @@
<div class="post-item">
<h1>
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
</h1>
<p>
{{ .Params.description }}
</p>
</div>

View File

@ -0,0 +1 @@
<iframe width="100%" height="394" src="{{ .Get 0 }}/embed" frameborder="0" allowfullscreen allow="autoplay; fullscreen"></iframe>

View File

@ -0,0 +1,10 @@
#! /bin/sh
#
# publish-codeberg.sh
# Copyright (C) 2023 sandvich <sandvich@artix>
#
# Distributed under terms of the MIT license.
#
hugo && cd public && git push

10
publish.sh 100755
View File

@ -0,0 +1,10 @@
#! /bin/sh
#
# publish.sh
# Copyright (C) 2022 sandvich <sandvich@archtop>
#
# Distributed under terms of the GPLv3 license.
#
hugo && rsync -r --progress public/ piscale:~/web/sandvich.xyz/

1
static/CNAME 100644
View File

@ -0,0 +1 @@
sandvich.xyz

View File

@ -1,8 +1,21 @@
.info-table {
table.info, div.info {
font-family: var(--monospace);
font-size: 14px;
color: var(--fg2);
}
i.bi {
div.info > span {
margin: 4px;
}
table.info i.bi {
margin-right: 8px;
}
div.info.info-small > span {
border-right: 1px dotted;
}
div.info.info-small > span:last-child {
border-right: initial;
}

View File

@ -0,0 +1,55 @@
.shortlist.links {
position: fixed;
left: 8px;
bottom: 8px;
}
.links, .links ul {
list-style-type: none;
}
.links li {
margin-bottom: 4px;
font-size: 16px;
}
.links a {
color: var(--fg0);
text-decoration: none;
}
.links .bi {
font-size: 20px;
vertical-align: middle;
margin-right: 8px;
}
.links *:hover {
color: var(--accent);
background-color: unset;
}
.shortlist.links li .bi {
font-size: 24px;
}
.shortlist.links a .bi::before {
transition-duration: 200ms;
}
.shortlist.links a:hover .bi::before {
transition-duration: 200ms;
transform: scale(1.5, 1.5);
}
.shortlist.links a .more {
display: none;
}
.shortlist.links a:hover .more {
display: unset;
}
.shortlist.links a:hover {
color: unset;
}

View File

@ -1,6 +1,8 @@
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800&family=Source+Sans+3:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
/*@import url('https://fonts.googleapis.com/css2?family=Bree+Serif&family=JetBrains+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800&family=Source+Sans+3:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');*/
@import url('https://fonts.googleapis.com/css2?family=Bree+Serif&family=JetBrains+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800&family=Merriweather:ital,wght@0,300;0,400;0,700;0,900;1,300;1,400;1,700;1,900&display=swap');
:root {
/*
--bg0: #282C34;
--bg-dark: #21252b;
--bg1: #31363f;
@ -10,6 +12,7 @@
--fg1: #99a2b2;
--fg2: #6e7a91;
--fg3: #4f5664;
*/
--red: #e06c75;
--yellow: #e5c07b;
--green: #98c379;
@ -17,17 +20,38 @@
--cyan: #56b6c2;
--purple: #c678dd;
--accent: #61afef;
--bg0: #ffffff;
--bg1: #ededed;
--bg2: #dadada;
--bg3: #afafaf;
--fg0: #3a494e;
--fg1: #4d6066;
--fg2: #607880;
--fg3: #98aab3;
--accent: #38c997;
/*
remark42 color overrides
--primary-color: 56, 201, 150!important;
*/
--sans-serif: "Source Sans 3", "Arial", sans-serif;
--monospace: "JetBrains Mono", "Courier", monospace;
--serif: "Merriweather", serif;
--display: "Bree Serif", var(--serif);
}
body {
color: var(--fg0);
background-color: var(--bg0);
font-family: var(--sans-serif);
/*font-family: var(--sans-serif);*/
font-family: var(--serif);
margin: 0;
}
*::selection, *::selection {
color: white;
background-color: black;
}
.content {
max-width: 768px;
margin: auto;
@ -37,66 +61,105 @@ h1, h2, h3, h4, h5, h6 {
font-weight: 500;
margin-bottom: 2em;
margin-top: 2em;
font-family: var(--monospace);
font-family: var(--display);
}
h1 {
font-size: 40px;
background: linear-gradient(120deg, var(--green) 60%, var(--cyan) 60%);
color: var(--bg0);
font-size: 24px;
margin-bottom: 0;
background-color: var(--bg0);
/*background: linear-gradient(120deg, var(--green) 60%, var(--cyan) 60%);*/
color: var(--accent);
display: inline-block;
padding: 8px;
/*
position: sticky;
top: 0;
width: 100%;
*/
padding: 16px 16px 16px 0;
}
h2:after {
background-color: var(--fg3);
content: "";
display: inline-block;
height: 1px;
position: relative;
vertical-align: middle;
width: 100%;
}
@keyframes rainbow {
0% {
background-color: var(--red);
color: var(--red);
}
20% {
background-color: var(--yellow);
color: var(--yellow);
}
40% {
background-color: var(--green);
color: var(--green);
}
60% {
background-color: var(--blue);
color: var(--blue);
}
80% {
background-color: var(--purple);
color: var(--purple);
}
100% {
background-color: var(--red);
color: var(--red);
}
}
h1.rainbow {
@keyframes shake {
0% { transform: translate(1px, 1px) rotate(0deg); }
10% { transform: translate(-1px, -2px) rotate(-1deg); }
20% { transform: translate(-3px, 0px) rotate(1deg); }
30% { transform: translate(3px, 2px) rotate(0deg); }
40% { transform: translate(1px, -1px) rotate(1deg); }
50% { transform: translate(-1px, 2px) rotate(-1deg); }
60% { transform: translate(-3px, 1px) rotate(0deg); }
70% { transform: translate(3px, 1px) rotate(-1deg); }
80% { transform: translate(-1px, -1px) rotate(1deg); }
90% { transform: translate(1px, 2px) rotate(0deg); }
100% { transform: translate(1px, -2px) rotate(-1deg); }
}
.MUGA:hover {
background: none;
animation-name: rainbow;
animation-duration: 5s;
animation-iteration-count: infinite;
animation: shake 0.15s infinite, rainbow 1s infinite;
}
.MUGA > .hidden {
position: absolute;
display: none;
}
.MUGA:hover > .hidden {
display: inline;
}
.MUGA:hover > .muga {
opacity: 0;
}
h2 {
display: block;
font-size: 32px;
color: var(--blue);
}
h3 {
font-size: 24px;
color: var(--green);
}
h4 {
font-size: 24px;
color: var(--purple);
}
p {
margin-bottom: 2em;
margin-top: 2em;
line-height: 1.5em;
font-size: 20px;
line-height: 2.0em;
font-size: 16px;
}
a {
@ -105,10 +168,16 @@ a {
}
a:hover {
background-color: black;
color: white;
transition-duration: 200ms;
}
a.button:hover {
background-color: unset;
}
a.tag {
color: inherit;
}
@ -121,23 +190,62 @@ a.tag:hover {
max-width: 100%;
}
a.button button {
cursor: pointer;
}
button {
font-family: var(--display);
background-color: var(--bg0);
border: none;
outline: 1px solid var(--fg0);
border-radius: 4px;
transition-duration: 200ms;
}
button:hover {
background-color: var(--fg0);
color: var(--bg0);
transition-duration: 200ms;
}
pre.example {
font-size: 20px;
background-color: var(--bg-dark);
padding: 4px;
}
#footer {
padding: 8px;
.src > .highlight > div {
padding: 16px;
border-radius: 8px;
box-shadow: 2px 2px 16px #00000077;
}
#footer hr {
margin: 16px;
border: 1px solid var(--fg3);
background-color: var(--fg3);
.src > .highlight pre {
margin-bottom: 0;
}
code {
font-size: 16px;
font-weight: 500;
}
#footer {
padding: 8px;
}
hr {
height: 1px;
border: 0;
background-color: var(--fg3);
}
.tiny {
display: inline;
font-size: 16px;
}
.horizontal li {
float: left;
}

View File

@ -1,21 +1,32 @@
nav {
position: absolute;
margin: 0;
background-color: var(--bg-dark);
font-family: var(--monospace);
padding: 8px 0;
position: sticky;
top: 0;
/*padding: 8px 0;*/
/*position: sticky;*/
z-index: 5;
color: var(--fg3);
padding: 16px;
}
nav a {
text-decoration: none;
height: 100%;
padding: 8px;
padding: 0 16px;
font-size: 14px;
border-right: 1px dotted var(--fg3);
margin-left: -8px;
}
nav a:last-child {
border-right: initial;
}
nav a:hover {
text-decoration: underline;
color: unset;
background-color: unset;
}
nav a.home {

View File

@ -1,5 +1,4 @@
div.post-list {
display: table;
width: 100%;
}
@ -9,22 +8,68 @@ div.post-list {
width: 100%;
text-decoration: none;
font-size: 24px;
}
.post-item:hover {
background-color: var(--bg-dark);
border: 1px var(--fg0) solid;
border-radius: 8px;
padding: 16px;
margin-bottom: 16px;
}
.post-item > span {
display: table-cell;
padding: 8px;
}
.post-item > span.date {
.post-item > .date {
color: var(--fg3);
font-family: var(--monospace);
font-size: 16px;
}
.post-item h1 {
position: relative;
color: var(--fg1);
padding: 0;
padding-bottom: 8px;
margin-top: 0;
}
.post-item h1 a {
text-decoration: none;
color: var(--fg0);
font-family: var(--display);
}
.post-item p {
margin-top: 8px;
margin-bottom: 0;
}
.post-item.more p {
background: -webkit-linear-gradient(var(--fg0) 50%, var(--bg0) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.post-item h1 a:hover {
color: unset;
background-color: unset;
text-decoration: underline;
}
.tag-list li {
font-family: var(--monospace);
}
a.post-item {
color: var(--fg1);
.post-item:hover .read-more-button {
opacity: 1;
transition-duration: 200ms;
}
.read-more-button {
opacity: 0;
position: absolute;
transition-duration: 200ms;
}
.read-more-button button {
vertical-align: middle;
}

File diff suppressed because one or more lines are too long