Initial commit.
commit
7b93f02375
|
@ -0,0 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
if command -v git > /dev/null && on_git_branch; then
|
||||
git config --local core.hooksPath .githooks/
|
||||
fi
|
||||
|
||||
use flake
|
|
@ -0,0 +1,40 @@
|
|||
# Wiki
|
||||
|
||||
This is a collection of notes. We use [Quartz](https://quartz.jzhao.xyz/) to
|
||||
transform Markdown content into a statically generated site. Markdown files are
|
||||
primarily managed with [Obsidian](https://obsidian.md/). To serve Quartz
|
||||
locally, run the following:
|
||||
```bash
|
||||
$ npx quartz build --serve
|
||||
```
|
||||
By default the server will live at `localhost:8080`.
|
||||
|
||||
## Building
|
||||
|
||||
If you make changes to the `package-lock.json` file, you'll need to update the
|
||||
`npmDepsHash` value in `flake.nix`. The easiest way to discover this value is
|
||||
by running the following:
|
||||
```bash
|
||||
$ prefetch-npm-deps package-lock.json
|
||||
```
|
||||
Alternatively, you can set the value of `npmDepsHash` to `lib.fakeHash` and run:
|
||||
```bash
|
||||
$ nix build
|
||||
```
|
||||
Nix will complain with the hash value it actually expected.
|
||||
|
||||
## Language Server
|
||||
|
||||
The [typescript-language-server](https://github.com/typescript-language-server/typescript-language-server)
|
||||
(version 4.1.2) is included in this flake.
|
||||
|
||||
## Formatting
|
||||
|
||||
Formatting depends on [prettier](https://prettier.io/) (version 3.1.0). A
|
||||
`pre-commit` hook is included in `.githooks` that can be used to format all
|
||||
`*.jsx?` and `*.tsx?` files prior to commit. Install via:
|
||||
```bash
|
||||
$ git config --local core.hooksPath .githooks/
|
||||
```
|
||||
If running [direnv](https://direnv.net/), this hook is installed automatically
|
||||
when entering the directory.
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"alwaysUpdateLinks": true
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
[
|
||||
"obsidian-to-anki-plugin"
|
||||
]
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"file-explorer": true,
|
||||
"global-search": true,
|
||||
"switcher": true,
|
||||
"graph": true,
|
||||
"backlink": true,
|
||||
"canvas": true,
|
||||
"outgoing-link": true,
|
||||
"tag-pane": true,
|
||||
"properties": false,
|
||||
"page-preview": true,
|
||||
"daily-notes": true,
|
||||
"templates": true,
|
||||
"note-composer": true,
|
||||
"command-palette": true,
|
||||
"slash-command": false,
|
||||
"editor-status": true,
|
||||
"bookmarks": true,
|
||||
"markdown-importer": false,
|
||||
"zk-prefixer": false,
|
||||
"random-note": false,
|
||||
"outline": true,
|
||||
"word-count": true,
|
||||
"slides": false,
|
||||
"audio-recorder": false,
|
||||
"workspaces": false,
|
||||
"file-recovery": true,
|
||||
"publish": false,
|
||||
"sync": false
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
[
|
||||
"file-explorer",
|
||||
"global-search",
|
||||
"switcher",
|
||||
"graph",
|
||||
"backlink",
|
||||
"canvas",
|
||||
"outgoing-link",
|
||||
"tag-pane",
|
||||
"page-preview",
|
||||
"daily-notes",
|
||||
"templates",
|
||||
"note-composer",
|
||||
"command-palette",
|
||||
"editor-status",
|
||||
"bookmarks",
|
||||
"outline",
|
||||
"word-count",
|
||||
"file-recovery"
|
||||
]
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"folder": "journal/",
|
||||
"template": "templates/daily",
|
||||
"autorun": true
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
{}
|
|
@ -0,0 +1,117 @@
|
|||
{
|
||||
"settings": {
|
||||
"CUSTOM_REGEXPS": {
|
||||
"Basic": "",
|
||||
"Basic (and reversed card)": "",
|
||||
"Basic (optional reversed card)": "",
|
||||
"Cloze": "",
|
||||
"Image Occlusion": "",
|
||||
"Image Occlusion Enhanced": ""
|
||||
},
|
||||
"FILE_LINK_FIELDS": {
|
||||
"Basic": "Reference",
|
||||
"Basic (and reversed card)": "Front",
|
||||
"Basic (optional reversed card)": "Front",
|
||||
"Cloze": "Reference",
|
||||
"Image Occlusion": "Occlusion",
|
||||
"Image Occlusion Enhanced": "ID (hidden)"
|
||||
},
|
||||
"CONTEXT_FIELDS": {
|
||||
"Basic": "Context",
|
||||
"Cloze": "Context"
|
||||
},
|
||||
"FOLDER_DECKS": {
|
||||
"Linux": "",
|
||||
"linux": ""
|
||||
},
|
||||
"FOLDER_TAGS": {
|
||||
"Linux": "",
|
||||
"linux": ""
|
||||
},
|
||||
"Syntax": {
|
||||
"Begin Note": "%%ANKI",
|
||||
"End Note": "END%%",
|
||||
"Begin Inline Note": "STARTI",
|
||||
"End Inline Note": "ENDI",
|
||||
"Target Deck Line": "TARGET DECK",
|
||||
"File Tags Line": "FILE TAGS",
|
||||
"Delete Note Line": "DELETE",
|
||||
"Frozen Fields Line": "FROZEN"
|
||||
},
|
||||
"Defaults": {
|
||||
"Scan Directory": "",
|
||||
"Tag": "",
|
||||
"Deck": "Obsidian",
|
||||
"Scheduling Interval": 0,
|
||||
"Add File Link": false,
|
||||
"Add Context": true,
|
||||
"CurlyCloze": true,
|
||||
"CurlyCloze - Highlights to Clozes": true,
|
||||
"ID Comments": true,
|
||||
"Add Obsidian Tags": true
|
||||
},
|
||||
"IGNORED_FILE_GLOBS": [
|
||||
"**/*.excalidraw.md"
|
||||
]
|
||||
},
|
||||
"Added Media": [],
|
||||
"File Hashes": {
|
||||
"index.md": "e48e895feeed7046425bb2ee15419770",
|
||||
"Linux/Signals.md": "f58f1a36a9fe53928fdc3dc02fc4c3e3",
|
||||
"linux/index.md": "6e50c924ee9e09294fd3b907fbdeaf0f",
|
||||
"linux/signals.md": "e9ab74723981ebc232189c84d3b0da74",
|
||||
"templates/daily.md": "0f22c7ef0b0f35efada88d61c95e9815",
|
||||
"daily/2024-01-31.md": "72e343cef8d56e169cac7b360a88fcf0",
|
||||
"posix/index.md": "f7b1ae55f8f5e8f50f89738b1aca9111",
|
||||
"posix/signals.md": "26161c6a79a0c413032c6c17e460412c",
|
||||
"gawk.md": "9bf70ef138a9a281b86400aee393cae7",
|
||||
"bash/index.md": "3b5296277f095acdf16655adcdf524af",
|
||||
"bash/shebang.md": "bc30f75bcddff59d6f907fae89c17283",
|
||||
"bash/robustness.md": "e474fd33469fc393bfde45cd7b9411ba"
|
||||
},
|
||||
"fields_dict": {
|
||||
"Basic": [
|
||||
"Front",
|
||||
"Back",
|
||||
"Reference",
|
||||
"Context"
|
||||
],
|
||||
"Basic (and reversed card)": [
|
||||
"Front",
|
||||
"Back",
|
||||
"Reference"
|
||||
],
|
||||
"Basic (optional reversed card)": [
|
||||
"Front",
|
||||
"Back",
|
||||
"Reference",
|
||||
"Add Reverse"
|
||||
],
|
||||
"Cloze": [
|
||||
"Text",
|
||||
"Reference",
|
||||
"Context"
|
||||
],
|
||||
"Image Occlusion": [
|
||||
"Occlusion",
|
||||
"Image",
|
||||
"Header",
|
||||
"Back Extra",
|
||||
"Comments"
|
||||
],
|
||||
"Image Occlusion Enhanced": [
|
||||
"ID (hidden)",
|
||||
"Header",
|
||||
"Image",
|
||||
"Question Mask",
|
||||
"Footer",
|
||||
"Remarks",
|
||||
"Sources",
|
||||
"Extra 1",
|
||||
"Extra 2",
|
||||
"Answer Mask",
|
||||
"Original Mask",
|
||||
"Reference"
|
||||
]
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"id": "obsidian-to-anki-plugin",
|
||||
"name": "Obsidian_to_Anki",
|
||||
"version": "3.6.0",
|
||||
"minAppVersion": "0.9.20",
|
||||
"description": "This is an Anki integration plugin! Designed for efficient bulk exporting.",
|
||||
"author": "Pseudonium",
|
||||
"authorUrl": "https://github.com/Pseudonium/Obsidian_to_Anki",
|
||||
"isDesktopOnly": true
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
.anki-settings-table td, .anki-settings-table th {
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
padding: 4px 10px;
|
||||
}
|
||||
|
||||
.anki-settings-table {
|
||||
border-collapse: collapse;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.anki-center {
|
||||
margin: auto;
|
||||
padding: 5px;
|
||||
padding-top: 30px;
|
||||
}
|
||||
|
||||
.anki-rotated {
|
||||
transform: rotate(-90deg);
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"folder": "templates"
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"types": {
|
||||
"aliases": "aliases",
|
||||
"cssclasses": "multitext",
|
||||
"tags": "tags",
|
||||
"title": "text"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
title: Bash
|
||||
---
|
|
@ -0,0 +1,58 @@
|
|||
---
|
||||
title: Measuring Command Robustness
|
||||
TARGET DECK: Obsidian::STEM
|
||||
FILE TAGS: bash
|
||||
tags:
|
||||
- bash
|
||||
- shell
|
||||
---
|
||||
|
||||
An interesting point Robbins[^robbins] discusses in his introduction to [[gawk]] is this idea of command robustness. He states that:
|
||||
|
||||
> A self-contained shell script is more reliable because there are no other files to misplace.
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
What is a self-contained shell script?
|
||||
Back: A shell script that does not rely on the presence of other files.
|
||||
Reference: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
||||
<!--ID: 1706726911473-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
What makes a self-contained shell script more reliable?
|
||||
Back: There are no other files to misplace.
|
||||
Reference: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
||||
<!--ID: 1706726911475-->
|
||||
END%%
|
||||
|
||||
The point he is arguing is that the first command below is considered more robust than the second since the command is more loosely coupled to its environment:
|
||||
|
||||
```bash
|
||||
$ awk 'program' input-file1 input-file2 ...
|
||||
$ awk -f program-file input-file1 input-file2 ...
|
||||
```
|
||||
|
||||
It's interesting to think what else can be used as a measure of a command's robustness:
|
||||
|
||||
* Required environment variables or environment variables formatted in a certain way
|
||||
* `$PATH` needs to point to a specific location
|
||||
* Whether the invoked program is present by default in a distribution or must be installed
|
||||
* The ability to run with or without an associated TTY
|
||||
* The ability to run with or without associated standard streams
|
||||
* `stdout`, `stderr`, `stdin`
|
||||
* How backwards compatible the invoked program is
|
||||
* Version mismatch may silently cause the same invocation to fail
|
||||
* Expected permissions
|
||||
* EUID, read permissions on an input file, etc.
|
||||
* Determinism of the program itself
|
||||
* Does output rely entirely on input or can it make nondeterministic choices
|
||||
* The amount of resources dedicated to the program
|
||||
* Failure may occur if not enough memory is provided to the command
|
||||
* Whether a program acts idempotently
|
||||
* What happens if I run the command twice in a row?
|
||||
* Whether a program acts atomically
|
||||
* Is it possible intermediate files are left that affect subsequent runs?
|
||||
|
||||
[^robbins]: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
|
@ -0,0 +1,55 @@
|
|||
---
|
||||
title: Shebang
|
||||
TARGET DECK: Obsidian::STEM
|
||||
FILE TAGS: bash
|
||||
tags:
|
||||
- bash
|
||||
---
|
||||
|
||||
The shebang (also writting shabang or sha-bang) is a magic character at the start of a script indicating what command should be run when invoking the script directly. It always begins with ASCII characters `#!`.[^mendel]
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
What ASCII characters do shebangs start with?
|
||||
Back: `#!`
|
||||
Reference: Cooper, Mendel. “Advanced Bash-Scripting Guide,” n.d., 916.
|
||||
<!--ID: 1706726911458-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
What class of programs can be specified in a shebang?
|
||||
Back: Interpreters
|
||||
Reference: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
||||
<!--ID: 1706726911461-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
The OS will parse a shebang into what three parts?
|
||||
Back: `#!`, the interpreter, and the rest of the line as a single argument.
|
||||
Reference: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
||||
<!--ID: 1706726911464-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
What gotcha does Robbins highlight with shebang parsing?
|
||||
Back: The remainder of the line following the interpreter is passed as a *single* argument.
|
||||
Reference: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
||||
<!--ID: 1706726911467-->
|
||||
END%%
|
||||
|
||||
Some systems limit the length of interpreters to just 32 characters. A simple workaround when encountering this limitation is to introduce a symbolic link.
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
What workaround is used when shabang interpreter names are too long?
|
||||
Back: Introduce a symbolic link.
|
||||
Reference: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
||||
<!--ID: 1706726911470-->
|
||||
END%%
|
||||
|
||||
[^mendel]: Cooper, Mendel. “Advanced Bash-Scripting Guide,” n.d., 916.
|
||||
|
||||
[^robbins]: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
|
@ -0,0 +1,86 @@
|
|||
---
|
||||
title: GAWK
|
||||
TARGET DECK: Obsidian::STEM
|
||||
FILE TAGS: linux::cli gawk
|
||||
tags:
|
||||
- linux
|
||||
- cli
|
||||
- gawk
|
||||
---
|
||||
|
||||
## Introduction
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
How was the name `awk` derived?
|
||||
Back: By taking the first initials of the original three creators.
|
||||
<!--ID: 1706726911434-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
What does the term `awk` refer to?
|
||||
Back: Both the `awk` program and the `awk` language.
|
||||
Reference: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
||||
<!--ID: 1706726911439-->
|
||||
END%%
|
||||
|
||||
> Dark corners are basically fractal - no matter how much you illuminate, there's always a smaller but darker one.
|
||||
|
||||
The above quote is attributed to Brian Kernighan (one of the authors of the [[C]] K&R book).
|
||||
|
||||
%%ANKI
|
||||
Cloze
|
||||
Dark corners are basically {1:fractal} - {1:no matter how much you illuminate, there's always a smaller but darker one.} - Brian Kernighan
|
||||
Reference: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
||||
<!--ID: 1706726911442-->
|
||||
END%%
|
||||
|
||||
## Setup
|
||||
|
||||
Robbins[^robbins] suggests executing command `set +H` on [[bash]] startup to disable [[C]] shell-style command history.
|
||||
|
||||
## Usage
|
||||
|
||||
`awk` applies actions to lines matching specified patterns. In this way `awk` is said to be data-driven - we specify the lines `awk` should act on and `awk` is responsible for finding and acting on them. Instructions are provided via a **program**.
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
What is the basic function of `awk`?
|
||||
Back: To apply actions to lines matching specified patterns.
|
||||
Reference: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
||||
<!--ID: 1706726911445-->
|
||||
END%%
|
||||
|
||||
An `awk` program consists of **rules**, each made up by a **pattern** and **action**. For example:
|
||||
|
||||
```awk
|
||||
BEGIN { print "hello world" }
|
||||
pattern { action }
|
||||
```
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
An `awk` program consists of a series of what?
|
||||
Back: Rules.
|
||||
Reference: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
||||
<!--ID: 1706726911448-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
A rule found in an `awk` program consists of what two parts?
|
||||
Back: A pattern and an action.
|
||||
Reference: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
||||
<!--ID: 1706726911451-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
A standalone `awk` program usually has what shebang?
|
||||
Back: `#!/bin/awk -f`
|
||||
Reference: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
||||
<!--ID: 1706726911454-->
|
||||
END%%
|
||||
|
||||
[^robbins]: Robbins, Arnold D. “GAWK: Effective AWK Programming,” October 2023. [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf)
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: About
|
||||
---
|
||||
|
||||
Welcome to my personal notes. This is home for content I want to save or later reference that has no other obvious place to go. This site is generated with [Quartz](https://quartz.jzhao.xyz/). I primarily use [Obsidian](https://obsidian.md/) to edit the files found throughout.
|
|
@ -0,0 +1,18 @@
|
|||
---
|
||||
title: "2024-01-31"
|
||||
---
|
||||
|
||||
- [x] Anki Flashcards
|
||||
- [x] KoL
|
||||
- [x] Sheet Music (10 min.)
|
||||
- [x] OGS (1 Life & Death Problem)
|
||||
- [x] Korean (Read 1 Story)
|
||||
- [x] Interview Prep (1 Practice Problem)
|
||||
- [x] Log Work Hours (Max 3 hours)
|
||||
|
||||
* Spent time today getting FSRS enabled in Anki. I now have a separate "Obsidian" deck that I'll slowly be transferring cards over, with all cards generated from this project.
|
||||
* Last night and continuing today, will also been migrating all my Zotero references to a new "Obsidian" collection. The goal is to be more mindful as to how I consume the content and create cards/take notes.
|
||||
* Began working through "GAWK: Effective AWK Programming" by Arnold D. Robbins. This inspired some notes around shell commands and what it means for them to be [[robustness|robust]].
|
||||
* Watched the following video on Go: [I'm Learning Strategy from this Go Book](https://www.youtube.com/watch?v=eXaScCrLPDI)
|
||||
* Finished watching [05 - Columnar Databases & Compression](https://www.youtube.com/watch?v=q4W5r3GR0OU)
|
||||
* Solved LeetCode problem [Reverse Integer](https://leetcode.com/problems/reverse-integer/).
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
title: POSIX
|
||||
---
|
|
@ -0,0 +1,115 @@
|
|||
---
|
||||
title: Signals
|
||||
TARGET DECK: Obsidian::STEM
|
||||
FILE TAGS: posix::signal
|
||||
tags:
|
||||
- posix
|
||||
- signal
|
||||
---
|
||||
|
||||
This is an overview of specific POSIX signals.[^dowling]
|
||||
|
||||
Code | Name
|
||||
----- | --------------
|
||||
1 | SIGHUP
|
||||
2 | SIGINT
|
||||
4 | SIGILL
|
||||
6 | SIGABRT
|
||||
7 | SIGBUS
|
||||
8 | SIGFPE
|
||||
9 | SIGKILL
|
||||
11 | SIGSEGV
|
||||
13 | SIGPIPE
|
||||
15 | SIGTERM
|
||||
|
||||
## Details
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
What command can we run to access the official manual page for signals?
|
||||
Back: `man 7 signal`
|
||||
Reference: Dowling, “A List of Signals and What They Mean.”
|
||||
Tags: linux::cli
|
||||
<!--ID: 1706668253908-->
|
||||
END%%
|
||||
|
||||
### SIGHUP (1)
|
||||
|
||||
A process receives a `SIGHUP` signal when the terminal it is attached to goes away before it finishes executing.
|
||||
|
||||
%%ANKI
|
||||
Cloze
|
||||
Signal {`SIGHUP`} corresponds to number {1}.
|
||||
Reference: Dowling, “A List of Signals and What They Mean.”
|
||||
<!--ID: 1706668531417-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
What is the `HUP` in `SIGHUP` an acronym for?
|
||||
Back: **H**ang **up**
|
||||
Reference: Dowling, “A List of Signals and What They Mean.”
|
||||
<!--ID: 1706669687254-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
When does a process receive a `SIGHUP` signal?
|
||||
Back: When the terminal it is attached to disappears before it finishes execution.
|
||||
Reference: Dowling, “A List of Signals and What They Mean.”
|
||||
<!--ID: 1706669687261-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
What historical context led to `SIGHUP`'s name?
|
||||
Back: This name refers to hanging up the telephone in the days of telephone modems.
|
||||
Reference: Dowling, “A List of Signals and What They Mean.”
|
||||
<!--ID: 1706669687266-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
What command is used to make a program immune to `SIGHUP` signals?
|
||||
Back: `nohup`
|
||||
Reference: `man 1 nohup`
|
||||
Tags: linux::cli
|
||||
<!--ID: 1706670390877-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
If a `nohup` program's `stdin` is a terminal, where is its input redirected from?
|
||||
Back: An unreadable file.
|
||||
Reference: `man 1 nohup`
|
||||
Tags: linux::cli
|
||||
<!--ID: 1706670390904-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
If a `nohup` program's `stdout` is a terminal, where is its output redirected to?
|
||||
Back: `nohup.out` if possible, `$HOME/nohup.out` otherwise.
|
||||
Reference: `man 1 nohup`
|
||||
Tags: linux::cli
|
||||
<!--ID: 1706670390909-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
If a `nohup` program's `stderr` is a terminal, where is its errors redirected to?
|
||||
Back: `stdout`
|
||||
Reference: `man 1 nohup`
|
||||
Tags: linux::cli
|
||||
<!--ID: 1706670390913-->
|
||||
END%%
|
||||
|
||||
%%ANKI
|
||||
Basic
|
||||
What command can be run to view all processes that would receive a `SIGHUP` when the current terminal exits?
|
||||
Back: `ps T`
|
||||
Reference: `man 1 ps`
|
||||
<!--ID: 1706670390919-->
|
||||
END%%
|
||||
|
||||
[^dowling]: Dowling, “A List of Signals and What They Mean.”
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
title: "{{date:YYYY-MM-DD}}"
|
||||
---
|
||||
|
||||
- [ ] Anki Flashcards
|
||||
- [ ] KoL
|
||||
- [ ] Sheet Music (10 min.)
|
||||
- [ ] OGS (1 Life & Death Problem)
|
||||
- [ ] Korean (Read 1 Story)
|
||||
- [ ] Interview Prep (1 Practice Problem)
|
||||
- [ ] Log Work Hours (Max 3 hours)
|
|
@ -0,0 +1,10 @@
|
|||
(import
|
||||
(
|
||||
let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in
|
||||
fetchTarball {
|
||||
url = lock.nodes.flake-compat.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
|
||||
sha256 = lock.nodes.flake-compat.locked.narHash;
|
||||
}
|
||||
)
|
||||
{ src = ./.; }
|
||||
).defaultNix
|
|
@ -0,0 +1,76 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flake-compat": {
|
||||
"locked": {
|
||||
"lastModified": 1696426674,
|
||||
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||
"revCount": 57,
|
||||
"type": "tarball",
|
||||
"url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1705309234,
|
||||
"narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1706371002,
|
||||
"narHash": "sha256-dwuorKimqSYgyu8Cw6ncKhyQjUDOyuXoxDTVmAXq88s=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c002c6aa977ad22c60398daaa9be52f2203d0006",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
{
|
||||
description = ''
|
||||
A collection of my notes.
|
||||
|
||||
Uses [Quartz](https://quartz.jzhao.xyz/) to transform Markdown content into
|
||||
a statically generated site. Markdown files are primarily managed with
|
||||
[Obsidian](https://obsidian.md/).
|
||||
'';
|
||||
|
||||
inputs = {
|
||||
flake-compat.url = "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils, ... }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
|
||||
quartz = {
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "jrpotter";
|
||||
repo = "quartz";
|
||||
rev = "e2e1053fd45586c19829be224008673b17111e6b";
|
||||
hash = pkgs.lib.fakeHash;
|
||||
};
|
||||
nodeDependencies = (pkgs.callPackage ./quartz {}).nodeDependencies;
|
||||
};
|
||||
in
|
||||
{
|
||||
packages = {
|
||||
app = pkgs.stdenv.mkDerivation {
|
||||
pname = "notebook";
|
||||
version = "0.1.0";
|
||||
src = ./.;
|
||||
|
||||
nativeBuildInputs = [ pkgs.nodejs ];
|
||||
|
||||
buildPhase = ''
|
||||
cp -r ${quartz.src} quartz
|
||||
cd quartz
|
||||
find -type f -execdir chmod 644 {} +
|
||||
find -type d -execdir chmod 755 {} +
|
||||
|
||||
ln -s ${quartz.nodeDependencies}/lib/node_modules ./node_modules
|
||||
export PATH="${quartz.nodeDependencies}/bin:$PATH"
|
||||
|
||||
# export npm_config_cache=$PWD
|
||||
# npx quartz build
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
'';
|
||||
};
|
||||
|
||||
default = self.packages.${system}.app;
|
||||
};
|
||||
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages = with pkgs; [
|
||||
node2nix
|
||||
nodePackages.prettier
|
||||
nodePackages.typescript-language-server
|
||||
nodejs
|
||||
prefetch-npm-deps
|
||||
typescript
|
||||
];
|
||||
};
|
||||
});
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
import { QuartzConfig } from "./quartz/cfg"
|
||||
import * as Plugin from "./quartz/plugins"
|
||||
|
||||
const config: QuartzConfig = {
|
||||
configuration: {
|
||||
pageTitle: "My Notebook",
|
||||
enableSPA: true,
|
||||
enablePopovers: true,
|
||||
analytics: {
|
||||
provider: "plausible",
|
||||
},
|
||||
baseUrl: "wiki.jrpotter.com",
|
||||
ignorePatterns: [
|
||||
".obsidian",
|
||||
"journal",
|
||||
"private",
|
||||
"templates",
|
||||
],
|
||||
defaultDateType: "created",
|
||||
theme: {
|
||||
typography: {
|
||||
header: "Schibsted Grotesk",
|
||||
body: "Source Sans Pro",
|
||||
code: "IBM Plex Mono",
|
||||
},
|
||||
colors: {
|
||||
lightMode: {
|
||||
light: "#faf8f8",
|
||||
lightgray: "#e5e5e5",
|
||||
gray: "#b8b8b8",
|
||||
darkgray: "#4e4e4e",
|
||||
dark: "#2b2b2b",
|
||||
secondary: "#284b63",
|
||||
tertiary: "#84a59d",
|
||||
highlight: "rgba(143, 159, 169, 0.15)",
|
||||
},
|
||||
darkMode: {
|
||||
light: "#161618",
|
||||
lightgray: "#393639",
|
||||
gray: "#646464",
|
||||
darkgray: "#d4d4d4",
|
||||
dark: "#ebebec",
|
||||
secondary: "#7b97aa",
|
||||
tertiary: "#84a59d",
|
||||
highlight: "rgba(143, 159, 169, 0.15)",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
transformers: [
|
||||
Plugin.FrontMatter(),
|
||||
Plugin.TableOfContents(),
|
||||
Plugin.CreatedModifiedDate({
|
||||
// you can add 'git' here for last modified from Git
|
||||
// if you do rely on git for dates, ensure defaultDateType is 'modified'
|
||||
priority: ["frontmatter", "filesystem"],
|
||||
}),
|
||||
Plugin.Latex({ renderEngine: "katex" }),
|
||||
Plugin.SyntaxHighlighting(),
|
||||
Plugin.ObsidianFlavoredMarkdown(),
|
||||
Plugin.GitHubFlavoredMarkdown(),
|
||||
Plugin.CrawlLinks({ markdownLinkResolution: "shortest" }),
|
||||
Plugin.Description(),
|
||||
],
|
||||
filters: [Plugin.RemoveDrafts()],
|
||||
emitters: [
|
||||
Plugin.AliasRedirects(),
|
||||
Plugin.ComponentResources({ fontOrigin: "googleFonts" }),
|
||||
Plugin.ContentPage(),
|
||||
Plugin.FolderPage(),
|
||||
Plugin.TagPage(),
|
||||
Plugin.ContentIndex({
|
||||
enableSiteMap: true,
|
||||
enableRSS: true,
|
||||
}),
|
||||
Plugin.Assets(),
|
||||
Plugin.Static(),
|
||||
Plugin.NotFoundPage(),
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
export default config
|
|
@ -0,0 +1,52 @@
|
|||
import { PageLayout, SharedLayout } from "./quartz/cfg"
|
||||
import * as Component from "./quartz/components"
|
||||
|
||||
// components shared across all pages
|
||||
export const sharedPageComponents: SharedLayout = {
|
||||
head: Component.Head(),
|
||||
header: [
|
||||
Component.MobileOnly(Component.Explorer()),
|
||||
],
|
||||
footer: Component.Footer({
|
||||
links: {
|
||||
Git: "https://git.jrpotter.com/r/wiki",
|
||||
},
|
||||
}),
|
||||
}
|
||||
|
||||
// components for pages that display a single page (e.g. a single note)
|
||||
export const defaultContentPageLayout: PageLayout = {
|
||||
beforeBody: [
|
||||
Component.Breadcrumbs(),
|
||||
Component.ArticleTitle(),
|
||||
Component.ContentMeta(),
|
||||
Component.TagList(),
|
||||
],
|
||||
left: [
|
||||
Component.PageTitle(),
|
||||
Component.MobileOnly(Component.Spacer()),
|
||||
Component.Search(),
|
||||
Component.DesktopOnly(Component.Explorer()),
|
||||
],
|
||||
right: [
|
||||
Component.Graph(),
|
||||
Component.DesktopOnly(Component.TableOfContents()),
|
||||
Component.Backlinks(),
|
||||
],
|
||||
}
|
||||
|
||||
// components for pages that display lists of pages (e.g. tags or folders)
|
||||
export const defaultListPageLayout: PageLayout = {
|
||||
beforeBody: [
|
||||
Component.Breadcrumbs(),
|
||||
Component.ArticleTitle(),
|
||||
Component.ContentMeta(),
|
||||
],
|
||||
left: [
|
||||
Component.PageTitle(),
|
||||
Component.MobileOnly(Component.Spacer()),
|
||||
Component.Search(),
|
||||
Component.DesktopOnly(Component.Explorer()),
|
||||
],
|
||||
right: [],
|
||||
}
|
Loading…
Reference in New Issue