Merge branch 'dev' into vhs
This commit is contained in:
		
							
								
								
									
										21
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								Makefile
									
									
									
									
									
								
							| @@ -4,6 +4,8 @@ EDITOR ?= vi | ||||
| FZF != command -v sk || command -v fzy || command -v fzf || \ | ||||
| 	{ echo install a fuzzy finder && exit 1 ;} | ||||
|  | ||||
| spill_contents = sed -e '1,/---/d' | ||||
|  | ||||
| help: ## Print the help message | ||||
| 	@awk 'BEGIN {FS = ":.*?## "} /^[0-9a-zA-Z._-]+:.*?## / {printf "\033[36m%s\033[0m : %s\n", $$1, $$2}' $(MAKEFILE_LIST) | \ | ||||
| 		sort | \ | ||||
| @@ -11,31 +13,38 @@ help: ## Print the help message | ||||
|  | ||||
| articles != find * -type f -name "*.md" | ||||
|  | ||||
| categories != ls -d */ | ||||
| dirs != ls -d */ | ||||
| categories = $(patsubst %/, %, $(dirs)) | ||||
|  | ||||
| databases = $(patsubst %/, .dbs/%.rec, $(categories)) | ||||
| databases = $(patsubst %, .dbs/%.rec, $(categories)) | ||||
|  | ||||
| default += $(databases) | ||||
|  | ||||
| $(databases): .dbs/%.rec: %/ | .dbs/ | ||||
| $(foreach dir, $(categories), \ | ||||
| 	$(eval .dbs/$(dir).rec: $(wildcard $(dir)/*)) \ | ||||
| 	) | ||||
|  | ||||
| $(databases): .dbs/%.rec: %/ | ||||
| 	$(info making $(@F)) | ||||
| 	mkdir -p $(@D) | ||||
| 	@mkdir -p $(@D) | ||||
| 	for entry in $(shell find $< -type f -name "*.md") ; do \ | ||||
| 		sed -n '2,/^---$$/ {/^---$$/d; p}' "$$entry" |\ | ||||
| 		sed -e 's/\[ //'  -e 's/ \]//' |\ | ||||
| 		tr -d '"' ;\ | ||||
| 		printf "wordcount: %s\n" "$$(wc -w < $$entry)" ;\ | ||||
| 		printf "file: %s\n\n" "$$entry" ;\ | ||||
| 	done >> $@ | ||||
| 	done > $@ | ||||
| 	for entry in $(shell find $< -type f -name "*.md"); do \ | ||||
| 		recset $@ -e "file = '$${entry}'" -f wordcount --set-add="$$(wc -w < $${entry})" ;\ | ||||
| 		recset $@ -e "file = '$${entry}'" -f content --set-add="$$($(spill_contents) $${entry})" ;\ | ||||
| 	done | ||||
|  | ||||
| db.rec: $(databases) | ||||
| 	printf '%s\n' '%rec: guide' > $@ | ||||
| 	printf '%s\n' '%key: title' >> $@ | ||||
| 	printf '%s\n' '%type: wordcount int' >> $@ | ||||
| 	printf '%s\n\n' '%sort: title' >> $@ | ||||
| 	cat $^ >> $@ | ||||
| 	recsel $^ >> $@ | ||||
| 	recsel $@ -e "requires != ''" -CR title,requires |\ | ||||
| 	while read title requires; do \ | ||||
| 		IFS=', ' && for provider in $$requires; do \ | ||||
|   | ||||
| @@ -20,6 +20,7 @@ recsel db.rec -q gpg | ||||
| recsel db.rec -e "title = 'ssh'" | ||||
| recsel db.rec -e "title ~ 'ssh'" | ||||
| recsel db.rec -e "title ~ 'bash'" -R title,wordcount | ||||
| recsel db.rec -m 1 -P content | less -R | ||||
| ``` | ||||
|  | ||||
| # Style | ||||
|   | ||||
| @@ -1,34 +0,0 @@ | ||||
| --- | ||||
| title: "kernel" | ||||
| tags: [ "Basics" ] | ||||
| --- | ||||
| ## Living Space | ||||
|  | ||||
| Kernel modules live in lib/modules/$(uname -r) | ||||
|  | ||||
| ## Change | ||||
|  | ||||
| Load them with | ||||
|  | ||||
| ```bash | ||||
| sudo modprobe ath9k | ||||
| ``` | ||||
|  | ||||
| Or remove one with | ||||
|  | ||||
| ```bash | ||||
| sudo modprove uvcvideo | ||||
| ``` | ||||
|  | ||||
| The PC's irritating speaker beep can be really annoying. Disable it with: | ||||
|  | ||||
| ```bash | ||||
| sudo modprobe -r pcspeaker | ||||
| ``` | ||||
|  | ||||
| Permanently disable a module by blacklisting it in `/etc/modprobe.d`: | ||||
|  | ||||
| ```bash | ||||
| echo 'blacklist pcspkr' > /etc/modprobe.d/*nobeep*.conf | ||||
| ``` | ||||
|  | ||||
| @@ -1,6 +1,6 @@ | ||||
| --- | ||||
| title: "Base 16" | ||||
| tags: [ "Data" ] | ||||
| tags: [ "data" ] | ||||
| --- | ||||
|  | ||||
| ```bash | ||||
|   | ||||
| @@ -5,5 +5,10 @@ tags: [ "data", "calendar", "daylight savings" ] | ||||
|  | ||||
| ## Setup | ||||
|  | ||||
| The UK government keeps an ics file with clock, [here](https://www.gov.uk/when-do-the-clocks-change/united-kingdom.ics). | ||||
| The UK government keeps an `ics` file with clock. | ||||
|  | ||||
| ```sh | ||||
| wget https://www.gov.uk/when-do-the-clocks-change/united-kingdom.ics | ||||
| calcurse -i united-kingdom.ics | ||||
| ``` | ||||
|  | ||||
|   | ||||
| @@ -9,10 +9,10 @@ Install `opensmtpd` (or similar), then `ncat` or `nc` or `netcat` (this mysterio | ||||
|  | ||||
| Start the `opensmtpd` service, then use netcat to speak with the mail-daemon: | ||||
|  | ||||
|  | ||||
| ``` | ||||
| ```sh | ||||
| nc localhost 25 | ||||
| ``` | ||||
|  | ||||
| The computer should respond with code `220`, which means 'I am listening'. | ||||
|  | ||||
| > 220 hex ESMTP OpenSMTPD | ||||
| @@ -40,7 +40,7 @@ Tell the mail daemon who you are in this format. | ||||
|  | ||||
| Then tell it who you're sending to. | ||||
|  | ||||
| ``` | ||||
| ```sh | ||||
| RCPT TO: <www@dmz.rs> | ||||
| ``` | ||||
|  | ||||
| @@ -67,7 +67,7 @@ You will find the email under `/var/spool` or `/var/mail` or similar. | ||||
|  | ||||
| If unsure, just take a part of your email, like `FRAGMENT="turn off server please"`, then `grep` for it: | ||||
|  | ||||
|  ```bash | ||||
|  ```sh | ||||
| sudo grep -r $FRAGMENT /var/spool/* | ||||
|  ``` | ||||
|  | ||||
|   | ||||
| @@ -1,17 +1,17 @@ | ||||
| --- | ||||
| title: "exiftool" | ||||
| tags: [ "Metadata" ] | ||||
| tags: [ "metadata", "exifdata" ] | ||||
| --- | ||||
|  | ||||
| Find metadata. | ||||
| Find metadata: | ||||
|  | ||||
| ```bash | ||||
| exiftool image.jpg | ||||
| ```sh | ||||
| exiftool "$file".jpg | ||||
| ``` | ||||
|  | ||||
| Find info on all images in current directory. | ||||
| Find info on all `.png` images in current directory. | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| exiftool -ext .png . | ||||
| ``` | ||||
|  | ||||
| @@ -19,22 +19,14 @@ You can make this recurring with the -r switch. | ||||
|  | ||||
| And overwrite all metadata: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| exiftool -all= -overwrite_original -ext jpg . | ||||
| ``` | ||||
| (NB: This does not work on pdf data. See [here](pdf_erasure.md) for erasing all pdf data) | ||||
|  | ||||
| Or just GPS data: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| exiftool -gps:all= *.jpg | ||||
| ``` | ||||
|  | ||||
| You can also use the imagemagick tool: | ||||
|  | ||||
| ```bash | ||||
| identify -verbose | ||||
| ``` | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1,24 +1,72 @@ | ||||
| --- | ||||
| title: "git-lfs" | ||||
| tags: [ "data" ] | ||||
| tags: [ "data", "git" ] | ||||
| --- | ||||
|  | ||||
| Install, and add with | ||||
| Git Large File Storage ('LFS') needs to change your `~/.gitconfig` to check out those binary files: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| cat ~/.gitconfig | ||||
| git lfs install | ||||
| cat ~/.gitconfig | ||||
| ``` | ||||
|  | ||||
| Then track some filetype with: | ||||
| Then track some filetypes with: | ||||
|  | ||||
| ```bash | ||||
| git lfs track "\*.ttf" | ||||
| ```sh | ||||
| cd $git_repository | ||||
| ext=ttf | ||||
| git lfs track "*.$ext" | ||||
| ``` | ||||
|  | ||||
| Or a directory with: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| git lfs track "images/" | ||||
| ``` | ||||
|  | ||||
| All changes require adding `.gitattributes`. | ||||
| Track the changes to `.gitattributes`: | ||||
|  | ||||
| ```sh | ||||
| git status | ||||
| git add .gitattributes | ||||
| git commit -m "add $ext to lfs" | ||||
| ``` | ||||
|  | ||||
| ## Bash Completion | ||||
|  | ||||
| If bash completion does not work, you'll have to add it: | ||||
|  | ||||
| ```sh | ||||
| git lfs completion bash |  sudo tee /usr/share/bash-completion/completions/git-lfs  | ||||
| ``` | ||||
|  | ||||
| ## Trouble Shooting | ||||
|  | ||||
| You have some file "$FILE".png, which has some problem. | ||||
|  | ||||
| Check the filetype: | ||||
|  | ||||
| ```sh | ||||
| file "$FILE".png | ||||
| ``` | ||||
|  | ||||
| This should say the type is 'image'. | ||||
| If it says the type is 'text', then this file is really just a reminder to `git-lfs` to check out that file. | ||||
|  | ||||
| Check `git-lfs` is expecting that file: | ||||
|  | ||||
| ```sh | ||||
| git lfs status | ||||
| git lfs ls-files | ||||
| ``` | ||||
|  | ||||
| ...then try these commands, and check the filetype again: | ||||
|  | ||||
| ```sh | ||||
| git lfs fetch --all | ||||
| git lfs fsck | ||||
| git lfs checkout | ||||
| git lfs status | ||||
| ``` | ||||
|  | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| --- | ||||
| title: "git" | ||||
| title: "git subtree" | ||||
| tags: [ "data", "git", "subtree" ] | ||||
| --- | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| --- | ||||
| title: "gpg" | ||||
| tags: [ "data", "GPG" ] | ||||
| tags: [ "data", "gpg" ] | ||||
| --- | ||||
|  | ||||
| - [Setup](gpg/basics.md) | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| --- | ||||
| title: "gpg" | ||||
| title: "gpg with vim" | ||||
| tags: [ "vim", "data", "GPG" ] | ||||
| requires: [ "GPG Basics", "vim basics" ] | ||||
| --- | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| --- | ||||
| title: "groff" | ||||
| tags: [ "Data" ] | ||||
| tags: [ "data", "logic" ] | ||||
| --- | ||||
| # Basic Documents | ||||
|  | ||||
|   | ||||
| @@ -4,57 +4,49 @@ tags: [ "Data" ] | ||||
| --- | ||||
| Get the basic config: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| mkdir ~/.config/khard | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| cp /usr/share/doc/khard/examples/khard/khard.conf.example ~/.config/khard.conf | ||||
| ``` | ||||
|  | ||||
| Short list | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| khard list | ||||
| ``` | ||||
|  | ||||
| Longer list | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| khard show | ||||
| ``` | ||||
|  | ||||
| Show from addressbook 'work' | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| khard list -a work | ||||
| ``` | ||||
|  | ||||
| Make a new contact in address book 'family' | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| khard new -a family | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| khard edit grampa | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| khard remove bob | ||||
| ``` | ||||
|  | ||||
| Move contact 'nina' from 'work' to 'home' address book. | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| khard move -a home nina -A work | ||||
| ``` | ||||
|  | ||||
| ## Advanced | ||||
|  | ||||
| Merge: | ||||
|  | ||||
| ```bash | ||||
| khard merge [-a source_abook] [-u uid|search terms [search terms ...]] [-A target_abook] [-U target_uid|-t target_search_terms] | ||||
| ``` | ||||
|  | ||||
|   | ||||
							
								
								
									
										14
									
								
								data/pass.md
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								data/pass.md
									
									
									
									
									
								
							| @@ -1,42 +1,42 @@ | ||||
| --- | ||||
| title: "pass" | ||||
| tags: [ "data" ] | ||||
| requires: "GPG Basics" | ||||
| --- | ||||
| [Video instructions](https://www.hooktube.com/watch?v=hlRQTj1D9LA) | ||||
|  | ||||
| Setup [gpg](./gpg.md) keys. | ||||
|  | ||||
| Show your gpg secret it: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| gpg --list-secret-keys | ||||
| ``` | ||||
|  | ||||
| Then use the id number under `sec` to make a pass repo: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| KEY="$(gpg --list-secret-keys  | grep -m 1 -A1 '^sec' | tail -n 1)" | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| pass init $KEY | ||||
| ``` | ||||
|  | ||||
| To add a basic password, e.g. for `$WEBSITE`: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| pass $WEBSITE | ||||
| ``` | ||||
|  | ||||
| To insert a multiline password, e.g. with a login name: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| pass add -m $WEBSITE | ||||
| ``` | ||||
|  | ||||
| Remove a password: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| pass rm $WEBSITE | ||||
| ``` | ||||
|  | ||||
|   | ||||
| @@ -2,7 +2,8 @@ | ||||
| title: "pdf to txt" | ||||
| tags: [ "data", "pdf", "ocr" ] | ||||
| --- | ||||
| How to translate pdf book images to text (results are very poor, and will need lots of corrections). | ||||
|  | ||||
| How to translate pdfs to text (results are very poor, and will need lots of corrections). | ||||
|  | ||||
| ## Dependencies | ||||
|  | ||||
| @@ -17,8 +18,8 @@ pdftoppm -png *file*.pdf test | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| for x in \*png; do | ||||
|     tesseract -l eng  "$x" - >> *out*.txt | ||||
| for x in *png; do | ||||
|     tesseract -l eng  "$x" - >> out.txt | ||||
| done | ||||
| ``` | ||||
|  | ||||
|   | ||||
| @@ -44,6 +44,9 @@ recset -f "$new_field" --delete $database | ||||
|  | ||||
| - [Extended example](recfiles/extended.md) | ||||
| - [Playing with board games data](recfiles/Board_Games.md) | ||||
| - [Playing with IP addresses](recfiles/IP_ASN.md) | ||||
| - [Manage LaTeX Bibliographies](recfiles/bibliography.md) | ||||
| - [Fixes](recfiles/recfixes.md) | ||||
|  | ||||
| # Resources | ||||
|  | ||||
|   | ||||
							
								
								
									
										16
									
								
								data/recfiles/IP_ASN.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								data/recfiles/IP_ASN.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| --- | ||||
| title: "IP Addresses with Recfiles" | ||||
| tags: [ "data", "recfiles", "games" ] | ||||
| requires: "Recfiles" | ||||
| --- | ||||
|  | ||||
| ## Download the Database | ||||
|  | ||||
| Download the csv data, and separate the ipv4 data from the ipv6. | ||||
|  | ||||
| ```sh | ||||
| curl -Lo ips.zip 'https://www.kaggle.com/api/v1/datasets/download/ipinfo/ipinfo-country-asn' | ||||
| unzip -p ips.zip country_asn.csv | csv2rec | recsel -e "start_ip ~ '\.'"  > ipv4.rec | ||||
| unzip -p ips.zip country_asn.csv | csv2rec | recsel -e "start_ip ~ '::'"  > ipv6.rec | ||||
| ``` | ||||
|  | ||||
							
								
								
									
										121
									
								
								data/recfiles/bibliography.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								data/recfiles/bibliography.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | ||||
| --- | ||||
| title: "Recfile Bibliography for TeX" | ||||
| tags: [ "data", "database", "recfiles", "tex" ] | ||||
| requires: [ "Recfiles", "TeX", "Makefile" ] | ||||
| --- | ||||
|  | ||||
| Store your bibliography in a `recfile` database, then extract any part with `make`. | ||||
|  | ||||
| For example, you could store books like this in `bibliography.rec`: | ||||
|  | ||||
| ```recfile | ||||
| %rec: book | ||||
| %key: slug | ||||
|  | ||||
| slug: thinkingexperience | ||||
| author: H. H. Price | ||||
| title: Thinking and Experience | ||||
| year: 1953 | ||||
| publisher: Harvard University Press, Cambridge | ||||
|  | ||||
| slug: inventingrightwrong | ||||
| author: John Leslie Mackie | ||||
| title: Inventing Right and Wrong | ||||
| year: 1997 | ||||
| publisher: Penguin Books, England | ||||
|  | ||||
| ``` | ||||
|  | ||||
| Run `make book` to extract `book.bib`, ready for LaTeX to use: | ||||
|  | ||||
| ```bib | ||||
| @book{thinkingexperience, | ||||
|    author = {H. H. Price}, | ||||
|    title = {Thinking and Experience}, | ||||
|    year = {1953}, | ||||
|    publisher = {Harvard University Press, Cambridge}, | ||||
| } | ||||
|  | ||||
| @book{inventingrightwrong, | ||||
|    author = {John Leslie Mackie}, | ||||
|    title = {Inventing Right and Wrong}, | ||||
|    year = {1997}, | ||||
|    publisher = {Penguin Books, England}, | ||||
| } | ||||
| ``` | ||||
|  | ||||
| The `makefile` syntax is just a few lines (though admittedly employs some garbled shell-crud): | ||||
|  | ||||
| ```make | ||||
| bibs != grep -Po '%rec: \K.*' bibliography.rec | ||||
| bibfiles = $(patsubst %, %.bib, $(bibs)) | ||||
|  | ||||
| $(bibfiles): %.bib: bibliography.rec | ||||
| 	recsel $< -t $(basename $@) |\ | ||||
| 		sed 's/slug: \(.*\)/@$(basename $@){\1,/g' |\ | ||||
| 		sed 's/^\(\b.*\b\): \(.*\)/   \1 = {\2},/gI' |\ | ||||
| 		sed 's/^$$/}\n/g' > $@ | ||||
| 		echo '}' >> $@ | ||||
| ``` | ||||
|  | ||||
| Here's a longer `bibliography.rec` file, which can also produce `article.bib`: | ||||
|  | ||||
| ```recfile | ||||
| %rec: book | ||||
| %key: slug | ||||
| %type: year int | ||||
| %constraint: year > -2000 | ||||
| %sort: year month | ||||
|  | ||||
| slug: thinkingexperience | ||||
| author: H. H. Price | ||||
| title: Thinking and Experience | ||||
| year: 1953 | ||||
| publisher: Harvard University Press, Cambridge | ||||
|  | ||||
| slug: inventingrightwrong | ||||
| author: John Leslie Mackie | ||||
| title: Inventing Right and Wrong | ||||
| year: 1997 | ||||
| publisher: Penguin Books, England | ||||
|  | ||||
| slug: metaphysicscontemporaryintro | ||||
| author: Michael J. Loux | ||||
| title: Metaphysics: A Contemporary Introduction | ||||
| year: 1998 | ||||
| publisher: Routledge, London | ||||
|  | ||||
| slug: pluralityworlds | ||||
| author: David Lewis | ||||
| title: On the Plurality of Worlds | ||||
| publisher: Blackwell Publishing, Oxford | ||||
| year: 2001 | ||||
|  | ||||
| %rec: article | ||||
| %key: slug | ||||
| %sort: year month | ||||
|  | ||||
| slug: genuinerealisttheory | ||||
| author: John Divers | ||||
| title: A Genuine Realist Theory of Advanced Modalizing | ||||
| year: 1999 | ||||
| pages: 217–240 | ||||
| month: april | ||||
| journaltitle: Mind | ||||
| uri: https://academic.oup.com/mind/article-abstract/108/430/217/975258?redirectedFrom=fulltext | ||||
| volume: 108 | ||||
| publisher: Harvard University Press, Cambridge | ||||
|  | ||||
| slug: twokindsmentalrealism | ||||
| author: Tam\'{a}s Demeter | ||||
| title: Two Kinds of Mental Realism | ||||
| year: 2009 | ||||
| pages: 40:59-71 | ||||
| uri: https://www.researchgate.net/profile/Tamas_Demeter2/publication/41554923_Two_Kinds_of_Mental_Realism/links/0deec53247f5a4ae21000000.pdf | ||||
| month: august | ||||
| journaltitle: Journal for General Philosophy of Science | ||||
| volume: 30 | ||||
| publisher: Harvard University Press, Cambridge | ||||
|  | ||||
| ``` | ||||
|  | ||||
							
								
								
									
										33
									
								
								data/recfiles/recfixes.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								data/recfiles/recfixes.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| --- | ||||
| title: "Recfixes" | ||||
| tags: [ "data", "recfiles" ] | ||||
| requires: "Recfiles" | ||||
| --- | ||||
|  | ||||
| Sometimes `recsel` chokes on a large query, and you need to break the query into chunks with a pipe. | ||||
|  | ||||
| This Kickstarter file has 374,853 records. | ||||
| Here's the chonky query: | ||||
|  | ||||
| ```sh | ||||
| recsel kick.rec -e "Category = 'Games'" -p "Subcategory,Avg(Goal)" -G Subcategory | ||||
| ``` | ||||
|  | ||||
| It breaks down like this: | ||||
|  | ||||
| | Chunk                         | Meaning                                       | | ||||
| |:-----------------------------:|:---------------------------------------------:| | ||||
| | `recsel kick.rec`             | Select records from `kick.rec`                | | ||||
| | `-e "Category = 'Games'"`     | Select only records where Category = 'Games'  | | ||||
| | `-p "Subcategory,Avg(Goal)"`  | Print the Subcategory and average goal        | | ||||
| | `-G "Subcategory"`            | Group by subcategory                          | | ||||
|  | ||||
| Two ways to break the query apart: | ||||
|  | ||||
| ```sh | ||||
| recsel kick.rec -e "Category = 'Games'" | recsel -p "Subcategory,Avg(Goal)" -G "Subcategory" | ||||
|  | ||||
| recsel kick.rec -e "Category = 'Games'" > games.rec | ||||
| recsel games.rec -p "Subcategory" -G "Subcategory" | ||||
| ``` | ||||
|  | ||||
| @@ -1,6 +1,6 @@ | ||||
| --- | ||||
| title: "fonts" | ||||
| tags: [ "distros" ] | ||||
| title: "Ach Linux GPU Setup" | ||||
| tags: [ "arch", "GPU" ] | ||||
| --- | ||||
| # Step 1: Multilib | ||||
|  | ||||
| @@ -60,4 +60,3 @@ You should see 'true' here. | ||||
| ```bash | ||||
| sudo pacman -S --needed lib32-mesa vulkan-radeon lib32-vulkan-radeon vulkan-icd-loader lib32-vulkan-icd-loader xf86-video-amdgpu | ||||
| ``` | ||||
|  | ||||
|   | ||||
| @@ -9,7 +9,7 @@ This works everywhere, including in a bare-ass tty. | ||||
|  | ||||
| Select a keymap, and create a new custom map. | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| su root | ||||
|  | ||||
| basemap=/usr/share/kbd/keymaps/i386/qwerty/pl1.map.gz | ||||
| @@ -22,7 +22,7 @@ gunzip -c $basemap | \ | ||||
|  | ||||
| Tell the system to use this keymap at startup by naming it in the `rc.conf` file: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| echo "KEYMAP=$newmap" >> /etc/rc.conf | ||||
|  | ||||
| cat /etc/rc.conf | ||||
| @@ -33,24 +33,24 @@ reboot | ||||
|  | ||||
| Set layout to British English. | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| setxkbmap -layout gb | ||||
| ``` | ||||
|  | ||||
| Or Polish with: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| setxkbmap -layout pl | ||||
| ``` | ||||
|  | ||||
| | Language | short | | ||||
| |:--------|:------| | ||||
| | Polish  | pl | | ||||
| | Serbian | rs | | ||||
| |:---------|:------| | ||||
| | Polish   | `pl`  | | ||||
| | Serbian  | `rs`  | | ||||
|  | ||||
| Set 'alt + shift', as the command which cycles through the British English, Polish and Serbian keyboard layout. | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| setxkbmap -layout gb,pl,rs -option grp:alt_shift_toggle | ||||
| ``` | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,8 @@ | ||||
| --- | ||||
| title: "wifi" | ||||
| title: "network" | ||||
| tags: [ "Networking" ] | ||||
| --- | ||||
|  | ||||
| # Netstat Stuff | ||||
|  | ||||
| Stats on local net usage within domain. | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| --- | ||||
| title: "wireguard" | ||||
| tags: [ "Networking", "VPN" ] | ||||
| tags: [ "networking", "VPN" ] | ||||
| --- | ||||
| <!-- | ||||
| from  | ||||
| @@ -11,25 +11,22 @@ https://engineerworkshop.com/blog/how-to-set-up-wireguard-on-a-raspberry-pi/ | ||||
|  | ||||
| Install `wireguard-tools` on the server. | ||||
|  | ||||
| ```bash | ||||
| sudo -i | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| su root | ||||
| cd /etc/wireguard | ||||
| ``` | ||||
|  | ||||
| umask 077 | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| wg genkey | tee server_private_key | wg pubkey > server_public_key | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| wg genkey | tee client_private_key | wg pubkey > client_public_key | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
|     echo " | ||||
|     [Interface] | ||||
|     Address = 10.0.0.1/24 | ||||
| @@ -46,20 +43,20 @@ wg genkey | tee client_private_key | wg pubkey > client_public_key | ||||
|     " > /etc/wireguard/wg0.conf | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/wg.conf | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| systemctl enable --now wg-quiqck@wg0 | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| chown -R root:root /etc/wireguard/ | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| chmod -R og-rwx /etc/wireguard/\* | ||||
| ```sh | ||||
| chmod -R og-rwx /etc/wireguard/* | ||||
| ``` | ||||
|  | ||||
| Forward traffic from port 51900 to the server. | ||||
| @@ -72,21 +69,25 @@ Install `wireguard-tools` on the client. | ||||
|  | ||||
| Copy the client private key and server public key to the server (or just fill in the variables). | ||||
|  | ||||
| > server_ip=*your server's public ip* | ||||
|  | ||||
|     echo " | ||||
|     [Interface] | ||||
|     Address = 10.0.0.2/32 | ||||
|     PrivateKey = $(cat client_private_key) | ||||
|     DNS = 9.9.9.9 | ||||
|      | ||||
|     [Peer] | ||||
|     PublicKey = $(cat server_public_key) | ||||
|     Endpoint = $(echo $server_ip:51900) | ||||
|     AllowedIPs = 0.0.0.0/0, ::/0 | ||||
|     " > /etc/wireguard/wg0-client.conf | ||||
| ```sh | ||||
| server_ip=$PUBLIC_IP | ||||
|  | ||||
| > wg-quick up wg0-client | ||||
| echo " | ||||
| [Interface] | ||||
| Address = 10.0.0.2/32 | ||||
| PrivateKey = $(cat client_private_key) | ||||
| DNS = 9.9.9.9 | ||||
|  | ||||
| [Peer] | ||||
| PublicKey = $(cat server_public_key) | ||||
| Endpoint = $(echo $server_ip:51900) | ||||
| AllowedIPs = 0.0.0.0/0, ::/0 | ||||
| " > /etc/wireguard/wg0-client.conf | ||||
|  | ||||
| wg-quick up wg0-client | ||||
|  | ||||
| ``` | ||||
|  | ||||
| ## Extras | ||||
|  | ||||
| @@ -98,6 +99,6 @@ Add multiple peers by copying the `[peer]` section (they each get called `peer`) | ||||
|  | ||||
| Make a standard client configuration, then: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| qrencode -t ansiutf8 < /etc/wireguard/mobile_user.conf | ||||
| ``` | ||||
|   | ||||
| @@ -1,60 +1,63 @@ | ||||
| --- | ||||
| title: "wireless" | ||||
| tags: [ "Networking" ] | ||||
| tags: [ "networking" ] | ||||
| --- | ||||
|  | ||||
| # Check wifi's working | ||||
| ```bash | ||||
| Check wifi's working | ||||
|  | ||||
| ```sh | ||||
| lspci -k | ||||
| ``` | ||||
|  | ||||
| Or for usb wifi:  | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| dmesg | grep usbcore | ||||
| ``` | ||||
|  | ||||
| ... and hopefully it'll say the new interface is registered. | ||||
| ...and hopefully it'll say the new interface is registered. | ||||
|  | ||||
| # Check if a wifi interface has been created | ||||
| Check if a wifi interface has been created | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| ip link | ||||
| ``` | ||||
|  | ||||
| or | ||||
| ...or | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| iw dev | ||||
| ``` | ||||
|  | ||||
| Assuming it's wlan0, bring it up with  | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| ip link set wlan0 up | ||||
| ``` | ||||
|  | ||||
| Error messages probably means your wireless chipset requires a firmware to function.  In this case, check the kernel messages for firmware being loaded | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| dmesg | grep firmware | ||||
| ``` | ||||
|  | ||||
| # Utilities | ||||
|  | ||||
| iw doesn't do wpa/wpa2.  wpa_supplicant does everything.  iwd does everything except WEXT encryption. | ||||
| - `iw` doesn't do wpa/wpa2. | ||||
| - `iwd` does everything except WEXT encryption. | ||||
| - `wpa_supplicant` does everything. | ||||
|  | ||||
| # Connecting | ||||
|  | ||||
| Get the link status: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| iw dev wlan0 link | ||||
| ``` | ||||
|  | ||||
| Scan for available points: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| iw dev wlan0 scan | ||||
| ``` | ||||
|  | ||||
|   | ||||
| @@ -3,55 +3,55 @@ title: "wpa_supplicant" | ||||
| tags: [ "Networking" ] | ||||
| --- | ||||
|  | ||||
| wpa_supplicant configurations are stored in /etc/wpa_supplicant/wpa_supplicant-wlan0 (or equivalent). | ||||
| `wpa_supplicant` configurations are stored in `/etc/wpa_supplicant/wpa_supplicant-wlan0` (or equivalent). | ||||
|  | ||||
| ## WiFi Connection | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| wpa_cli | ||||
| ``` | ||||
|  | ||||
| Once in, scan the network, add an empty place to store credentials, then input them. | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| scan | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| scan_results | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| add_network | ||||
| ``` | ||||
|  | ||||
| This outputs a network number, e.g. '3'.  This is the new network you'll work with. | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| set_network *3* ssid *"Kosachok Cafe"* | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| set_network 3 psk *"Kosachok2019"* | ||||
| ``` | ||||
|  | ||||
| OR (for no password) | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| set_network *3* key_mgmt NONE | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| enable_network 3 | ||||
| ``` | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| save_config | ||||
| ``` | ||||
|  | ||||
| This takes a while to connect, so to speed things up, restart the service: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| sudo sv restart wpa_supplicant | ||||
| ``` | ||||
|  | ||||
| @@ -59,13 +59,13 @@ sudo sv restart wpa_supplicant | ||||
|  | ||||
| You can script like this: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| wpa_cli add_network | ||||
| ``` | ||||
|  | ||||
| That returns an ID, so you can say: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| newNetwork="$(wpa_cli add_network)" | ||||
| ``` | ||||
|  | ||||
| @@ -73,19 +73,19 @@ Then `$newNetwork` would equal that number, and you can add/ remove networks wit | ||||
|  | ||||
| But remember to escape the quotes, so adding a network would be: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| wpa_cli set_network *3* psk *\""passphrase"\"* | ||||
| ``` | ||||
|  | ||||
| ## Generating Keys Manually | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| wpa_passphrase [ssid] [password] | ||||
| ``` | ||||
|  | ||||
| For example: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| wpa_passphrase 'Cafe Kosachok' 'Kosachok2019' | ||||
| ``` | ||||
|  | ||||
| @@ -95,8 +95,11 @@ If you encounter problems, you will probably need to delete the old device pid i | ||||
|  | ||||
| Next up, start wpa_supplicant: | ||||
|  | ||||
| ```bash | ||||
| ```sh | ||||
| wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant/wpa_supplicant-wlan0 | ||||
| ``` | ||||
|  | ||||
| The -B flag runs this as a background process.  Remove this to see real-time output in order to solve problems.  The -i flag denotes the physical device used for the wifi.  The -c flag points to the configuration file for use. | ||||
| The `-B` flag runs this as a background process. | ||||
| Remove this to see real-time output in order to solve problems. | ||||
| The `-i` flag denotes the physical device used for the wifi. | ||||
| The `-c` flag points to the configuration file for use. | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| --- | ||||
| title: "Makefiles" | ||||
| title: "make help target" | ||||
| tags: [ "system", "make", "help" ] | ||||
| --- | ||||
|  | ||||
|   | ||||
| @@ -1,8 +1,36 @@ | ||||
| --- | ||||
| title: "kernel" | ||||
| title: "kernel modules" | ||||
| tags: [ "system" ] | ||||
| --- | ||||
|  | ||||
| Kernel modules live in lib/modules/$(uname -r) | ||||
|  | ||||
| ## Change | ||||
|  | ||||
| Load them with | ||||
|  | ||||
| ```sh | ||||
| modprobe ath9k | ||||
| ``` | ||||
|  | ||||
| Or remove one with | ||||
|  | ||||
| ```sh | ||||
| modprove uvcvideo | ||||
| ``` | ||||
|  | ||||
| The PC's irritating speaker beep can be really annoying. Disable it with: | ||||
|  | ||||
| ```sh | ||||
| modprobe -r pcspeaker | ||||
| ``` | ||||
|  | ||||
| Permanently disable a module by blacklisting it in `/etc/modprobe.d`: | ||||
|  | ||||
| ```sh | ||||
| echo 'blacklist pcspkr' > /etc/modprobe.d/*nobeep*.conf | ||||
| ``` | ||||
|  | ||||
| Check which kernel modules are loaded into memory: | ||||
|  | ||||
| ```sh | ||||
|   | ||||
		Reference in New Issue
	
	Block a user