Compare commits
11 Commits
0355a63938
...
8ef38e3876
Author | SHA1 | Date |
---|---|---|
John Montagu, the 4th Earl of Sandvich | 8ef38e3876 | |
John Montagu, the 4th Earl of Sandvich | 8a52e5752b | |
John Montagu, the 4th Earl of Sandvich | a5adc4672c | |
HumanoidSandvichDispenser | ecbbb5615c | |
John Montagu, the 4th Earl of Sandvich | d6def0b961 | |
John Montagu, the 4th Earl of Sandvich | d0b550789d | |
HumanoidSandvichDispenser | 426389c078 | |
HumanoidSandvichDispenser | 3f0d96ba61 | |
John Montagu, the 4th Earl of Sandvich | 2049db1f5e | |
John Montagu, the 4th Earl of Sandvich | 4d36ed7206 | |
HumanoidSandvichDispenser | 30b1a521b6 |
|
@ -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
|
26
config.yml
|
@ -3,21 +3,19 @@ languageCode: "en-us"
|
||||||
title: "sandvich.xyz"
|
title: "sandvich.xyz"
|
||||||
|
|
||||||
taxonomies:
|
taxonomies:
|
||||||
tag: tags
|
tag: tags
|
||||||
|
|
||||||
Params:
|
Params:
|
||||||
remark42SiteID = "sandvich"
|
remark42SiteID: "sandvich"
|
||||||
remark42Url = "https://remark42.sandvich.xyz"
|
remark42Url: "https://remark42.sandvich.xyz"
|
||||||
|
|
||||||
markup:
|
markup:
|
||||||
highlight:
|
highlight:
|
||||||
codeFences: true
|
codeFences: true
|
||||||
hl_Lines: ""
|
hl_Lines: ""
|
||||||
hl_inline: false
|
hl_inline: false
|
||||||
lineNoStart: 1
|
lineNoStart: 1
|
||||||
lineNos: true
|
lineNos: true
|
||||||
lineNumbersInTable: true
|
lineNumbersInTable: true
|
||||||
tabWidth: 4
|
tabWidth: 4
|
||||||
style: "doom-one"
|
style: "dracula"
|
||||||
|
|
||||||
googleAnalytics: "G-PD0SR7PGT8"
|
|
||||||
|
|
After Width: | Height: | Size: 134 KiB |
After Width: | Height: | Size: 647 KiB |
After Width: | Height: | Size: 253 KiB |
After Width: | Height: | Size: 202 KiB |
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 349 KiB |
After Width: | Height: | Size: 251 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 806 KiB |
After Width: | Height: | Size: 110 KiB |
After Width: | Height: | Size: 528 KiB |
After Width: | Height: | Size: 203 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 287 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 708 KiB |
After Width: | Height: | Size: 335 KiB |
After Width: | Height: | Size: 226 KiB |
After Width: | Height: | Size: 44 KiB |
|
@ -6,15 +6,16 @@
|
||||||
|
|
||||||
~humanoidsandvichdispenser@gmail.com~
|
~humanoidsandvichdispenser@gmail.com~
|
||||||
|
|
||||||
Encrypt with [[https://sandvich.xyz/sandvich.gpg][GPG key]] \\
|
[[https://sandvich.xyz/sandvich.gpg][Click here to download GPG key]] or use
|
||||||
~curl https://sandvich.xyz/sandvich.gpg | gpg --import~ \\
|
the command below to import: \\
|
||||||
~1643 9496 7ED2 8385 A5FE DBCD 9A39 BE37 E602 B22D~
|
~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/Matrix
|
||||||
|
|
||||||
Discord: ~pyro from csgo#6740~ \\
|
Discord: ~pyrofromcsgo~ \\
|
||||||
Matrix: ~@humanoidsandvichdispenser:matrix.org~
|
Matrix: ~@humanoidsandvichdispenser:matrix.org~
|
||||||
|
|
||||||
* Other
|
* Other
|
||||||
|
|
|
@ -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.
|
|
@ -0,0 +1,2 @@
|
||||||
|
#+TITLE: Login to Canvas with this One Trick! 😱😱 (Teachers HATE HIM)
|
||||||
|
#+DRAFT: true
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
|
@ -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.
|
|
@ -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)
|
|
@ -0,0 +1,2 @@
|
||||||
|
#+title: dinit
|
||||||
|
#+draft: true
|
|
@ -1,6 +1,6 @@
|
||||||
#+TITLE: Discord Sucks
|
#+TITLE: Discord SUCKS!!! 😡😡💥
|
||||||
#+DATE: <2022-09-17 Sat>
|
#+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.
|
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).
|
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.
|
* 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.
|
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.
|
||||||
|
|
|
@ -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?
|
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
|
** 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?"
|
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.
|
||||||
|
|
|
@ -1,65 +1,30 @@
|
||||||
#+TITLE: Duolingo is a Video Game
|
#+TITLE: Duolingo is a Video Game
|
||||||
#+DATE: <2022-09-11 Sun>
|
#+DATE: <2022-09-11 Sun>
|
||||||
#+TAGS[]: language
|
#+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.
|
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.
|
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.
|
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]].
|
||||||
|
|
||||||
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 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.
|
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
|
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.
|
||||||
Marcus does not live by himself.
|
|
||||||
#+end_quote
|
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
* What should I use Duolingo for then?
|
* 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]].
|
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]].
|
||||||
|
|
|
@ -1,16 +1,13 @@
|
||||||
#+TITLE: Everyone should learn C
|
#+TITLE: Everyone should learn C
|
||||||
#+DATE: <2022-09-12 Mon>
|
#+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."
|
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.
|
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?
|
||||||
|
|
||||||
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?
|
|
||||||
|
|
||||||
* You will start thinking like a computer
|
* 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.
|
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
|
* 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.
|
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.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#+TITLE: The Fish and Young Argument
|
#+TITLE: The Fish and Young Argument
|
||||||
#+DATE: <2022-09-09 Fri>
|
#+DATE: <2022-09-09 Fri>
|
||||||
#+TAGS: english language
|
#+TAGS[]: english language
|
||||||
|
|
||||||
What is the write way to right?
|
What is the write way to right?
|
||||||
|
|
||||||
|
|
|
@ -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)
|
|
@ -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
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#+TITLE: If you write websites in Org Mode...
|
#+TITLE: If you write websites in Org Mode...
|
||||||
#+DATE: <2022-09-10 Sat>
|
#+DATE: <2022-09-10 Sat>
|
||||||
#+TAGS[]: emacs tutorial
|
#+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.
|
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.
|
||||||
|
|
|
@ -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]]
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
||||||
|
#+TITLE: 18:10
|
||||||
|
#+DATE: <2023-03-22 Wed>
|
||||||
|
|
||||||
|
NEVER DOUBT
|
|
@ -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 "
|
|
@ -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
|
|
@ -1,6 +1,6 @@
|
||||||
#+TITLE: Schule
|
#+TITLE: Schule
|
||||||
#+DATE: <2022-08-27 Sat>
|
#+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!"
|
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.
|
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."
|
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.
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#+TITLE: Software I Use/Recommend
|
#+TITLE: Software I Use/Recommend
|
||||||
#+DATE: <2022-09-05 Mon>
|
#+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).
|
Dotfiles can be viewed [[https://github.com/humanoidsandvichdispenser/dotfiles][here]] (emacs config in a separate repo).
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
**
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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)
|
|
@ -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 it’s 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,
|
||||||
|
it’s 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 don’t 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.
|
|
@ -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]]
|
|
@ -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]]
|
|
@ -1,4 +1,7 @@
|
||||||
#+TITLE: Memory Quiz Practice
|
#+TITLE: Memory Quiz Practice
|
||||||
|
#+DESCRIPTION: Memory quiz practice for my Calc BC class
|
||||||
|
|
||||||
|
New version here: [[https://cyd.sandvich.xyz]]
|
||||||
|
|
||||||
#+begin_export html
|
#+begin_export html
|
||||||
<div id="app">Vue app is loading. If it does not load, please enable JavaScript.</div>
|
<div id="app">Vue app is loading. If it does not load, please enable JavaScript.</div>
|
||||||
|
@ -6,10 +9,4 @@
|
||||||
</script>
|
</script>
|
||||||
#+end_export
|
#+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]].
|
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.
|
||||||
|
|
||||||
Otherwise, you can describe your issue in:
|
|
||||||
|
|
||||||
- Comments section below
|
|
||||||
- ~humanoidsandvichdispenser@gmail.com~, [[/sandvich.gpg][GPG key]]
|
|
||||||
- ~pyro from csgo#6740~
|
|
||||||
|
|
|
@ -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>
|
|
@ -3,8 +3,24 @@
|
||||||
<div class="root">
|
<div class="root">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h1>
|
<h1>
|
||||||
{{ .Title }}
|
{{ if eq .Section "tags" }}
|
||||||
|
Posts tagged with #
|
||||||
|
{{- end }}
|
||||||
|
{{- .Title }}
|
||||||
</h1>
|
</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>
|
||||||
</div>
|
</div>
|
||||||
|
<ul class="shortlist links">
|
||||||
|
{{ partial "links.html" }}
|
||||||
|
</ul>
|
||||||
|
|
|
@ -2,33 +2,18 @@
|
||||||
{{ partial "header.html" }}
|
{{ partial "header.html" }}
|
||||||
<div class="root">
|
<div class="root">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h1>
|
<h1 class="MUGA">
|
||||||
{{ .Title }}
|
{{ .Title }}
|
||||||
</h1>
|
</h1>
|
||||||
<table class="info-table">
|
{{ if (eq .Section "posts") }}
|
||||||
<tbody>
|
{{ partial "post-info.html" . }}
|
||||||
<tr id="info-date">
|
{{ end }}
|
||||||
<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>
|
|
||||||
{{ .Content }}
|
{{ .Content }}
|
||||||
|
<h2 id="comments">Comments</h2>
|
||||||
{{ partial "remark42.html" . }}
|
{{ partial "remark42.html" . }}
|
||||||
{{ partial "footer.html" }}
|
{{ partial "footer.html" }}
|
||||||
{{ template "_internal/google_analytics.html" . }}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<ul class="shortlist links">
|
||||||
|
{{ partial "links.html" }}
|
||||||
|
</ul>
|
||||||
|
|
|
@ -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>
|
|
@ -3,30 +3,81 @@
|
||||||
<article class="main">
|
<article class="main">
|
||||||
<div class="root">
|
<div class="root">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h1 class="rainbow">sandvich.xyz</h1>
|
<h1 class="MUGA">
|
||||||
<center>
|
<span class="hidden">forsenLevel.xyz</span>
|
||||||
<img src="/apuEZY.png" width="256">
|
<span class="muga">sandvich.xyz</span>
|
||||||
<div>
|
</h1>
|
||||||
humanoidsandvichdispenser@gmail.com
|
<ul class="links">
|
||||||
</div>
|
<li>
|
||||||
<div>
|
<a href="https://github.com/humanoidsandvichdispenser">
|
||||||
<a href="https://github.com/humanoidsandvichdispenser">GitHub</a>
|
<i class="bi bi-github"></i>
|
||||||
</div>
|
HumanoidSandvichDispenser
|
||||||
<div>
|
</a>
|
||||||
<code>
|
</li>
|
||||||
curl https://sandvich.xyz/sandvich.gpg | gpg --import
|
<li>
|
||||||
</code>
|
<a href="mailto:humanoidsandvichdispenser@gmail.com">
|
||||||
</div>
|
<i class="bi bi-envelope-fill"></i>
|
||||||
<div>
|
humanoidsandvichdispenser@gmail.com
|
||||||
<code>
|
</a>
|
||||||
1643 9496 7ED2 8385 A5FE DBCD 9A39 BE37 E602 B22D
|
</li>
|
||||||
</code>
|
<li>
|
||||||
</div>
|
<a href="/sandvich.gpg">
|
||||||
</center>
|
<i class="bi bi-key-fill"></i>
|
||||||
<h2 class="offset-fix">Tools</h2>
|
Encrypt mail with GPG key
|
||||||
{{ partial "post-list.html" (where .Site.RegularPages "Section" "tools") }}
|
</a>
|
||||||
<h2 class="offset-fix">Recent Posts</h2>
|
</li>
|
||||||
{{ partial "post-list.html" (where .Site.RegularPages "Section" "posts") }}
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
|
|
|
@ -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>
|
|
@ -0,0 +1,2 @@
|
||||||
|
<div>
|
||||||
|
</div>
|
|
@ -1,6 +1,6 @@
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<hr>
|
<hr>
|
||||||
<center>
|
<center>
|
||||||
who is he talking to <img src="/LULE.png">
|
who is he talking to <img src="/LULE.png" style="vertical-align: middle;">
|
||||||
</center>
|
</center>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<link rel="stylesheet" href="/css/info.css">
|
<link rel="stylesheet" href="/css/info.css">
|
||||||
<link rel="stylesheet" href="/css/navbar.css">
|
<link rel="stylesheet" href="/css/navbar.css">
|
||||||
<link rel="stylesheet" href="/css/post-list.css">
|
<link rel="stylesheet" href="/css/post-list.css">
|
||||||
|
<link rel="stylesheet" href="/css/links.css">
|
||||||
<!--link rel="stylesheet" href="/css/syntax.css"-->
|
<!--link rel="stylesheet" href="/css/syntax.css"-->
|
||||||
<meta charset="UTF-8"/>
|
<meta charset="UTF-8"/>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
<nav class="navbar">
|
<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="/posts">Posts</a>
|
||||||
|
<a href="/music">Music</a>
|
||||||
<a href="/tools">Tools</a>
|
<a href="/tools">Tools</a>
|
||||||
<a href="/tags">Tags</a>
|
<a href="/tags">Tags</a>
|
||||||
<a href="/contact">Contact</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>
|
</nav>
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -1,12 +1,5 @@
|
||||||
<div class="post-list">
|
<div class="post-list">
|
||||||
{{ range . }}
|
{{ range . }}
|
||||||
<a href="{{ .RelPermalink }}" class="post-item">
|
{{ partial "post.html" . }}
|
||||||
<span class="date">
|
|
||||||
{{ dateFormat "2006-01-02" .Date }}
|
|
||||||
</span>
|
|
||||||
<span>
|
|
||||||
{{ .Title }}
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -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>
|
|
@ -6,7 +6,7 @@
|
||||||
site_id: "sandvich",
|
site_id: "sandvich",
|
||||||
url: {{ .Permalink }},
|
url: {{ .Permalink }},
|
||||||
locale: {{ .Site.Language.Lang }},
|
locale: {{ .Site.Language.Lang }},
|
||||||
theme: "dark"
|
//theme: "dark"
|
||||||
};
|
};
|
||||||
|
|
||||||
(function(c) {
|
(function(c) {
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
<ul class="tag-list">
|
||||||
|
{{ range .Site.Taxonomies.tags.ByCount }}
|
||||||
|
<li>
|
||||||
|
<a href="/tags/{{ .Name }}">{{ .Name }} ({{ .Count }})</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<div class="post-item">
|
||||||
|
<h1>
|
||||||
|
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||||
|
</h1>
|
||||||
|
<p>
|
||||||
|
{{ .Params.description }}
|
||||||
|
</p>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
<iframe width="100%" height="394" src="{{ .Get 0 }}/embed" frameborder="0" allowfullscreen allow="autoplay; fullscreen"></iframe>
|
|
@ -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
|
|
@ -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/
|
|
@ -0,0 +1 @@
|
||||||
|
sandvich.xyz
|
|
@ -1,8 +1,21 @@
|
||||||
.info-table {
|
table.info, div.info {
|
||||||
font-family: var(--monospace);
|
font-family: var(--monospace);
|
||||||
|
font-size: 14px;
|
||||||
color: var(--fg2);
|
color: var(--fg2);
|
||||||
}
|
}
|
||||||
|
|
||||||
i.bi {
|
div.info > span {
|
||||||
|
margin: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.info i.bi {
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.info.info-small > span {
|
||||||
|
border-right: 1px dotted;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.info.info-small > span:last-child {
|
||||||
|
border-right: initial;
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -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 {
|
:root {
|
||||||
|
/*
|
||||||
--bg0: #282C34;
|
--bg0: #282C34;
|
||||||
--bg-dark: #21252b;
|
--bg-dark: #21252b;
|
||||||
--bg1: #31363f;
|
--bg1: #31363f;
|
||||||
|
@ -10,6 +12,7 @@
|
||||||
--fg1: #99a2b2;
|
--fg1: #99a2b2;
|
||||||
--fg2: #6e7a91;
|
--fg2: #6e7a91;
|
||||||
--fg3: #4f5664;
|
--fg3: #4f5664;
|
||||||
|
*/
|
||||||
--red: #e06c75;
|
--red: #e06c75;
|
||||||
--yellow: #e5c07b;
|
--yellow: #e5c07b;
|
||||||
--green: #98c379;
|
--green: #98c379;
|
||||||
|
@ -17,17 +20,38 @@
|
||||||
--cyan: #56b6c2;
|
--cyan: #56b6c2;
|
||||||
--purple: #c678dd;
|
--purple: #c678dd;
|
||||||
--accent: #61afef;
|
--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;
|
--sans-serif: "Source Sans 3", "Arial", sans-serif;
|
||||||
--monospace: "JetBrains Mono", "Courier", monospace;
|
--monospace: "JetBrains Mono", "Courier", monospace;
|
||||||
|
--serif: "Merriweather", serif;
|
||||||
|
--display: "Bree Serif", var(--serif);
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
color: var(--fg0);
|
color: var(--fg0);
|
||||||
background-color: var(--bg0);
|
background-color: var(--bg0);
|
||||||
font-family: var(--sans-serif);
|
/*font-family: var(--sans-serif);*/
|
||||||
|
font-family: var(--serif);
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*::selection, *::selection {
|
||||||
|
color: white;
|
||||||
|
background-color: black;
|
||||||
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
max-width: 768px;
|
max-width: 768px;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
|
@ -37,66 +61,105 @@ h1, h2, h3, h4, h5, h6 {
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
margin-bottom: 2em;
|
margin-bottom: 2em;
|
||||||
margin-top: 2em;
|
margin-top: 2em;
|
||||||
font-family: var(--monospace);
|
font-family: var(--display);
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
font-size: 40px;
|
font-size: 24px;
|
||||||
background: linear-gradient(120deg, var(--green) 60%, var(--cyan) 60%);
|
margin-bottom: 0;
|
||||||
color: var(--bg0);
|
background-color: var(--bg0);
|
||||||
|
/*background: linear-gradient(120deg, var(--green) 60%, var(--cyan) 60%);*/
|
||||||
|
color: var(--accent);
|
||||||
display: inline-block;
|
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 {
|
@keyframes rainbow {
|
||||||
0% {
|
0% {
|
||||||
background-color: var(--red);
|
color: var(--red);
|
||||||
}
|
}
|
||||||
20% {
|
20% {
|
||||||
background-color: var(--yellow);
|
color: var(--yellow);
|
||||||
}
|
}
|
||||||
40% {
|
40% {
|
||||||
background-color: var(--green);
|
color: var(--green);
|
||||||
}
|
}
|
||||||
60% {
|
60% {
|
||||||
background-color: var(--blue);
|
color: var(--blue);
|
||||||
}
|
}
|
||||||
80% {
|
80% {
|
||||||
background-color: var(--purple);
|
color: var(--purple);
|
||||||
}
|
}
|
||||||
100% {
|
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;
|
background: none;
|
||||||
animation-name: rainbow;
|
animation: shake 0.15s infinite, rainbow 1s infinite;
|
||||||
animation-duration: 5s;
|
}
|
||||||
animation-iteration-count: infinite;
|
|
||||||
|
.MUGA > .hidden {
|
||||||
|
position: absolute;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.MUGA:hover > .hidden {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.MUGA:hover > .muga {
|
||||||
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
display: block;
|
display: block;
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
color: var(--blue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
color: var(--green);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
h4 {
|
h4 {
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
color: var(--purple);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
margin-bottom: 2em;
|
margin-bottom: 2em;
|
||||||
margin-top: 2em;
|
margin-top: 2em;
|
||||||
line-height: 1.5em;
|
line-height: 2.0em;
|
||||||
font-size: 20px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
|
@ -105,10 +168,16 @@ a {
|
||||||
}
|
}
|
||||||
|
|
||||||
a:hover {
|
a:hover {
|
||||||
|
background-color: black;
|
||||||
color: white;
|
color: white;
|
||||||
transition-duration: 200ms;
|
transition-duration: 200ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a.button:hover {
|
||||||
|
background-color: unset;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
a.tag {
|
a.tag {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
}
|
}
|
||||||
|
@ -121,23 +190,62 @@ a.tag:hover {
|
||||||
max-width: 100%;
|
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 {
|
pre.example {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
background-color: var(--bg-dark);
|
background-color: var(--bg-dark);
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#footer {
|
.src > .highlight > div {
|
||||||
padding: 8px;
|
padding: 16px;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 2px 2px 16px #00000077;
|
||||||
}
|
}
|
||||||
|
|
||||||
#footer hr {
|
.src > .highlight pre {
|
||||||
margin: 16px;
|
margin-bottom: 0;
|
||||||
border: 1px solid var(--fg3);
|
|
||||||
background-color: var(--fg3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
code {
|
code {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: 500;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -1,21 +1,32 @@
|
||||||
nav {
|
nav {
|
||||||
|
position: absolute;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background-color: var(--bg-dark);
|
background-color: var(--bg-dark);
|
||||||
font-family: var(--monospace);
|
font-family: var(--monospace);
|
||||||
padding: 8px 0;
|
/*padding: 8px 0;*/
|
||||||
position: sticky;
|
/*position: sticky;*/
|
||||||
top: 0;
|
|
||||||
z-index: 5;
|
z-index: 5;
|
||||||
|
color: var(--fg3);
|
||||||
|
padding: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav a {
|
nav a {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
height: 100%;
|
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 {
|
nav a:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
|
color: unset;
|
||||||
|
background-color: unset;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav a.home {
|
nav a.home {
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
div.post-list {
|
div.post-list {
|
||||||
display: table;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,22 +8,68 @@ div.post-list {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
}
|
border: 1px var(--fg0) solid;
|
||||||
|
border-radius: 8px;
|
||||||
.post-item:hover {
|
padding: 16px;
|
||||||
background-color: var(--bg-dark);
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.post-item > span {
|
.post-item > span {
|
||||||
display: table-cell;
|
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.post-item > span.date {
|
.post-item > .date {
|
||||||
color: var(--fg3);
|
color: var(--fg3);
|
||||||
font-family: var(--monospace);
|
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 {
|
.post-item:hover .read-more-button {
|
||||||
color: var(--fg1);
|
opacity: 1;
|
||||||
|
transition-duration: 200ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
.read-more-button {
|
||||||
|
opacity: 0;
|
||||||
|
position: absolute;
|
||||||
|
transition-duration: 200ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
.read-more-button button {
|
||||||
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|