Compare commits
28 Commits
columns
...
42cbd0e54a
Author | SHA1 | Date | |
---|---|---|---|
42cbd0e54a | |||
25a2de77a1 | |||
3e2f9c0684 | |||
1c3ae5b8f8 | |||
afcf272607 | |||
3059c14648 | |||
7c059148d5 | |||
023e99436e | |||
d87e798d38 | |||
20b46d3b02 | |||
052a919f12 | |||
035a3c2110 | |||
2ca498cf20 | |||
efecc52605 | |||
1e4baa950f | |||
8f5f042794 | |||
600cc9e51f | |||
65b3ad7fbf | |||
a966b59b66 | |||
bfc93af28f | |||
7a73eafa85 | |||
9f90810e0f | |||
dca5d47578 | |||
495f964297 | |||
f234121e3f | |||
f76b8e7bf4 | |||
2c5c0750bf | |||
bda333c88a |
@@ -3,6 +3,7 @@ Date: 2021-04-08
|
|||||||
Category: Writing
|
Category: Writing
|
||||||
Summary: Details about the backup system for all of my data.
|
Summary: Details about the backup system for all of my data.
|
||||||
Wide: true
|
Wide: true
|
||||||
|
Short: 1
|
||||||
|
|
||||||
[TOC]
|
[TOC]
|
||||||
|
|
||||||
@@ -83,9 +84,8 @@ sslcacertfile = /etc/ssl/certs/ca-certificates.crt
|
|||||||
|
|
||||||
### Notes
|
### Notes
|
||||||
|
|
||||||
I use Standard Notes to take notes and wrote the tool
|
I use Standard Notes to take notes and wrote the tool [standardnotes-fs](https://github.com/tannercollin/standardnotes-fs)
|
||||||
[standardnotes-fs](https://github.com/tannercollin/standardnotes-fs) to mount my
|
to mount my notes as a file system to view and edit them as plain text files.
|
||||||
notes as a file system to view and edit them as plain text files.
|
|
||||||
|
|
||||||
I take weekly backups of the mounted file system on my media server with cron:
|
I take weekly backups of the mounted file system on my media server with cron:
|
||||||
|
|
||||||
@@ -130,9 +130,7 @@ in case Telegram disappears or my account gets banned.
|
|||||||
<span class="aside">Saves the messages to a sqlite db</span>
|
<span class="aside">Saves the messages to a sqlite db</span>
|
||||||
|
|
||||||
Telegram includes a data export feature, but it can't be automated. Instead I
|
Telegram includes a data export feature, but it can't be automated. Instead I
|
||||||
run the deprecated software
|
run the deprecated software [telegram-export](https://github.com/expectocode/telegram-export) hourly with cron:
|
||||||
[telegram-export](https://github.com/expectocode/telegram-export) hourly with
|
|
||||||
cron:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
0 * * * * bash -c 'timeout 50m /home/tanner/opt/telegram-export/env/bin/python -m telegram_export' > /var/log/telegramexport.log 2>&1
|
0 * * * * bash -c 'timeout 50m /home/tanner/opt/telegram-export/env/bin/python -m telegram_export' > /var/log/telegramexport.log 2>&1
|
||||||
@@ -143,16 +141,12 @@ Hasn't corrupted the database yet.
|
|||||||
|
|
||||||
### Phone
|
### Phone
|
||||||
|
|
||||||
[Signal
|
[Signal Messenger](https://play.google.com/store/apps/details?id=org.thoughtcrime.securesms&hl=en_CA&gl=US) automatically exports a copy of my text messages database, and
|
||||||
Messenger](https://play.google.com/store/apps/details?id=org.thoughtcrime.securesms&hl=en_CA&gl=US)
|
[Aegis](https://play.google.com/store/apps/details?id=com.beemdevelopment.aegis&hl=en_CA&gl=US) allows me to export an encrypted JSON file of my two-factor authentication
|
||||||
automatically exports a copy of my text messages database, and
|
|
||||||
[Aegis](https://play.google.com/store/apps/details?id=com.beemdevelopment.aegis&hl=en_CA&gl=US)
|
|
||||||
allows me to export an encrypted JSON file of my two-factor authentication
|
|
||||||
codes.
|
codes.
|
||||||
|
|
||||||
I mount my phone's internal storage as a file system on my desktop using
|
I mount my phone's internal storage as a file system on my desktop using
|
||||||
[adbfs-rootless](https://github.com/spion/adbfs-rootless). I then rsync the
|
[adbfs-rootless](https://github.com/spion/adbfs-rootless). I then rsync the files over to my media server:
|
||||||
files over to my media server:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./adbfs ~/mntphone
|
$ ./adbfs ~/mntphone
|
||||||
@@ -180,9 +174,8 @@ All the files will be included in the 1 TB hard drive backup rotations.
|
|||||||
|
|
||||||
### Web Services
|
### Web Services
|
||||||
|
|
||||||
Web services that I run like [txt.t0.vc](https://txt.t0.vc) and
|
Web services that I run like [txt.t0.vc](https://txt.t0.vc) and [QotNews](https://news.t0.vc) are backed up daily, weekly,
|
||||||
[QotNews](https://news.t0.vc) are backed up daily, weekly, and monthly depending
|
and monthly depending on how frequently the data changes.
|
||||||
on how frequently the data changes.
|
|
||||||
|
|
||||||
I run `rdiff-backup` on the remote server with cron:
|
I run `rdiff-backup` on the remote server with cron:
|
||||||
|
|
||||||
@@ -205,11 +198,9 @@ the `rdiff-backup --server` command for security.
|
|||||||
|
|
||||||
### Protospace
|
### Protospace
|
||||||
|
|
||||||
I run a lot of services for [Protospace](https://protospace.ca/), my city's
|
I run a lot of services for [Protospace](https://protospace.ca/), my city's makerspace.
|
||||||
makerspace.
|
|
||||||
|
|
||||||
The member portal I wrote called [Spaceport](https://my.protospace.ca/) creates
|
The member portal I wrote called [Spaceport](https://my.protospace.ca/) creates an archive I download daily:
|
||||||
an archive I download daily:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
40 10 * * * wget --content-disposition \
|
40 10 * * * wget --content-disposition \
|
||||||
@@ -219,8 +210,7 @@ an archive I download daily:
|
|||||||
https://api.my.protospace.ca/backup/
|
https://api.my.protospace.ca/backup/
|
||||||
```
|
```
|
||||||
|
|
||||||
The website and [wiki](https://wiki.protospace.ca) that I sysadmin get
|
The website and [wiki](https://wiki.protospace.ca) that I sysadmin both get backed up weekly:
|
||||||
backed up weekly:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
0 12 * * 1 mysqldump --all-databases > /var/www/dump.sql
|
0 12 * * 1 mysqldump --all-databases > /var/www/dump.sql
|
||||||
@@ -228,9 +218,7 @@ backed up weekly:
|
|||||||
20 12 * * 1 rdiff-backup /var/www pshostbak@remotebackup::/mnt/backup/remote/pshostbak/weekly/www/
|
20 12 * * 1 rdiff-backup /var/www pshostbak@remotebackup::/mnt/backup/remote/pshostbak/weekly/www/
|
||||||
```
|
```
|
||||||
|
|
||||||
The Protospace [Minecraft
|
The Protospace [Minecraft server](http://games.protospace.ca:8123/?worldname=world&mapname=flat&zoom=3&x=74&y=64&z=354) I run gets backed up daily:
|
||||||
server](http://games.protospace.ca:8123/?worldname=world&mapname=flat&zoom=3&x=74&y=64&z=354)
|
|
||||||
I run gets backed up daily:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
00 15 * * * date -Iseconds > /home/tanner/minecraft/backup_check.txt
|
00 15 * * * date -Iseconds > /home/tanner/minecraft/backup_check.txt
|
||||||
@@ -299,14 +287,11 @@ correctly.
|
|||||||
## Rotating Hard Drives
|
## Rotating Hard Drives
|
||||||
|
|
||||||
I rotate through 2.5" 1 TB hard drives each Saturday when I do a backup. They
|
I rotate through 2.5" 1 TB hard drives each Saturday when I do a backup. They
|
||||||
are quite cheap at [$65 CAD](https://www.memoryexpress.com/Products/MX65194)
|
are quite cheap at [$65 CAD](https://www.memoryexpress.com/Products/MX65194) each so I can have a bunch floating around.
|
||||||
each so I can have a bunch floating around.
|
|
||||||
|
|
||||||
|
|
||||||
I keep one connected to the server, one in my bag, one offsite, one at my
|
I keep one connected to the server, one in my bag, one offsite, one at my
|
||||||
mother's house, and one at my dad's house. Every Saturday I run the script above
|
mother's house, and one at my dad's house. Every Saturday I run the script above
|
||||||
to take a copy and then swap the drive with the one in my bag. It then gets
|
to take a copy and then swap the drive with the one in my bag. It then gets <span class="aside">I go back home about twice per year</span>
|
||||||
<span class="aside">I go back home about twice per year</span>
|
|
||||||
swapped when I visit my offsite location. Same for when I visit my parents. This
|
swapped when I visit my offsite location. Same for when I visit my parents. This
|
||||||
means that all hard drives eventually get rotated through with new data and
|
means that all hard drives eventually get rotated through with new data and
|
||||||
don't sit too long unpowered.
|
don't sit too long unpowered.
|
||||||
|
@@ -3,6 +3,7 @@ Date: 2021-04-10
|
|||||||
Category: Writing
|
Category: Writing
|
||||||
Summary: Bypass ISP blocked ports using VPN port forwarding for public access.
|
Summary: Bypass ISP blocked ports using VPN port forwarding for public access.
|
||||||
Wide: true
|
Wide: true
|
||||||
|
Short: 2
|
||||||
|
|
||||||
[TOC]
|
[TOC]
|
||||||
|
|
||||||
@@ -14,16 +15,15 @@ This article explains how I set it up and is targeted towards Linux sysadmins.
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
I have a cheap $5 per month virtual server with [Digital
|
I have a cheap $5 per month virtual server with [Digital Ocean](https://digitalocean.com) that runs
|
||||||
Ocean](https://digitalocean.com) that runs Debian GNU/Linux 10. An OpenVPN
|
Debian GNU/Linux 10. An OpenVPN server is running on this virtual server.
|
||||||
server is running on this virtual server.
|
|
||||||
|
|
||||||
My media server at home has an OpenVPN client connected to the server and is
|
My media server at home has an OpenVPN client connected to the server and is
|
||||||
assigned a static IP on the VPN network.
|
assigned a static IP on the VPN network.
|
||||||
|
|
||||||
The virtual server has routing enabled and forwards inbound traffic __from the
|
The virtual server has routing enabled and forwards inbound traffic __from the
|
||||||
internet__ to my media server at home. This allows me to have external HTTP and SSH
|
internet__ to my media server at home. This allows me to have external HTTP and
|
||||||
access.
|
SSH access.
|
||||||
|
|
||||||
## Server Setup
|
## Server Setup
|
||||||
|
|
||||||
@@ -40,8 +40,7 @@ $ sudo apt install openvpn ufw
|
|||||||
|
|
||||||
### OpenVPN Server
|
### OpenVPN Server
|
||||||
|
|
||||||
These steps roughly follow [this
|
These steps roughly follow [this guide](https://wiki.debian.org/OpenVPN#TLS-enabled_VPN).
|
||||||
guide](https://wiki.debian.org/OpenVPN#TLS-enabled_VPN).
|
|
||||||
|
|
||||||
Generate TLS certificates and keys:
|
Generate TLS certificates and keys:
|
||||||
|
|
||||||
@@ -52,7 +51,7 @@ $ sudo make-cadir easy-rsa/
|
|||||||
$ sudo chown -R tanner:tanner easy-rsa/
|
$ sudo chown -R tanner:tanner easy-rsa/
|
||||||
```
|
```
|
||||||
|
|
||||||
Replace `tanner` with your own username, this is temporary.
|
Replace `tanner` with your Linux username, this is temporary.
|
||||||
|
|
||||||
<span class="aside">The `.rnd` file prevents a warning</span>
|
<span class="aside">The `.rnd` file prevents a warning</span>
|
||||||
|
|
||||||
@@ -88,7 +87,8 @@ We make a `mediaserver` client because we want to assign a static IP to it. You
|
|||||||
need to make a different one for each client you want with a static IP.
|
need to make a different one for each client you want with a static IP.
|
||||||
|
|
||||||
Also, if you want generic clients that all get dynamic IPs for use on your
|
Also, if you want generic clients that all get dynamic IPs for use on your
|
||||||
laptop, phone, etc. to protect you from public WiFi, create only a single extra one:
|
laptop, phone, etc. to protect you from public WiFi (like a normal VPN), create
|
||||||
|
only a single extra one:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./easyrsa build-client-full client nopass # optional
|
$ ./easyrsa build-client-full client nopass # optional
|
||||||
@@ -135,7 +135,8 @@ $ sudo mkdir ccd
|
|||||||
$ sudo touch ccd/mediaserver
|
$ sudo touch ccd/mediaserver
|
||||||
```
|
```
|
||||||
|
|
||||||
Replace `mediaserver` with whatever client name you used above. Edit it like so:
|
Replace `mediaserver` with whatever client name you used above. Edit it like
|
||||||
|
so:
|
||||||
|
|
||||||
<span class="aside">Your home server will be `10.8.0.100`</span>
|
<span class="aside">Your home server will be `10.8.0.100`</span>
|
||||||
|
|
||||||
@@ -220,11 +221,11 @@ COMMIT
|
|||||||
Replace `123.123.123.123` with your VPN server's external IP address and `eth0`
|
Replace `123.123.123.123` with your VPN server's external IP address and `eth0`
|
||||||
with the external interface.
|
with the external interface.
|
||||||
|
|
||||||
This will forward TCP traffic on port 2222 to your home server. If you want to use
|
This will forward TCP traffic on port 2222 to your home server. If you want to
|
||||||
port 22, then you need to set the VPN SSH server to something else.
|
use port 22, then you need to set the VPN SSH server to something else.
|
||||||
|
|
||||||
A full example of `/etc/ufw/before.rules` with other ports included can be found
|
A full example of `/etc/ufw/before.rules` with other ports included can be
|
||||||
here:
|
found here:
|
||||||
|
|
||||||
[https://txt.t0.vc/URUG](https://txt.t0.vc/URUG)
|
[https://txt.t0.vc/URUG](https://txt.t0.vc/URUG)
|
||||||
|
|
||||||
@@ -247,7 +248,8 @@ $ sudo apt install openvpn
|
|||||||
|
|
||||||
### Client Configs
|
### Client Configs
|
||||||
|
|
||||||
For static IP clients (like your home server), create the config file `/etc/openvpn/client.conf`:
|
For static IP clients (like your home server), create the config file
|
||||||
|
`/etc/openvpn/client.conf`:
|
||||||
|
|
||||||
```
|
```
|
||||||
client
|
client
|
||||||
@@ -287,7 +289,8 @@ $ sudo cat /etc/openvpn/easy-rsa/pki/ca.crt
|
|||||||
|
|
||||||
Also replace `vpn.example.com` with the subdomain you assigned earlier.
|
Also replace `vpn.example.com` with the subdomain you assigned earlier.
|
||||||
|
|
||||||
For device clients (like your laptop and phone), create the config file `client.ovpn`:
|
For device clients (like your laptop and phone), create the config file
|
||||||
|
`client.ovpn`:
|
||||||
|
|
||||||
<span class="aside">`redirect-gateway def1` forces traffic over the VPN</span>
|
<span class="aside">`redirect-gateway def1` forces traffic over the VPN</span>
|
||||||
|
|
||||||
@@ -376,7 +379,7 @@ To add your VPN on Gnome, open VPN settings, import file, and select
|
|||||||
You should now be fine to access your home server from over the internet.
|
You should now be fine to access your home server from over the internet.
|
||||||
|
|
||||||
To forward additional ports, just edit the `/etc/ufw/before.rules` file like
|
To forward additional ports, just edit the `/etc/ufw/before.rules` file like
|
||||||
above.
|
above and apply the changes to `ufw`.
|
||||||
|
|
||||||
You can now point a domain to your virtual server's IP and use that to connect
|
You can now point a domain to your virtual server's IP and use that to connect
|
||||||
to your home server. Use a CNAME to make it easy to change later:
|
to your home server. Use a CNAME to make it easy to change later:
|
||||||
|
2
content/extra/robots.txt
Normal file
2
content/extra/robots.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
User-agent: *
|
||||||
|
Disallow:
|
@@ -1,7 +1,8 @@
|
|||||||
Title: Hand of Ozymandias
|
Title: Hand of Ozymandias
|
||||||
Date: 2012-03-23
|
Date: 2012-03-23
|
||||||
Category: Projects
|
Category: Creations
|
||||||
Summary: A withered hand I welded out of scrap metal.
|
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
|
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
|
their shop. I wanted to create a sculpture, so with pieces of scrap metal I
|
||||||
|
BIN
content/images/wine/wine1.jpg
Normal file
BIN
content/images/wine/wine1.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 77 KiB |
BIN
content/images/wine/wine2.jpg
Normal file
BIN
content/images/wine/wine2.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 88 KiB |
BIN
content/images/wine/wine3.jpg
Normal file
BIN
content/images/wine/wine3.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 92 KiB |
@@ -1,7 +1,8 @@
|
|||||||
Title: LED Dress
|
Title: LED Dress
|
||||||
Date: 2016-03-18
|
Date: 2016-03-18
|
||||||
Category: Projects
|
Category: Creations
|
||||||
Summary: A dress made out of LEDs that twinkle like stars.
|
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
|
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.
|
wanted to wear a dress that was lit up with LEDs acting as twinkling stars.
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
Title: Remote Control Light Switch
|
Title: Remote Control Light Switch
|
||||||
Date: 2014-10-09
|
Date: 2014-10-09
|
||||||
Category: Projects
|
Category: Creations
|
||||||
Summary: A device to toggle my lights remotely.
|
Summary: A device to toggle my lights remotely.
|
||||||
|
Short: 5
|
||||||
|
|
||||||
I wanted the ability to toggle my bedroom light remotely for convenience. I
|
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
|
designed a circuit that allows me to control my light with any
|
||||||
|
@@ -3,6 +3,7 @@ Date: 2020-10-31
|
|||||||
Category: Writing
|
Category: Writing
|
||||||
Summary: A recommendation on which flavour of Linux to run.
|
Summary: A recommendation on which flavour of Linux to run.
|
||||||
Wide: true
|
Wide: true
|
||||||
|
Short: 6
|
||||||
|
|
||||||
[TOC]
|
[TOC]
|
||||||
|
|
||||||
@@ -60,8 +61,8 @@ familiarity with it.
|
|||||||
|
|
||||||
Since Debian requires all its software to be free and open source, proprietary
|
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
|
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
|
Debian difficult if your hardware requires proprietary drivers. You'll need to use
|
||||||
a non-free installation image found here:
|
an installation image found here:
|
||||||
|
|
||||||
<https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/>
|
<https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/>
|
||||||
|
|
||||||
|
6
content/pages/creations.md
Normal file
6
content/pages/creations.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Title: Creations
|
||||||
|
Template: creations
|
||||||
|
Slug: z
|
||||||
|
|
||||||
|
|
||||||
|
Qot.
|
6
content/pages/projects.md
Normal file
6
content/pages/projects.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Title: Projects
|
||||||
|
Template: projects
|
||||||
|
Slug: y
|
||||||
|
|
||||||
|
|
||||||
|
Qot.
|
6
content/pages/writing.md
Normal file
6
content/pages/writing.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Title: Writing
|
||||||
|
Template: writing
|
||||||
|
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
|
Date: 2012-04-11
|
||||||
Category: Projects
|
Category: Creations
|
||||||
Summary: My first attempt at painting with acrylic.
|
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
|
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
|
try painting and thought I had a good idea, so after a couple of drawings I
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
Title: Automatic Plant Waterer
|
Title: Automatic Plant Waterer
|
||||||
Date: 2014-06-05
|
Date: 2014-06-05
|
||||||
Category: Projects
|
Category: Creations
|
||||||
Summary: A device that automatically waters plants.
|
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.
|
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
|
It's also great for when I'm on vacation. The plant is a year old now and
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
Title: Solar Car
|
Title: Solar Car
|
||||||
Date: 2013-04-27
|
Date: 2013-04-27
|
||||||
Category: Projects
|
Category: Creations
|
||||||
Summary: About my time volunteering with the University of Calgary Solar Car Team, where I designed a maximum power point tracker.
|
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
|
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
|
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
|
||||||
|
|
28
content/wine-crate-coffee-table.md
Normal file
28
content/wine-crate-coffee-table.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
Title: Wine Crate Coffee Table
|
||||||
|
Date: 2018-09-12
|
||||||
|
Category: Creations
|
||||||
|
Summary: A coffee table made out of wooden wine creates.
|
||||||
|
Short: 0
|
||||||
|
|
||||||
|
My close friend Odai saw a simple coffee table design online that was built out
|
||||||
|
of four wooden wine crates. They are quite cheap and available at any hardware
|
||||||
|
store. We each wanted to make one so went and bought eight crates and some
|
||||||
|
plywood to use as a base.
|
||||||
|
|
||||||
|
We went to my local makerspace, Protospace, to build them in the wood shop. We
|
||||||
|
thought it would be a quick job only taking a few hours, but it turned out to be
|
||||||
|
a twelve hour job over a couple of days. At least we were in good company!
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The wine crates were glued and then brad-nailed together. Extra wood was added
|
||||||
|
under the thin top strips for support. After the glue dried, the brad nails were
|
||||||
|
painstakingly removed because the ones we used were too long and stuck out.
|
||||||
|
|
||||||
|
After being attached to the base, the entire table was sanded and then stained.
|
||||||
|
We let it dry overnight and returned the following day to add a quick layer of
|
||||||
|
varnish.
|
||||||
|
|
||||||
|

|
69
pelicanconf_lite.py
Normal file
69
pelicanconf_lite.py
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*- #
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
import os
|
||||||
|
|
||||||
|
AUTHOR = 'Tanner Collin'
|
||||||
|
SITENAME = 'Tanner Collin'
|
||||||
|
SITEURL = ''
|
||||||
|
|
||||||
|
PATH = 'content'
|
||||||
|
|
||||||
|
TIMEZONE = 'Canada/Mountain'
|
||||||
|
|
||||||
|
DEFAULT_LANG = 'en'
|
||||||
|
|
||||||
|
# Feed generation is usually not desired when developing
|
||||||
|
FEED_ALL_ATOM = None
|
||||||
|
CATEGORY_FEED_ATOM = None
|
||||||
|
TRANSLATION_FEED_ATOM = None
|
||||||
|
AUTHOR_FEED_ATOM = None
|
||||||
|
AUTHOR_FEED_RSS = None
|
||||||
|
|
||||||
|
DEFAULT_PAGINATION = False
|
||||||
|
|
||||||
|
MARKDOWN = {
|
||||||
|
'extension_configs': {
|
||||||
|
'markdown.extensions.codehilite': {'css_class': 'highlight'},
|
||||||
|
'markdown.extensions.extra': {},
|
||||||
|
'markdown.extensions.meta': {},
|
||||||
|
'markdown.extensions.toc': {
|
||||||
|
'toc_depth': '2-3',
|
||||||
|
'anchorlink': True,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'output_format': 'html5',
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC_PATHS = ['images', 'extra']
|
||||||
|
|
||||||
|
EXTRA_PATH_METADATA = {
|
||||||
|
#'extra/favicon.svg': {'path': 'favicon.svg'},
|
||||||
|
}
|
||||||
|
|
||||||
|
# Uncomment following line if you want document-relative URLs when developing
|
||||||
|
#RELATIVE_URLS = True
|
||||||
|
|
||||||
|
THEME = 'themes/lite'
|
||||||
|
|
||||||
|
# turn off useless outputs
|
||||||
|
TAG_SAVE_AS = ''
|
||||||
|
CATEGORY_SAVE_AS = ''
|
||||||
|
AUTHOR_SAVE_AS = ''
|
||||||
|
ARCHIVES_SAVE_AS = ''
|
||||||
|
AUTHORS_SAVE_AS = ''
|
||||||
|
CATEGORIES_SAVE_AS = ''
|
||||||
|
TAGS_SAVE_AS = ''
|
||||||
|
|
||||||
|
INDEX_SAVE_AS = '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 = False
|
17
prototype.html
Normal file
17
prototype.html
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<style>
|
||||||
|
body {background: #eee; font: 1.1rem/1.5 serif;}
|
||||||
|
h1, h2 {margin-left: -24; font-family: sans-serif;}
|
||||||
|
a {text-decoration: none; color: #000; border-bottom: 1px solid #000;}
|
||||||
|
</style>
|
||||||
|
<div style="max-width: 600; margin: auto">
|
||||||
|
<h1>Tanner Collin</h1>
|
||||||
|
<p> Hi, I'm Tanner! I do firmware and web development in Calgary.</p>
|
||||||
|
<a href="/">Contact</a> |
|
||||||
|
<a href="/r">Resume</a> |
|
||||||
|
<a href="/p">Projects</a> |
|
||||||
|
<a href="/c">Creations</a> |
|
||||||
|
<a href="/w">Writing</a>
|
||||||
|
<h2>Contact Info</h2>
|
||||||
|
<p>Email: <a href="mailto:site2@tannercollin.com">site2@tannercollin.com</a></p>
|
||||||
|
<p>Telegram: <a href="https://t.me/tannercollin">@tannercollin</a></p>
|
||||||
|
</div>
|
69
publishconf_lite.py
Normal file
69
publishconf_lite.py
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*- #
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
import os
|
||||||
|
|
||||||
|
AUTHOR = 'Tanner Collin'
|
||||||
|
SITENAME = 'Tanner Collin'
|
||||||
|
SITEURL = ''
|
||||||
|
|
||||||
|
PATH = 'content'
|
||||||
|
|
||||||
|
TIMEZONE = 'Canada/Mountain'
|
||||||
|
|
||||||
|
DEFAULT_LANG = 'en'
|
||||||
|
|
||||||
|
# Feed generation is usually not desired when developing
|
||||||
|
FEED_ALL_ATOM = None
|
||||||
|
CATEGORY_FEED_ATOM = None
|
||||||
|
TRANSLATION_FEED_ATOM = None
|
||||||
|
AUTHOR_FEED_ATOM = None
|
||||||
|
AUTHOR_FEED_RSS = None
|
||||||
|
|
||||||
|
DEFAULT_PAGINATION = False
|
||||||
|
|
||||||
|
MARKDOWN = {
|
||||||
|
'extension_configs': {
|
||||||
|
'markdown.extensions.codehilite': {'css_class': 'highlight'},
|
||||||
|
'markdown.extensions.extra': {},
|
||||||
|
'markdown.extensions.meta': {},
|
||||||
|
'markdown.extensions.toc': {
|
||||||
|
'toc_depth': '2-3',
|
||||||
|
'anchorlink': True,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'output_format': 'html5',
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC_PATHS = ['images', 'extra', 'text']
|
||||||
|
|
||||||
|
EXTRA_PATH_METADATA = {
|
||||||
|
#'extra/favicon.svg': {'path': 'favicon.svg'},
|
||||||
|
}
|
||||||
|
|
||||||
|
# Uncomment following line if you want document-relative URLs when developing
|
||||||
|
#RELATIVE_URLS = True
|
||||||
|
|
||||||
|
THEME = 'themes/lite'
|
||||||
|
|
||||||
|
# turn off useless outputs
|
||||||
|
TAG_SAVE_AS = ''
|
||||||
|
CATEGORY_SAVE_AS = ''
|
||||||
|
AUTHOR_SAVE_AS = ''
|
||||||
|
ARCHIVES_SAVE_AS = ''
|
||||||
|
AUTHORS_SAVE_AS = ''
|
||||||
|
CATEGORIES_SAVE_AS = ''
|
||||||
|
TAGS_SAVE_AS = ''
|
||||||
|
|
||||||
|
INDEX_SAVE_AS = '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
|
41
themes/lite/templates/article.html
Normal file
41
themes/lite/templates/article.html
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{% 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 }}
|
||||||
|
{{ article.locale_date }}
|
||||||
|
<hr />
|
||||||
|
{{ article.content }}
|
||||||
|
{% endblock %}
|
2
themes/lite/templates/base.html
Normal file
2
themes/lite/templates/base.html
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
{% block meta %}{% endblock %}<link rel=icon href=data:,>{% block style %}{% endblock %}<pre>{% block content %}
|
||||||
|
{% endblock %}
|
21
themes/lite/templates/creations.html
Normal file
21
themes/lite/templates/creations.html
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block meta %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block style %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
Creations
|
||||||
|
=========
|
||||||
|
|
||||||
|
Sometimes I create art or interactive tech.
|
||||||
|
|
||||||
|
{% for article in articles if article.category.name == 'Creations' %}
|
||||||
|
<a href="/{{ article.url }}">{{ article.title }}</a>
|
||||||
|
{{ article.summary | striptags }}
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
44
themes/lite/templates/index.html
Normal file
44
themes/lite/templates/index.html
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
Hi, I'm Tanner! I like home automation, <a href=d>sensors</a>, bots,
|
||||||
|
privacy, Python, Debian, coffee, and makerspaces.
|
||||||
|
|
||||||
|
Please sign my <a href=g>Guest Book</a>!
|
||||||
|
|
||||||
|
Email: site3@tannercollin.com
|
||||||
|
Telegram: @tannercollin
|
||||||
|
|
||||||
|
Resume
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
Projects
|
||||||
|
|
||||||
|
<a href=q>QotNews*
|
||||||
|
<a href=n>Notica*
|
||||||
|
<a href=m>Spaceport*
|
||||||
|
<a href=t>t0txt*
|
||||||
|
<a href=y>[more]</a>
|
||||||
|
|
||||||
|
* external link
|
||||||
|
|
||||||
|
Creations
|
||||||
|
|
||||||
|
{% for article in articles_page.object_list if article.category.name == 'Creations' %}
|
||||||
|
{% if loop.index <= 4 %}
|
||||||
|
<a href={{ article.url }}>{{ article.title }}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
<a href=z>[more]
|
||||||
|
</a>
|
||||||
|
Writing
|
||||||
|
|
||||||
|
{% for article in articles_page.object_list if article.category.name == 'Writing' %}
|
||||||
|
<a href={{ article.url }}>{{ article.title }}
|
||||||
|
{% endfor %}
|
||||||
|
<a href=x>[more]
|
||||||
|
{% 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>
|
||||||
|
|
36
themes/lite/templates/projects.html
Normal file
36
themes/lite/templates/projects.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block meta %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block style %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
Projects
|
||||||
|
========
|
||||||
|
|
||||||
|
My main hobby is working on software projects. I typically design websites or
|
||||||
|
build tools that make my life easier.
|
||||||
|
|
||||||
|
<a href="https://news.t0.vc/" target="_blank" rel="noreferrer noopener">QotNews*</a> - <a class="source" href="https://git.tannercollin.com/tanner/qotnews" target="_blank" rel="noreferrer noopener">source code*</a>
|
||||||
|
Hacker News, Reddit, Lobsters, and Tildes articles pre-rendered in reader mode.
|
||||||
|
Optimized for speed and distraction-free reading.
|
||||||
|
|
||||||
|
<a href="https://notica.us" target="_blank" rel="noreferrer noopener">Notica*</a> - <a class="source" href="https://github.com/tannercollin/Notica" target="_blank" rel="noreferrer noopener">source code*</a>
|
||||||
|
Send browser notifications from your terminal. No installation. No registration.
|
||||||
|
|
||||||
|
<a href="https://my.protospace.ca" target="_blank" rel="noreferrer noopener">Spaceport*</a> - <a class="source" href="https://github.com/Protospace/spaceport" target="_blank" rel="noreferrer noopener">source code*</a>
|
||||||
|
Makerspace members' portal for Calgary Protospace. It tracks membership,
|
||||||
|
courses, training, access cards, and more.
|
||||||
|
|
||||||
|
<a href="https://txt.t0.vc" target="_blank" rel="noreferrer noopener">t0txt*</a> - <a class="source" href="https://github.com/tannercollin/t0txt" target="_blank" rel="noreferrer noopener">source code*</a>
|
||||||
|
Minimal command line pastebin. Allows you to upload text notes from a bash pipe
|
||||||
|
or web browser.
|
||||||
|
|
||||||
|
<a href="https://github.com/tannercollin/standardnotes-fs" target="_blank" rel="noreferrer noopener">standardnotes-fs*</a>
|
||||||
|
A filesystem that mounts your Standard Notes account as a directory of text
|
||||||
|
files that you can edit.
|
||||||
|
|
||||||
|
* external link
|
||||||
|
{% endblock %}
|
||||||
|
|
28
themes/lite/templates/writing.html
Normal file
28
themes/lite/templates/writing.html
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block meta %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block style %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
Writing
|
||||||
|
=======
|
||||||
|
|
||||||
|
Various articles, mostly about computers.
|
||||||
|
|
||||||
|
{% for article in articles if article.category.name == 'Writing' %}
|
||||||
|
<a href="/{{ article.url }}">{{ article.title }}</a>
|
||||||
|
{{ article.summary | striptags }}
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
Text Files
|
||||||
|
----------
|
||||||
|
|
||||||
|
Here are some random text notes that I share with the public.
|
||||||
|
|
||||||
|
{% for f in list_text_files() %}
|
||||||
|
<a href="../text/{{ f }}">{{ f }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
{% endblock %}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 34 KiB |
BIN
themes/theme/static/me.webp
Normal file
BIN
themes/theme/static/me.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
@@ -27,7 +27,7 @@
|
|||||||
{% block info %}
|
{% block info %}
|
||||||
Tanner Collin
|
Tanner Collin
|
||||||
<p class="contact-icons">
|
<p class="contact-icons">
|
||||||
<a href="mailto:site2@tannercollin.com" rel="noreferrer noopener"><img alt="email" src="/theme/mail.svg" width="20" height="20" /></a>
|
<a href="mailto:site4@tannercollin.com" rel="noreferrer noopener"><img alt="email" src="/theme/mail.svg" width="20" height="20" /></a>
|
||||||
<a href="https://t.me/tannercollin" target="_blank" rel="noreferrer noopener"><img alt="telegram" src="/theme/telegram.svg" width="20" height="20" /></a>
|
<a href="https://t.me/tannercollin" target="_blank" rel="noreferrer noopener"><img alt="telegram" src="/theme/telegram.svg" width="20" height="20" /></a>
|
||||||
<a href="https://github.com/tannercollin" target="_blank" rel="noreferrer noopener"><img alt="github" src="/theme/github.svg" width="20" height="20" /></a>
|
<a href="https://github.com/tannercollin" target="_blank" rel="noreferrer noopener"><img alt="github" src="/theme/github.svg" width="20" height="20" /></a>
|
||||||
</p>
|
</p>
|
||||||
|
@@ -1,12 +1,3 @@
|
|||||||
{% if PROD %}
|
|
||||||
<?php
|
|
||||||
$themeClass = '';
|
|
||||||
if (!empty($_COOKIE['theme'])) {
|
|
||||||
$themeClass = $_COOKIE['theme'];
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
@@ -18,21 +9,10 @@
|
|||||||
<meta name="author" content="{{ AUTHOR }}" />
|
<meta name="author" content="{{ AUTHOR }}" />
|
||||||
{% endblock head %}
|
{% endblock head %}
|
||||||
|
|
||||||
<link rel="preload" href="/theme/fonts/AppSILB.ttf" as="font" type="font/ttf" crossorigin="anonymous">
|
|
||||||
<link rel="preload" href="/theme/fonts/AppSILBI.ttf" as="font" type="font/ttf" crossorigin="anonymous">
|
|
||||||
<link rel="preload" href="/theme/fonts/AppSILI.ttf" as="font" type="font/ttf" crossorigin="anonymous">
|
|
||||||
<link rel="preload" href="/theme/fonts/AppSILR.ttf" as="font" type="font/ttf" crossorigin="anonymous">
|
|
||||||
|
|
||||||
<link rel="preload" href="/theme/fonts/Lato-Bold.ttf" as="font" type="font/ttf" crossorigin="anonymous">
|
|
||||||
<link rel="preload" href="/theme/fonts/Lato-BoldItalic.ttf" as="font" type="font/ttf" crossorigin="anonymous">
|
|
||||||
<link rel="preload" href="/theme/fonts/Lato-Italic.ttf" as="font" type="font/ttf" crossorigin="anonymous">
|
|
||||||
<link rel="preload" href="/theme/fonts/Lato-Regular.ttf" as="font" type="font/ttf" crossorigin="anonymous">
|
|
||||||
|
|
||||||
<link rel="icon" href="favicon.svg">
|
<link rel="icon" href="favicon.svg">
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
{% include 'style.css' %}
|
{% include 'style.css' %}
|
||||||
{% include 'fonts.css' %}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script defer src="/theme/instant-page.js"></script>
|
<script defer src="/theme/instant-page.js"></script>
|
||||||
@@ -49,7 +29,10 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="copyright">
|
<p class="footer">
|
||||||
|
<span class="wname">Webring:</span> <a href="https://jason.schwarzenberger.co.nz/" class="wprev">< Previous</a> | <a href="https://webring.t0.vc" class="windex">Index</a> | <a href="https://udia.ca" class="wnext">Next ></a>
|
||||||
|
</p>
|
||||||
|
<p class="footer">
|
||||||
© 2012–2021 Tanner Collin
|
© 2012–2021 Tanner Collin
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
|
@@ -1,59 +0,0 @@
|
|||||||
@font-face {
|
|
||||||
font-family: 'Apparatus SIL';
|
|
||||||
src: url('/theme/fonts/AppSILR.ttf') format('truetype');
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Apparatus SIL';
|
|
||||||
font-style: italic;
|
|
||||||
src: url('/theme/fonts/AppSILI.ttf') format('truetype');
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Apparatus SIL';
|
|
||||||
font-weight: bold;
|
|
||||||
src: url('/theme/fonts/AppSILB.ttf') format('truetype');
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Apparatus SIL';
|
|
||||||
font-weight: bold;
|
|
||||||
font-style: italic;
|
|
||||||
src: url('/theme/fonts/AppSILBI.ttf') format('truetype');
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Lato';
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 400;
|
|
||||||
src: local('Lato Italic'), local('Lato-Italic'), url('/theme/fonts/Lato-Italic.ttf') format('truetype');
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Lato';
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 700;
|
|
||||||
src: local('Lato Bold Italic'), local('Lato-BoldItalic'), url('/theme/fonts/Lato-BoldItalic.ttf') format('truetype');
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Lato';
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 400;
|
|
||||||
src: local('Lato Regular'), local('Lato-Regular'), url('/theme/fonts/Lato-Regular.ttf') format('truetype');
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Lato';
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 700;
|
|
||||||
src: local('Lato Bold'), local('Lato-Bold'), url('/theme/fonts/Lato-Bold.ttf') format('truetype');
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
@@ -8,11 +8,16 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block info %}
|
{% block info %}
|
||||||
<img src="/theme/me.jpg" width="128" class="me" alt="me smiling wide and looking into the camera lit up brightly" />
|
<picture>
|
||||||
|
<source type="image/webp" srcset="/theme/me.webp">
|
||||||
|
<source type="image/jpeg" srcset="/theme/me.jpg">
|
||||||
|
<img src="/theme/me.jpg" width="128" height="164" class="me" alt="me smiling wide and looking into the camera lit up brightly">
|
||||||
|
</picture>
|
||||||
|
|
||||||
<div class="info">
|
<div class="info">
|
||||||
<h1>Tanner Collin</h1>
|
<h1>Tanner Collin</h1>
|
||||||
<p class="contact-icons">
|
<p class="contact-icons">
|
||||||
<a href="mailto:site2@tannercollin.com" rel="noreferrer noopener"><img alt="email" src="/theme/mail.svg" width="20" height="20" /></a>
|
<a href="mailto:site4@tannercollin.com" rel="noreferrer noopener"><img alt="email" src="/theme/mail.svg" width="20" height="20" /></a>
|
||||||
<a href="https://t.me/tannercollin" target="_blank" rel="noreferrer noopener"><img alt="telegram" src="/theme/telegram.svg" width="20" height="20" /></a>
|
<a href="https://t.me/tannercollin" target="_blank" rel="noreferrer noopener"><img alt="telegram" src="/theme/telegram.svg" width="20" height="20" /></a>
|
||||||
<a href="https://github.com/tannercollin" target="_blank" rel="noreferrer noopener"><img alt="github" src="/theme/github.svg" width="20" height="20" /></a>
|
<a href="https://github.com/tannercollin" target="_blank" rel="noreferrer noopener"><img alt="github" src="/theme/github.svg" width="20" height="20" /></a>
|
||||||
</p>
|
</p>
|
||||||
@@ -28,7 +33,7 @@
|
|||||||
<h2>Contact Info</h2>
|
<h2>Contact Info</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Email: <a href="mailto:site2@tannercollin.com">site2@tannercollin.com</a> <br />
|
Email: <a href="mailto:site4@tannercollin.com">site4@tannercollin.com</a> <br />
|
||||||
Telegram: <a href="https://t.me/tannercollin" target="_blank" rel="noreferrer noopener">@tannercollin</a>
|
Telegram: <a href="https://t.me/tannercollin" target="_blank" rel="noreferrer noopener">@tannercollin</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -51,7 +56,7 @@
|
|||||||
|
|
||||||
<h3>
|
<h3>
|
||||||
<a href="https://news.t0.vc/" target="_blank" rel="noreferrer noopener">QotNews</a>
|
<a href="https://news.t0.vc/" target="_blank" rel="noreferrer noopener">QotNews</a>
|
||||||
<a class="source" href="https://git.tannercollin.com/tanner/qotnews" target="_blank" rel="noreferrer noopener">source code</a>
|
— <a class="source" href="https://git.tannercollin.com/tanner/qotnews" target="_blank" rel="noreferrer noopener">source code</a>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="summary">
|
<div class="summary">
|
||||||
<p>Hacker News, Reddit, Lobsters, and Tildes articles pre-rendered in reader mode. Optimized for speed and distraction-free reading.</p>
|
<p>Hacker News, Reddit, Lobsters, and Tildes articles pre-rendered in reader mode. Optimized for speed and distraction-free reading.</p>
|
||||||
@@ -59,7 +64,7 @@
|
|||||||
|
|
||||||
<h3>
|
<h3>
|
||||||
<a href="https://notica.us" target="_blank" rel="noreferrer noopener">Notica</a>
|
<a href="https://notica.us" target="_blank" rel="noreferrer noopener">Notica</a>
|
||||||
<a class="source" href="https://github.com/tannercollin/Notica" target="_blank" rel="noreferrer noopener">source code</a>
|
— <a class="source" href="https://github.com/tannercollin/Notica" target="_blank" rel="noreferrer noopener">source code</a>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="summary">
|
<div class="summary">
|
||||||
<p>Send browser notifications from your terminal. No installation. No registration.</p>
|
<p>Send browser notifications from your terminal. No installation. No registration.</p>
|
||||||
@@ -67,7 +72,7 @@
|
|||||||
|
|
||||||
<h3>
|
<h3>
|
||||||
<a href="https://my.protospace.ca" target="_blank" rel="noreferrer noopener">Spaceport</a>
|
<a href="https://my.protospace.ca" target="_blank" rel="noreferrer noopener">Spaceport</a>
|
||||||
<a class="source" href="https://github.com/Protospace/spaceport" target="_blank" rel="noreferrer noopener">source code</a>
|
— <a class="source" href="https://github.com/Protospace/spaceport" target="_blank" rel="noreferrer noopener">source code</a>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="summary">
|
<div class="summary">
|
||||||
<p>Makerspace members' portal for Calgary Protospace. It tracks membership, courses, training, access cards, and more.</p>
|
<p>Makerspace members' portal for Calgary Protospace. It tracks membership, courses, training, access cards, and more.</p>
|
||||||
@@ -75,7 +80,7 @@
|
|||||||
|
|
||||||
<h3>
|
<h3>
|
||||||
<a href="https://txt.t0.vc" target="_blank" rel="noreferrer noopener">t0txt</a>
|
<a href="https://txt.t0.vc" target="_blank" rel="noreferrer noopener">t0txt</a>
|
||||||
<a class="source" href="https://github.com/tannercollin/t0txt" target="_blank" rel="noreferrer noopener">source code</a>
|
— <a class="source" href="https://github.com/tannercollin/t0txt" target="_blank" rel="noreferrer noopener">source code</a>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="summary">
|
<div class="summary">
|
||||||
<p>Minimal command line pastebin. Allows you to upload text notes from a bash pipe or web browser.</p>
|
<p>Minimal command line pastebin. Allows you to upload text notes from a bash pipe or web browser.</p>
|
||||||
@@ -90,9 +95,20 @@
|
|||||||
|
|
||||||
<h2>Creations</h2>
|
<h2>Creations</h2>
|
||||||
|
|
||||||
<p>Sometimes I create art or interactive tech.</>
|
<p>Sometimes I create art or interactive tech.</p>
|
||||||
|
|
||||||
{% for article in articles_page.object_list if article.category.name == 'Projects' %}
|
{% for article in articles_page.object_list if article.category.name == 'Creations' %}
|
||||||
|
<h3><a href="{{ article.url }}">{{ article.title }}</a></h3>
|
||||||
|
<div class="summary">
|
||||||
|
{{ article.summary }}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<h2>Writing</h2>
|
||||||
|
|
||||||
|
<p>Various articles, mostly about computers.</p>
|
||||||
|
|
||||||
|
{% for article in articles_page.object_list if article.category.name == 'Writing' %}
|
||||||
<h3><a href="{{ article.url }}">{{ article.title }}</a></h3>
|
<h3><a href="{{ article.url }}">{{ article.title }}</a></h3>
|
||||||
<div class="summary">
|
<div class="summary">
|
||||||
{{ article.summary }}
|
{{ article.summary }}
|
||||||
|
@@ -4,7 +4,7 @@ html {
|
|||||||
|
|
||||||
body {
|
body {
|
||||||
text-rendering: optimizeLegibility;
|
text-rendering: optimizeLegibility;
|
||||||
font: 1.2rem/1.0 Lato,sans-serif;
|
font: 1.1rem/1.0 sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
@@ -13,27 +13,27 @@ a {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.info h1 {
|
.info h1 {
|
||||||
font: 1.2rem/1.0 Lato,sans-serif;
|
font: 1.1rem/1.0 sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.index h3 {
|
.index h3 {
|
||||||
font: 1.2rem/1.5 Apparatus SIL,serif;
|
font: 1.1rem/1.5 serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.source {
|
.source {
|
||||||
float: right;
|
font: 0.9rem/1.5 serif;
|
||||||
font: 1rem/1.5 Apparatus SIL,serif;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pre {
|
pre {
|
||||||
font-size: 1rem;
|
font-size: 0.9rem;
|
||||||
|
line-height: 1.2;
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
:not(pre)>code {
|
:not(pre)>code {
|
||||||
padding: 0 2px;
|
padding: 0 2px;
|
||||||
font-size: 0.9rem;
|
font-size: 0.8rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
@@ -41,8 +41,8 @@ pre {
|
|||||||
margin: 2rem auto 12rem auto;
|
margin: 2rem auto 12rem auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.copyright {
|
.footer {
|
||||||
font: 1rem/1.5 Apparatus SIL,serif;
|
font: 0.9rem/1.5 serif;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,14 +63,13 @@ pre {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.content p.metadata {
|
.content p.metadata {
|
||||||
font: 1rem/1.0 Apparatus SIL,serif;
|
font: 0.9rem/1.0 serif;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content div.summary p {
|
.content div.summary p {
|
||||||
margin-top: -0.5rem;
|
margin-top: -0.5rem;
|
||||||
margin-left: 1rem;
|
margin-left: 1.5rem;
|
||||||
font-style: italic;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
@@ -82,7 +81,7 @@ pre {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.content p {
|
.content p {
|
||||||
font: 1.2rem/1.5 Apparatus SIL,serif;
|
font: 1.1rem/1.5 serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content ul {
|
.content ul {
|
||||||
@@ -90,7 +89,7 @@ pre {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.content li {
|
.content li {
|
||||||
font: 1.2rem/1.5 Apparatus SIL,serif;
|
font: 1.1rem/1.5 serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content img {
|
.content img {
|
||||||
@@ -104,7 +103,7 @@ pre {
|
|||||||
position: relative;
|
position: relative;
|
||||||
width: 8rem;
|
width: 8rem;
|
||||||
margin-left: -9rem;
|
margin-left: -9rem;
|
||||||
font-size: 1rem;
|
font-size: 0.9rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toclink:not(:hover) {
|
.toclink:not(:hover) {
|
||||||
|
10
themes/theme/templates/text-files.html
Normal file
10
themes/theme/templates/text-files.html
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block meta %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block style %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
Nothing to see here...
|
||||||
|
{% endblock %}
|
Reference in New Issue
Block a user