Compare commits

..

25 Commits

Author SHA1 Message Date
1c3ae5b8f8 Make article links single-character 2021-10-14 07:47:43 +00:00
afcf272607 Add text files 2021-10-14 07:42:11 +00:00
3059c14648 Add page full of text files 2021-10-14 06:41:18 +00:00
7c059148d5 Minify lite index even more 2021-10-14 06:30:54 +00:00
023e99436e Change "non-free" to "proprietary" 2021-10-05 04:54:51 +00:00
d87e798d38 Add link to guest book, optimize 2021-10-05 04:54:37 +00:00
20b46d3b02 Remove extra characters, improve article css 2021-08-20 09:38:28 +00:00
052a919f12 Make project urls shorter 2021-08-20 08:47:50 +00:00
035a3c2110 Add style to articles 2021-07-27 03:56:42 +00:00
2ca498cf20 Make even more minimal 2021-07-27 03:56:28 +00:00
efecc52605 Make site even smaller 2021-07-27 03:51:36 +00:00
1e4baa950f Remove category template 2021-07-26 23:27:22 +00:00
8f5f042794 Trim down lite version even more 2021-07-26 19:22:05 +00:00
600cc9e51f Add lite version of website 2021-07-26 18:42:50 +00:00
65b3ad7fbf Rename Projects category to Creations 2021-07-25 22:40:04 +00:00
a966b59b66 Add prototype 2021-07-25 15:42:17 -06:00
bfc93af28f Optimize me.jpg 2021-07-25 08:54:05 +00:00
7a73eafa85 Add robots.txt 2021-07-25 08:53:52 +00:00
9f90810e0f Remove custom font files 2021-07-23 13:14:56 +00:00
dca5d47578 Remove custom fonts from CSS 2021-07-23 13:11:13 +00:00
495f964297 Add webring 2021-07-23 12:57:02 +00:00
f234121e3f Add corrections to bypassing ports 2021-07-23 12:56:38 +00:00
f76b8e7bf4 Move source code links beside titles 2021-06-16 07:41:26 +00:00
2c5c0750bf Remove unused PHP 2021-06-16 07:40:00 +00:00
bda333c88a Add writing to home page 2021-06-16 07:36:09 +00:00
45 changed files with 1319 additions and 222 deletions

View File

@@ -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]

View File

@@ -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]
@@ -52,7 +53,7 @@ $ sudo make-cadir 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>
@@ -88,7 +89,7 @@ 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.
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
@@ -376,7 +377,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.
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
to your home server. Use a CNAME to make it easy to change later:

2
content/extra/robots.txt Normal file
View File

@@ -0,0 +1,2 @@
User-agent: *
Disallow:

View File

@@ -1,7 +1,8 @@
Title: Hand of Ozymandias
Date: 2012-03-23
Category: Projects
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

View File

@@ -1,7 +1,8 @@
Title: LED Dress
Date: 2016-03-18
Category: Projects
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.

View File

@@ -1,7 +1,8 @@
Title: Remote Control Light Switch
Date: 2014-10-09
Category: Projects
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

View File

@@ -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/>

View File

@@ -0,0 +1,6 @@
Title: Text Files
Template: text-files
Slug: x
Qot.

View File

@@ -1,7 +1,8 @@
Title: Mans Reach Exceeds His Grasp
Title: Man's Reach Exceeds His Grasp
Date: 2012-04-11
Category: Projects
Category: Creations
Summary: My first attempt at painting with acrylic.
Short: 7
The painting is called “Mans 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

View File

@@ -1,7 +1,8 @@
Title: Automatic Plant Waterer
Date: 2014-06-05
Category: Projects
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

View File

@@ -1,7 +1,8 @@
Title: Solar Car
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.
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

View 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)

View 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

View 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 Sinclairs family went on a safari
48:30 back to the anti-aging book, longevity
52:20 Sinclairs healthy 80 year old father: “Hes 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, “Weve 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
View 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
View 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
View 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
View 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

View 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

View 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
View 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)

View 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

View 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

61
pelicanconf_lite.py Normal file
View File

@@ -0,0 +1,61 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
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 = '{date:%d}/'
ARTICLE_SAVE_AS = '{date:%d}/index.html'
PROD = False

17
prototype.html Normal file
View 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
View 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

View 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 %}

View File

@@ -0,0 +1,4 @@
{% block meta %}{% endblock %}<link rel=icon href=data:,>{% block style %}{% endblock %}<pre>Tanner Collin
{% block content %}
{% endblock %}

View File

@@ -0,0 +1,42 @@
{% extends "base.html" %}
{% block content %}
Hi, I'm Tanner! I do firmware and web development in Calgary.
Please sign my <a href=g>Guest Book</a>!
--[ Contact Info
Email: site2@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=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 }}
{% endfor %}
</a>
--[ Writing
{% for article in articles_page.object_list if article.category.name == 'Writing' %}
<a href={{ article.url }}>{{ article.title }}
{% endfor %}
<a href=x>[Text Files]
{% endblock %}

View File

@@ -0,0 +1,4 @@
<pre>
{{ page.content }}
</pre>

View 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 %}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 34 KiB

BIN
themes/theme/static/me.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -1,12 +1,3 @@
{% if PROD %}
<?php
$themeClass = '';
if (!empty($_COOKIE['theme'])) {
$themeClass = $_COOKIE['theme'];
}
?>
{% endif %}
<!DOCTYPE html>
<html lang="en">
<head>
@@ -18,21 +9,10 @@
<meta name="author" content="{{ AUTHOR }}" />
{% 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">
<style>
{% include 'style.css' %}
{% include 'fonts.css' %}
</style>
<script defer src="/theme/instant-page.js"></script>
@@ -49,7 +29,10 @@
{% endblock %}
</div>
<p class="copyright">
<p class="footer">
<span class="wname">Webring:</span> <a href="https://jason.schwarzenberger.co.nz/" class="wprev">&lt; Previous</a> | <a href="https://webring.t0.vc" class="windex">Index</a> | <a href="https://udia.ca" class="wnext">Next &gt;</a>
</p>
<p class="footer">
© 20122021 Tanner Collin
</p>
</body>

View File

@@ -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;
}

View File

@@ -8,7 +8,12 @@
{% endblock %}
{% 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">
<h1>Tanner Collin</h1>
<p class="contact-icons">
@@ -20,103 +25,94 @@
{% endblock %}
{% block content %}
<div class="content content-index">
<div class="content index">
<p>
Hi, I'm Tanner! I do firmware and web development in Calgary.
</p>
<div class="leftcol">
<div class="inside">
<h2>Contact Info</h2>
<h2>Contact Info</h2>
<p>
Email: <a href="mailto:site2@tannercollin.com">site2@tannercollin.com</a> <br />
Telegram: <a href="https://t.me/tannercollin" target="_blank" rel="noreferrer noopener">@tannercollin</a>
</p>
<p>
Email: <a href="mailto:site2@tannercollin.com">site2@tannercollin.com</a> <br />
Telegram: <a href="https://t.me/tannercollin" target="_blank" rel="noreferrer noopener">@tannercollin</a>
</p>
<h2>Resume</h2>
<h2>Resume</h2>
<ul>
<li>Firmware Engineer at <a href="https://cabanablockchain.com" target="_blank" rel="noreferrer noopener">Cabana Blockchain</a>, 2018</li>
<li>Lead Hardware Engineer at <a href="https://criticalcontrol.com/" target="_blank" rel="noreferrer noopener">Critical Control</a>, 20162018</li>
<li>Electrical Engineer at <a href="https://www.opener.aero/" target="_blank" rel="noreferrer noopener">Opener Aero</a>, 20162016</li>
<li>Electrical Engineer Intern at <a href="https://www.pason.com/" target="_blank" rel="noreferrer noopener">Pason Systems</a>, 20142015</li>
<li>BSc. Electrical Engineering from University of Calgary</li>
</ul>
<ul>
<li>Firmware Engineer at <a href="https://cabanablockchain.com" target="_blank" rel="noreferrer noopener">Cabana Blockchain</a>, 2018</li>
<li>Lead Hardware Engineer at <a href="https://criticalcontrol.com/" target="_blank" rel="noreferrer noopener">Critical Control</a>, 20162018</li>
<li>Electrical Engineer at <a href="https://www.opener.aero/" target="_blank" rel="noreferrer noopener">Opener Aero</a>, 20162016</li>
<li>Electrical Engineer Intern at <a href="https://www.pason.com/" target="_blank" rel="noreferrer noopener">Pason Systems</a>, 20142015</li>
<li>BSc. Electrical Engineering from University of Calgary</li>
</ul>
<h2>Projects</h2>
<h2>Projects</h2>
<p>
My main hobby is working on software projects. I typically design websites or
build tools that make my life easier.
</p>
<p>
My main hobby is working on software projects. I typically design websites or
build tools that make my life easier.
</p>
<h3>
<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>
</h3>
<div class="summary">
<p>Hacker News, Reddit, Lobsters, and Tildes articles pre-rendered in reader mode. Optimized for speed and distraction-free reading.</p>
</div>
<h3>
<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>
</h3>
<div class="summary">
<p>Send browser notifications from your terminal. No installation. No registration.</p>
</div>
<h3>
<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>
</h3>
<div class="summary">
<p>Makerspace members' portal for Calgary Protospace. It tracks membership, courses, training, access cards, and more.</p>
</div>
<h3>
<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>
</h3>
<div class="summary">
<p>Minimal command line pastebin. Allows you to upload text notes from a bash pipe or web browser.</p>
</div>
<h3>
<a href="https://github.com/tannercollin/standardnotes-fs" target="_blank" rel="noreferrer noopener">standardnotes-fs</a>
</h3>
<div class="summary">
<p>A filesystem that mounts your Standard Notes account as a directory of text files that you can edit.</p>
</div>
</div>
<h3>
<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>
</h3>
<div class="summary">
<p>Hacker News, Reddit, Lobsters, and Tildes articles pre-rendered in reader mode. Optimized for speed and distraction-free reading.</p>
</div>
<div class="rightcol">
<div class="inside">
<h2>Creations</h2>
<p>Sometimes I create art or interactive tech.</p>
{% for article in articles_page.object_list if article.category.name == 'Projects' %}
<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>
<div class="summary">
{{ article.summary }}
</div>
{% endfor %}
<h3>
<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>
</h3>
<div class="summary">
<p>Send browser notifications from your terminal. No installation. No registration.</p>
</div>
<h3>
<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>
</h3>
<div class="summary">
<p>Makerspace members' portal for Calgary Protospace. It tracks membership, courses, training, access cards, and more.</p>
</div>
<h3>
<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>
</h3>
<div class="summary">
<p>Minimal command line pastebin. Allows you to upload text notes from a bash pipe or web browser.</p>
</div>
<h3>
<a href="https://github.com/tannercollin/standardnotes-fs" target="_blank" rel="noreferrer noopener">standardnotes-fs</a>
</h3>
<div class="summary">
<p>A filesystem that mounts your Standard Notes account as a directory of text files that you can edit.</p>
</div>
<h2>Creations</h2>
<p>Sometimes I create art or interactive tech.</p>
{% 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>
<div class="summary">
{{ article.summary }}
</div>
{% endfor %}
</div>
{% endblock %}

View File

@@ -4,7 +4,7 @@ html {
body {
text-rendering: optimizeLegibility;
font: 1.2rem/1.0 Lato,sans-serif;
font: 1.1rem/1.0 sans-serif;
}
a {
@@ -13,22 +13,27 @@ a {
}
.info h1 {
font: 1.2rem/1.0 Lato,sans-serif;
font: 1.1rem/1.0 sans-serif;
}
.index h3 {
font: 1.1rem/1.5 serif;
}
.source {
font: 1rem/1.5 Apparatus SIL,serif;
font: 0.9rem/1.5 serif;
}
pre {
font-size: 1rem;
font-size: 0.9rem;
line-height: 1.2;
padding: 1rem;
overflow-x: auto;
}
:not(pre)>code {
padding: 0 2px;
font-size: 0.9rem;
font-size: 0.8rem;
}
.container {
@@ -36,8 +41,8 @@ pre {
margin: 2rem auto 12rem auto;
}
.copyright {
font: 1rem/1.5 Apparatus SIL,serif;
.footer {
font: 0.9rem/1.5 serif;
text-align: center;
}
@@ -58,14 +63,13 @@ pre {
}
.content p.metadata {
font: 1rem/1.0 Apparatus SIL,serif;
font: 0.9rem/1.0 serif;
font-style: italic;
}
.content div.summary p {
margin-top: -0.5rem;
margin-left: 1rem;
font-style: italic;
margin-left: 1.5rem;
}
.content {
@@ -73,19 +77,11 @@ pre {
}
.content-wide {
max-width: 46rem;;
}
.content-index {
max-width: none;
}
.content-index h3 {
font: 1.2rem/1.5 Apparatus SIL,serif;
}
.content p {
font: 1.2rem/1.5 Apparatus SIL,serif;
font: 1.1rem/1.5 serif;
}
.content ul {
@@ -93,7 +89,7 @@ pre {
}
.content li {
font: 1.2rem/1.5 Apparatus SIL,serif;
font: 1.1rem/1.5 serif;
}
.content img {
@@ -107,7 +103,7 @@ pre {
position: relative;
width: 8rem;
margin-left: -9rem;
font-size: 1rem;
font-size: 0.9rem;
}
.toclink:not(:hover) {
@@ -183,30 +179,6 @@ pre {
}
}
@media screen and (min-width:58rem) {
.container {
max-width: 75rem;
}
.leftcol {
float: left;
width: 50%;
margin-top: -1rem;
}
.leftcol > .inside {
padding-right: 1rem;
}
.rightcol {
overflow: hidden;
margin-top: -1rem;
}
.rightcol > .inside {
padding-left: 1rem;
}
}
body {
background-color: #eee;