Compare commits
10 Commits
efecc52605
...
1c3ae5b8f8
Author | SHA1 | Date | |
---|---|---|---|
1c3ae5b8f8 | |||
afcf272607 | |||
3059c14648 | |||
7c059148d5 | |||
023e99436e | |||
d87e798d38 | |||
20b46d3b02 | |||
052a919f12 | |||
035a3c2110 | |||
2ca498cf20 |
|
@ -3,6 +3,7 @@ Date: 2021-04-08
|
|||
Category: Writing
|
||||
Summary: Details about the backup system for all of my data.
|
||||
Wide: true
|
||||
Short: 1
|
||||
|
||||
[TOC]
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ Date: 2021-04-10
|
|||
Category: Writing
|
||||
Summary: Bypass ISP blocked ports using VPN port forwarding for public access.
|
||||
Wide: true
|
||||
Short: 2
|
||||
|
||||
[TOC]
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ Title: Hand of Ozymandias
|
|||
Date: 2012-03-23
|
||||
Category: Creations
|
||||
Summary: A withered hand I welded out of scrap metal.
|
||||
Short: 3
|
||||
|
||||
I was visiting my cousins in Radium, BC and decided to learn stick welding at
|
||||
their shop. I wanted to create a sculpture, so with pieces of scrap metal I
|
||||
|
|
|
@ -2,6 +2,7 @@ Title: LED Dress
|
|||
Date: 2016-03-18
|
||||
Category: Creations
|
||||
Summary: A dress made out of LEDs that twinkle like stars.
|
||||
Short: 4
|
||||
|
||||
A friend of mine was attending a stars and constellations themed ball. She
|
||||
wanted to wear a dress that was lit up with LEDs acting as twinkling stars.
|
||||
|
|
|
@ -2,6 +2,7 @@ Title: Remote Control Light Switch
|
|||
Date: 2014-10-09
|
||||
Category: Creations
|
||||
Summary: A device to toggle my lights remotely.
|
||||
Short: 5
|
||||
|
||||
I wanted the ability to toggle my bedroom light remotely for convenience. I
|
||||
designed a circuit that allows me to control my light with any
|
||||
|
|
|
@ -3,6 +3,7 @@ Date: 2020-10-31
|
|||
Category: Writing
|
||||
Summary: A recommendation on which flavour of Linux to run.
|
||||
Wide: true
|
||||
Short: 6
|
||||
|
||||
[TOC]
|
||||
|
||||
|
@ -60,8 +61,8 @@ familiarity with it.
|
|||
|
||||
Since Debian requires all its software to be free and open source, proprietary
|
||||
hardware drivers aren't included in its main repo. This can make installing
|
||||
Debian difficult if your hardware requires non-free drivers. You'll need to use
|
||||
a non-free installation image found here:
|
||||
Debian difficult if your hardware requires proprietary drivers. You'll need to use
|
||||
an installation image found here:
|
||||
|
||||
<https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/>
|
||||
|
||||
|
|
6
content/pages/text-files.md
Normal file
6
content/pages/text-files.md
Normal file
|
@ -0,0 +1,6 @@
|
|||
Title: Text Files
|
||||
Template: text-files
|
||||
Slug: x
|
||||
|
||||
|
||||
Qot.
|
|
@ -1,7 +1,8 @@
|
|||
Title: Man’s Reach Exceeds His Grasp
|
||||
Title: Man's Reach Exceeds His Grasp
|
||||
Date: 2012-04-11
|
||||
Category: Creations
|
||||
Summary: My first attempt at painting with acrylic.
|
||||
Short: 7
|
||||
|
||||
The painting is called “Man’s Reach Exceeds His Grasp”. I've always wanted to
|
||||
try painting and thought I had a good idea, so after a couple of drawings I
|
||||
|
|
|
@ -2,6 +2,7 @@ Title: Automatic Plant Waterer
|
|||
Date: 2014-06-05
|
||||
Category: Creations
|
||||
Summary: A device that automatically waters plants.
|
||||
short: 8
|
||||
|
||||
One day I decided watering my one plant was too much work, so I automated it.
|
||||
It's also great for when I'm on vacation. The plant is a year old now and
|
||||
|
|
|
@ -2,6 +2,7 @@ Title: Solar Car
|
|||
Date: 2013-04-27
|
||||
Category: Creations
|
||||
Summary: About my time volunteering with the University of Calgary Solar Car Team, where I designed a maximum power point tracker.
|
||||
Short: 9
|
||||
|
||||
I joined the University of Calgary Solar Car Team in my first semester for a
|
||||
chance to learn things, gain practical experience, and meet people that share my
|
||||
|
|
47
content/text/air-quality.txt
Normal file
47
content/text/air-quality.txt
Normal file
|
@ -0,0 +1,47 @@
|
|||
aka pollution, dust
|
||||
|
||||
Study linking air pollution to mental disorders:
|
||||
https://www.kcl.ac.uk/news/study-supports-link-between-traffic-related-air-pollution-and-mental-disorders
|
||||
|
||||
Calgary air quality:
|
||||
https://www.cbc.ca/news/canada/calgary/calgary-air-quality-map-ranking-1.4547149
|
||||
|
||||
Woodgears (Matthias Wandel) page on dust:
|
||||
https://woodgears.ca/dust/dylos.html
|
||||
https://woodgears.ca/dust_collector/index.html
|
||||
|
||||
Study of low-cost sensor accuracy:
|
||||
https://www.hindawi.com/journals/js/2018/5096540/
|
||||
|
||||
Experiments on DIY air purifier:
|
||||
https://news.t0.vc/QZKP
|
||||
https://dyno-might.github.io/2020/12/15/some-real-data-on-a-DIY-box-fan-air-purifier/
|
||||
|
||||
|
||||
Sensors
|
||||
=======
|
||||
|
||||
Fancy serial one with inlet:
|
||||
- SDS011
|
||||
- $17 USD
|
||||
https://www.aliexpress.com/item/32606349048.html
|
||||
|
||||
One Farzad gave me:
|
||||
- DSM501A
|
||||
- $4 USD
|
||||
https://www.aliexpress.com/item/1005001710572424.html
|
||||
|
||||
Fancy commercial one:
|
||||
- DC1100 PRO
|
||||
- $289 USD
|
||||
|
||||
Professional fluke:
|
||||
- Fluke 985
|
||||
- $7000 CAD
|
||||
|
||||
Good digikey one:
|
||||
- https://www.digikey.ca/en/products/detail/honeywell-sensing-and-productivity-solutions/HPMA115S0-XXX/7202204
|
||||
- connector? https://www.digikey.ca/en/products/detail/molex/0151340803/6198165 --- NO
|
||||
- cable per sensor:
|
||||
- 4 x 900-2149211112-ND (pre-crimped lead)
|
||||
- 1 x WM1726-ND (connector housing)
|
44
content/text/android-app-decompiling.txt
Normal file
44
content/text/android-app-decompiling.txt
Normal file
|
@ -0,0 +1,44 @@
|
|||
aka hacking apk reverse engineering
|
||||
|
||||
|
||||
Guides:
|
||||
|
||||
https://blog.securityevaluators.com/how-to-view-tls-traffic-in-androids-logs-6a42ca7a6e55
|
||||
https://archive.ph/zDaV6
|
||||
- used during Lutron hacking
|
||||
|
||||
Tools:
|
||||
$ sudo apt install adb apktool openjdk-11-jdk-headless zipalign
|
||||
$ locate apktool
|
||||
- replace apktool with new version:
|
||||
- https://github.com/iBotPeaches/Apktool/releases
|
||||
$ sudo mv /usr/share/apktool/apktool.jar /usr/share/apktool/apktool.jar.orig
|
||||
$ sudo mv ~/Downloads/apktool_2.5.0.jar /usr/share/apktool/apktool.jar
|
||||
|
||||
|
||||
Get APK file:
|
||||
- find name of the app
|
||||
$ adb shell pm list packages | grep covid
|
||||
- find path of the app
|
||||
$ adb shell pm path ca.ab.gov.covidrecordsverifier
|
||||
- pull the apk
|
||||
$ adb pull [path] .
|
||||
|
||||
Decompile:
|
||||
$ apktool d application.apk -o output/
|
||||
|
||||
Compile:
|
||||
$ apktool b output/ --use-aapt2 -o patched.apk
|
||||
|
||||
Sign:
|
||||
- the following just once:
|
||||
$ keytool -genkey -v -keystore release.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
|
||||
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore release.keystore patched.apk alias_name
|
||||
|
||||
Install:
|
||||
$ adb install patched.apk
|
||||
|
||||
Read logs:
|
||||
$ adb logcat -c
|
||||
|
||||
|
67
content/text/anti-aging.txt
Normal file
67
content/text/anti-aging.txt
Normal file
|
@ -0,0 +1,67 @@
|
|||
Slowing Aging
|
||||
=============
|
||||
|
||||
- Avoid DNA damage (wear sunscreen)
|
||||
- Eat less - caloric restriction
|
||||
- Eat less protein
|
||||
- Do exercise (HIIT)
|
||||
- Be cold
|
||||
- Be hot
|
||||
|
||||
... these trigger longevity genes to trick body into preserving genome
|
||||
|
||||
|
||||
Reversing aging
|
||||
===============
|
||||
|
||||
Theory
|
||||
------
|
||||
|
||||
- Shinya Yamanaka discovered 4 factors that reset epigenome of cell back to pluriportent stem cell
|
||||
- Myc, Oct3/4, Sox2 and Klf4
|
||||
- dont do it all, would turn into tumor
|
||||
- suggests there are ways to revert cells and reverse ageing
|
||||
- David Sinclar's lab reversed aging in old mice so they could see like they were young again
|
||||
- used 3/4 of the reprogramming factors, not Myc as causes cancer
|
||||
- can turn system on and off to limit reversal
|
||||
|
||||
|
||||
Resources
|
||||
=========
|
||||
|
||||
- Veratasium How to Slow Aging:
|
||||
https://www.youtube.com/watch?v=QRt7LjqJ45k
|
||||
|
||||
- JRE David Sinclair #1:
|
||||
https://www.youtube.com/watch?v=HOTS0HS7aq4
|
||||
|
||||
Notes:
|
||||
Calorie restriction, mostly vegetarian diet, avoid sugar and carbs.
|
||||
On weekends, he exercises at the gym and then sits in a hot sauna before plunging himself into an ice-cold pool, as well as tracks his biomarkers regularly.
|
||||
Takes vitamin D, vitamin K2, and aspirin.
|
||||
Takes each morning: resveratrol, NMN, and metformin
|
||||
|
||||
- JRE David Sinclair #2:
|
||||
https://www.youtube.com/watch?v=ZGLL77wYxe8
|
||||
|
||||
0:00 The new book, resveratrol
|
||||
7:00 NMN and NAD+, metformin and exercise
|
||||
18:00 Sinclair’s family went on a safari
|
||||
48:30 back to the anti-aging book, longevity
|
||||
52:20 Sinclair’s healthy 80 year old father: “He’s fitter than me”, his rebel grandmother
|
||||
1:10:00 intermittent fasting
|
||||
1:15:50 I.V. NAD+
|
||||
1:18:00 nutrition, yogurt and other food
|
||||
1:32:00 resveratrol, colorful foods
|
||||
1:41:00 sleep
|
||||
1:45:40 what should people be doing? (Sinclair is wrong about airport scanners)
|
||||
1:48:25 NMN and NR online
|
||||
1:50:25 CRISPR/ genetic engineering
|
||||
2:08:00 blood rejuvenation
|
||||
2:12:50 what is on the horizon? senescence cells, “We’ve learned how to fly…”
|
||||
|
||||
- Age reduction breakthrough:
|
||||
https://joshmitteldorf.scienceblog.com/2020/05/11/age-reduction-breakthrough/
|
||||
|
||||
- Yamanaka paper:
|
||||
https://www.cell.com/fulltext/S0092-8674(06)00976-7
|
127
content/text/design.txt
Normal file
127
content/text/design.txt
Normal file
|
@ -0,0 +1,127 @@
|
|||
UI / UX
|
||||
=======
|
||||
|
||||
Principals:
|
||||
https://news.t0.vc/EKUD/c#punnerud1596400621
|
||||
|
||||
Little details:
|
||||
https://littlebigdetails.com/
|
||||
|
||||
Choosing a colour palette:
|
||||
https://refactoringui.com/previews/building-your-color-palette/
|
||||
|
||||
What not to do:
|
||||
https://annoying.technology/
|
||||
https://grumpy.website/
|
||||
|
||||
|
||||
Web Design / Inspo
|
||||
==================
|
||||
|
||||
https://breakermag.com/trapped-at-sea-with-cryptos-nouveau-riche/
|
||||
- Good mobile site, very clean and just works
|
||||
|
||||
https://www.maxhallinan.com/posts/2018/12/07/little-languages/
|
||||
- Good, simple blog. Lacks an image-first menu though.
|
||||
|
||||
https://taimur.me/posts/notes-from-malcolm-gladwell-s-writing-masterclass-part-1
|
||||
- Another left-aligned simple blog
|
||||
|
||||
http://haya2now.jp/en.html
|
||||
- Cool dashboard UI for japanese space probe
|
||||
|
||||
https://wiki.xxiivv.com/#devine+lu+linvega
|
||||
- Devine Lu Linvega: Some portfolio of a designer that makes and uses lots of tools and systems
|
||||
|
||||
https://maki.cat
|
||||
- css / html god that's into japanese culture and cute things
|
||||
|
||||
https://www.thecut.com/2019/05/how-scammers-trick-people-into-thinking-theyre-wealthy.html
|
||||
- very sexy clean cut news website
|
||||
|
||||
https://techcrunch.com/2019/05/06/windows-gets-a-new-terminal/
|
||||
- clean blog post
|
||||
|
||||
https://wattenberger.com/
|
||||
- she does lots of stuff
|
||||
|
||||
https://devonzuegel.github.io/
|
||||
- also does lots of stuff, cool projects, notes
|
||||
|
||||
http://nolannicholson.com/index.html
|
||||
- dead simple portfolio website. perfect, maybe just add images
|
||||
- this might have changed?
|
||||
|
||||
https://vim.reversed.top/
|
||||
- card like interface
|
||||
|
||||
https://simplenote.com/
|
||||
- great product website
|
||||
|
||||
https://www.gwern.net/index
|
||||
- latex looking site, guy does a lot of stuff
|
||||
|
||||
https://caro.io/
|
||||
- good folio site with squares like what I wanted
|
||||
|
||||
https://markosaric.com/
|
||||
- marketing guy that has a nice dark mode theme
|
||||
- this guy tricked me into reading an ad: https://news.t0.vc/VBHA blew up on HN
|
||||
|
||||
https://anders.unix.se/
|
||||
- very clean readable website
|
||||
|
||||
https://schollz.com
|
||||
- also simple website with projects and blog. guy does a lot, very inspiring
|
||||
|
||||
https://www.unwoke.hr
|
||||
- great design for job board
|
||||
|
||||
https://ciechanow.ski/archives/
|
||||
- very informative blog with clean demos
|
||||
|
||||
https://mazaj.ca
|
||||
- odai's friend arabic coffee website
|
||||
- beautiful design, graphics, and business plan
|
||||
|
||||
https://www.brandur.org/articles
|
||||
- sexy clean articles
|
||||
|
||||
https://secret.club/2021/05/13/source-engine-rce-join.html
|
||||
- great blog design
|
||||
|
||||
https://www.munichre.com
|
||||
- nice official business looking site
|
||||
|
||||
|
||||
Motherfucking websites:
|
||||
https://motherfuckingwebsite.com/
|
||||
http://bettermotherfuckingwebsite.com/
|
||||
https://perfectmotherfuckingwebsite.com/
|
||||
https://thebestmotherfucking.website/
|
||||
https://bestmotherfucking.website/
|
||||
https://evenbettermotherfucking.website/
|
||||
|
||||
https://inconvergent.net/
|
||||
https://img.inconvergent.net/generative/78b7266.html
|
||||
- cool artist's minimalistic site
|
||||
|
||||
Crazy websites:
|
||||
- https://news.t0.vc/EYHQ (list)
|
||||
- https://www.kickscondor.com/
|
||||
- https://yvettesbridalformal.p1r8.net/
|
||||
|
||||
|
||||
Colors:
|
||||
|
||||
Nice colors:
|
||||
- #83a8f3 (close to cornflower blue)
|
||||
|
||||
|
||||
Fonts
|
||||
=====
|
||||
|
||||
Baskerville:
|
||||
https://fonts.google.com/specimen/Libre+Baskerville#pairings
|
||||
- NYT study said it was best?
|
||||
|
19
content/text/dsp-sdr.txt
Normal file
19
content/text/dsp-sdr.txt
Normal file
|
@ -0,0 +1,19 @@
|
|||
aka Signal Conditioning, software defined radio, gnu radio, rtl-sdr
|
||||
|
||||
Good intro:
|
||||
http://pyageng.mpastell.com/book/dsp.html
|
||||
http://pyageng.mpastell.com/book/sampling.html#cid7
|
||||
|
||||
Textbook list:
|
||||
https://dspguru.com/dsp/books/favorites/
|
||||
|
||||
DSP Guide:
|
||||
http://www.dspguide.com/
|
||||
|
||||
GNU Radio cookbook:
|
||||
https://cdn.hackaday.io/files/1648847054397056/GRC%20Cook%20Book.pdf
|
||||
|
||||
SDR assignments:
|
||||
https://greatscottgadgets.com/sdr/
|
||||
|
||||
|
28
content/text/esp8266.txt
Normal file
28
content/text/esp8266.txt
Normal file
|
@ -0,0 +1,28 @@
|
|||
Datasheet:
|
||||
https://www.espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf
|
||||
Tech Reference:
|
||||
https://www.espressif.com/sites/default/files/documentation/esp8266-technical_reference_en.pdf
|
||||
PCB Design Guidelines:
|
||||
https://www.espressif.com/sites/default/files/documentation/esp8266_hardware_design_guidelines_en.pdf
|
||||
|
||||
Pins
|
||||
====
|
||||
|
||||
Multiplexing analog input:
|
||||
https://internetofhomethings.com/homethings/?p=530
|
||||
|
||||
Digital:
|
||||
- has hysterisis
|
||||
- Vil = 0.25 * Vin
|
||||
- Vih = 0.75 * Vin
|
||||
|
||||
ADC:
|
||||
- only 1 analog pin, A0
|
||||
- 10 bits, 0-1023
|
||||
- only supports 0.2 - 1.2 V, unless there's on-board voltage divider
|
||||
|
||||
|
||||
WeMos D1 Mini
|
||||
=============
|
||||
|
||||
- has on board 3V3 ADC divider
|
249
content/text/linux.txt
Normal file
249
content/text/linux.txt
Normal file
|
@ -0,0 +1,249 @@
|
|||
Enter today's date in ISO format:
|
||||
$ date -I
|
||||
To include seconds:
|
||||
$ date -Is
|
||||
|
||||
Ping scan subnet (find a Raspberry Pi):
|
||||
$ nmap -sn 192.168.0.0/24
|
||||
Port 22 scan subnet:
|
||||
$ nmap -sS -p 22 192.168.10.0/24
|
||||
- run as root to get device names
|
||||
|
||||
To SCP with spaces in path, escape the spaces and surround the whole arg with quotes.
|
||||
|
||||
Serial Terminal:
|
||||
Minicom /dev/ttyACM0 115200 8N1 w/ Hardware flow control: yes works.
|
||||
If not, send Break (ctrl-a F).
|
||||
To enable on server side (systemd):
|
||||
$ systemctl enable serial-getty@ttyS0.service
|
||||
$ systemctl start serial-getty@ttyS0.service
|
||||
|
||||
How to list wifi networks:
|
||||
$ sudo iw dev wlp58s0 scan
|
||||
|
||||
Show top 10 edited files in git repo:
|
||||
$ git log --pretty=format: --name-only | sort | uniq -c | sort -rg | head -10
|
||||
|
||||
Recursively hash directory, then hash result:
|
||||
$ md5deep -rl . | sort | md5sum
|
||||
|
||||
Redirect stderr to stdout and pipe: |&
|
||||
Redirect stderr to stdout: 2>&1 (do it after)
|
||||
|
||||
Copy torrent but use hardlinks instead:
|
||||
$ cp -al source dest
|
||||
|
||||
Byobu tmux toggle function keys:
|
||||
Shift + F12
|
||||
- do this if Alt+Arrow is letters
|
||||
|
||||
Get rid of extra byobu sessions:
|
||||
$ tmux ls | grep ^_ | cut -f1 "-d:" | xargs -t -L1 -r tmux kill-session -t
|
||||
|
||||
Make a PDF look scanned:
|
||||
$ convert "$1" -alpha Off -density 150 -colorspace gray -blur 0.5x0.5 -rotate 0.4 -level 40%,60% "scanned-$1"
|
||||
|
||||
Insert last arg: alt+.
|
||||
Insert 2nd last arg: alt+_ alt+.
|
||||
Insert 3rd last arg: alt+_ 2 alt+.
|
||||
|
||||
SSH reverse tunnel router admin:
|
||||
$ ssh -L 2222:192.168.0.1:80 user@10.9.0.3
|
||||
- open localhost:2222 in browser
|
||||
|
||||
Select a display over ssh:
|
||||
$ export DISPLAY=:1
|
||||
|
||||
Spawn new shell with group assignments:
|
||||
$ exec su -l $USER
|
||||
|
||||
xargs:
|
||||
- converts stdin to arguments for commands that dont accept stdin
|
||||
- used with echo, compacts a list to one line
|
||||
- see each command xargs runs: --verbose
|
||||
- dont run if stdin is empty: -r
|
||||
- run command once per line: -L1
|
||||
- convert stdin to argument:
|
||||
$ echo 'foo' | xargs mkdir
|
||||
- convert list to one line:
|
||||
$ cat foo.txt | xargs echo
|
||||
- run a command for each line:
|
||||
$ cat foo.txt | xargs -L0 --verbose echo
|
||||
|
||||
|
||||
Systemd
|
||||
=======
|
||||
|
||||
Journalctl
|
||||
----------
|
||||
|
||||
Examples:
|
||||
$ journalctl --utc
|
||||
$ journalctl -b # display logs since boot
|
||||
$ journalctl --since "2015-01-10" --until "2015-01-11 03:00"
|
||||
$ journalctl --since 09:00 --until "1 hour ago"
|
||||
$ journalctl -u nginx.service -u php-fpm.service --since today
|
||||
|
||||
|
||||
Bash scripting
|
||||
==============
|
||||
|
||||
Always quote variables when you use them.
|
||||
Run set -eu to crash when on errors and when using unset variables.
|
||||
Use basedir to just get filename.
|
||||
|
||||
Gpg sign, encrypt, and armour:
|
||||
gpg -sear [NAME]
|
||||
|
||||
Get window's handle with xdotool:
|
||||
xdotool search --name "Google Play"
|
||||
|
||||
Get window's position and size with xdotool:
|
||||
xdotool getwindowgeometry 44047673
|
||||
Subtract 10 from the Y position, and 82 from the Y
|
||||
|
||||
|
||||
Keyboard Shortcuts
|
||||
==================
|
||||
|
||||
Focus Keepass, Super+Z: bash /home/tanner/scripts/focuskeepass.sh
|
||||
Arrange Desktop, Super+X: /home/tanner/scripts/arrangedesktop.sh
|
||||
Home Controller: Super+C: /home/tanner/scripts/homecontroller.sh
|
||||
Toggle light 0, Super+1: /home/tanner/scripts/homecontroller.sh 0
|
||||
Open terminal, Super+T: xfce4-terminal
|
||||
Rofi, Super+`: rofi -combi-modi window,run -show combi -normal-window
|
||||
|
||||
** set "switch windows" to alt-tab to make it normal
|
||||
|
||||
Make right alt normal:
|
||||
- tweak tool > keyboard & mouse > Additional Layout Options button
|
||||
- expand "Key to choose 3rd level"
|
||||
- deselect Right Alt
|
||||
|
||||
|
||||
Nginx
|
||||
=====
|
||||
|
||||
Log rotate /etc/logrotate.d/nginx:
|
||||
size 100M
|
||||
missingok
|
||||
rotate 20
|
||||
compress
|
||||
delaycompress
|
||||
notifempty
|
||||
create 0640 www-data adm
|
||||
|
||||
Logging /etc/nginx/nginx.conf:
|
||||
# Make sure to copy the GeoIP files!
|
||||
geoip_country /usr/share/GeoIP/GeoIP.dat;
|
||||
geoip_city /usr/share/GeoIP/GeoIPCity.dat;
|
||||
log_format tannersformat '[$time_iso8601] $remote_addr ($geoip_city, $geoip_country_code) $request_method "$server_name$request_uri" $status "$http_referer" "$http_user_agent"';
|
||||
access_log /var/log/nginx/access.log tannersformat;
|
||||
error_log /var/log/nginx/error.log;
|
||||
|
||||
$ wget https://t0.vc/f/GeoIPCity.dat
|
||||
$ sudo mv GeoIPCity.dat /usr/share/GeoIP/GeoIPCity.dat
|
||||
|
||||
|
||||
OpenVPN
|
||||
=======
|
||||
|
||||
Setup:
|
||||
$ sudo su root
|
||||
- follow steps here:
|
||||
- https://wiki.debian.org/OpenVPN#TLS-enabled_VPN
|
||||
- skip editing vars
|
||||
- add random data to /etc/openvpn/easy-rsa/pki/.rnd to get rid of error messages
|
||||
- use the # ./easyrsa [command] methods
|
||||
- encrypt CA with password
|
||||
- build the optional intermediate CA
|
||||
- https://wiki.debian.org/OpenVPN#Static-Key_VPN
|
||||
- improves security
|
||||
- set auth SHA256
|
||||
- save config file to /etc/openvpn/server.conf
|
||||
- * set root's shell back to /bin/false *
|
||||
|
||||
Static IP:
|
||||
- create a client (ie. "mediaserver") with easyrsa
|
||||
$ mkdir /etc/openvpn/ccd
|
||||
- edit /etc/openvpn/ccd/mediaserver:
|
||||
ifconfig-push 10.8.0.100 255.255.255.0
|
||||
- edit /etc/openvpn/server.conf:
|
||||
client-config-dir /etc/openvpn/ccd
|
||||
|
||||
Routing / port forward:
|
||||
- edit /etc/sysctl.conf:
|
||||
net.ipv4.ip_forward=1
|
||||
- edit /etc/default/ufw:
|
||||
DEFAULT_FORWARD_POLICY="ACCEPT"
|
||||
- edit /etc/ufw/before.rules at the top:
|
||||
*nat
|
||||
:POSTROUTING ACCEPT [0:0]
|
||||
# ssh port forwarding
|
||||
-A PREROUTING -d 159.203.223.101 -p tcp --dport 43655 -j DNAT --to-dest 10.8.0.100:43655
|
||||
-A POSTROUTING -d 10.8.0.100 -p tcp --dport 43655 -j SNAT --to-source 10.8.0.1
|
||||
# Allow traffic from OpenVPN client to eth0
|
||||
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
|
||||
COMMIT
|
||||
$ sudo ufw disable && sudo ufw enable
|
||||
$ sudo sysctl net.ipv4.ip_forward=1
|
||||
- source: https://gist.github.com/kimus/9315140
|
||||
|
||||
Systemd fix:
|
||||
- ensure config file is at /etc/openvpn/server.conf
|
||||
$ sudo systemctl start openvpn@server
|
||||
$ sudo systemctl enable openvpn@client
|
||||
$ sudo systemctl daemon-reload
|
||||
$ sudo service openvpn restart
|
||||
- verify stop / start with ps aux | grep openvpn
|
||||
- do same for "client"
|
||||
- source: https://ubuntu.com/server/docs/service-openvpn
|
||||
|
||||
Systemd client:
|
||||
$ sudo mv vpn2-client.ovpn /etc/openvpn/client.conf
|
||||
$ sudo chown root:root /etc/openvpn/client.conf
|
||||
$ sudo chmod 600 /etc/openvpn/client.conf
|
||||
- if there's a password:
|
||||
$ sudo -E vim /etc/openvpn/auth.txt
|
||||
$ sudo chmod 600 /etc/openvpn/auth.txt
|
||||
- add password to file
|
||||
- add "askpass /etc/openvpn/auth.txt" to config file
|
||||
- set up systemd:
|
||||
$ sudo systemctl start openvpn@client
|
||||
$ sudo systemctl enable openvpn@client
|
||||
$ sudo systemctl daemon-reload
|
||||
$ sudo service openvpn restart
|
||||
|
||||
Disable routing traffic over VPN:
|
||||
- remove all "redirect-gateway" lines in client config
|
||||
|
||||
Gnome client:
|
||||
- vpn settings, add
|
||||
- import from file, select vpn2-client.ovpn
|
||||
- add missing private key from /home/tanner/.cert/nm-openvpn/
|
||||
- add password gush-tilt-shine-chute-pace-gecko
|
||||
|
||||
|
||||
New Desktop
|
||||
-----------
|
||||
|
||||
$ sudo apt install git tree htop byobu unattended-upgrades curl axel man-db vim vim-gtk netcat xfce4-terminal firefox chromium keepassxc mpv network-manager-openvpn-gnome bash-completion xdotool mlocate ncdu
|
||||
$ sudo apt remove firefox-esr
|
||||
- set up home directory...
|
||||
|
||||
Firefox extentions:
|
||||
- Cookie AutoDelete
|
||||
- Decentraleyes
|
||||
- HTTPS Everywhere
|
||||
- I dont care about cookies
|
||||
- New Tab Override
|
||||
- NoScript
|
||||
- Privacy Badger
|
||||
- SponsorBlock
|
||||
- uBlock Origin
|
||||
|
||||
Fix popping after audio stops (disable audio power save):
|
||||
$ sudo bash -c 'echo 0 > /sys/module/snd_hda_intel/parameters/power_save'
|
||||
- to persist append to /etc/modprobe.d/audio_disable_powersave.conf:
|
||||
options snd_hda_intel power_save=0
|
||||
|
41
content/text/meditation.txt
Normal file
41
content/text/meditation.txt
Normal file
|
@ -0,0 +1,41 @@
|
|||
Notes from Andy
|
||||
---------------
|
||||
|
||||
Mastering your mind:
|
||||
- can you control yourself?
|
||||
- can you sit still physically?
|
||||
- can you control your mind?
|
||||
- can you concentrate on a simple object and nothing else?
|
||||
- can you have no thoughts?
|
||||
- can you free your mind from remembering the past or future?
|
||||
- can you have no visual images / sounds?
|
||||
- can you stop your inner monologue?
|
||||
|
||||
|
||||
How to meditate:
|
||||
- these steps are very gradual, not distinct steps:
|
||||
- master focusing in the present (1-2 years)
|
||||
- disregard the past and future
|
||||
- focus on noises in the present. can jump around or listen to all.
|
||||
- on failure gently pull back to the present
|
||||
- mastery when you can do this for an hour
|
||||
- can start with shorter sessions
|
||||
- master focusing only a single element in the present
|
||||
- for example, your breath
|
||||
- master stopping the monologue
|
||||
- stop talking to yourself
|
||||
- stop making comments
|
||||
- stop the chatter
|
||||
- master total absorption into that single element
|
||||
- deeper focus into the element
|
||||
- Samadhi state
|
||||
- can only experience your own, dont read the wiki
|
||||
- Andy reached this only once, he felt omnipotent
|
||||
|
||||
- this becomes an intrinsic skill like talking and walking rather than a motor skill like throwing?
|
||||
- if you dont use it you lose it?
|
||||
- one you reach Samadhi your mind always meditates
|
||||
|
||||
|
||||
Naval theory:
|
||||
https://twitter.com/naval/status/1261481222359801856
|
170
content/text/note-taking.txt
Normal file
170
content/text/note-taking.txt
Normal file
|
@ -0,0 +1,170 @@
|
|||
aka notetaking
|
||||
|
||||
Solutions
|
||||
=========
|
||||
|
||||
Desires
|
||||
-------
|
||||
|
||||
- Open source
|
||||
- End to end encryption
|
||||
- Portable data store - md (or exportable)
|
||||
- Images
|
||||
- Rich text editor WYSIWYG
|
||||
- Linking notes together
|
||||
- to whole note or header in note
|
||||
- Sync
|
||||
- Mobile support
|
||||
- Folders
|
||||
- Undo / versioning
|
||||
|
||||
|
||||
Reviews
|
||||
-------
|
||||
|
||||
Joplin:
|
||||
- UI is very fast
|
||||
- has its own sync server now, wait to mature?
|
||||
- scroll in render view glitchy / laggy when zoomed
|
||||
- WYSIWYG editor breaks some markdown
|
||||
- clicking links in WYSIWYG requires ctrl
|
||||
- can't see note names in notebook tree, so will be hard to find
|
||||
- maybe that's better?
|
||||
- mobile app lacks WYSIWYG
|
||||
- mobile app md editor scroll shitty
|
||||
- slow to edit notes in mobile app
|
||||
- white flashes on dark mode desktop theme when switching notebooks
|
||||
- Todo feature is cool. can make each note a todo and use the body to add context / info
|
||||
- easy to rearrange todos
|
||||
|
||||
Obsidian:
|
||||
- highly reviewed, looks sexy but needs more contrast
|
||||
- no WYSIWYG editor yet - planned
|
||||
- has graph and backlinks
|
||||
- not open source
|
||||
- files stored as plain text
|
||||
|
||||
|
||||
Wiki.js:
|
||||
- Supports LaTeX
|
||||
- Support Markdown (it also supports formats such as html)
|
||||
- Works in-browser (and therefore can be accessed on any device)
|
||||
- Editing is easy (although this sounds like a "duh" feature, many self-hosted note apps are more like static site generators)
|
||||
- Uploading files is simple
|
||||
- Has multiple backup options (I use GitHub and .gitignore the textbooks)
|
||||
|
||||
|
||||
Boostnote:
|
||||
- no mobile support
|
||||
|
||||
Trilium:
|
||||
- great encryption
|
||||
- poor mobile support, Dom uses telegram as a buffer
|
||||
- fully tried it, mobile is just too broken
|
||||
- doesnt scroll all the way to the bottom of folders and note contents
|
||||
- lots of other minor bugs
|
||||
- parts of UI not updating like archived notes
|
||||
- randomly refreshes the page
|
||||
- header sizes all look the same
|
||||
- today note button is slow to load
|
||||
|
||||
Simplenote:
|
||||
- not self-hosted
|
||||
- no folders
|
||||
|
||||
Turtl:
|
||||
- buggy app
|
||||
- bad organization system
|
||||
|
||||
Org-mode
|
||||
- needs emacs
|
||||
|
||||
Taskwarrior:
|
||||
- command line only
|
||||
|
||||
Zim:
|
||||
- no built in sync
|
||||
- no mobile
|
||||
|
||||
TiddlyWiki
|
||||
- no built in sync
|
||||
- one html file
|
||||
- modern browsers block some file features?
|
||||
|
||||
https://collectednotes.com/
|
||||
- no android
|
||||
- watch them
|
||||
|
||||
https://github.com/athensresearch/athens
|
||||
- not finished, keep an eye on
|
||||
- ugly theme
|
||||
|
||||
Outline:
|
||||
- https://www.getoutline.com/
|
||||
|
||||
|
||||
|
||||
Zenkit: proprietary
|
||||
OneNote: proprietary
|
||||
Google Keep: proprietary
|
||||
Synapbook: proprietary
|
||||
Workflowy: proprietary
|
||||
Notion: proprietary, UX issues: https://news.t0.vc/DCGM
|
||||
Roam Research: proprietary, cool graph feature though
|
||||
RemNote: proprietary, spaced repetition
|
||||
|
||||
|
||||
https://contexted.io/
|
||||
https://rwtxt.com
|
||||
|
||||
Stuff to read:
|
||||
https://news.t0.vc/YUAT/c
|
||||
https://news.t0.vc/WLJJ/c
|
||||
https://news.t0.vc/ORXL/c
|
||||
https://old.reddit.com/r/CGPGrey/comments/ihkqjp/cortex_105_atomic_notes/
|
||||
|
||||
|
||||
The perfect note-taking app:
|
||||
https://www.youtube.com/watch?v=wpcVQeF07G4
|
||||
- goes over the three types of note-takers
|
||||
- librarian: likes to catalogue, usually write-only -> evernote
|
||||
- gardener: likes connecting ideas in their own way -> roam
|
||||
- architect: likes designing processes and structure -> notion
|
||||
|
||||
|
||||
Formatting / Template
|
||||
=====================
|
||||
|
||||
Unformatted info can just be sentences, paragraphs, or points.
|
||||
|
||||
|
||||
Section
|
||||
=======
|
||||
|
||||
Place two empty lines before the section header, empty line after
|
||||
|
||||
|
||||
Subsection
|
||||
-----------
|
||||
|
||||
Sub-subsection:
|
||||
No linebreak for text within a section
|
||||
|
||||
Generic lists or steps:
|
||||
- dash then a space
|
||||
- lower case for prose
|
||||
- Data points: gets capital
|
||||
- like this
|
||||
- sublists
|
||||
- two spaces, dash, space
|
||||
|
||||
Todo lists:
|
||||
o unfinished task
|
||||
v finished task (looks like check mark)
|
||||
x cancelled task
|
||||
|
||||
- I wonder if I should just use markdown?
|
||||
|
||||
* notes to consider
|
||||
$ commands to run
|
||||
|
39
content/text/python.txt
Normal file
39
content/text/python.txt
Normal file
|
@ -0,0 +1,39 @@
|
|||
Development Setup:
|
||||
$ sudo apt install python3 python3-pip python-virtualenv python3-virtualenv
|
||||
$ virtualenv -p python3 env
|
||||
$ . env/bin/activate
|
||||
$ pip install -r requirements.txt
|
||||
|
||||
Django clone setup:
|
||||
$ python manage.py makemigrations
|
||||
$ python manage.py migrate
|
||||
$ python manage.py createsuperuser
|
||||
$ DEBUG=true python manage.py runserver 0.0.0.0:8000
|
||||
|
||||
|
||||
Logging:
|
||||
|
||||
use logger.exception
|
||||
|
||||
Machine learning:
|
||||
comma.ai switched to pyTorch
|
||||
|
||||
|
||||
How to make a package:
|
||||
https://news.t0.vc/ZBPS
|
||||
|
||||
|
||||
Timezones
|
||||
=========
|
||||
|
||||
NEVER USE .replace(tzinfo= EXCEPT FOR WITH UTC!
|
||||
|
||||
Assigning timezone to parsed string:
|
||||
- example, you get a text timestamp and parse it with strptime
|
||||
- solution:
|
||||
t = datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S')
|
||||
tz = pytz.timezone('America/Edmonton')
|
||||
result = tz.localize(t)
|
||||
|
||||
|
||||
|
70
content/text/spain-portugal.txt
Normal file
70
content/text/spain-portugal.txt
Normal file
|
@ -0,0 +1,70 @@
|
|||
Barcelona:
|
||||
- very touristy
|
||||
|
||||
Tarragona:
|
||||
- 20 minutes south of Barcelona
|
||||
- much cheaper and more historical
|
||||
- Roman ruins are still there
|
||||
- very close to the ocean
|
||||
- lots of walking
|
||||
- Tim stayed at Olivia hotel
|
||||
- 100 m from Mediterranian
|
||||
- right on the giant town plaza
|
||||
- Amphithéâtre, Aqueducts, walls
|
||||
|
||||
Cervera:
|
||||
- 25200 Lleida
|
||||
- Tim's wife taught
|
||||
- zero english
|
||||
- train goes from Barcelona
|
||||
- crazy festivals every ten days:
|
||||
https://www.youtube.com/watch?v=kr03rCwa9ms
|
||||
|
||||
Malaga:
|
||||
- city with the most soul
|
||||
- nice beaches
|
||||
- poorer
|
||||
|
||||
Granada:
|
||||
- **alhambra: palace of the largest islamic empire, book ahead
|
||||
- alkazah
|
||||
|
||||
*Alhambra:
|
||||
- 'Remember to be punctual to access the Nasrid Palaces at the time selected on your ticket. The rest of the monument can be visited from 8:30 a.m. to 6:00 p.m. winter; 8:30 a.m. to 8:00 p.m. summer.'
|
||||
- random document number 10L-ID10T
|
||||
- Booking Reference Number: H0DIOBJ
|
||||
|
||||
Valencia:
|
||||
- good flee market
|
||||
|
||||
Seville:
|
||||
- odai's friend owns restaurant
|
||||
- alcazar
|
||||
- plaza de espana
|
||||
- opera?
|
||||
- Diego Velázquez birthplace?
|
||||
|
||||
|
||||
Portugal
|
||||
========
|
||||
|
||||
Lagos:
|
||||
- Brassao restaurant very good
|
||||
- sunset
|
||||
|
||||
Lisbon:
|
||||
- a bit dirty
|
||||
- have low expectations
|
||||
|
||||
Sintra:
|
||||
- look like disney
|
||||
- actual castle
|
||||
- 45 min train from Lisbon
|
||||
|
||||
Porto:
|
||||
- beautiful
|
||||
- odai like better than lisbon
|
||||
- on a cliffside
|
||||
- where harry potter started
|
||||
|
||||
|
34
content/text/vim-tricks.txt
Normal file
34
content/text/vim-tricks.txt
Normal file
|
@ -0,0 +1,34 @@
|
|||
Enter word under cursor into cmdline:
|
||||
CTRL-R CTRL-W
|
||||
(:help c_CTRL-R)
|
||||
|
||||
Rewrap text (reformat):
|
||||
gq
|
||||
|
||||
Remove duplicates from file:
|
||||
vim ~/.ssh/authorized_keys +":sort u|wq"
|
||||
|
||||
N ctrl-^ goes to buffer N
|
||||
|
||||
Centre current line on screen:
|
||||
zz
|
||||
|
||||
Newrw:
|
||||
- fixed on left: :20Lexplore
|
||||
- change to tree: i
|
||||
- toggle .hidden files: gh
|
||||
|
||||
|
||||
|
||||
Config
|
||||
======
|
||||
|
||||
Start Vim without reading .vimrc:
|
||||
vim -u NONE
|
||||
|
||||
Minimal sane config:
|
||||
set encoding=utf-8
|
||||
set nocompatible
|
||||
set background=dark
|
||||
set hidden
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*- #
|
||||
from __future__ import unicode_literals
|
||||
import os
|
||||
|
||||
AUTHOR = 'Tanner Collin'
|
||||
SITENAME = 'Tanner Collin'
|
||||
|
@ -34,7 +35,7 @@ MARKDOWN = {
|
|||
'output_format': 'html5',
|
||||
}
|
||||
|
||||
STATIC_PATHS = ['images', 'extra']
|
||||
STATIC_PATHS = ['images', 'extra', 'text']
|
||||
|
||||
EXTRA_PATH_METADATA = {
|
||||
#'extra/favicon.svg': {'path': 'favicon.svg'},
|
||||
|
@ -55,7 +56,14 @@ CATEGORIES_SAVE_AS = ''
|
|||
TAGS_SAVE_AS = ''
|
||||
|
||||
INDEX_SAVE_AS = 'index.html'
|
||||
ARTICLE_URL = '{date:%d}/'
|
||||
ARTICLE_SAVE_AS = '{date:%d}/index.html'
|
||||
ARTICLE_URL = '{short}'
|
||||
ARTICLE_SAVE_AS = '{short}/index.html'
|
||||
PAGE_URL = '{slug}'
|
||||
PAGE_SAVE_AS = '{slug}/index.html'
|
||||
|
||||
def list_text_files():
|
||||
return sorted(os.listdir('./content/text'))
|
||||
|
||||
JINJA_GLOBALS = {'list_text_files': list_text_files}
|
||||
|
||||
PROD = True
|
||||
|
|
|
@ -1,4 +1,37 @@
|
|||
{% extends "base.html" %}
|
||||
{% block meta %}
|
||||
<meta charset=UTF-8>
|
||||
{% endblock %}
|
||||
|
||||
{% block style %}
|
||||
|
||||
<style>
|
||||
p, h2, h3, h4, h5 {
|
||||
margin: 0;
|
||||
}
|
||||
.toclink {
|
||||
color: black;
|
||||
}
|
||||
.highlight > pre {
|
||||
margin: 0;
|
||||
padding: 0.5rem;
|
||||
overflow-x: auto;
|
||||
background-color: #eee;
|
||||
}
|
||||
:not(pre)>code {
|
||||
padding: 0 2px;
|
||||
font-size: 0.8rem;
|
||||
background-color: #eee;
|
||||
}
|
||||
.aside {
|
||||
display: none;
|
||||
}
|
||||
.toc {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{{ article.title }}</h1>
|
||||
{{ article.summary }}
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
<meta charset=UTF-8/>
|
||||
<link rel=icon href=data:,>
|
||||
{% block style %}{% endblock %}
|
||||
<pre>
|
||||
Tanner Collin
|
||||
{% block meta %}{% endblock %}<link rel=icon href=data:,>{% block style %}{% endblock %}<pre>Tanner Collin
|
||||
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -2,41 +2,41 @@
|
|||
{% block content %}
|
||||
Hi, I'm Tanner! I do firmware and web development in Calgary.
|
||||
|
||||
Contact Info
|
||||
============
|
||||
Please sign my <a href=g>Guest Book</a>!
|
||||
|
||||
Email: <a href="mailto:site2@tannercollin.com">site2@tannercollin.com</a>
|
||||
Telegram: <a href="https://t.me/tannercollin">@tannercollin</a>
|
||||
--[ Contact Info
|
||||
|
||||
Resume
|
||||
======
|
||||
Email: site2@tannercollin.com
|
||||
Telegram: @tannercollin
|
||||
|
||||
- Firmware Engineer at Cabana Blockchain, 2018–
|
||||
- Lead Hardware Engineer at Critical Control, 2016–2018
|
||||
- Electrical Engineer at Opener Aero, 2016–2016
|
||||
- Electrical Engineer Intern at Pason Systems, 2014–2015
|
||||
- BSc. Electrical Engineering from University of Calgary
|
||||
--[ Resume
|
||||
|
||||
Projects
|
||||
========
|
||||
Firmware Engineer at Cabana Blockchain, 2018-
|
||||
Lead Hardware Engineer at Critical Control, 2016-2018
|
||||
Electrical Engineer at Opener Aero, 2016-2016
|
||||
Electrical Engineer Intern at Pason Systems, 2014-2015
|
||||
BSc. Electrical Engineering from University of Calgary
|
||||
|
||||
<a href="https://news.t0.vc/">QotNews</a>
|
||||
<a href="https://notica.us">Notica</a>
|
||||
<a href="https://my.protospace.ca">Spaceport</a>
|
||||
<a href="https://txt.t0.vc">t0txt</a>
|
||||
<a href="https://github.com/tannercollin/standardnotes-fs">standardnotes-fs</a>
|
||||
--[ Projects
|
||||
|
||||
Creations
|
||||
=========
|
||||
<a href=q>QotNews*
|
||||
<a href=n>Notica*
|
||||
<a href=m>Spaceport*
|
||||
<a href=t>t0txt*
|
||||
<a href=s>standardnotes-fs*</a>
|
||||
|
||||
* external link
|
||||
|
||||
--[ Creations
|
||||
|
||||
{% for article in articles_page.object_list if article.category.name == 'Creations' %}
|
||||
<a href="{{ article.url }}">{{ article.title }}</a>
|
||||
<a href={{ article.url }}>{{ article.title }}
|
||||
{% endfor %}
|
||||
|
||||
Writing
|
||||
=======
|
||||
</a>
|
||||
--[ Writing
|
||||
|
||||
{% for article in articles_page.object_list if article.category.name == 'Writing' %}
|
||||
<a href="{{ article.url }}">{{ article.title }}</a>
|
||||
<a href={{ article.url }}>{{ article.title }}
|
||||
{% endfor %}
|
||||
<a href=x>[Text Files]
|
||||
{% endblock %}
|
||||
|
|
4
themes/lite/templates/page.html
Normal file
4
themes/lite/templates/page.html
Normal file
|
@ -0,0 +1,4 @@
|
|||
<pre>
|
||||
{{ page.content }}
|
||||
</pre>
|
||||
|
15
themes/lite/templates/text-files.html
Normal file
15
themes/lite/templates/text-files.html
Normal file
|
@ -0,0 +1,15 @@
|
|||
{% extends "base.html" %}
|
||||
{% block meta %}
|
||||
{% endblock %}
|
||||
|
||||
{% block style %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Text Files</h1>
|
||||
Here are some various text notes that I share with the public.
|
||||
<hr />
|
||||
{% for f in list_text_files() %}
|
||||
<a href="../text/{{ f }}">{{ f }}</a>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
Loading…
Reference in New Issue
Block a user