summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpreston <preston@openbsd-preston.prestonpan.tech>2023-02-28 22:32:42 -0800
committerpreston <preston@openbsd-preston.prestonpan.tech>2023-02-28 22:32:42 -0800
commit2459b947d0dbc70ea85acd502688f7ecb1e36bb5 (patch)
tree5c70cdd731f59932ddceba24f6665cecb814e7e1
parent40f66946f99ace333b5dbd541cbf3466cd918466 (diff)
add another derivative article
-rw-r--r--build/website/about/source/resume.ps1439
-rw-r--r--build/website/about/source/resume2.ms146
-rw-r--r--build/website/about/source/resume2.pdfbin0 -> 19579 bytes
-rw-r--r--build/website/mathematics/calculus/derivative_identities.pdfbin0 -> 31220 bytes
-rw-r--r--build/website/mathematics/calculus/source/derivative_identities.ms170
-rw-r--r--website/about/source/resume.ps1439
-rw-r--r--website/about/source/resume2.ms146
-rw-r--r--website/about/source/resume2.pdfbin0 -> 19579 bytes
-rw-r--r--website/mathematics/calculus/derivative_identities.pdfbin0 -> 31220 bytes
-rw-r--r--website/mathematics/calculus/source/derivative_identities.ms170
10 files changed, 3510 insertions, 0 deletions
diff --git a/build/website/about/source/resume.ps b/build/website/about/source/resume.ps
new file mode 100644
index 0000000..973f6da
--- /dev/null
+++ b/build/website/about/source/resume.ps
@@ -0,0 +1,1439 @@
+.ds f. /usr/local/share/heirloom-doctools/tmac/s
+.lf 1 /usr/local/share/heirloom-doctools/tmac/s
+.\"
+.\" Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+.\" Use is subject to license terms.
+.\"
+.\" CDDL HEADER START
+.\"
+.\" The contents of this file are subject to the terms of the
+.\" Common Development and Distribution License, Version 1.0 only
+.\" (the "License"). You may not use this file except in compliance
+.\" with the License.
+.\"
+.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+.\" or http://www.opensolaris.org/os/licensing.
+.\" See the License for the specific language governing permissions
+.\" and limitations under the License.
+.\"
+.\" When distributing Covered Code, include this CDDL HEADER in each
+.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+.\" If applicable, add the following below this CDDL HEADER, with the
+.\" fields enclosed by brackets "[]" replaced with your own identifying
+.\" information: Portions Copyright [yyyy] [name of copyright owner]
+.\"
+.\" CDDL HEADER END
+.\"
+.\" University Copyright- Copyright (c) 1982, 1986, 1988
+.\" The Regents of the University of California
+.\" All Rights Reserved
+.\"
+.\" University Acknowledgment- Portions of this document are derived from
+.\" software developed by the University of California, Berkeley, and its
+.\" contributors.
+.\"
+.\" from OpenSolaris "s 1.10 05/06/08 SMI"
+.\"
+.\" Portions Copyright (c) 2005 Gunnar Ritter, Freiburg i. Br., Germany
+.\"
+.\" Macros .QS and .QE copied from Plan9 sys/lib/tmac/tmac.s
+.\" (Lucent Public License Version 1.02)
+.\"
+.\" Sccsid @(#)s.in 1.4 (gritter) 11/13/06
+.\"
+.ds // /usr/local/share/heirloom-doctools/tmac/
+. \" IZ - initialize (before text begins)
+.de IZ
+.nr HM 1i
+.nr M1 \\n(HMu/2
+.nr FM 1i
+.nr M4 \\n(FMu/2
+.nr YY -\\n(FMu
+.nr XX 0 1
+.nr IP 0
+.nr PI 5n
+.nr QI 5n
+.nr FI 2n
+.nr I0 \\n(PIu
+.if n .nr PD 1v
+.if t .nr PD .3v
+.if n .nr DD 1v
+.if t .nr DD .5v
+.nr PS 10
+.nr VS 12
+.ps \\n(PS
+.vs \\n(VSp
+.nr ML 3v
+.nr IR 0
+.nr TB 0
+.nr SJ \\n(.j
+.nr PO \\n(.o
+.nr LL 6i
+.ll \\n(LLu
+.lt 6i
+.ev 1
+.nr FL 5.5i
+.ll \\n(FLu
+.ps 8
+.vs 10p
+.ev
+.ds CH - \\\\n(PN -
+.if n .ds CF \\*(DY
+.wh 0 NP
+.wh -\\n(FMu FO
+.ch FO 16i
+.wh -\\n(FMu FX
+.ch FO -\\n(FMu
+.wh -\\n(M4u BT
+..
+. \" RT - reset (at new paragraph)
+.de RT
+.if !\\n(1T .BG
+.if !\\n(IK .if !\\n(IF .if !\\n(IX .if !\\n(BE .di
+.if \\n(TM .ls 2
+.ce 0
+.ul 0
+.if \\n(QP \{\
+. ll +\\n(QIu
+. in -\\n(QIu
+. nr QP -1
+.\}
+.if \\n(NX<=1 .if !\\n(AJ .ll \\n(LLu
+.if !\\n(IF \{\
+. ps \\n(PS
+. if \\n(VS>=40 .vs \\n(VSu
+. if \\n(VS<=39 .vs \\n(VSp
+.\}
+.if !\\n(IP .nr I0 \\n(PIu
+.if \\n(IP \{\
+. in -\\n(I\\n(IRu
+. nr IP -1
+.\}
+.ft 1
+.TA
+.fi
+..
+. \" TA - set default tabs
+.de TA
+.if n .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n 80n
+.if t .ta 5n 10n 15n 20n 25n 30n 35n 40n 45n 50n 55n 60n 65n 70n 75n
+..
+. \" BG - begin (at first paragraph)
+.de BG
+.ll \\n(LLu
+.nr M1 \\n(HMu/2
+.nr M4 \\n(FMu/2
+.ch BT -\\n(M4u
+.br
+.nr YE 1
+.di
+.ce 0
+.nr KI 0
+.hy 14
+.nr 1T 1
+.S\\n(ST
+.rm S0 S1 S2 SY TX AX WT RP
+.\"redefs
+.de TL
+.ft 3
+.ce 99
+.sp
+.LG
+\\..
+.de AU
+.ft 2
+.if n .ul 0
+.ce 99
+.sp
+.NL
+\\..
+.de AI
+.ft 1
+.if n .ul 0
+.ce 99
+.if n .sp
+.if t .sp .5
+.NL
+\\..
+.RA
+.rm RA
+.rn FJ FS
+.rn FK FE
+.nf
+.ev 1
+.ps \\n(PS-2
+.vs \\n(.s+2p
+.ev
+.if !\\n(KG .nr FP 0
+.nr KG 0
+.if \\n(FP \{\
+. FS
+. FG
+. FE
+.\}
+.br
+.if \\n(TV .if n .sp 2
+.if \\n(TV .if t .sp 1
+.fi
+..
+. \" RA - redefine abstract
+.de RA
+.de AB
+.br
+.if !\\\\n(1T .BG
+.ce
+.sp
+.if !\\\\n(.$ ABSTRACT
+.if \\\\n(.$ .if !\\\\$1no \\\\$1
+.if !\\\\n(.$ .sp
+.if \\\\n(.$ .if !\\\\$1no .sp
+.sp
+.nr AJ 1
+.in +\\\\n(.lu/12u
+.ll -\\\\n(.lu/12u
+.RT
+.if \\\\n(TM .ls 1
+\\..
+.de AE
+.nr AJ 0
+.br
+.in 0
+.ll \\\\n(LLu
+.if \\\\n(VS>=40 .vs \\\\n(VSu
+.if \\\\n(VS<=39 .vs \\\\n(VSp
+.if \\\\n(TM .ls 2
+\\..
+..
+. \" RP - released paper format
+.de RP
+.nr ST 2
+.if \\$1no .nr ST 1
+.pn 0
+.br
+..
+. \" TL - source file for cover sheet
+.de TL
+.rn TL @T
+.so \*(//ms.cov
+.TL
+.rm @T
+..
+. \" PP - regular paragraph
+.de PP
+.RT
+.if \\n(1T .sp \\n(PDu
+.ne 1.1
+.ti +\\n(PIu
+..
+. \" LP - left paragraph
+.de LP
+.RT
+.if \\n(1T .sp \\n(PDu
+.ne 1.1
+.ti \\n(.iu
+..
+. \" IP - indented paragraph
+.de IP
+.RT
+.if \\n(1T .sp \\n(PDu
+.ne 1.1
+.if !\\n(IP .nr IP +1
+.if \\n(.$-1 .nr I\\n(IR \\$2n
+.in +\\n(I\\n(IRu
+.ta \\n(I\\n(IRu
+.if \\n(.$ \{\
+.ds HT \&\\$1
+.ti -\\n(I\\n(IRu
+\\*(HT\t\c
+.if \w\\*(HTu>(\\n(I\\n(IRu+1n) .br
+.\}
+..
+. \" XP - exdented paragraph
+.de XP
+.RT
+.if \\n(1T .sp \\n(PDu
+.ne 1.1
+.if !\\n(IP .nr IP +1
+.in +\\n(I\\n(IRu
+.ti -\\n(I\\n(IRu
+..
+. \" QP - quote paragraph
+.de QP
+.ti \\n(.iu
+.RT
+.if \\n(1T .sp \\n(PDu
+.ne 1.1
+.nr QP 1
+.in +\\n(QIu
+.ll -\\n(QIu
+.ti \\n(.iu
+.if \\n(TM .ls 1
+..
+.\" Macros QS and QE copied from Plan9 sys/lib/tmac/tmac.s
+.de QS
+.br
+.LP
+.in +\\n(QIu
+.ll -\\n(QIu
+..
+.de QE
+.br
+.ll +\\n(QIu
+.in -\\n(QIu
+.LP
+..
+. \" SH - section header
+.de SH
+.ti \\n(.iu
+.RT
+.if \\n(1T .sp
+.RT
+.ne 3.1
+.B
+..
+. \" NH - numbered header
+.de NH
+.SH
+.nr NS \\$1
+.if !\\n(.$ .nr NS 1
+.if !\\n(NS .nr NS 1
+.nr H\\n(NS +1
+.if !\\n(NS-4 .nr H5 0
+.if !\\n(NS-3 .nr H4 0
+.if !\\n(NS-2 .nr H3 0
+.if !\\n(NS-1 .nr H2 0
+.if !\\$1 .if \\n(.$ .nr H1 1
+.if \\$1S \{\
+. nr NS \\n(.$-1
+. nr H1 \\$2 0
+. nr H2 \\$3 0
+. nr H3 \\$4 0
+. nr H4 \\$5 0
+. nr H5 \\$6 0
+.\}
+.ds SN \\n(H1.
+.if \\n(NS-1 .as SN \\n(H2.
+.if \\n(NS-2 .as SN \\n(H3.
+.if \\n(NS-3 .as SN \\n(H4.
+.if \\n(NS-4 .as SN \\n(H5.
+\\*(SN
+..
+. \" H - fancy header
+.de H
+.ie \\$1no .SH
+.el .NH \\$1
+\\$2
+.XS \\\\n(PN \\$1u-1u*\\n(PIu
+.if \\$1<2 .sp \\n(PDu
+.if !\\$1no \\*(SN\0
+\\$2
+.XE \\$3
+..
+. \" LS - listing start
+.de LS
+.ie \\$1no .ID \\$2
+.el .DS I \\$1
+.nr PQ \\n(.f
+.ft H
+.ps -\\n(dP
+.vs -\\n(dV
+.nr @ \\w'x'u*8
+.if \\n(.$ .nr @ \\w'x'u*\\$2
+.if \\n(.$ .if \\$1no .nr @ \\w'x'u*\\$3
+.ta \\n@u +\\n@u +\\n@u +\\n@u +\\n@u +\\n@u +\\n@u +\\n@u +\\n@u +\\n@u +\\n@u
+..
+. \" LE - listing end
+.de LE
+.ft \\n(PQ
+.ps \\n(PS
+.if \\n(VS>=40 .vs \\n(VSu
+.if \\n(VS<=39 .vs \\n(VSp
+.DE
+..
+. \" DS - display with keep (L=left I=indent C=center B=block)
+.de DS
+.KS
+.nf
+.\\$1D \\$2 \\$1
+.ft 1
+.ps \\n(PS
+.if \\n(VS>=40 .vs \\n(VSu
+.if \\n(VS<=39 .vs \\n(VSp
+..
+.de D
+.ID \\$1
+..
+. \" ID - indented display with no keep
+.de ID
+.XD
+.if t .in +.5i
+.if n .in +8
+.if \\n(.$ .if !\\$1I .if !\\$1 \{\
+. in \\n(OIu
+. in +\\$1n
+.\}
+..
+. \" LD - left display with no keep
+.de LD
+.XD
+..
+. \" CD - centered display with no keep
+.de CD
+.XD
+.ce 999
+..
+. \" XD - real display macro
+.de XD
+.nf
+.nr OI \\n(.i
+.sp \\n(DDu
+.if \\n(TM .ls 1
+..
+. \" DE - end display of any kind
+.de DE
+.ce 0
+.if \\n(BD .DF
+.nr BD 0
+.in \\n(OIu
+.KE
+.if \\n(TM .ls 2
+.sp \\n(DDu
+.fi
+..
+. \" BD - block display: center entire block
+.de BD
+.XD
+.nr BD 1
+.nf
+.in \\n(OIu
+.di DD
+..
+. \" DF - finish block display
+.de DF
+.di
+.if \\n(dl>\\n(BD .nr BD \\n(dl
+.if \\n(BD<\\n(.l .in (\\n(.lu-\\n(BDu)/2u
+.nr EI \\n(.l-\\n(.i
+.ta \\n(EIuR
+.DD
+.in \\n(OIu
+..
+. \" KS - begin regular keep
+.de KS
+.nr KN \\n(.u
+.if !\\n(IK .if !\\n(IF .KQ
+.nr IK +1
+..
+. \" KQ - real keep processor
+.de KQ
+.br
+.nr KI \\n(.i
+.ev 2
+.TA
+.br
+.in \\n(KIu
+.ps \\n(PS
+.if \\n(VS>=40 .vs \\n(VSu
+.if \\n(VS<=39 .vs \\n(VSp
+.ll \\n(LLu
+.lt \\n(LTu
+.if \\n(NX>1 .ll \\n(CWu
+.if \\n(NX>1 .lt \\n(CWu
+.di KK
+.nr TB 0
+..
+. \" KF - begin floating keep
+.de KF
+.nr KN \\n(.u
+.if !\\n(IK .FQ
+.nr IK +1
+..
+. \" FQ - real floating keep processor
+.de FQ
+.nr KI \\n(.i
+.ev 2
+.TA
+.br
+.in \\n(KIu
+.ps \\n(PS
+.if \\n(VS>=40 .vs \\n(VSu
+.if \\n(VS<=39 .vs \\n(VSp
+.ll \\n(LLu
+.lt \\n(LTu
+.if \\n(NX>1 .ll \\n(CWu
+.if \\n(NX>1 .lt \\n(CWu
+.di KK
+.nr TB 1
+..
+. \" KE - end keep
+.de KE
+.if \\n(IK .if !\\n(IK-1 .if !\\n(IF .RQ
+.if \\n(IK .nr IK -1
+..
+. \" RQ - real keep release
+.de RQ
+.br
+.di
+.nr NF 0
+.if \\n(dn-\\n(.t .nr NF 1
+.if \\n(TC .nr NF 1
+.if \\n(NF .if !\\n(TB .sp 200
+.if !\\n(NF .if \\n(TB .nr TB 0
+.nf
+.rs
+.nr TC 5
+.in 0
+.ls 1
+.if !\\n(TB \{\
+. ev
+. br
+. ev 2
+. KK
+.\}
+.ls
+.ce 0
+.if !\\n(TB .rm KK
+.if \\n(TB .da KJ
+.if \\n(TB \!.KD \\n(dn
+.if \\n(TB .KK
+.if \\n(TB .di
+.nr TC \\n(TB
+.if \\n(KN .fi
+.in
+.ev
+..
+. \" KD - keep redivert
+.de KD
+.nr KM 0
+.if \\n(.zKJ .nr KM 1
+.if \\n(KM \!.KD \\$1
+.if !\\n(KM .if \\n(.t<\\$1 .di KJ
+..
+. \" EM - end macro (process leftover keep)
+.de EM
+.br
+.if !\\n(TB .if t .wh -1p CM
+.if \\n(TB \{\
+\&\c
+' bp
+. NP
+. ch CM 160
+.\}
+.if \\n(IF .FE \" End footnote if still pending
+.if !"\\n(.z"" .DI \" End any left over diversions
+..
+. \" DI is used to properly end all diversions, otherwise a bug in
+. \" [nt]roff may cause an infinite loop if the page footer (or
+. \" macros that it calls) happens to start a new diversion.
+.de DI
+.di
+.if !"\\n(.z"" .DI
+..
+.de XK
+.nr TD 1
+.nf
+.ls 1
+.in 0
+.rn KJ KL
+.KL
+.rm KL
+.if \\n(.zKJ .di
+.nr TB 0
+.if \\n(.zKJ .nr TB 1
+.br
+.in
+.ls
+.fi
+.nr TD 0
+..
+. \" NP - new page
+.de NP
+.if \\n(FM+\\n(HM>=\\n(.p \{\
+. tm HM + FM longer than page
+. ab
+.\}
+.if !\\n(LT .nr LT \\n(LLu
+.if t .CM
+.po \\n(POu
+.nr PF \\n(.f
+.nr PX \\n(.s
+.ft 1
+.ps \\n(PS
+'sp \\n(HMu/2u
+.lt \\n(LTu
+.PT
+.lt \\n(.lu
+.if \\n(HM 'sp |\\n(HMu
+.HD \"undefined
+.ps \\n(PX
+.ft \\n(PF
+.nr XX 0 1
+.nr YY 0-\\n(FMu
+.ch FO 16i
+.ch FX 17i
+.ch FO -\\n(FMu
+.ch FX \\n(.pu-\\n(FMu
+.if \\n(MF .FV
+.nr MF 0
+.mk
+.os
+.ev 1
+.if !\\n(TD .if \\n(TC<5 .XK
+.nr TC 0
+.ev
+.nr TQ \\n(.i
+.nr TK \\n(.u
+.if \\n(IT \{\
+. in 0
+. nf
+. TT
+. in \\n(TQu
+. if \\n(TK .fi
+.\}
+.ns
+.mk #T
+..
+. \" PT - page titles
+.de PT
+.pc %
+.nr PN \\n%
+.nr PT \\n%
+.if \\n(P1 .nr PT 2
+.if \\n(PT=1 .tl 
+.if \\n(PT>1 .if !\\n(EH .if !\\n(OH .tl \\*(LH\\*(CH\\*(RH
+.if \\n(PT>1 .if \\n(OH .if o .tl \\*(O1
+.if \\n(PT>1 .if \\n(EH .if e .tl \\*(E2
+..
+. \" OH - odd page header
+.de OH
+.nr OH 1
+.if !\\n(.$ .nr OH 0
+.ds O1 \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+. \" EH - even page header
+.de EH
+.nr EH 1
+.if !\\n(.$ .nr EH 0
+.ds E2 \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+. \" P1 - PT on 1st page
+.de P1
+.nr P1 1
+..
+. \" FO - footer
+.de FO
+.rn FO FZ
+.if \\n(IT .nr T. 1
+.if \\n(IT .if !\\n(FC .T# 1
+.if \\n(IT .br
+.nr FC +1
+.if \\n(NX<2 .nr WF 0
+.nr dn 0
+.if \\n(FC<=1 .if \\n(XX .XF
+.rn FZ FO
+.nr MF 0
+.if \\n(dn .nr MF 1
+.if !\\n(WF .nr YY 0-\\n(FMu
+.if !\\n(WF .ch FO \\n(YYu
+.if !\\n(dn .nr WF 0
+.if \\n(FC<=1 .if !\\n(XX \{\
+. if \\n(NX>1 .RC
+. if \\n(NX<2 'bp
+.\}
+.nr FC -1
+.if \\n(ML .ne \\n(MLu
+..
+. \" BT - bottom title
+.de BT
+.nr PF \\n(.f
+.nr PX \\n(.s
+.ft 1
+.ps \\n(PS
+.lt \\n(LTu
+.po \\n(POu
+.if \\n(TM .if \\n(CT \{\
+. tl ''\\n(PN''
+. nr CT 0
+.\}
+.if \\n% .if !\\n(EF .if !\\n(OF .tl \\*(LF\\*(CF\\*(RF
+.if \\n% .if \\n(OF .if o .tl \\*(O3
+.if \\n% .if \\n(EF .if e .tl \\*(E4
+.ft \\n(PF
+.ps \\n(PX
+..
+. \" OF - odd page footer
+.de OF
+.nr OF 1
+.if !\\n(.$ .nr OF 0
+.ds O3 \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+. \" EF - even page footer
+.de EF
+.nr EF 1
+.if !\\n(.$ .nr EF 0
+.ds E4 \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+. \" 2C - double column
+.de 2C
+.MC
+..
+. \" 1C - single column
+.de 1C
+.MC \\n(LLu
+.hy 14
+..
+. \" MC - multiple columns, arg is col width
+.de MC
+.nr L1 \\n(LL*7/15
+.if \\n(.$ .nr L1 \\$1n
+.nr NQ \\n(LL/\\n(L1
+.if \\n(NQ<1 .nr NQ 1
+.if \\n(NQ>2 .if (\\n(LL%\\n(L1)=0 .nr NQ -1
+.if !\\n(1T \{\
+. BG
+. if n .sp 4
+. if t .sp 2
+.\}
+.if !\\n(NX .nr NX 1
+.if !\\n(NX=\\n(NQ \{\
+. RT
+. if \\n(NX>1 .bp
+. mk
+. nr NC 1
+. po \\n(POu
+.\}
+.if \\n(NQ>1 .hy 12
+.nr NX \\n(NQ
+.nr CW \\n(L1
+.ll \\n(CWu
+.nr FL \\n(CWu*11u/12u
+.if \\n(NX>1 .nr GW (\\n(LL-(\\n(NX*\\n(CW))/(\\n(NX-1)
+.nr RO \\n(CW+\\n(GW
+.ns
+..
+.de RC
+.if \\n(NC>=\\n(NX .C2
+.if \\n(NC<\\n(NX .C1
+.nr NC \\n(ND
+..
+.de C1
+.rt
+.po +\\n(ROu
+.nr ND \\n(NC+1
+.nr XX 0 1
+.if \\n(MF .FV
+.nr MF 0
+.ch FX \\n(.pu-\\n(FMu
+.ev 1
+.if \\n(TB .XK
+.nr TC 0
+.ev
+.nr TQ \\n(.i
+.if \\n(IT .in 0
+.if \\n(IT .TT
+.if \\n(IT .in \\n(TQu
+.mk #T
+.ns
+..
+.de C2
+.po \\n(POu
+'bp
+.nr ND 1
+..
+. \" RS - right shift
+.de RS
+.nr IS \\n(IP
+.RT
+.nr IP \\n(IS
+.if \\n(IP .in +\\n(I\\n(IRu
+.nr IR +1
+.nr I\\n(IR \\n(PIu
+.in +\\n(I\\n(IRu
+..
+. \" RE - retreat left
+.de RE
+.nr IS \\n(IP
+.RT
+.nr IP \\n(IS
+.if \\n(IR .nr IR -1
+.if \\n(IP<=0 .in -\\n(I\\n(IRu
+..
+. \" CM - cut mark
+.de CM
+.po 0
+.lt 7.6i
+.ft 1
+.ps 10
+.vs 4p
+.tl '--''--'
+.po
+.vs
+.lt
+.ps
+.ft
+..
+.rm CM
+. \" I - italic font
+.de I
+.nr PQ \\n(.f
+.if t .ft 2
+.ie \\$1 .if n .ul 999
+.el .if n .ul 1
+.if t .if !\\$1 \&\\$1\|\f\\n(PQ\\$2
+.if n .if \\n(.$=1 \&\\$1
+.if n .if \\n(.$>1 \&\\$1\c
+.if n .if \\n(.$>1 \&\\$2
+..
+. \" B - bold font
+.de B
+.nr PQ \\n(.f
+.if t .ft 3
+.ie \\$1 .if n .ul 999
+.el .if n .ul 1
+.if t .if !\\$1 \&\\$1\f\\n(PQ\\$2
+.if n .if \\n(.$=1 \&\\$1
+.if n .if \\n(.$>1 \&\\$1\c
+.if n .if \\n(.$>1 \&\\$2
+..
+. \" R - Roman font
+.de R
+.if n .ul 0
+.ft 1
+..
+. \" L - listing font
+.de L
+\%\&\\$3\fH\\$1\fP\&\\$2
+..
+. \" LB - bold listing font
+.de LB
+\%\&\\$3\f(HB\\$1\fP\&\\$2
+..
+. \" UL - underline in troff
+.de UL
+.if t \\$1\l'|0\(ul'\\$2
+.if n .I \\$1 \\$2
+..
+. \" SM - smaller
+.de SM
+.ps -2
+..
+. \" LG - larger
+.de LG
+.ps +2
+..
+. \" NL - normal
+.de NL
+.ps \\n(PS
+..
+. \" DA - force date
+.de DA
+.if \\n(.$ .ds DY \\$1 \\$2 \\$3 \\$4
+.ds CF \\*(DY
+..
+. \" ND - no date or new date
+.de ND
+.if \\n(.$ .ds DY \\$1 \\$2 \\$3 \\$4
+.rm CF
+..
+. \" \** - numbered footnote
+.ds * \\*([.\\n+*\\*(.]
+. \" FJ - replaces FS after cover
+.de FJ
+'ce 0
+.di
+.ev 1
+.ll \\n(FLu
+.da FF
+.br
+.if \\n(IF .tm Nested footnote
+.nr IF 1
+.if !\\n+(XX-1 .FA
+.if !\\n(MF .if !\\n(.$ .if \\n* .FP \\n*
+.if !\\n(MF .if \\n(.$ .FP \\$1 no
+..
+. \" FK - replaces FE after cover
+.de FK
+.br
+.in 0
+.nr IF 0
+.di
+.ev
+.if !\\n(XX-1 .nr dn +\\n(.v
+.nr YY -\\n(dn
+.if !\\n(NX .nr WF 1
+.if \\n(dl>\\n(CW .nr WF 1
+.if (\\n(nl+\\n(.v)<=(\\n(.p+\\n(YY) .ch FO \\n(YYu
+.if (\\n(nl+\\n(.v)>(\\n(.p+\\n(YY) \{\
+. if \\n(nl>(\\n(HM+1.5v) .ch FO \\n(nlu+\\n(.vu
+. if \\n(nl+\\n(FM+1v>\\n(.p .ch FX \\n(.pu-\\n(FMu+2v
+. if \\n(nl<=(\\n(HM+1.5v) .ch FO \\n(HMu+(4u*\\n(.vu)
+.\}
+..
+. \" FS - begin footnote on cover
+.de FS
+.ev 1
+.br
+.ll \\n(FLu
+.da FG
+.if !\\n(.$ .if \\n* .FP \\n*
+.if \\n(.$ .FP \\$1 no
+..
+. \" FE - end footnote on cover
+.de FE
+.br
+.di
+.nr FP \\n(dn
+.if !\\n(1T .nr KG 1
+.ev
+..
+. \" FA - print line before footnotes
+.de FA
+.in 0
+.if n _________________________
+.if t \l'1i'
+.br
+..
+. \" FP - footnote paragraph
+.de FP
+.sp \\n(PDu/2u
+.if \\n(FF<2 .ti \\n(FIu
+.if \\n(FF=3 \{\
+. in \\n(FIu*2u
+. ta \\n(FIu*2u
+. ti 0
+.\}
+.if !\\n(FF \{\
+. ie "\\$2"no" \\$1\0\c
+. el \\*([.\\$1\\*(.]\0\c
+.\}
+.if \\n(FF .if \\n(FF<3 \{\
+. ie "\\$2"no" \\$1\0\c
+. el \\$1.\0\c
+.\}
+.if \\n(FF=3 \{\
+. ie "\\$2"no" \\$1\t\c
+. el \\$1.\t\c
+.\}
+..
+. \" FV - get leftover footnote from previous page
+.de FV
+.FS
+.nf
+.ls 1
+.FY
+.ls
+.fi
+.FE
+..
+. \" FX - divert leftover footnote for next page
+.de FX
+.if \\n(XX .di FY
+.if \\n(XX .ns
+..
+. \" XF - actually print footnote
+.de XF
+.if \\n(nlu+1v>(\\n(.pu-\\n(FMu) .ch FX \\n(nlu+1.9v
+.ev 1
+.nf
+.ls 1
+.FF
+.rm FF
+.nr XX 0 1
+.br
+.ls
+.di
+.fi
+.ev
+..
+. \" TS - source file for tbl
+.de TS
+.rn TS @T
+.so \*(//ms.tbl
+.TS \\$1 \\$2
+.lf 2 table-at-line-950-of-/usr/local/share/heirloom-doctools/tmac/s
+.de 00
+..
+.do nr w. \n[.warn]
+.if \n(.X>0 .do warn -mac -reg
+.if \n+(b.=1 .nr d. \n(.c-\n(c.-1
+.if \n(.X>0 .do warn \n(w.
+.de 35 00
+.ps \n(.s
+.vs \n(.vu
+.in \n(.iu
+.if \n(.u .fi
+.if \n(.j .ad
+.if \n(.j=0 .na
+.00
+.nf
+.nr #~ 0
+.if n .nr #~ 0.6n
+.ds #d .d
+.if \(ts\n(.z\(ts\(ts .ds #d nl
+.fc
+.nr 33 \n(.s
+..
+. \" EQ - source file for eqn
+.de EQ
+.rn EQ @T
+.so \*(//ms.eqn
+.EQ \\$1 \\$2
+.rm @T
+..
+. \" ]- - source file for refer
+.de ]-
+.rn ]- @T
+.so \*(//ms.ref
+.]-
+.rm @T
+..
+. \" [< - for refer -s or -e
+.de ]<
+.rn ]< @T
+.so \*(//ms.ref
+.]<
+.rm @T
+..
+.if \n(.V>19 .ds [. \f1[
+.if \n(.V>19 .ds .] ]\fP
+.if \n(.V<20 .ds [. \f1\s-2\v'-.4m'
+.if \n(.V<20 .ds .] \v'.4m'\s+2\fP
+.ds <. .
+.ds <, ,
+.if n .ds Q \&"
+.if n .ds U \&"
+.if n .ds - \%--
+.if t .ds Q ``
+.if t .ds U ''
+.if t .ds - \(em
+.ds ' \h'\w'e'u/5'\z\'\h'-\w'e'u/5'
+.ds ` \h'\w'e'u/5'\z\`\h'-\w'e'u/5'
+.ds ^ \h'\w'o'u/10'\z^\h'-\w'e'u/10'
+.ds , \h'\w'c'u/5'\z,\h'-\w'e'u/5'
+.ds : \h'\w'u'u/5'\z"\h'-\w'e'u/5'
+.ds ~ \h'\w'n'u/10'\z~\h'-\w'e'u/10'
+.ds C \h'\w'c'u/5'\v'-.6m'\s-4\zv\s+4\v'.6m'\h'-\w'c'u/5'
+. \" AM - better accent marks
+.de AM
+.so \*(//ms.acc
+..
+. \" TM - thesis mode
+.de TM
+.so \*(//ms.ths
+..
+. \" BX - word in a box
+.de BX
+.if t \(br\|\\$1\|\(br\l'|0\(rn'\l'|0\(ul'
+.if n \(br\\kA\|\\$1\|\\kB\(br\v'-1v'\h'|\\nBu'\l'|\\nAu'\v'1v'\l'|\\nAu'
+..
+. \" B1 - source file for boxed text
+.de B1
+.rn B1 @T
+.so \*(//ms.tbl
+.B1 \\$1
+.rm @T
+..
+. \" XS - table of contents
+.de XS
+.rn XS @T
+.so \*(//ms.toc
+.XS \\$1 \\$2
+.rm @T
+..
+. \" IX - index words to stderr
+.if \n(.X .do nr IXcount 0 1
+.de IX
+.ie \\n(.X&\\n(.k \{.do de IX-\\n+[IXcount]
+.tm \\$1\t\\$2\t\\$3\t\\$4 ... \\\\n(PN
+\\..
+.do nr IXsaveX \\n(.X
+.do xflag 3
+\\P[IX-\\n[IXcount]]\c
+.do xflag \\n[IXsaveX]
+.\}
+.el \{.tm \\$1\t\\$2\t\\$3\t\\$4 ... \\n(PN
+.\}
+..
+. \" UX - UNIX macro
+.de UX
+.ie \\n(UX \s-1UNIX\s0\\$1
+.el \{\s-1UNIX\s0\\$1\(dg
+.FS
+\(dg \s-1UNIX\s0 is a registered trademark of The Open Group in the
+U.S. and other countries.
+.FE
+.nr UX 1
+.\}
+..
+.co
+.if \n(mo-0 .ds MO January
+.if \n(mo-1 .ds MO February
+.if \n(mo-2 .ds MO March
+.if \n(mo-3 .ds MO April
+.if \n(mo-4 .ds MO May
+.if \n(mo-5 .ds MO June
+.if \n(mo-6 .ds MO July
+.if \n(mo-7 .ds MO August
+.if \n(mo-8 .ds MO September
+.if \n(mo-9 .ds MO October
+.if \n(mo-10 .ds MO November
+.if \n(mo-11 .ds MO December
+.nr _Y 1900+\n(yr
+.ds DY \*(MO \n(dy, \n(_Y
+.nr * 0 1
+.IZ
+.em EM
+.rm IZ //
+.ds f. resume2.ms
+.lf 1 resume2.ms
+.fam T
+.nr PS 10p
+.nr VS 15p
+.ds CH
+.
+.
+.defcolor linecolor rgb 0.6f 0.6f 0.6f
+.defcolor headingcolor rgb 0.5f 0.5f 0.5f
+.
+.
+.de heading
+. nf
+. ps 14
+. B "\\$1"
+\h'0n'\v'-1.2n'\m[headingcolor]\l'\\n(.lu\(ul'\m[default]
+. ps 10
+. sp -.2
+. fi
+..
+
+.de BL
+.IP \(bu 2
+..
+
+.ce 2
+.ps 18
+.B "Preston Pan"
+.ps 10
+https://prestonpan.tech
+.TS
+.lf 2 table-at-line-33-of-resume2.ms
+.de 00
+..
+.do nr w. \n[.warn]
+.if \n(.X>0 .do warn -mac -reg
+.if \n+(b.=1 .nr d. \n(.c-\n(c.-1
+.if \n(.X>0 .do warn \n(w.
+.de 35 00
+.ps \n(.s
+.vs \n(.vu
+.in \n(.iu
+.if \n(.u .fi
+.if \n(.j .ad
+.if \n(.j=0 .na
+.00
+.nf
+.nr #~ 0
+.if n .nr #~ 0.6n
+.ds #d .d
+.if \(ts\n(.z\(ts\(ts .ds #d nl
+.fc
+.nr 33 \n(.s
+.rm 80 81
+.nr 80 0
+.nr 38 \w808-Yates St.
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \wVictoria, V8W 1L8;T{
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \wT}
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \wBritish Columbia, Canada;T{
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \wT}
+.if \n(80<\n(38 .nr 80 \n(38
+.if \n(.X>0 .do warn -mac -reg
+.80
+.rm 80
+.if \n(.X>0 .do warn \n(w.
+.nr 81 0
+.if \n(.X>0 .do warn -mac -reg
+.81
+.rm 81
+.if \n(.X>0 .do warn \n(w.
+.nr 38 0+\n(80+\n(81
+.nr 38 \n(.l-\n(.i-\n(38-3n/1
+.nr 81 +\n(38
+.nr 38 1n
+.nr 79 0
+.nr 40 \n(79+(0*\n(38)
+.nr 80 +\n(40
+.nr 41 \n(80+(3*\n(38)
+.nr 81 +\n(41
+.nr TW \n(81
+.if t .if \n(TW>\n(.l .tm Table at line 42 file resume2.ms is too wide - \n(TW units
+.fc  
+.nr #T 0-1
+.nr #a 0-1
+.eo
+.de T# 00
+.ds #d .d
+.if \(ts\n(.z\(ts\(ts .ds #d nl
+.mk ##
+.nr ## -1v
+.ls 1
+.ls
+.00
+.ec
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'808-Yates St.\h'|\n(41u'
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'Victoria, V8W 1L8;T{\h'|\n(41u'
+.I "+1 (250) 508-5167"
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'T}\h'|\n(41u'
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'British Columbia, Canada;T{\h'|\n(41u'
+.I "preston@nullring.xyz"
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'T}\h'|\n(41u'
+.fc
+.nr T. 1
+.T# 1
+.35
+.if \n(.X>0 .do warn -mac -reg
+.if \n(.X>0 .do warn \n(w.
+.lf 42 resume2.ms
+.TE
+.if \n(.X>0 .do warn -mac -reg
+.if \n-(b.=0 .nr c. \n(.c-\n(d.-9
+.if \n(.X>0 .do warn \n(w.
+.lf 43 resume2.ms
+
+.heading "Education"
+.TS
+.lf 2 table-at-line-45-of-resume2.ms
+.de 00
+..
+.do nr w. \n[.warn]
+.if \n(.X>0 .do warn -mac -reg
+.if \n+(b.=1 .nr d. \n(.c-\n(c.-1
+.if \n(.X>0 .do warn \n(w.
+.de 35 00
+.ps \n(.s
+.vs \n(.vu
+.in \n(.iu
+.if \n(.u .fi
+.if \n(.j .ad
+.if \n(.j=0 .na
+.00
+.nf
+.nr #~ 0
+.if n .nr #~ 0.6n
+.ds #d .d
+.if \(ts\n(.z\(ts\(ts .ds #d nl
+.fc
+.nr 33 \n(.s
+.rm 80 81
+.nr 80 0
+.nr 38 \w\m[default]2017 - 2021\m[linecolor];T{
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \w\(en Vancouver, BC
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \wT}
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \w\m[default]2022 - now\m[linecolor];T{
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \w\(en Victoria, BC
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \wT}
+.if \n(80<\n(38 .nr 80 \n(38
+.if \n(.X>0 .do warn -mac -reg
+.80
+.rm 80
+.if \n(.X>0 .do warn \n(w.
+.nr 38 15n
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 81 0
+.if \n(.X>0 .do warn -mac -reg
+.81
+.rm 81
+.if \n(.X>0 .do warn \n(w.
+.nr 38 0+\n(80+\n(81
+.nr 38 \n(.l-\n(.i-\n(38-3n/1
+.nr 81 +\n(38
+.nr 38 1n
+.nr 79 0
+.nr 40 \n(79+(0*\n(38)
+.nr 80 +\n(40
+.nr 41 \n(80+(3*\n(38)
+.nr 81 +\n(41
+.nr TW \n(81
+.if t .if \n(TW>\n(.l .tm Table at line 58 file resume2.ms is too wide - \n(TW units
+.fc  
+.nr #T 0-1
+.nr #b 0-1
+.nr #a 0-1
+.eo
+.de T# 00
+.ds #d .d
+.if \(ts\n(.z\(ts\(ts .ds #d nl
+.mk ##
+.nr ## -1v
+.ls 1
+.if \n(#T>=0 .nr #b \n(#T
+.if \n(#b>=0 .sp -1
+.if \n(#b>=0 \h'(|\n(41u+|\n(80u)/2u'\s\n(33\h'-\n(#~u'\L'|\n(#bu-1v'\s0\v'\n(\*(#du-\n(#bu+1v'\h'|\n(TWu'
+.ls
+.00
+.ec
+.mk #b
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'\m[default]2017 - 2021\m[linecolor];T{\h'|\n(41u'
+.B "Sir Winston Churchill Secondary"
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'\(en Vancouver, BC\h'|\n(41u'
+.br
+.sp .5
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'T}\h'|\n(41u'
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'\m[default]2022 - now\m[linecolor];T{\h'|\n(41u'
+.B "Pacific School of Innovation and Inquiry"
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'\(en Victoria, BC\h'|\n(41u'
+.br
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'T}\h'|\n(41u'
+.fc
+.nr T. 1
+.T# 1
+.35
+.if \n(.X>0 .do warn -mac -reg
+.nr #a 0
+.if \n(.X>0 .do warn \n(w.
+.lf 58 resume2.ms
+.TE
+.if \n(.X>0 .do warn -mac -reg
+.if \n-(b.=0 .nr c. \n(.c-\n(d.-13
+.if \n(.X>0 .do warn \n(w.
+.lf 59 resume2.ms
+\m[default]
+.heading "Projects"
+.QS
+.B "Note "
+\(en
+.I "All my projects have their respective soure code avaiable at "
+.UL "https://git.prestonpan.tech".
+.BL
+.B "The Null Webring"
+\(en
+The Null Webring is a webring that I run which has an associated website: https://nullring.xyz.
+.br
+.BL
+.B "The Null Identity"
+\(en
+An organization that I created that focuses on explaining
+science and technology from a satirical-pseudoreligious context,
+with an associated website: https://society.nullring.xyz. I wrote
+the website with a primitive templating language/static site generator
+in pure POSIX shell script which generates the website from simpler template
+and data files.
+.BL
+.B "Snake3"
+\(en
+Although this was a small project, it showcases my skills at writing man pages in the roff
+format and my ability to come up with novel algorithms, as well as working with threading
+in the C programming language. It's a simple snake game in the terminal that works
+without the curses library. It was also a collaboration with Kai Stevenson: https://kaistevenson.com. You can get
+the source code from https://prestonpan.tech/files/snake3/.
+.BL
+.B "NoExcess"
+\(en
+NoExcess is a fully featured turing complete programming language that I have written.
+It is heavily inspired by scheme, and like scheme, it is a functional programming
+language. It was made to have a simple set of built-in functions, and a builtin
+way to declare variables and functions. Float, integer, boolean, and string datatypes
+are also supported along with the list, function and symbol datatypes, just like
+in other lisp-like languages.
+.BL
+.B "COMAS"
+\(en
+Short for the computer operated math assistance program. It will do extremely
+complex calculations (operations within quaternionic functional tensors) in the future,
+but right now only quaternions are fully supported. It comes with a clever way to
+represent hyperreal numbers as a non-communatative derivative operator division
+ring.
+
+.heading "Skills"
+.QS
+.BL
+.B "Systems"
+\(en
+Extensive knowledge of operating systems such as GNU/Linux, OpenBSD, NetBSD, and 9front/plan9, as I have used all of these systems
+as daily drivers on my personal machine and as servers.
+.BL
+.B "Sysadmining"
+\(en
+I sysadmin my own server where I host multiple websites, an email server, git server, and more. As a result, I have knowledge
+of many standard tools for sysadmining (docker, ssh, common servers and daemons) and have knowledge of many different operating
+systems.
+.BL
+.B "Programming Languages"
+\(en
+I have good knowledge of c, python, shell, x86 assembly, and HTML/css/Javascript.
+.BL
+.B "Development tools"
+\(en
+Knowledge of standard collaborative development tools (command line git, writing UNIX man pages, using build systems like make/cmake/autotools)
+as well as writing papers in LaTeX and roff.
+.BL
+.B "Mathematics"
+\(en
+I have knowledge of mathematics up to about a 3rd year university level due to self study, and have gotten distinction in mathematics
+contests such as the Fermat Waterloo math competition (knowledge of multivariable calculus, linear algebra, discrete mathematics,
+and ordinary differential equations, among other topics).
+.BL
+.B "Physics"
+\(en
+Aside from the mathematics which is of course a very important skill in physics, I have done self study on many advanced
+university level topics such as electrodynamics and kinematics from a multivariable calculus perspective. I am also working
+with two classmates on a completely novel grand unified theory of physics, which will be published on my website when it
+is done.
+.BL
+.B "Music"
+\(en
+I've been playing piano for more than 10 years in total, and have been singing for as long as I can remember.
+Some of my piano improvisation is on my website.
+.QE
diff --git a/build/website/about/source/resume2.ms b/build/website/about/source/resume2.ms
new file mode 100644
index 0000000..6daa230
--- /dev/null
+++ b/build/website/about/source/resume2.ms
@@ -0,0 +1,146 @@
+.fam T
+.nr PS 10p
+.nr VS 15p
+.ds CH
+.
+.
+.defcolor linecolor rgb 0.6f 0.6f 0.6f
+.defcolor headingcolor rgb 0.5f 0.5f 0.5f
+.
+.
+.de heading
+. nf
+. ps 14
+. B "\\$1"
+\h'0n'\v'-1.2n'\
+\m[headingcolor]\
+\l'\\n(.lu\(ul'\
+\m[default]
+. ps 10
+. sp -.2
+. fi
+..
+
+.de BL
+.IP \(bu 2
+..
+
+.ce 2
+.ps 18
+.B "Preston Pan"
+.ps 10
+https://prestonpan.tech
+.TS
+l rx.
+808-Yates St.
+Victoria, V8W 1L8;T{
+.I "+1 (250) 508-5167"
+T}
+British Columbia, Canada;T{
+.I "preston@nullring.xyz"
+T}
+.TE
+
+.heading "Education"
+.TS
+rW15|lx.
+\m[default]2017 - 2021\m[linecolor];T{
+.B "Sir Winston Churchill Secondary"
+\(en Vancouver, BC
+.br
+.sp .5
+T}
+\m[default]2022 - now\m[linecolor];T{
+.B "Pacific School of Innovation and Inquiry"
+\(en Victoria, BC
+.br
+T}
+.TE
+\m[default]
+.heading "Projects"
+.QS
+.B "Note "
+\(en
+.I "All my projects have their respective soure code avaiable at "
+.UL "https://git.prestonpan.tech".
+.BL
+.B "The Null Webring"
+\(en
+The Null Webring is a webring that I run which has an associated website: https://nullring.xyz.
+.br
+.BL
+.B "The Null Identity"
+\(en
+An organization that I created that focuses on explaining
+science and technology from a satirical-pseudoreligious context,
+with an associated website: https://society.nullring.xyz. I wrote
+the website with a primitive templating language/static site generator
+in pure POSIX shell script which generates the website from simpler template
+and data files.
+.BL
+.B "Snake3"
+\(en
+Although this was a small project, it showcases my skills at writing man pages in the roff
+format and my ability to come up with novel algorithms, as well as working with threading
+in the C programming language. It's a simple snake game in the terminal that works
+without the curses library. It was also a collaboration with Kai Stevenson: https://kaistevenson.com. You can get
+the source code from https://prestonpan.tech/files/snake3/.
+.BL
+.B "NoExcess"
+\(en
+NoExcess is a fully featured turing complete programming language that I have written.
+It is heavily inspired by scheme, and like scheme, it is a functional programming
+language. It was made to have a simple set of built-in functions, and a builtin
+way to declare variables and functions. Float, integer, boolean, and string datatypes
+are also supported along with the list, function and symbol datatypes, just like
+in other lisp-like languages.
+.BL
+.B "COMAS"
+\(en
+Short for the computer operated math assistance program. It will do extremely
+complex calculations (operations within quaternionic functional tensors) in the future,
+but right now only quaternions are fully supported. It comes with a clever way to
+represent hyperreal numbers as a non-communatative derivative operator division
+ring.
+
+.heading "Skills"
+.QS
+.BL
+.B "Systems"
+\(en
+Extensive knowledge of operating systems such as GNU/Linux, OpenBSD, NetBSD, and 9front/plan9, as I have used all of these systems
+as daily drivers on my personal machine and as servers.
+.BL
+.B "Sysadmining"
+\(en
+I sysadmin my own server where I host multiple websites, an email server, git server, and more. As a result, I have knowledge
+of many standard tools for sysadmining (docker, ssh, common servers and daemons) and have knowledge of many different operating
+systems.
+.BL
+.B "Programming Languages"
+\(en
+I have good knowledge of c, python, shell, x86 assembly, and HTML/css/Javascript.
+.BL
+.B "Development tools"
+\(en
+Knowledge of standard collaborative development tools (command line git, writing UNIX man pages, using build systems like make/cmake/autotools)
+as well as writing papers in LaTeX and roff.
+.BL
+.B "Mathematics"
+\(en
+I have knowledge of mathematics up to about a 3rd year university level due to self study, and have gotten distinction in mathematics
+contests such as the Fermat Waterloo math competition (knowledge of multivariable calculus, linear algebra, discrete mathematics,
+and ordinary differential equations, among other topics).
+.BL
+.B "Physics"
+\(en
+Aside from the mathematics which is of course a very important skill in physics, I have done self study on many advanced
+university level topics such as electrodynamics and kinematics from a multivariable calculus perspective. I am also working
+with two classmates on a completely novel grand unified theory of physics, which will be published on my website when it
+is done.
+.BL
+.B "Music"
+\(en
+I've been playing piano for more than 10 years in total, and have been singing for as long as I can remember.
+Some of my piano improvisation is on my website.
+.QE
diff --git a/build/website/about/source/resume2.pdf b/build/website/about/source/resume2.pdf
new file mode 100644
index 0000000..41851d8
--- /dev/null
+++ b/build/website/about/source/resume2.pdf
Binary files differ
diff --git a/build/website/mathematics/calculus/derivative_identities.pdf b/build/website/mathematics/calculus/derivative_identities.pdf
new file mode 100644
index 0000000..b63f034
--- /dev/null
+++ b/build/website/mathematics/calculus/derivative_identities.pdf
Binary files differ
diff --git a/build/website/mathematics/calculus/source/derivative_identities.ms b/build/website/mathematics/calculus/source/derivative_identities.ms
new file mode 100644
index 0000000..704034f
--- /dev/null
+++ b/build/website/mathematics/calculus/source/derivative_identities.ms
@@ -0,0 +1,170 @@
+.EQ
+delim $$
+.EN
+.TL
+Derivative Identities
+.AU
+Preston Pan
+.AI
+Pacific School of Innovation and Inquiry
+
+.NH 1
+Introduction
+.PP
+Now that you know how to calculate the derivative of a specific very simple function,
+you might now ask how you might take a derivative of a more complicated function, perhaps
+involving functions that are the sum or product of two other simpler functions, or the
+composition of two functions.
+
+.PP
+In order to get to a general case, we can look at a specific case. Say, for example,
+we want to take the derivative of $f(x) = x sup 2 + x$ (we are using h for delta x here because
+that is the actual convention):
+
+.EQ
+f'(x) = {{(x + h)} sup {2} + x + h - {x} sup {2} - x} over h
+.EN
+.EQ
+f'(x) = {{x} sup {2} + 2xh + {h} sup {2} + x + h - {x} sup 2 - {x}} over h
+.EN
+.EQ
+f'(x) = {2xh + {h} sup {2} + h} over h
+.EN
+.EQ
+f'(x) = 2x + 1 + h
+.EN
+
+.PP
+and as h becomes infinitely small, the resulting derivative is 2x + 1.
+
+.PP
+But we know already that the slope of x was equal to one. You learn that in 9th grade.
+And we know that 2x is the derivative of $x^2$. So it seems like this should be true:
+
+.EQ
+(f + g)' = f' + g'
+.EN
+
+.PP
+or in words: adding the functions and then taking the derivative is exactly the same as taking
+the derivative of both the functions first then adding them. In other words: the order of adding
+and taking the derivative doesn't matter. But is this really true?
+
+.PP
+In fact, it is! If we use two general functions f and g, we can see that this is true for any
+two functions that you pick:
+
+.EQ
+(f + g)' = {f(x + h) + g(x + h) - f(x) - g(x)} over h
+.EN
+
+and if we just rearrange and separate the g and f terms:
+.EQ
+(f + g)' = {f(x + h) - f(x)} over {h} + {g(x + h) - g(x)} over h = f' + g'
+.EN
+
+If that is not a clear illustration, this is extremely easy to figure out on your own given
+the general method.
+
+It should be clear that multiplication can be done in the same general process. However,
+it is a little bit more complicated. I suggest trying to figure it out on your own before
+you read the solution below:
+
+.EQ
+(f * g)' = {f(x + h)g(x + h) - f(x)g(x)} over h
+.EN
+in order for this solution to work, we must subtract and add a term $f(x + h)g(x):$
+.EQ
+(f * g)' = {f(x + h)g(x + h) - f(x + h)g(x) + f(x + h)g(x) - f(x)g(x)} over h
+.EN
+and we factor some terms out:
+.EQ
+(f * g)' = {f(x + h)(g(x + h) - g(x)) + g(x)(f(x + h) - f(x))} over h
+.EN
+and we can clearly see that:
+.EQ
+(f * g)' = f(x + h){g(x + h) - g(x)} over {h} + g(x){f(x + h) - f(x)} over {h}
+.EN
+as $h$ approaches zero, $f(x + h)$ approaches $f(x)$. Also, we can see that some of
+these terms look like derivatives, so:
+.EQ
+(f * g)' = f(x)g'(x) + g(x)f'(x).
+.EN
+
+.PP
+And this will work with any two functions where you know their derivatives. Isn't that cool?
+
+.NH 1
+The power rule
+.PP
+Up until now, we assumed that you could take the derivative of an arbitrary function $f$ and
+$g$ and gave rules for computing the derivatives of their products and sums based on that
+assumption. However, it's not clear how you are supposed to just
+.I "know"
+the derivatives of many functions, including sine and cosine, as well as $x sup n$. Of course,
+we figured it out for $x sup 2$, but there are many functions that we have not explained the
+derivative of. How do we find these derivatives?
+
+.PP
+Of course, like with all derivatives of functions, you can calculate them with the general
+derivative definition. Here, we will discuss the power rule, or $x sup n$ for any positive
+integer $n$.
+
+.PP
+If we just plug it into the general form form directly:
+.EQ
+f'(x) = {{(x + h)} sup {n} - {x} sup {n}} over h
+.EN
+You might observe that we need to somehow expand the binomial ${(a + b)} sup n$ for arbitrary n.
+You might try doing this by expanding for $n = 1$, $n = 2$, etc... and finding a pattern:
+.EQ
+{(a + b)} sup 0 = 1
+.EN
+.EQ
+{(a + b)} sup 1 = a + b
+.EN
+.EQ
+{(a + b)} sup 2 = a sup 2 + 2ab + {b} sup {2}
+.EN
+.EQ
+{(a + b)} sup 3 = a sup 3 + 3{a} sup {2}b + 3{b} sup {2}a + {b} sup {3}
+.EN
+and if you keep on doing this for higher $n$, you will see that:
+.EQ
+{(a + b)} sup n = a sup n + n{a} sup {n - 1} {b} sup {1} + ... b sup n
+.EN
+.PP
+the details of this are left as an exercise to the reader, and don't really matter for this
+proof. The only things that matter are that the exponent for b gets larger in the terms not
+listed. If you want to be rigorous, you can try proving this by induction.
+
+.PP
+If you substitute this for the binomial for the derivative definition:
+.EQ
+(x sup {n})' = {x sup n + n{x} sup {n - 1}h + ... h sup n - x sup n} over h
+.EN
+if we cancel out the $x sup n$ terms:
+.EQ
+(x sup {n})' = {n{x} sup {n - 1}h + ... {h} sup {n}} over h
+.EN
+.EQ
+(x sup {n})' = n{x} sup {n - 1} + {... {h} sup {n}} over h
+.EN
+.EQ
+(x sup {n})' = n{x} sup {n - 1} + ... {h} sup {n - 1}
+.EN
+Now we recall that according to our binomial expansion, the exponent
+for $h$ will always grow as we continue looking to the right, and the term $n{x} sup {n - 1} h$ had an exponent of one, which means that each h in the ... will have an exponent of two or more,
+so when we cancel everything out, everything in that ... will
+still have an h term. Because h is infinitely small, we may assume that everything not expanded
+in ... will be almost zero, so our answer here is:
+.EQ
+(x sup {n})' = n{x} sup {n - 1}.
+.EN
+
+.NH 1
+Conclusion
+
+.PP
+Combining knowledge from all of these sections, you will be able to take the derivative
+of an arbitrary polynomial. Next time we will talk about the chain rule and its importance.
diff --git a/website/about/source/resume.ps b/website/about/source/resume.ps
new file mode 100644
index 0000000..973f6da
--- /dev/null
+++ b/website/about/source/resume.ps
@@ -0,0 +1,1439 @@
+.ds f. /usr/local/share/heirloom-doctools/tmac/s
+.lf 1 /usr/local/share/heirloom-doctools/tmac/s
+.\"
+.\" Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+.\" Use is subject to license terms.
+.\"
+.\" CDDL HEADER START
+.\"
+.\" The contents of this file are subject to the terms of the
+.\" Common Development and Distribution License, Version 1.0 only
+.\" (the "License"). You may not use this file except in compliance
+.\" with the License.
+.\"
+.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+.\" or http://www.opensolaris.org/os/licensing.
+.\" See the License for the specific language governing permissions
+.\" and limitations under the License.
+.\"
+.\" When distributing Covered Code, include this CDDL HEADER in each
+.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+.\" If applicable, add the following below this CDDL HEADER, with the
+.\" fields enclosed by brackets "[]" replaced with your own identifying
+.\" information: Portions Copyright [yyyy] [name of copyright owner]
+.\"
+.\" CDDL HEADER END
+.\"
+.\" University Copyright- Copyright (c) 1982, 1986, 1988
+.\" The Regents of the University of California
+.\" All Rights Reserved
+.\"
+.\" University Acknowledgment- Portions of this document are derived from
+.\" software developed by the University of California, Berkeley, and its
+.\" contributors.
+.\"
+.\" from OpenSolaris "s 1.10 05/06/08 SMI"
+.\"
+.\" Portions Copyright (c) 2005 Gunnar Ritter, Freiburg i. Br., Germany
+.\"
+.\" Macros .QS and .QE copied from Plan9 sys/lib/tmac/tmac.s
+.\" (Lucent Public License Version 1.02)
+.\"
+.\" Sccsid @(#)s.in 1.4 (gritter) 11/13/06
+.\"
+.ds // /usr/local/share/heirloom-doctools/tmac/
+. \" IZ - initialize (before text begins)
+.de IZ
+.nr HM 1i
+.nr M1 \\n(HMu/2
+.nr FM 1i
+.nr M4 \\n(FMu/2
+.nr YY -\\n(FMu
+.nr XX 0 1
+.nr IP 0
+.nr PI 5n
+.nr QI 5n
+.nr FI 2n
+.nr I0 \\n(PIu
+.if n .nr PD 1v
+.if t .nr PD .3v
+.if n .nr DD 1v
+.if t .nr DD .5v
+.nr PS 10
+.nr VS 12
+.ps \\n(PS
+.vs \\n(VSp
+.nr ML 3v
+.nr IR 0
+.nr TB 0
+.nr SJ \\n(.j
+.nr PO \\n(.o
+.nr LL 6i
+.ll \\n(LLu
+.lt 6i
+.ev 1
+.nr FL 5.5i
+.ll \\n(FLu
+.ps 8
+.vs 10p
+.ev
+.ds CH - \\\\n(PN -
+.if n .ds CF \\*(DY
+.wh 0 NP
+.wh -\\n(FMu FO
+.ch FO 16i
+.wh -\\n(FMu FX
+.ch FO -\\n(FMu
+.wh -\\n(M4u BT
+..
+. \" RT - reset (at new paragraph)
+.de RT
+.if !\\n(1T .BG
+.if !\\n(IK .if !\\n(IF .if !\\n(IX .if !\\n(BE .di
+.if \\n(TM .ls 2
+.ce 0
+.ul 0
+.if \\n(QP \{\
+. ll +\\n(QIu
+. in -\\n(QIu
+. nr QP -1
+.\}
+.if \\n(NX<=1 .if !\\n(AJ .ll \\n(LLu
+.if !\\n(IF \{\
+. ps \\n(PS
+. if \\n(VS>=40 .vs \\n(VSu
+. if \\n(VS<=39 .vs \\n(VSp
+.\}
+.if !\\n(IP .nr I0 \\n(PIu
+.if \\n(IP \{\
+. in -\\n(I\\n(IRu
+. nr IP -1
+.\}
+.ft 1
+.TA
+.fi
+..
+. \" TA - set default tabs
+.de TA
+.if n .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n 80n
+.if t .ta 5n 10n 15n 20n 25n 30n 35n 40n 45n 50n 55n 60n 65n 70n 75n
+..
+. \" BG - begin (at first paragraph)
+.de BG
+.ll \\n(LLu
+.nr M1 \\n(HMu/2
+.nr M4 \\n(FMu/2
+.ch BT -\\n(M4u
+.br
+.nr YE 1
+.di
+.ce 0
+.nr KI 0
+.hy 14
+.nr 1T 1
+.S\\n(ST
+.rm S0 S1 S2 SY TX AX WT RP
+.\"redefs
+.de TL
+.ft 3
+.ce 99
+.sp
+.LG
+\\..
+.de AU
+.ft 2
+.if n .ul 0
+.ce 99
+.sp
+.NL
+\\..
+.de AI
+.ft 1
+.if n .ul 0
+.ce 99
+.if n .sp
+.if t .sp .5
+.NL
+\\..
+.RA
+.rm RA
+.rn FJ FS
+.rn FK FE
+.nf
+.ev 1
+.ps \\n(PS-2
+.vs \\n(.s+2p
+.ev
+.if !\\n(KG .nr FP 0
+.nr KG 0
+.if \\n(FP \{\
+. FS
+. FG
+. FE
+.\}
+.br
+.if \\n(TV .if n .sp 2
+.if \\n(TV .if t .sp 1
+.fi
+..
+. \" RA - redefine abstract
+.de RA
+.de AB
+.br
+.if !\\\\n(1T .BG
+.ce
+.sp
+.if !\\\\n(.$ ABSTRACT
+.if \\\\n(.$ .if !\\\\$1no \\\\$1
+.if !\\\\n(.$ .sp
+.if \\\\n(.$ .if !\\\\$1no .sp
+.sp
+.nr AJ 1
+.in +\\\\n(.lu/12u
+.ll -\\\\n(.lu/12u
+.RT
+.if \\\\n(TM .ls 1
+\\..
+.de AE
+.nr AJ 0
+.br
+.in 0
+.ll \\\\n(LLu
+.if \\\\n(VS>=40 .vs \\\\n(VSu
+.if \\\\n(VS<=39 .vs \\\\n(VSp
+.if \\\\n(TM .ls 2
+\\..
+..
+. \" RP - released paper format
+.de RP
+.nr ST 2
+.if \\$1no .nr ST 1
+.pn 0
+.br
+..
+. \" TL - source file for cover sheet
+.de TL
+.rn TL @T
+.so \*(//ms.cov
+.TL
+.rm @T
+..
+. \" PP - regular paragraph
+.de PP
+.RT
+.if \\n(1T .sp \\n(PDu
+.ne 1.1
+.ti +\\n(PIu
+..
+. \" LP - left paragraph
+.de LP
+.RT
+.if \\n(1T .sp \\n(PDu
+.ne 1.1
+.ti \\n(.iu
+..
+. \" IP - indented paragraph
+.de IP
+.RT
+.if \\n(1T .sp \\n(PDu
+.ne 1.1
+.if !\\n(IP .nr IP +1
+.if \\n(.$-1 .nr I\\n(IR \\$2n
+.in +\\n(I\\n(IRu
+.ta \\n(I\\n(IRu
+.if \\n(.$ \{\
+.ds HT \&\\$1
+.ti -\\n(I\\n(IRu
+\\*(HT\t\c
+.if \w\\*(HTu>(\\n(I\\n(IRu+1n) .br
+.\}
+..
+. \" XP - exdented paragraph
+.de XP
+.RT
+.if \\n(1T .sp \\n(PDu
+.ne 1.1
+.if !\\n(IP .nr IP +1
+.in +\\n(I\\n(IRu
+.ti -\\n(I\\n(IRu
+..
+. \" QP - quote paragraph
+.de QP
+.ti \\n(.iu
+.RT
+.if \\n(1T .sp \\n(PDu
+.ne 1.1
+.nr QP 1
+.in +\\n(QIu
+.ll -\\n(QIu
+.ti \\n(.iu
+.if \\n(TM .ls 1
+..
+.\" Macros QS and QE copied from Plan9 sys/lib/tmac/tmac.s
+.de QS
+.br
+.LP
+.in +\\n(QIu
+.ll -\\n(QIu
+..
+.de QE
+.br
+.ll +\\n(QIu
+.in -\\n(QIu
+.LP
+..
+. \" SH - section header
+.de SH
+.ti \\n(.iu
+.RT
+.if \\n(1T .sp
+.RT
+.ne 3.1
+.B
+..
+. \" NH - numbered header
+.de NH
+.SH
+.nr NS \\$1
+.if !\\n(.$ .nr NS 1
+.if !\\n(NS .nr NS 1
+.nr H\\n(NS +1
+.if !\\n(NS-4 .nr H5 0
+.if !\\n(NS-3 .nr H4 0
+.if !\\n(NS-2 .nr H3 0
+.if !\\n(NS-1 .nr H2 0
+.if !\\$1 .if \\n(.$ .nr H1 1
+.if \\$1S \{\
+. nr NS \\n(.$-1
+. nr H1 \\$2 0
+. nr H2 \\$3 0
+. nr H3 \\$4 0
+. nr H4 \\$5 0
+. nr H5 \\$6 0
+.\}
+.ds SN \\n(H1.
+.if \\n(NS-1 .as SN \\n(H2.
+.if \\n(NS-2 .as SN \\n(H3.
+.if \\n(NS-3 .as SN \\n(H4.
+.if \\n(NS-4 .as SN \\n(H5.
+\\*(SN
+..
+. \" H - fancy header
+.de H
+.ie \\$1no .SH
+.el .NH \\$1
+\\$2
+.XS \\\\n(PN \\$1u-1u*\\n(PIu
+.if \\$1<2 .sp \\n(PDu
+.if !\\$1no \\*(SN\0
+\\$2
+.XE \\$3
+..
+. \" LS - listing start
+.de LS
+.ie \\$1no .ID \\$2
+.el .DS I \\$1
+.nr PQ \\n(.f
+.ft H
+.ps -\\n(dP
+.vs -\\n(dV
+.nr @ \\w'x'u*8
+.if \\n(.$ .nr @ \\w'x'u*\\$2
+.if \\n(.$ .if \\$1no .nr @ \\w'x'u*\\$3
+.ta \\n@u +\\n@u +\\n@u +\\n@u +\\n@u +\\n@u +\\n@u +\\n@u +\\n@u +\\n@u +\\n@u
+..
+. \" LE - listing end
+.de LE
+.ft \\n(PQ
+.ps \\n(PS
+.if \\n(VS>=40 .vs \\n(VSu
+.if \\n(VS<=39 .vs \\n(VSp
+.DE
+..
+. \" DS - display with keep (L=left I=indent C=center B=block)
+.de DS
+.KS
+.nf
+.\\$1D \\$2 \\$1
+.ft 1
+.ps \\n(PS
+.if \\n(VS>=40 .vs \\n(VSu
+.if \\n(VS<=39 .vs \\n(VSp
+..
+.de D
+.ID \\$1
+..
+. \" ID - indented display with no keep
+.de ID
+.XD
+.if t .in +.5i
+.if n .in +8
+.if \\n(.$ .if !\\$1I .if !\\$1 \{\
+. in \\n(OIu
+. in +\\$1n
+.\}
+..
+. \" LD - left display with no keep
+.de LD
+.XD
+..
+. \" CD - centered display with no keep
+.de CD
+.XD
+.ce 999
+..
+. \" XD - real display macro
+.de XD
+.nf
+.nr OI \\n(.i
+.sp \\n(DDu
+.if \\n(TM .ls 1
+..
+. \" DE - end display of any kind
+.de DE
+.ce 0
+.if \\n(BD .DF
+.nr BD 0
+.in \\n(OIu
+.KE
+.if \\n(TM .ls 2
+.sp \\n(DDu
+.fi
+..
+. \" BD - block display: center entire block
+.de BD
+.XD
+.nr BD 1
+.nf
+.in \\n(OIu
+.di DD
+..
+. \" DF - finish block display
+.de DF
+.di
+.if \\n(dl>\\n(BD .nr BD \\n(dl
+.if \\n(BD<\\n(.l .in (\\n(.lu-\\n(BDu)/2u
+.nr EI \\n(.l-\\n(.i
+.ta \\n(EIuR
+.DD
+.in \\n(OIu
+..
+. \" KS - begin regular keep
+.de KS
+.nr KN \\n(.u
+.if !\\n(IK .if !\\n(IF .KQ
+.nr IK +1
+..
+. \" KQ - real keep processor
+.de KQ
+.br
+.nr KI \\n(.i
+.ev 2
+.TA
+.br
+.in \\n(KIu
+.ps \\n(PS
+.if \\n(VS>=40 .vs \\n(VSu
+.if \\n(VS<=39 .vs \\n(VSp
+.ll \\n(LLu
+.lt \\n(LTu
+.if \\n(NX>1 .ll \\n(CWu
+.if \\n(NX>1 .lt \\n(CWu
+.di KK
+.nr TB 0
+..
+. \" KF - begin floating keep
+.de KF
+.nr KN \\n(.u
+.if !\\n(IK .FQ
+.nr IK +1
+..
+. \" FQ - real floating keep processor
+.de FQ
+.nr KI \\n(.i
+.ev 2
+.TA
+.br
+.in \\n(KIu
+.ps \\n(PS
+.if \\n(VS>=40 .vs \\n(VSu
+.if \\n(VS<=39 .vs \\n(VSp
+.ll \\n(LLu
+.lt \\n(LTu
+.if \\n(NX>1 .ll \\n(CWu
+.if \\n(NX>1 .lt \\n(CWu
+.di KK
+.nr TB 1
+..
+. \" KE - end keep
+.de KE
+.if \\n(IK .if !\\n(IK-1 .if !\\n(IF .RQ
+.if \\n(IK .nr IK -1
+..
+. \" RQ - real keep release
+.de RQ
+.br
+.di
+.nr NF 0
+.if \\n(dn-\\n(.t .nr NF 1
+.if \\n(TC .nr NF 1
+.if \\n(NF .if !\\n(TB .sp 200
+.if !\\n(NF .if \\n(TB .nr TB 0
+.nf
+.rs
+.nr TC 5
+.in 0
+.ls 1
+.if !\\n(TB \{\
+. ev
+. br
+. ev 2
+. KK
+.\}
+.ls
+.ce 0
+.if !\\n(TB .rm KK
+.if \\n(TB .da KJ
+.if \\n(TB \!.KD \\n(dn
+.if \\n(TB .KK
+.if \\n(TB .di
+.nr TC \\n(TB
+.if \\n(KN .fi
+.in
+.ev
+..
+. \" KD - keep redivert
+.de KD
+.nr KM 0
+.if \\n(.zKJ .nr KM 1
+.if \\n(KM \!.KD \\$1
+.if !\\n(KM .if \\n(.t<\\$1 .di KJ
+..
+. \" EM - end macro (process leftover keep)
+.de EM
+.br
+.if !\\n(TB .if t .wh -1p CM
+.if \\n(TB \{\
+\&\c
+' bp
+. NP
+. ch CM 160
+.\}
+.if \\n(IF .FE \" End footnote if still pending
+.if !"\\n(.z"" .DI \" End any left over diversions
+..
+. \" DI is used to properly end all diversions, otherwise a bug in
+. \" [nt]roff may cause an infinite loop if the page footer (or
+. \" macros that it calls) happens to start a new diversion.
+.de DI
+.di
+.if !"\\n(.z"" .DI
+..
+.de XK
+.nr TD 1
+.nf
+.ls 1
+.in 0
+.rn KJ KL
+.KL
+.rm KL
+.if \\n(.zKJ .di
+.nr TB 0
+.if \\n(.zKJ .nr TB 1
+.br
+.in
+.ls
+.fi
+.nr TD 0
+..
+. \" NP - new page
+.de NP
+.if \\n(FM+\\n(HM>=\\n(.p \{\
+. tm HM + FM longer than page
+. ab
+.\}
+.if !\\n(LT .nr LT \\n(LLu
+.if t .CM
+.po \\n(POu
+.nr PF \\n(.f
+.nr PX \\n(.s
+.ft 1
+.ps \\n(PS
+'sp \\n(HMu/2u
+.lt \\n(LTu
+.PT
+.lt \\n(.lu
+.if \\n(HM 'sp |\\n(HMu
+.HD \"undefined
+.ps \\n(PX
+.ft \\n(PF
+.nr XX 0 1
+.nr YY 0-\\n(FMu
+.ch FO 16i
+.ch FX 17i
+.ch FO -\\n(FMu
+.ch FX \\n(.pu-\\n(FMu
+.if \\n(MF .FV
+.nr MF 0
+.mk
+.os
+.ev 1
+.if !\\n(TD .if \\n(TC<5 .XK
+.nr TC 0
+.ev
+.nr TQ \\n(.i
+.nr TK \\n(.u
+.if \\n(IT \{\
+. in 0
+. nf
+. TT
+. in \\n(TQu
+. if \\n(TK .fi
+.\}
+.ns
+.mk #T
+..
+. \" PT - page titles
+.de PT
+.pc %
+.nr PN \\n%
+.nr PT \\n%
+.if \\n(P1 .nr PT 2
+.if \\n(PT=1 .tl 
+.if \\n(PT>1 .if !\\n(EH .if !\\n(OH .tl \\*(LH\\*(CH\\*(RH
+.if \\n(PT>1 .if \\n(OH .if o .tl \\*(O1
+.if \\n(PT>1 .if \\n(EH .if e .tl \\*(E2
+..
+. \" OH - odd page header
+.de OH
+.nr OH 1
+.if !\\n(.$ .nr OH 0
+.ds O1 \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+. \" EH - even page header
+.de EH
+.nr EH 1
+.if !\\n(.$ .nr EH 0
+.ds E2 \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+. \" P1 - PT on 1st page
+.de P1
+.nr P1 1
+..
+. \" FO - footer
+.de FO
+.rn FO FZ
+.if \\n(IT .nr T. 1
+.if \\n(IT .if !\\n(FC .T# 1
+.if \\n(IT .br
+.nr FC +1
+.if \\n(NX<2 .nr WF 0
+.nr dn 0
+.if \\n(FC<=1 .if \\n(XX .XF
+.rn FZ FO
+.nr MF 0
+.if \\n(dn .nr MF 1
+.if !\\n(WF .nr YY 0-\\n(FMu
+.if !\\n(WF .ch FO \\n(YYu
+.if !\\n(dn .nr WF 0
+.if \\n(FC<=1 .if !\\n(XX \{\
+. if \\n(NX>1 .RC
+. if \\n(NX<2 'bp
+.\}
+.nr FC -1
+.if \\n(ML .ne \\n(MLu
+..
+. \" BT - bottom title
+.de BT
+.nr PF \\n(.f
+.nr PX \\n(.s
+.ft 1
+.ps \\n(PS
+.lt \\n(LTu
+.po \\n(POu
+.if \\n(TM .if \\n(CT \{\
+. tl ''\\n(PN''
+. nr CT 0
+.\}
+.if \\n% .if !\\n(EF .if !\\n(OF .tl \\*(LF\\*(CF\\*(RF
+.if \\n% .if \\n(OF .if o .tl \\*(O3
+.if \\n% .if \\n(EF .if e .tl \\*(E4
+.ft \\n(PF
+.ps \\n(PX
+..
+. \" OF - odd page footer
+.de OF
+.nr OF 1
+.if !\\n(.$ .nr OF 0
+.ds O3 \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+. \" EF - even page footer
+.de EF
+.nr EF 1
+.if !\\n(.$ .nr EF 0
+.ds E4 \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+. \" 2C - double column
+.de 2C
+.MC
+..
+. \" 1C - single column
+.de 1C
+.MC \\n(LLu
+.hy 14
+..
+. \" MC - multiple columns, arg is col width
+.de MC
+.nr L1 \\n(LL*7/15
+.if \\n(.$ .nr L1 \\$1n
+.nr NQ \\n(LL/\\n(L1
+.if \\n(NQ<1 .nr NQ 1
+.if \\n(NQ>2 .if (\\n(LL%\\n(L1)=0 .nr NQ -1
+.if !\\n(1T \{\
+. BG
+. if n .sp 4
+. if t .sp 2
+.\}
+.if !\\n(NX .nr NX 1
+.if !\\n(NX=\\n(NQ \{\
+. RT
+. if \\n(NX>1 .bp
+. mk
+. nr NC 1
+. po \\n(POu
+.\}
+.if \\n(NQ>1 .hy 12
+.nr NX \\n(NQ
+.nr CW \\n(L1
+.ll \\n(CWu
+.nr FL \\n(CWu*11u/12u
+.if \\n(NX>1 .nr GW (\\n(LL-(\\n(NX*\\n(CW))/(\\n(NX-1)
+.nr RO \\n(CW+\\n(GW
+.ns
+..
+.de RC
+.if \\n(NC>=\\n(NX .C2
+.if \\n(NC<\\n(NX .C1
+.nr NC \\n(ND
+..
+.de C1
+.rt
+.po +\\n(ROu
+.nr ND \\n(NC+1
+.nr XX 0 1
+.if \\n(MF .FV
+.nr MF 0
+.ch FX \\n(.pu-\\n(FMu
+.ev 1
+.if \\n(TB .XK
+.nr TC 0
+.ev
+.nr TQ \\n(.i
+.if \\n(IT .in 0
+.if \\n(IT .TT
+.if \\n(IT .in \\n(TQu
+.mk #T
+.ns
+..
+.de C2
+.po \\n(POu
+'bp
+.nr ND 1
+..
+. \" RS - right shift
+.de RS
+.nr IS \\n(IP
+.RT
+.nr IP \\n(IS
+.if \\n(IP .in +\\n(I\\n(IRu
+.nr IR +1
+.nr I\\n(IR \\n(PIu
+.in +\\n(I\\n(IRu
+..
+. \" RE - retreat left
+.de RE
+.nr IS \\n(IP
+.RT
+.nr IP \\n(IS
+.if \\n(IR .nr IR -1
+.if \\n(IP<=0 .in -\\n(I\\n(IRu
+..
+. \" CM - cut mark
+.de CM
+.po 0
+.lt 7.6i
+.ft 1
+.ps 10
+.vs 4p
+.tl '--''--'
+.po
+.vs
+.lt
+.ps
+.ft
+..
+.rm CM
+. \" I - italic font
+.de I
+.nr PQ \\n(.f
+.if t .ft 2
+.ie \\$1 .if n .ul 999
+.el .if n .ul 1
+.if t .if !\\$1 \&\\$1\|\f\\n(PQ\\$2
+.if n .if \\n(.$=1 \&\\$1
+.if n .if \\n(.$>1 \&\\$1\c
+.if n .if \\n(.$>1 \&\\$2
+..
+. \" B - bold font
+.de B
+.nr PQ \\n(.f
+.if t .ft 3
+.ie \\$1 .if n .ul 999
+.el .if n .ul 1
+.if t .if !\\$1 \&\\$1\f\\n(PQ\\$2
+.if n .if \\n(.$=1 \&\\$1
+.if n .if \\n(.$>1 \&\\$1\c
+.if n .if \\n(.$>1 \&\\$2
+..
+. \" R - Roman font
+.de R
+.if n .ul 0
+.ft 1
+..
+. \" L - listing font
+.de L
+\%\&\\$3\fH\\$1\fP\&\\$2
+..
+. \" LB - bold listing font
+.de LB
+\%\&\\$3\f(HB\\$1\fP\&\\$2
+..
+. \" UL - underline in troff
+.de UL
+.if t \\$1\l'|0\(ul'\\$2
+.if n .I \\$1 \\$2
+..
+. \" SM - smaller
+.de SM
+.ps -2
+..
+. \" LG - larger
+.de LG
+.ps +2
+..
+. \" NL - normal
+.de NL
+.ps \\n(PS
+..
+. \" DA - force date
+.de DA
+.if \\n(.$ .ds DY \\$1 \\$2 \\$3 \\$4
+.ds CF \\*(DY
+..
+. \" ND - no date or new date
+.de ND
+.if \\n(.$ .ds DY \\$1 \\$2 \\$3 \\$4
+.rm CF
+..
+. \" \** - numbered footnote
+.ds * \\*([.\\n+*\\*(.]
+. \" FJ - replaces FS after cover
+.de FJ
+'ce 0
+.di
+.ev 1
+.ll \\n(FLu
+.da FF
+.br
+.if \\n(IF .tm Nested footnote
+.nr IF 1
+.if !\\n+(XX-1 .FA
+.if !\\n(MF .if !\\n(.$ .if \\n* .FP \\n*
+.if !\\n(MF .if \\n(.$ .FP \\$1 no
+..
+. \" FK - replaces FE after cover
+.de FK
+.br
+.in 0
+.nr IF 0
+.di
+.ev
+.if !\\n(XX-1 .nr dn +\\n(.v
+.nr YY -\\n(dn
+.if !\\n(NX .nr WF 1
+.if \\n(dl>\\n(CW .nr WF 1
+.if (\\n(nl+\\n(.v)<=(\\n(.p+\\n(YY) .ch FO \\n(YYu
+.if (\\n(nl+\\n(.v)>(\\n(.p+\\n(YY) \{\
+. if \\n(nl>(\\n(HM+1.5v) .ch FO \\n(nlu+\\n(.vu
+. if \\n(nl+\\n(FM+1v>\\n(.p .ch FX \\n(.pu-\\n(FMu+2v
+. if \\n(nl<=(\\n(HM+1.5v) .ch FO \\n(HMu+(4u*\\n(.vu)
+.\}
+..
+. \" FS - begin footnote on cover
+.de FS
+.ev 1
+.br
+.ll \\n(FLu
+.da FG
+.if !\\n(.$ .if \\n* .FP \\n*
+.if \\n(.$ .FP \\$1 no
+..
+. \" FE - end footnote on cover
+.de FE
+.br
+.di
+.nr FP \\n(dn
+.if !\\n(1T .nr KG 1
+.ev
+..
+. \" FA - print line before footnotes
+.de FA
+.in 0
+.if n _________________________
+.if t \l'1i'
+.br
+..
+. \" FP - footnote paragraph
+.de FP
+.sp \\n(PDu/2u
+.if \\n(FF<2 .ti \\n(FIu
+.if \\n(FF=3 \{\
+. in \\n(FIu*2u
+. ta \\n(FIu*2u
+. ti 0
+.\}
+.if !\\n(FF \{\
+. ie "\\$2"no" \\$1\0\c
+. el \\*([.\\$1\\*(.]\0\c
+.\}
+.if \\n(FF .if \\n(FF<3 \{\
+. ie "\\$2"no" \\$1\0\c
+. el \\$1.\0\c
+.\}
+.if \\n(FF=3 \{\
+. ie "\\$2"no" \\$1\t\c
+. el \\$1.\t\c
+.\}
+..
+. \" FV - get leftover footnote from previous page
+.de FV
+.FS
+.nf
+.ls 1
+.FY
+.ls
+.fi
+.FE
+..
+. \" FX - divert leftover footnote for next page
+.de FX
+.if \\n(XX .di FY
+.if \\n(XX .ns
+..
+. \" XF - actually print footnote
+.de XF
+.if \\n(nlu+1v>(\\n(.pu-\\n(FMu) .ch FX \\n(nlu+1.9v
+.ev 1
+.nf
+.ls 1
+.FF
+.rm FF
+.nr XX 0 1
+.br
+.ls
+.di
+.fi
+.ev
+..
+. \" TS - source file for tbl
+.de TS
+.rn TS @T
+.so \*(//ms.tbl
+.TS \\$1 \\$2
+.lf 2 table-at-line-950-of-/usr/local/share/heirloom-doctools/tmac/s
+.de 00
+..
+.do nr w. \n[.warn]
+.if \n(.X>0 .do warn -mac -reg
+.if \n+(b.=1 .nr d. \n(.c-\n(c.-1
+.if \n(.X>0 .do warn \n(w.
+.de 35 00
+.ps \n(.s
+.vs \n(.vu
+.in \n(.iu
+.if \n(.u .fi
+.if \n(.j .ad
+.if \n(.j=0 .na
+.00
+.nf
+.nr #~ 0
+.if n .nr #~ 0.6n
+.ds #d .d
+.if \(ts\n(.z\(ts\(ts .ds #d nl
+.fc
+.nr 33 \n(.s
+..
+. \" EQ - source file for eqn
+.de EQ
+.rn EQ @T
+.so \*(//ms.eqn
+.EQ \\$1 \\$2
+.rm @T
+..
+. \" ]- - source file for refer
+.de ]-
+.rn ]- @T
+.so \*(//ms.ref
+.]-
+.rm @T
+..
+. \" [< - for refer -s or -e
+.de ]<
+.rn ]< @T
+.so \*(//ms.ref
+.]<
+.rm @T
+..
+.if \n(.V>19 .ds [. \f1[
+.if \n(.V>19 .ds .] ]\fP
+.if \n(.V<20 .ds [. \f1\s-2\v'-.4m'
+.if \n(.V<20 .ds .] \v'.4m'\s+2\fP
+.ds <. .
+.ds <, ,
+.if n .ds Q \&"
+.if n .ds U \&"
+.if n .ds - \%--
+.if t .ds Q ``
+.if t .ds U ''
+.if t .ds - \(em
+.ds ' \h'\w'e'u/5'\z\'\h'-\w'e'u/5'
+.ds ` \h'\w'e'u/5'\z\`\h'-\w'e'u/5'
+.ds ^ \h'\w'o'u/10'\z^\h'-\w'e'u/10'
+.ds , \h'\w'c'u/5'\z,\h'-\w'e'u/5'
+.ds : \h'\w'u'u/5'\z"\h'-\w'e'u/5'
+.ds ~ \h'\w'n'u/10'\z~\h'-\w'e'u/10'
+.ds C \h'\w'c'u/5'\v'-.6m'\s-4\zv\s+4\v'.6m'\h'-\w'c'u/5'
+. \" AM - better accent marks
+.de AM
+.so \*(//ms.acc
+..
+. \" TM - thesis mode
+.de TM
+.so \*(//ms.ths
+..
+. \" BX - word in a box
+.de BX
+.if t \(br\|\\$1\|\(br\l'|0\(rn'\l'|0\(ul'
+.if n \(br\\kA\|\\$1\|\\kB\(br\v'-1v'\h'|\\nBu'\l'|\\nAu'\v'1v'\l'|\\nAu'
+..
+. \" B1 - source file for boxed text
+.de B1
+.rn B1 @T
+.so \*(//ms.tbl
+.B1 \\$1
+.rm @T
+..
+. \" XS - table of contents
+.de XS
+.rn XS @T
+.so \*(//ms.toc
+.XS \\$1 \\$2
+.rm @T
+..
+. \" IX - index words to stderr
+.if \n(.X .do nr IXcount 0 1
+.de IX
+.ie \\n(.X&\\n(.k \{.do de IX-\\n+[IXcount]
+.tm \\$1\t\\$2\t\\$3\t\\$4 ... \\\\n(PN
+\\..
+.do nr IXsaveX \\n(.X
+.do xflag 3
+\\P[IX-\\n[IXcount]]\c
+.do xflag \\n[IXsaveX]
+.\}
+.el \{.tm \\$1\t\\$2\t\\$3\t\\$4 ... \\n(PN
+.\}
+..
+. \" UX - UNIX macro
+.de UX
+.ie \\n(UX \s-1UNIX\s0\\$1
+.el \{\s-1UNIX\s0\\$1\(dg
+.FS
+\(dg \s-1UNIX\s0 is a registered trademark of The Open Group in the
+U.S. and other countries.
+.FE
+.nr UX 1
+.\}
+..
+.co
+.if \n(mo-0 .ds MO January
+.if \n(mo-1 .ds MO February
+.if \n(mo-2 .ds MO March
+.if \n(mo-3 .ds MO April
+.if \n(mo-4 .ds MO May
+.if \n(mo-5 .ds MO June
+.if \n(mo-6 .ds MO July
+.if \n(mo-7 .ds MO August
+.if \n(mo-8 .ds MO September
+.if \n(mo-9 .ds MO October
+.if \n(mo-10 .ds MO November
+.if \n(mo-11 .ds MO December
+.nr _Y 1900+\n(yr
+.ds DY \*(MO \n(dy, \n(_Y
+.nr * 0 1
+.IZ
+.em EM
+.rm IZ //
+.ds f. resume2.ms
+.lf 1 resume2.ms
+.fam T
+.nr PS 10p
+.nr VS 15p
+.ds CH
+.
+.
+.defcolor linecolor rgb 0.6f 0.6f 0.6f
+.defcolor headingcolor rgb 0.5f 0.5f 0.5f
+.
+.
+.de heading
+. nf
+. ps 14
+. B "\\$1"
+\h'0n'\v'-1.2n'\m[headingcolor]\l'\\n(.lu\(ul'\m[default]
+. ps 10
+. sp -.2
+. fi
+..
+
+.de BL
+.IP \(bu 2
+..
+
+.ce 2
+.ps 18
+.B "Preston Pan"
+.ps 10
+https://prestonpan.tech
+.TS
+.lf 2 table-at-line-33-of-resume2.ms
+.de 00
+..
+.do nr w. \n[.warn]
+.if \n(.X>0 .do warn -mac -reg
+.if \n+(b.=1 .nr d. \n(.c-\n(c.-1
+.if \n(.X>0 .do warn \n(w.
+.de 35 00
+.ps \n(.s
+.vs \n(.vu
+.in \n(.iu
+.if \n(.u .fi
+.if \n(.j .ad
+.if \n(.j=0 .na
+.00
+.nf
+.nr #~ 0
+.if n .nr #~ 0.6n
+.ds #d .d
+.if \(ts\n(.z\(ts\(ts .ds #d nl
+.fc
+.nr 33 \n(.s
+.rm 80 81
+.nr 80 0
+.nr 38 \w808-Yates St.
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \wVictoria, V8W 1L8;T{
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \wT}
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \wBritish Columbia, Canada;T{
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \wT}
+.if \n(80<\n(38 .nr 80 \n(38
+.if \n(.X>0 .do warn -mac -reg
+.80
+.rm 80
+.if \n(.X>0 .do warn \n(w.
+.nr 81 0
+.if \n(.X>0 .do warn -mac -reg
+.81
+.rm 81
+.if \n(.X>0 .do warn \n(w.
+.nr 38 0+\n(80+\n(81
+.nr 38 \n(.l-\n(.i-\n(38-3n/1
+.nr 81 +\n(38
+.nr 38 1n
+.nr 79 0
+.nr 40 \n(79+(0*\n(38)
+.nr 80 +\n(40
+.nr 41 \n(80+(3*\n(38)
+.nr 81 +\n(41
+.nr TW \n(81
+.if t .if \n(TW>\n(.l .tm Table at line 42 file resume2.ms is too wide - \n(TW units
+.fc  
+.nr #T 0-1
+.nr #a 0-1
+.eo
+.de T# 00
+.ds #d .d
+.if \(ts\n(.z\(ts\(ts .ds #d nl
+.mk ##
+.nr ## -1v
+.ls 1
+.ls
+.00
+.ec
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'808-Yates St.\h'|\n(41u'
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'Victoria, V8W 1L8;T{\h'|\n(41u'
+.I "+1 (250) 508-5167"
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'T}\h'|\n(41u'
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'British Columbia, Canada;T{\h'|\n(41u'
+.I "preston@nullring.xyz"
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'T}\h'|\n(41u'
+.fc
+.nr T. 1
+.T# 1
+.35
+.if \n(.X>0 .do warn -mac -reg
+.if \n(.X>0 .do warn \n(w.
+.lf 42 resume2.ms
+.TE
+.if \n(.X>0 .do warn -mac -reg
+.if \n-(b.=0 .nr c. \n(.c-\n(d.-9
+.if \n(.X>0 .do warn \n(w.
+.lf 43 resume2.ms
+
+.heading "Education"
+.TS
+.lf 2 table-at-line-45-of-resume2.ms
+.de 00
+..
+.do nr w. \n[.warn]
+.if \n(.X>0 .do warn -mac -reg
+.if \n+(b.=1 .nr d. \n(.c-\n(c.-1
+.if \n(.X>0 .do warn \n(w.
+.de 35 00
+.ps \n(.s
+.vs \n(.vu
+.in \n(.iu
+.if \n(.u .fi
+.if \n(.j .ad
+.if \n(.j=0 .na
+.00
+.nf
+.nr #~ 0
+.if n .nr #~ 0.6n
+.ds #d .d
+.if \(ts\n(.z\(ts\(ts .ds #d nl
+.fc
+.nr 33 \n(.s
+.rm 80 81
+.nr 80 0
+.nr 38 \w\m[default]2017 - 2021\m[linecolor];T{
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \w\(en Vancouver, BC
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \wT}
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \w\m[default]2022 - now\m[linecolor];T{
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \w\(en Victoria, BC
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 38 \wT}
+.if \n(80<\n(38 .nr 80 \n(38
+.if \n(.X>0 .do warn -mac -reg
+.80
+.rm 80
+.if \n(.X>0 .do warn \n(w.
+.nr 38 15n
+.if \n(80<\n(38 .nr 80 \n(38
+.nr 81 0
+.if \n(.X>0 .do warn -mac -reg
+.81
+.rm 81
+.if \n(.X>0 .do warn \n(w.
+.nr 38 0+\n(80+\n(81
+.nr 38 \n(.l-\n(.i-\n(38-3n/1
+.nr 81 +\n(38
+.nr 38 1n
+.nr 79 0
+.nr 40 \n(79+(0*\n(38)
+.nr 80 +\n(40
+.nr 41 \n(80+(3*\n(38)
+.nr 81 +\n(41
+.nr TW \n(81
+.if t .if \n(TW>\n(.l .tm Table at line 58 file resume2.ms is too wide - \n(TW units
+.fc  
+.nr #T 0-1
+.nr #b 0-1
+.nr #a 0-1
+.eo
+.de T# 00
+.ds #d .d
+.if \(ts\n(.z\(ts\(ts .ds #d nl
+.mk ##
+.nr ## -1v
+.ls 1
+.if \n(#T>=0 .nr #b \n(#T
+.if \n(#b>=0 .sp -1
+.if \n(#b>=0 \h'(|\n(41u+|\n(80u)/2u'\s\n(33\h'-\n(#~u'\L'|\n(#bu-1v'\s0\v'\n(\*(#du-\n(#bu+1v'\h'|\n(TWu'
+.ls
+.00
+.ec
+.mk #b
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'\m[default]2017 - 2021\m[linecolor];T{\h'|\n(41u'
+.B "Sir Winston Churchill Secondary"
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'\(en Vancouver, BC\h'|\n(41u'
+.br
+.sp .5
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'T}\h'|\n(41u'
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'\m[default]2022 - now\m[linecolor];T{\h'|\n(41u'
+.B "Pacific School of Innovation and Inquiry"
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'\(en Victoria, BC\h'|\n(41u'
+.br
+.if \n(.X>0 .do warn \n(w.
+.ta \n(80u
+.nr 31 \n(.f
+.nr 35 1m
+\&\h'|\n(40u'T}\h'|\n(41u'
+.fc
+.nr T. 1
+.T# 1
+.35
+.if \n(.X>0 .do warn -mac -reg
+.nr #a 0
+.if \n(.X>0 .do warn \n(w.
+.lf 58 resume2.ms
+.TE
+.if \n(.X>0 .do warn -mac -reg
+.if \n-(b.=0 .nr c. \n(.c-\n(d.-13
+.if \n(.X>0 .do warn \n(w.
+.lf 59 resume2.ms
+\m[default]
+.heading "Projects"
+.QS
+.B "Note "
+\(en
+.I "All my projects have their respective soure code avaiable at "
+.UL "https://git.prestonpan.tech".
+.BL
+.B "The Null Webring"
+\(en
+The Null Webring is a webring that I run which has an associated website: https://nullring.xyz.
+.br
+.BL
+.B "The Null Identity"
+\(en
+An organization that I created that focuses on explaining
+science and technology from a satirical-pseudoreligious context,
+with an associated website: https://society.nullring.xyz. I wrote
+the website with a primitive templating language/static site generator
+in pure POSIX shell script which generates the website from simpler template
+and data files.
+.BL
+.B "Snake3"
+\(en
+Although this was a small project, it showcases my skills at writing man pages in the roff
+format and my ability to come up with novel algorithms, as well as working with threading
+in the C programming language. It's a simple snake game in the terminal that works
+without the curses library. It was also a collaboration with Kai Stevenson: https://kaistevenson.com. You can get
+the source code from https://prestonpan.tech/files/snake3/.
+.BL
+.B "NoExcess"
+\(en
+NoExcess is a fully featured turing complete programming language that I have written.
+It is heavily inspired by scheme, and like scheme, it is a functional programming
+language. It was made to have a simple set of built-in functions, and a builtin
+way to declare variables and functions. Float, integer, boolean, and string datatypes
+are also supported along with the list, function and symbol datatypes, just like
+in other lisp-like languages.
+.BL
+.B "COMAS"
+\(en
+Short for the computer operated math assistance program. It will do extremely
+complex calculations (operations within quaternionic functional tensors) in the future,
+but right now only quaternions are fully supported. It comes with a clever way to
+represent hyperreal numbers as a non-communatative derivative operator division
+ring.
+
+.heading "Skills"
+.QS
+.BL
+.B "Systems"
+\(en
+Extensive knowledge of operating systems such as GNU/Linux, OpenBSD, NetBSD, and 9front/plan9, as I have used all of these systems
+as daily drivers on my personal machine and as servers.
+.BL
+.B "Sysadmining"
+\(en
+I sysadmin my own server where I host multiple websites, an email server, git server, and more. As a result, I have knowledge
+of many standard tools for sysadmining (docker, ssh, common servers and daemons) and have knowledge of many different operating
+systems.
+.BL
+.B "Programming Languages"
+\(en
+I have good knowledge of c, python, shell, x86 assembly, and HTML/css/Javascript.
+.BL
+.B "Development tools"
+\(en
+Knowledge of standard collaborative development tools (command line git, writing UNIX man pages, using build systems like make/cmake/autotools)
+as well as writing papers in LaTeX and roff.
+.BL
+.B "Mathematics"
+\(en
+I have knowledge of mathematics up to about a 3rd year university level due to self study, and have gotten distinction in mathematics
+contests such as the Fermat Waterloo math competition (knowledge of multivariable calculus, linear algebra, discrete mathematics,
+and ordinary differential equations, among other topics).
+.BL
+.B "Physics"
+\(en
+Aside from the mathematics which is of course a very important skill in physics, I have done self study on many advanced
+university level topics such as electrodynamics and kinematics from a multivariable calculus perspective. I am also working
+with two classmates on a completely novel grand unified theory of physics, which will be published on my website when it
+is done.
+.BL
+.B "Music"
+\(en
+I've been playing piano for more than 10 years in total, and have been singing for as long as I can remember.
+Some of my piano improvisation is on my website.
+.QE
diff --git a/website/about/source/resume2.ms b/website/about/source/resume2.ms
new file mode 100644
index 0000000..6daa230
--- /dev/null
+++ b/website/about/source/resume2.ms
@@ -0,0 +1,146 @@
+.fam T
+.nr PS 10p
+.nr VS 15p
+.ds CH
+.
+.
+.defcolor linecolor rgb 0.6f 0.6f 0.6f
+.defcolor headingcolor rgb 0.5f 0.5f 0.5f
+.
+.
+.de heading
+. nf
+. ps 14
+. B "\\$1"
+\h'0n'\v'-1.2n'\
+\m[headingcolor]\
+\l'\\n(.lu\(ul'\
+\m[default]
+. ps 10
+. sp -.2
+. fi
+..
+
+.de BL
+.IP \(bu 2
+..
+
+.ce 2
+.ps 18
+.B "Preston Pan"
+.ps 10
+https://prestonpan.tech
+.TS
+l rx.
+808-Yates St.
+Victoria, V8W 1L8;T{
+.I "+1 (250) 508-5167"
+T}
+British Columbia, Canada;T{
+.I "preston@nullring.xyz"
+T}
+.TE
+
+.heading "Education"
+.TS
+rW15|lx.
+\m[default]2017 - 2021\m[linecolor];T{
+.B "Sir Winston Churchill Secondary"
+\(en Vancouver, BC
+.br
+.sp .5
+T}
+\m[default]2022 - now\m[linecolor];T{
+.B "Pacific School of Innovation and Inquiry"
+\(en Victoria, BC
+.br
+T}
+.TE
+\m[default]
+.heading "Projects"
+.QS
+.B "Note "
+\(en
+.I "All my projects have their respective soure code avaiable at "
+.UL "https://git.prestonpan.tech".
+.BL
+.B "The Null Webring"
+\(en
+The Null Webring is a webring that I run which has an associated website: https://nullring.xyz.
+.br
+.BL
+.B "The Null Identity"
+\(en
+An organization that I created that focuses on explaining
+science and technology from a satirical-pseudoreligious context,
+with an associated website: https://society.nullring.xyz. I wrote
+the website with a primitive templating language/static site generator
+in pure POSIX shell script which generates the website from simpler template
+and data files.
+.BL
+.B "Snake3"
+\(en
+Although this was a small project, it showcases my skills at writing man pages in the roff
+format and my ability to come up with novel algorithms, as well as working with threading
+in the C programming language. It's a simple snake game in the terminal that works
+without the curses library. It was also a collaboration with Kai Stevenson: https://kaistevenson.com. You can get
+the source code from https://prestonpan.tech/files/snake3/.
+.BL
+.B "NoExcess"
+\(en
+NoExcess is a fully featured turing complete programming language that I have written.
+It is heavily inspired by scheme, and like scheme, it is a functional programming
+language. It was made to have a simple set of built-in functions, and a builtin
+way to declare variables and functions. Float, integer, boolean, and string datatypes
+are also supported along with the list, function and symbol datatypes, just like
+in other lisp-like languages.
+.BL
+.B "COMAS"
+\(en
+Short for the computer operated math assistance program. It will do extremely
+complex calculations (operations within quaternionic functional tensors) in the future,
+but right now only quaternions are fully supported. It comes with a clever way to
+represent hyperreal numbers as a non-communatative derivative operator division
+ring.
+
+.heading "Skills"
+.QS
+.BL
+.B "Systems"
+\(en
+Extensive knowledge of operating systems such as GNU/Linux, OpenBSD, NetBSD, and 9front/plan9, as I have used all of these systems
+as daily drivers on my personal machine and as servers.
+.BL
+.B "Sysadmining"
+\(en
+I sysadmin my own server where I host multiple websites, an email server, git server, and more. As a result, I have knowledge
+of many standard tools for sysadmining (docker, ssh, common servers and daemons) and have knowledge of many different operating
+systems.
+.BL
+.B "Programming Languages"
+\(en
+I have good knowledge of c, python, shell, x86 assembly, and HTML/css/Javascript.
+.BL
+.B "Development tools"
+\(en
+Knowledge of standard collaborative development tools (command line git, writing UNIX man pages, using build systems like make/cmake/autotools)
+as well as writing papers in LaTeX and roff.
+.BL
+.B "Mathematics"
+\(en
+I have knowledge of mathematics up to about a 3rd year university level due to self study, and have gotten distinction in mathematics
+contests such as the Fermat Waterloo math competition (knowledge of multivariable calculus, linear algebra, discrete mathematics,
+and ordinary differential equations, among other topics).
+.BL
+.B "Physics"
+\(en
+Aside from the mathematics which is of course a very important skill in physics, I have done self study on many advanced
+university level topics such as electrodynamics and kinematics from a multivariable calculus perspective. I am also working
+with two classmates on a completely novel grand unified theory of physics, which will be published on my website when it
+is done.
+.BL
+.B "Music"
+\(en
+I've been playing piano for more than 10 years in total, and have been singing for as long as I can remember.
+Some of my piano improvisation is on my website.
+.QE
diff --git a/website/about/source/resume2.pdf b/website/about/source/resume2.pdf
new file mode 100644
index 0000000..41851d8
--- /dev/null
+++ b/website/about/source/resume2.pdf
Binary files differ
diff --git a/website/mathematics/calculus/derivative_identities.pdf b/website/mathematics/calculus/derivative_identities.pdf
new file mode 100644
index 0000000..b63f034
--- /dev/null
+++ b/website/mathematics/calculus/derivative_identities.pdf
Binary files differ
diff --git a/website/mathematics/calculus/source/derivative_identities.ms b/website/mathematics/calculus/source/derivative_identities.ms
new file mode 100644
index 0000000..704034f
--- /dev/null
+++ b/website/mathematics/calculus/source/derivative_identities.ms
@@ -0,0 +1,170 @@
+.EQ
+delim $$
+.EN
+.TL
+Derivative Identities
+.AU
+Preston Pan
+.AI
+Pacific School of Innovation and Inquiry
+
+.NH 1
+Introduction
+.PP
+Now that you know how to calculate the derivative of a specific very simple function,
+you might now ask how you might take a derivative of a more complicated function, perhaps
+involving functions that are the sum or product of two other simpler functions, or the
+composition of two functions.
+
+.PP
+In order to get to a general case, we can look at a specific case. Say, for example,
+we want to take the derivative of $f(x) = x sup 2 + x$ (we are using h for delta x here because
+that is the actual convention):
+
+.EQ
+f'(x) = {{(x + h)} sup {2} + x + h - {x} sup {2} - x} over h
+.EN
+.EQ
+f'(x) = {{x} sup {2} + 2xh + {h} sup {2} + x + h - {x} sup 2 - {x}} over h
+.EN
+.EQ
+f'(x) = {2xh + {h} sup {2} + h} over h
+.EN
+.EQ
+f'(x) = 2x + 1 + h
+.EN
+
+.PP
+and as h becomes infinitely small, the resulting derivative is 2x + 1.
+
+.PP
+But we know already that the slope of x was equal to one. You learn that in 9th grade.
+And we know that 2x is the derivative of $x^2$. So it seems like this should be true:
+
+.EQ
+(f + g)' = f' + g'
+.EN
+
+.PP
+or in words: adding the functions and then taking the derivative is exactly the same as taking
+the derivative of both the functions first then adding them. In other words: the order of adding
+and taking the derivative doesn't matter. But is this really true?
+
+.PP
+In fact, it is! If we use two general functions f and g, we can see that this is true for any
+two functions that you pick:
+
+.EQ
+(f + g)' = {f(x + h) + g(x + h) - f(x) - g(x)} over h
+.EN
+
+and if we just rearrange and separate the g and f terms:
+.EQ
+(f + g)' = {f(x + h) - f(x)} over {h} + {g(x + h) - g(x)} over h = f' + g'
+.EN
+
+If that is not a clear illustration, this is extremely easy to figure out on your own given
+the general method.
+
+It should be clear that multiplication can be done in the same general process. However,
+it is a little bit more complicated. I suggest trying to figure it out on your own before
+you read the solution below:
+
+.EQ
+(f * g)' = {f(x + h)g(x + h) - f(x)g(x)} over h
+.EN
+in order for this solution to work, we must subtract and add a term $f(x + h)g(x):$
+.EQ
+(f * g)' = {f(x + h)g(x + h) - f(x + h)g(x) + f(x + h)g(x) - f(x)g(x)} over h
+.EN
+and we factor some terms out:
+.EQ
+(f * g)' = {f(x + h)(g(x + h) - g(x)) + g(x)(f(x + h) - f(x))} over h
+.EN
+and we can clearly see that:
+.EQ
+(f * g)' = f(x + h){g(x + h) - g(x)} over {h} + g(x){f(x + h) - f(x)} over {h}
+.EN
+as $h$ approaches zero, $f(x + h)$ approaches $f(x)$. Also, we can see that some of
+these terms look like derivatives, so:
+.EQ
+(f * g)' = f(x)g'(x) + g(x)f'(x).
+.EN
+
+.PP
+And this will work with any two functions where you know their derivatives. Isn't that cool?
+
+.NH 1
+The power rule
+.PP
+Up until now, we assumed that you could take the derivative of an arbitrary function $f$ and
+$g$ and gave rules for computing the derivatives of their products and sums based on that
+assumption. However, it's not clear how you are supposed to just
+.I "know"
+the derivatives of many functions, including sine and cosine, as well as $x sup n$. Of course,
+we figured it out for $x sup 2$, but there are many functions that we have not explained the
+derivative of. How do we find these derivatives?
+
+.PP
+Of course, like with all derivatives of functions, you can calculate them with the general
+derivative definition. Here, we will discuss the power rule, or $x sup n$ for any positive
+integer $n$.
+
+.PP
+If we just plug it into the general form form directly:
+.EQ
+f'(x) = {{(x + h)} sup {n} - {x} sup {n}} over h
+.EN
+You might observe that we need to somehow expand the binomial ${(a + b)} sup n$ for arbitrary n.
+You might try doing this by expanding for $n = 1$, $n = 2$, etc... and finding a pattern:
+.EQ
+{(a + b)} sup 0 = 1
+.EN
+.EQ
+{(a + b)} sup 1 = a + b
+.EN
+.EQ
+{(a + b)} sup 2 = a sup 2 + 2ab + {b} sup {2}
+.EN
+.EQ
+{(a + b)} sup 3 = a sup 3 + 3{a} sup {2}b + 3{b} sup {2}a + {b} sup {3}
+.EN
+and if you keep on doing this for higher $n$, you will see that:
+.EQ
+{(a + b)} sup n = a sup n + n{a} sup {n - 1} {b} sup {1} + ... b sup n
+.EN
+.PP
+the details of this are left as an exercise to the reader, and don't really matter for this
+proof. The only things that matter are that the exponent for b gets larger in the terms not
+listed. If you want to be rigorous, you can try proving this by induction.
+
+.PP
+If you substitute this for the binomial for the derivative definition:
+.EQ
+(x sup {n})' = {x sup n + n{x} sup {n - 1}h + ... h sup n - x sup n} over h
+.EN
+if we cancel out the $x sup n$ terms:
+.EQ
+(x sup {n})' = {n{x} sup {n - 1}h + ... {h} sup {n}} over h
+.EN
+.EQ
+(x sup {n})' = n{x} sup {n - 1} + {... {h} sup {n}} over h
+.EN
+.EQ
+(x sup {n})' = n{x} sup {n - 1} + ... {h} sup {n - 1}
+.EN
+Now we recall that according to our binomial expansion, the exponent
+for $h$ will always grow as we continue looking to the right, and the term $n{x} sup {n - 1} h$ had an exponent of one, which means that each h in the ... will have an exponent of two or more,
+so when we cancel everything out, everything in that ... will
+still have an h term. Because h is infinitely small, we may assume that everything not expanded
+in ... will be almost zero, so our answer here is:
+.EQ
+(x sup {n})' = n{x} sup {n - 1}.
+.EN
+
+.NH 1
+Conclusion
+
+.PP
+Combining knowledge from all of these sections, you will be able to take the derivative
+of an arbitrary polynomial. Next time we will talk about the chain rule and its importance.