port from an SSI-based setup to one using GNU M4
authorAmin Bandali <bandali@gnu.org>
Mon, 20 Apr 2020 04:07:56 +0000 (00:07 -0400)
committerAmin Bandali <bandali@gnu.org>
Mon, 20 Apr 2020 04:07:56 +0000 (00:07 -0400)
49 files changed:
.gitignore
404.html [deleted file]
Makefile
arch-macbook-air.html [deleted file]
arch-macbook-air.m4 [new file with mode: 0644]
bandali-pubkey.txt [deleted file]
computing.html [deleted file]
computing.m4 [new file with mode: 0644]
contact.html [deleted file]
contact.m4 [new file with mode: 0644]
cv.html [deleted file]
cv.m4 [new file with mode: 0644]
feed.m4 [new file with mode: 0644]
feed.svg [deleted file]
footer.html [new file with mode: 0644]
gnu.ico [deleted file]
gpl-3.0.html [deleted file]
guix.scm [deleted file]
haunt.scm [deleted file]
header.html [new file with mode: 0644]
icon-12px.png [deleted file]
icon-16px.png [deleted file]
index.html [deleted file]
index.m4 [new file with mode: 0644]
license.html [deleted file]
license.m4 [new file with mode: 0644]
se212-f19/se212-h02q04d-soln.grg [deleted file]
se212-f19/se212-t01.html [deleted file]
se212-f19/se212-t01.org [deleted file]
se212-f19/se212-t05.org [deleted file]
ssi/license.html [deleted file]
ssi/post.html [deleted file]
ssi/postn.html [deleted file]
ssi/pre.html [deleted file]
ssi/pre0.html [deleted file]
ssi/pren.html [deleted file]
static/404.html [new file with mode: 0644]
static/bandali-pubkey.txt [new file with mode: 0644]
static/feed.svg [new file with mode: 0644]
static/gnu.ico [new file with mode: 0644]
static/gpl-3.0.html [new file with mode: 0644]
static/icon-12px.png [new file with mode: 0644]
static/icon-16px.png [new file with mode: 0644]
static/se212-f19/se212-h02q04d-soln.grg [new file with mode: 0644]
static/se212-f19/se212-t01.html [new file with mode: 0644]
static/se212-f19/se212-t01.org [new file with mode: 0644]
static/se212-f19/se212-t05.org [new file with mode: 0644]
static/style.css [new file with mode: 0644]
style.css [deleted file]

index 45ddf0a..89f9ac0 100644 (file)
@@ -1 +1 @@
-site/
+out/
diff --git a/404.html b/404.html
deleted file mode 100644 (file)
index 33fab2f..0000000
--- a/404.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--# set var="title" value="404 Not Found" -->
-<!--# set var="nts" value="true" -->
-<!--# include virtual="/ssi/pre0.html" -->
-<nav><a href="/">bandali.eu.org</a></nav>
-<main>
-<h1>404</h1>
-<p>Sorry, that page does not exist.</p>
-<!--# include virtual="/ssi/post.html" -->
index 526ef66..ff5e216 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,13 +1,17 @@
-SOURCE_DIR = $(CURDIR)/
+RSYNC_PARAMS = --exclude-from='.rsync-exclude' -avzLP
 
-RSYNC_PARAMS = --exclude-from='.rsync-exclude' --delete -avzP
+LATEST=2
+SRC := $(wildcard *.m4 | grep -v feed.m4)
+OUTPUTS := $(patsubst %.m4,out/%.html,$(SRC))
+STATIC := $(patsubst static/%,out/%,$(wildcard static/*))
 
-SSH_USER = abandali@bandali.eu.org
-SSH_DEST = www/
+all: $(OUTPUTS) out/atom.xml out/style.css $(STATIC)
 
-all: deploy
+out/%.html: %.m4 header.html footer.html ; m4 -D__latest=$(LATEST) $< > $@
+out/atom.xml: feed.m4 ; m4 -D__latest=$(LATEST) $< > $@
+$(STATIC): ; ln -s $(PWD)/static/$(notdir $@) $@
 
 deploy:
-       rsync $(RSYNC_PARAMS) $(SOURCE_DIR) $(SSH_USER):$(SSH_DEST)
+       rsync $(RSYNC_PARAMS) out/ abandali@bandali.eu.org:www/
 
 .PHONY: deploy
diff --git a/arch-macbook-air.html b/arch-macbook-air.html
deleted file mode 100644 (file)
index 2a30027..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-<!--# set var="title" value="Arch GNU/Linux on MacBook Air 2013" -->
-<!--# set var="pub" value="November 1, 2016" -->
-<!--# set var="upd" value="March 27, 2020" -->
-<!--# include virtual="/ssi/pren.html" -->
-<p>This post summarizes how I install and dual-boot Arch GNU/Linux
-with Full-Disk Encryption alongside macOS.  It is not meant to be a
-replacement for the
-<a href="//wiki.archlinux.org/index.php/installation%5Fguide">Installation
-Guide</a> or the former
-<a href="//csdietz.github.io/arch-beginner-guide/">Beginner's
-Guide</a>.  Rather, it mostly serves as a small summary with a few
-useful notes about the gotchas.</p>
-
-<p>So, make sure you understand what you type into your terminal.  If
-you don't, checking out the Arch wiki should probably be your first
-step.</p>
-
-<p><em>Note:</em> you will need internet access throughout the
-installation and the MacBook Air's WiFi doesn't work out of the box on
-Arch.  I recommend using an Ethernet-USB adapter or your phone's USB
-Tethering feature (if it does support it).</p>
-
-<h2>Shrinking the macOS partition</h2>
-<p>The first step I take is resizing the HFS+ macOS partition to make
-room for the new GNU/Linux installation.  There are plenty of
-tutorials on how to do this using macOS's Disk Utility, so do that and
-then come back!</p>
-
-<h2>Creating a bootable Arch Installer USB</h2>
-<p>There are different ways of creating a bootable Arch USB, all
-documented on the
-<a href="//wiki.archlinux.org/index.php/USB%5Fflash%5Finstallation%5Fmedia">USB
-flash installation media</a> page on the Arch wiki, but the simplest
-one is using <code>dd</code> if you already have access to another
-UNIX system.</p>
-
-<p><strong class="warn">Warning:</strong> make sure you backup the
-data on your flash drive, as <code>dd</code> will irrevocably destroy
-all data on it.</p>
-
-<p>Use <code>lsblk</code> to find the name (block device) of your USB drive, then
-run <code>dd</code> (as root) as shown below:</p>
-
-<pre>
-dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
-</pre>
-
-<p>Replace <code>/path/to/archlinux.iso</code> with the path to the
-Arch image you have downloaded, and <code>/dev/sdx</code> with your
-drive.</p>
-
-<h2>Booting up from the USB</h2>
-<p>After creating the install USB, reboot your laptop and hold the alt
-key and boot from the USB.</p>
-
-<p>When booting is complete and you're presented with the prompt, it's
-a good time to make sure you're connected to the internet (see the
-<em>note</em> at the top of this post).</p>
-
-<p>Use <code>ping</code> to verify that you have established a
-connection:</p>
-
-<pre>
-ping archlinux.org
-</pre>
-
-<h2>Updating the system clock</h2>
-<p>Once you're connected to the internet, make sure the system clock
-is accurate:</p>
-
-<pre>
-timedatectl set-ntp true  # start and enable systemd-timesyncd
-</pre>
-
-<p>You can check the service status using <code>timedatectl
-status</code>.</p>
-
-<h2>Partitioning</h2>
-<p>I won't dive into partitioning and instead, I will refer you to the
-<a href="//wiki.archlinux.org/index.php/Partitioning">Partitioning</a>
-page of Arch wiki.  Of the available partitioning tools, I personally
-prefer <code>cfdisk</code>.</p>
-
-<h2>Setting up LVM &amp; LUKS</h2>
-<p>I use an
-<a href="//wiki.archlinux.org/index.php/Dm-crypt/Encrypting%5Fan%5Fentire%5Fsystem#LVM%5Fon%5FLUKS">LVM
-on LUKS</a> setup, where I set up LVM on top of the encrypted
-partition.</p>
-
-<p>First, let's set up the underlying encrypted partition:</p>
-
-<pre>
-cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 \
-           --iter-time 5000 --use-urandom -y luksFormat /dev/sdaX
-</pre>
-
-<p>where <code>/dev/sdaX</code> is the partition you created in the
-last step (e.g. <code>/dev/sda4</code>).  For more information about
-the <code>cryptsetup</code> options, see the
-<a href="//wiki.archlinux.org/index.php/Dm-crypt/Device%5Fencryption#Encryption%5Foptions%5Ffor%5FLUKS%5Fmode">LUKS
-encryption options</a>.</p>
-
-<p>Then we open the container:</p>
-
-<pre>
-cryptsetup open --type luks /dev/sdaX lvm
-</pre>
-
-<p>Now it's time to use lvm and prepare the logical volume(s):</p>
-
-<pre>
-pvcreate /dev/mapper/lvm vgcreate vg /dev/mapper/lvm
-lvcreate --extents +100%FREE -n root vg
-</pre>
-
-<p>This will create a physical volume on the mapping we just opened,
-create a volume group named <code>vg</code> on the physical volume,
-and create a logical volume named <code>root</code> that spans the
-entire volume group.  More complex setups are possible thanks to the
-great flexibility of lvm.</p>
-
-<p>We now format the logical volume with <code>ext4</code>:</p>
-
-<pre>
-mkfs.ext4 /dev/mapper/vg-root
-</pre>
-
-<h2>Installing the base system</h2>
-<p>Let's mount the logical volume, make a directory for the mount
-point of the boot partition, and mount the boot partition
-(<code>/dev/sda1</code>):</p>
-
-<pre>
-mount /dev/mapper/vg-root /mnt
-mkdir /mnt/boot
-mount /dev/sda1 /mnt/boot
-</pre>
-
-<p>Finally, let's install the base system (and optionally
-<code>base-devel</code>):</p>
-
-<pre>
-pacstrap /mnt base base-devel
-</pre>
-
-<h2>Configuring the system</h2>
-<p>Let's generate the fstab:</p>
-
-<pre>
-genfstab -U /mnt >> /mnt/etc/fstab
-</pre>
-
-<p>Use your favorite terminal-based editor, edit the fstab file and
-add the <code>discard</code> option for the root partition to enable
-TRIM on the SSD.</p>
-
-<p>Now we change root into our newly installed system and will
-configure it.  Adjust these according to your own setup.</p>
-
-<pre>
-arch-chroot /mnt /bin/bash
-passwd # set the root password
-echo myhostname > /etc/hostname # set the hostname
-ln -s /usr/share/zoneinfo/Canada/Eastern /etc/localtime # time zone
-hwclock --systohc --utc # write system clock to hardware clock (UTC)
-useradd -m -G wheel -s /bin/bash myuser # create myuser
-passwd myuser # set the password for myuser
-echo "myuser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/myuser
-# uncomment en_US.UTF-8 UTF-8 and other needed locales in /etc/locale.gen
-locale-gen
-echo LANG=en_US.UTF-8 > /etc/locale.conf
-export LANG=en_US.UTF-8
-</pre>
-
-<p>Then adjust the initramfs hooks in
-<code>/etc/mkinitcpio.conf</code> and enable the
-<code>encrypt</code> and <code>lvm2</code> hooks, and make sure
-<code>keyboard</code> is available before <code>encrypt</code> so you
-can actually type in the LUKS password when booting.  Your
-<code>HOOKS</code> line should look similar to this:</p>
-
-<pre>
-HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 filesystems fsck)
-</pre>
-
-<p>After adjusting the hooks, build the initramfs:</p>
-
-<pre>
-mkinitcpio -p linux
-</pre>
-
-<p>Create the <code>/boot/loader/loader.conf</code> with the following
-content (adjust the timeout to your liking):</p>
-
-<pre>
-default arch timeout 3
-</pre>
-
-<p>Then create the entry for Arch:</p>
-
-<pre>
-mkdir -p /boot/loader/entries
-touch /boot/loader/entries/arch.conf
-</pre>
-
-<p>Now edit <code>/boot/loader/entries/arch.conf</code> to specify the
-Arch entry:</p>
-
-<pre>
-title Arch GNU/Linux
-linux /vmlinuz-linux
-initrd /intel-ucode.img
-initrd /initramfs-linux.img
-options cryptdevice=/dev/sdaX:vg:allow-discards root=/dev/mapper/vg-root rw
-</pre>
-
-<p>Again, <code>/dev/sdaX</code> is the partition you created in the
-partitioning step earlier as the underlying encrypted partition.</p>
-
-<p>Finally, install the bootloader, exit the chroot, umount and
-reboot!</p>
-
-<pre>
-bootctl install
-exit
-umount -R /mnt
-reboot
-</pre>
-
-<h2>Post-installation recommendations</h2>
-<p>Congratulations!  You now have a minimal Arch installation.</p>
-
-<p>At this point, I usually install my favorite AUR helper,
-<a href="//aur.archlinux.org/packages/pacaur/">pacaur</a>, then I
-install the
-<a href="//aur.archlinux.org/packages/mba6x%5Fbl-dkms/">mba6x_bl-dkms</a>
-backlight driver to fix the post suspend/resume issue where there's no
-brightness after waking up from suspend, and the only available
-brightness would be 100%.</p>
-
-<pre>
-pacaur -S linux-headers dkms # linux-headers is required for dkms
-pacaur -S broadcom-wl-dkms
-pacaur -S mba6x_bl-dkms
-</pre>
-
-<p>Then, I'd like to install</p>
-<ul>
-<li>input, graphics, and sound drivers,</li>
-<li>a desktop environment (I prefer Xfce or LXQt),</li>
-<li>a display manager for login screen (lightdm or sddm), and</li>
-<li>a network manager (NetworkManager or ConnMan).</li>
-</ul>
-
-<p>Check out the
-<a href="//wiki.archlinux.org/index.php/General%5Frecommendations">General
-recommendations</a> for more details.</p>
-
-<h2>References</h2>
-<p>Here are some resources I've come across each with lots of useful
-bits and pieces, about installing Arch on a MacBook:</p>
-
-<ul>
-<li><a href="//github.com/pandeiro/arch-on-air">pandeiro/arch-on-air</a></li>
-<li><a href="//loicpefferkorn.net/2015/01/arch-linux-on-macbook-pro-retina-2014-with-dm-crypt-lvm-and-suspend-to-disk/">Arch Linux on MacBook Pro Retina 2014 with DM-Crypt, LVM and suspend to disk</a></li>
-<li><a href="//www.frankshin.com/2014/installing-archlinux-on-macbook-air-2013/">Installing Archlinux on Macbook Air 2013</a></li>
-<li><a href="http://panks.me/posts/2013/06/arch-linux-installation-with-os-x-on-macbook-air-dual-boot/">Arch Linux Installation with OS X on Macbook Air (Dual Boot)</a></li>
-<li><a href="//alexeyzabelin.com/arch-on-mac">Installing Arch Linux on a MacBook Air 2013</a></li>
-<li><a href="//medium.com/phils-thought-bubble-of-recent-stuff/arch-linux-running-on-my-macbook-2ea525ebefe3">Arch Linux running on my MacBook</a></li>
-<li><a href="http://codylittlewood.com/arch-linux-on-macbook-pro-installation/">Dual boot Arch Linux on MacBook Pro Installation</a></li>
-</ul>
-<!--# set var="copy" value="2016, 2019, 2020" -->
-<!--# include virtual="/ssi/postn.html" -->
diff --git a/arch-macbook-air.m4 b/arch-macbook-air.m4
new file mode 100644 (file)
index 0000000..4d2a348
--- /dev/null
@@ -0,0 +1,276 @@
+dnl -*- html -*-
+define(__pub, 2016-11-01T12:00:00Z)dnl
+define(__upd, 2020-03-27T12:00:00Z)dnl
+define(__title, `Arch GNU/Linux on MacBook Air 2013')dnl
+define(__slug, `computing')dnl
+define(__id, 1)dnl
+include(header.html)
+<p>This post summarizes how I install and dual-boot Arch GNU/Linux
+with Full-Disk Encryption alongside macOS.  It is not meant to be a
+replacement for the
+<a href="//wiki.archlinux.org/index.php/installation%5Fguide">Installation
+Guide</a> or the former
+<a href="//csdietz.github.io/arch-beginner-guide/">Beginner's
+Guide</a>.  Rather, it mostly serves as a small summary with a few
+useful notes about the gotchas.</p>
+
+<p>So, make sure you understand what you type into your terminal.  If
+you don't, checking out the Arch wiki should probably be your first
+step.</p>
+
+<p><em>Note:</em> you will need internet access throughout the
+installation and the MacBook Air's WiFi doesn't work out of the box on
+Arch.  I recommend using an Ethernet-USB adapter or your phone's USB
+Tethering feature (if it does support it).</p>
+
+<h2>Shrinking the macOS partition</h2>
+<p>The first step I take is resizing the HFS+ macOS partition to make
+room for the new GNU/Linux installation.  There are plenty of
+tutorials on how to do this using macOS's Disk Utility, so do that and
+then come back!</p>
+
+<h2>Creating a bootable Arch Installer USB</h2>
+<p>There are different ways of creating a bootable Arch USB, all
+documented on the
+<a href="//wiki.archlinux.org/index.php/USB%5Fflash%5Finstallation%5Fmedia">USB
+flash installation media</a> page on the Arch wiki, but the simplest
+one is using <code>dd</code> if you already have access to another
+UNIX system.</p>
+
+<p><strong class="warn">Warning:</strong> make sure you backup the
+data on your flash drive, as <code>dd</code> will irrevocably destroy
+all data on it.</p>
+
+<p>Use <code>lsblk</code> to find the name (block device) of your USB drive, then
+run <code>dd</code> (as root) as shown below:</p>
+
+<pre>
+dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
+</pre>
+
+<p>Replace <code>/path/to/archlinux.iso</code> with the path to the
+Arch image you have downloaded, and <code>/dev/sdx</code> with your
+drive.</p>
+
+<h2>Booting up from the USB</h2>
+<p>After creating the install USB, reboot your laptop and hold the alt
+key and boot from the USB.</p>
+
+<p>When booting is complete and you're presented with the prompt, it's
+a good time to make sure you're connected to the internet (see the
+<em>note</em> at the top of this post).</p>
+
+<p>Use <code>ping</code> to verify that you have established a
+connection:</p>
+
+<pre>
+ping archlinux.org
+</pre>
+
+<h2>Updating the system clock</h2>
+<p>Once you're connected to the internet, make sure the system clock
+is accurate:</p>
+
+<pre>
+timedatectl set-ntp true  # start and enable systemd-timesyncd
+</pre>
+
+<p>You can check the service status using <code>timedatectl
+status</code>.</p>
+
+<h2>Partitioning</h2>
+<p>I won't dive into partitioning and instead, I will refer you to the
+<a href="//wiki.archlinux.org/index.php/Partitioning">Partitioning</a>
+page of Arch wiki.  Of the available partitioning tools, I personally
+prefer <code>cfdisk</code>.</p>
+
+<h2>Setting up LVM &amp; LUKS</h2>
+<p>I use an
+<a href="//wiki.archlinux.org/index.php/Dm-crypt/Encrypting%5Fan%5Fentire%5Fsystem#LVM%5Fon%5FLUKS">LVM
+on LUKS</a> setup, where I set up LVM on top of the encrypted
+partition.</p>
+
+<p>First, let's set up the underlying encrypted partition:</p>
+
+<pre>
+cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 \
+           --iter-time 5000 --use-urandom -y luksFormat /dev/sdaX
+</pre>
+
+<p>where <code>/dev/sdaX</code> is the partition you created in the
+last step (e.g. <code>/dev/sda4</code>).  For more information about
+the <code>cryptsetup</code> options, see the
+<a href="//wiki.archlinux.org/index.php/Dm-crypt/Device%5Fencryption#Encryption%5Foptions%5Ffor%5FLUKS%5Fmode">LUKS
+encryption options</a>.</p>
+
+<p>Then we open the container:</p>
+
+<pre>
+cryptsetup open --type luks /dev/sdaX lvm
+</pre>
+
+<p>Now it's time to use lvm and prepare the logical volume(s):</p>
+
+<pre>
+pvcreate /dev/mapper/lvm vgcreate vg /dev/mapper/lvm
+lvcreate --extents +100%FREE -n root vg
+</pre>
+
+<p>This will create a physical volume on the mapping we just opened,
+create a volume group named <code>vg</code> on the physical volume,
+and create a logical volume named <code>root</code> that spans the
+entire volume group.  More complex setups are possible thanks to the
+great flexibility of lvm.</p>
+
+<p>We now format the logical volume with <code>ext4</code>:</p>
+
+<pre>
+mkfs.ext4 /dev/mapper/vg-root
+</pre>
+
+<h2>Installing the base system</h2>
+<p>Let's mount the logical volume, make a directory for the mount
+point of the boot partition, and mount the boot partition
+(<code>/dev/sda1</code>):</p>
+
+<pre>
+mount /dev/mapper/vg-root /mnt
+mkdir /mnt/boot
+mount /dev/sda1 /mnt/boot
+</pre>
+
+<p>Finally, let's install the base system (and optionally
+<code>base-devel</code>):</p>
+
+<pre>
+pacstrap /mnt base base-devel
+</pre>
+
+<h2>Configuring the system</h2>
+<p>Let's generate the fstab:</p>
+
+<pre>
+genfstab -U /mnt >> /mnt/etc/fstab
+</pre>
+
+<p>Use your favorite terminal-based editor, edit the fstab file and
+add the <code>discard</code> option for the root partition to enable
+TRIM on the SSD.</p>
+
+<p>Now we change root into our newly installed system and will
+configure it.  Adjust these according to your own setup.</p>
+
+<pre>
+arch-chroot /mnt /bin/bash
+passwd # set the root password
+echo myhostname > /etc/hostname # set the hostname
+ln -s /usr/share/zoneinfo/Canada/Eastern /etc/localtime # time zone
+hwclock --systohc --utc # write system clock to hardware clock (UTC)
+useradd -m -G wheel -s /bin/bash myuser # create myuser
+passwd myuser # set the password for myuser
+echo "myuser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/myuser
+# uncomment en_US.UTF-8 UTF-8 and other needed locales in /etc/locale.gen
+locale-gen
+echo LANG=en_US.UTF-8 > /etc/locale.conf
+export LANG=en_US.UTF-8
+</pre>
+
+<p>Then adjust the initramfs hooks in
+<code>/etc/mkinitcpio.conf</code> and enable the
+<code>encrypt</code> and <code>lvm2</code> hooks, and make sure
+<code>keyboard</code> is available before <code>encrypt</code> so you
+can actually type in the LUKS password when booting.  Your
+<code>HOOKS</code> line should look similar to this:</p>
+
+<pre>
+HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 filesystems fsck)
+</pre>
+
+<p>After adjusting the hooks, build the initramfs:</p>
+
+<pre>
+mkinitcpio -p linux
+</pre>
+
+<p>Create the <code>/boot/loader/loader.conf</code> with the following
+content (adjust the timeout to your liking):</p>
+
+<pre>
+default arch timeout 3
+</pre>
+
+<p>Then create the entry for Arch:</p>
+
+<pre>
+mkdir -p /boot/loader/entries
+touch /boot/loader/entries/arch.conf
+</pre>
+
+<p>Now edit <code>/boot/loader/entries/arch.conf</code> to specify the
+Arch entry:</p>
+
+<pre>
+title Arch GNU/Linux
+linux /vmlinuz-linux
+initrd /intel-ucode.img
+initrd /initramfs-linux.img
+options cryptdevice=/dev/sdaX:vg:allow-discards root=/dev/mapper/vg-root rw
+</pre>
+
+<p>Again, <code>/dev/sdaX</code> is the partition you created in the
+partitioning step earlier as the underlying encrypted partition.</p>
+
+<p>Finally, install the bootloader, exit the chroot, umount and
+reboot!</p>
+
+<pre>
+bootctl install
+exit
+umount -R /mnt
+reboot
+</pre>
+
+<h2>Post-installation recommendations</h2>
+<p>Congratulations!  You now have a minimal Arch installation.</p>
+
+<p>At this point, I usually install my favorite AUR helper,
+<a href="//aur.archlinux.org/packages/pacaur/">pacaur</a>, then I
+install the
+<a href="//aur.archlinux.org/packages/mba6x%5Fbl-dkms/">mba6x_bl-dkms</a>
+backlight driver to fix the post suspend/resume issue where there's no
+brightness after waking up from suspend, and the only available
+brightness would be 100%.</p>
+
+<pre>
+pacaur -S linux-headers dkms # linux-headers is required for dkms
+pacaur -S broadcom-wl-dkms
+pacaur -S mba6x_bl-dkms
+</pre>
+
+<p>Then, I'd like to install</p>
+<ul>
+<li>input, graphics, and sound drivers,</li>
+<li>a desktop environment (I prefer Xfce or LXQt),</li>
+<li>a display manager for login screen (lightdm or sddm), and</li>
+<li>a network manager (NetworkManager or ConnMan).</li>
+</ul>
+
+<p>Check out the
+<a href="//wiki.archlinux.org/index.php/General%5Frecommendations">General
+recommendations</a> for more details.</p>
+
+<h2>References</h2>
+<p>Here are some resources I've come across each with lots of useful
+bits and pieces, about installing Arch on a MacBook:</p>
+
+<ul>
+<li><a href="//github.com/pandeiro/arch-on-air">pandeiro/arch-on-air</a></li>
+<li><a href="//loicpefferkorn.net/2015/01/arch-linux-on-macbook-pro-retina-2014-with-dm-crypt-lvm-and-suspend-to-disk/">Arch Linux on MacBook Pro Retina 2014 with DM-Crypt, LVM and suspend to disk</a></li>
+<li><a href="//www.frankshin.com/2014/installing-archlinux-on-macbook-air-2013/">Installing Archlinux on Macbook Air 2013</a></li>
+<li><a href="http://panks.me/posts/2013/06/arch-linux-installation-with-os-x-on-macbook-air-dual-boot/">Arch Linux Installation with OS X on Macbook Air (Dual Boot)</a></li>
+<li><a href="//alexeyzabelin.com/arch-on-mac">Installing Arch Linux on a MacBook Air 2013</a></li>
+<li><a href="//medium.com/phils-thought-bubble-of-recent-stuff/arch-linux-running-on-my-macbook-2ea525ebefe3">Arch Linux running on my MacBook</a></li>
+<li><a href="http://codylittlewood.com/arch-linux-on-macbook-pro-installation/">Dual boot Arch Linux on MacBook Pro Installation</a></li>
+</ul>
+define(__copy, `2016, 2019, 2020')dnl
+include(footer.html)
diff --git a/bandali-pubkey.txt b/bandali-pubkey.txt
deleted file mode 100644 (file)
index 551889f..0000000
+++ /dev/null
@@ -1,391 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-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
-vhM+q4339VYMt/RYM0PIraejWttGAtb6bQ==
-=7ozV
------END PGP PUBLIC KEY BLOCK-----
diff --git a/computing.html b/computing.html
deleted file mode 100644 (file)
index 357ec3e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--# set var="title" value="How I do my Computing" -->
-<!--# set var="pub" value="September 14, 2019" -->
-<!--# set var="upd" value="November 30, 2019" -->
-<!--# include virtual="/ssi/pren.html" -->
-<p>(Inspired by computing pages of
-<a href="//stallman.org/stallman-computing.html">rms</a> and
-<a href="//blog.vimuser.org/leah-computing.html">Leah Rowe</a>)</p>
-
-<h2>Computers</h2>
-<p>My main computer is a
-soon-to-be-<a href="https://libreboot.org">librebooted</a>
-ThinkPad X200.  This is the machine I use the most in or out the
-house.  I also own and occasionally use a Dell XPS 15 more as a
-&ldquo;Desktop&rdquo;, and a ThinkPad X220T tablet I use when reading
-(and annotating) research papers.</p>
-
-<p>I also have the privilege of having access to a fleet of beefy
-servers through our school's
-<a href="https://csclub.uwaterloo.ca">Computer Science Club</a>,
-which I use for some heavier computations every now and
-again.</p>
-
-<h2>GNU/Linux distros</h2>
-<p>I've used a large number of GNU/Linux distributions throughout the
-years, but as of late, my favourite distros are
-<a href="//trisquel.info">Trisquel</a>,
-<a href="//guix.gnu.org">Guix System</a>, and
-<a href="//www.debian.org">Debian</a> (with no <code>contrib</code> or
-<code>non-free</code>).  I mostly use the
-<a href="//www.fsfla.org/ikiwiki/selibre/linux-libre/">GNU Linux-libre</a> kernel.
-Guix&nbsp;System comes with GNU Linux-libre out of the box, and on
-Debian-based distros I install it from jxself's
-<a href="//jxself.org/linux-libre/">APT repository</a>.</p>
-
-<h2>Actual computing</h2>
-<p>I spend most of my time in
-<a href="//www.gnu.org/software/emacs/">GNU Emacs</a>.</p>
-<p>TODO: elaborate</p>
-
-<h2>Cell phone</h2>
-<p>I have an old Nexus 5 I reluctantly use from time to time.  It runs
-LineageOS+microG without GApps.  Sadly it still requires some blobs
-for functioning.  I can't wait for lxo's
-<a href="//www.fsfla.org/ikiwiki/blogs/lxo/pub/0G">0G</a> to become a
-reality fast enough.
-<span class="smly">:-)</span></p>
-<!--# set var="copy" value="2019" -->
-<!--# include virtual="/ssi/postn.html" -->
diff --git a/computing.m4 b/computing.m4
new file mode 100644 (file)
index 0000000..e15e2aa
--- /dev/null
@@ -0,0 +1,51 @@
+dnl -*- html -*-
+define(__pub, 2019-09-14T12:00:00Z)dnl
+define(__upd, 2019-11-30T23:00:00Z)dnl
+define(__title, `How I do my Computing')dnl
+define(__slug, `computing')dnl
+define(__id, 2)dnl
+include(header.html)
+<p>(Inspired by computing pages of
+<a href="//stallman.org/stallman-computing.html">rms</a> and
+<a href="//blog.vimuser.org/leah-computing.html">Leah Rowe</a>)</p>
+
+<h2>Computers</h2>
+<p>My main computer is a
+soon-to-be-<a href="https://libreboot.org">librebooted</a>
+ThinkPad X200.  This is the machine I use the most in or out the
+house.  I also own and occasionally use a Dell XPS 15 more as a
+&ldquo;Desktop&rdquo;, and a ThinkPad X220T tablet I use when reading
+(and annotating) research papers.</p>
+
+<p>I also have the privilege of having access to a fleet of beefy
+servers through our school's
+<a href="https://csclub.uwaterloo.ca">Computer Science Club</a>,
+which I use for some heavier computations every now and
+again.</p>
+
+<h2>GNU/Linux distros</h2>
+<p>I've used a large number of GNU/Linux distributions throughout the
+years, but as of late, my favourite distros are
+<a href="//trisquel.info">Trisquel</a>,
+<a href="//guix.gnu.org">Guix System</a>, and
+<a href="//www.debian.org">Debian</a> (with no <code>contrib</code> or
+<code>non-free</code>).  I mostly use the
+<a href="//www.fsfla.org/ikiwiki/selibre/linux-libre/">GNU Linux-libre</a> kernel.
+Guix&nbsp;System comes with GNU Linux-libre out of the box, and on
+Debian-based distros I install it from jxself's
+<a href="//jxself.org/linux-libre/">APT repository</a>.</p>
+
+<h2>Actual computing</h2>
+<p>I spend most of my time in
+<a href="//www.gnu.org/software/emacs/">GNU Emacs</a>.</p>
+<p>TODO: elaborate</p>
+
+<h2>Cell phone</h2>
+<p>I have an old Nexus 5 I reluctantly use from time to time.  It runs
+LineageOS+microG without GApps.  Sadly it still requires some blobs
+for functioning.  I can't wait for lxo's
+<a href="//www.fsfla.org/ikiwiki/blogs/lxo/pub/0G">0G</a> to become a
+reality fast enough.
+<span class="smly">:-)</span></p>
+define(__copy, `2019')dnl
+include(footer.html)
diff --git a/contact.html b/contact.html
deleted file mode 100644 (file)
index 0776021..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--# set var="title" value="Contact Information" -->
-<!--# include virtual="/ssi/pre.html" -->
-<article>
-<h1>Contact information</h1>
-<p>Email is by far my preferred method of communication.  I may be
-contacted at any of the following addresses (choose the one most
-closely related):</p>
-
-<ul>
-<li>bandali@gnu.org</li>
-<li>bandali@uwaterloo.ca</li>
-<li>bandali@csclub.uwaterloo.ca</li>
-</ul>
-
-<p>If you want to send me GPG-encrypted mail, you can use my
-<a href="bandali-pubkey.txt">public key</a> with the
-fingerprint&nbsp;<code>BE62 7373 8E61 6D6D 1B3A  08E8 A21A 0202 4881 6103</code>.</p>
-
-<table>
-<tbody>
-<tr>
-<td>IRC</td>
-<td>bandali on <a href="//freenode.net">freenode</a> and
-<a href="//www.oftc.net">oftc</a></td>
-</tr>
-
-<tr>
-<td>XMPP</td>
-<td><a href="xmpp:bandali@member.fsf.org">bandali@member.fsf.org</a></td>
-</tr>
-
-<tr>
-<td>Matrix</td>
-<td><a href="//matrix.to/#/@bandali:matrix.org">@bandali:matrix.org</a></td>
-</tr>
-
-<tr>
-<td>Fediverse</td>
-<td><a href="//pleroma.site/bandali">@bandali@pleroma.site</a></td>
-</tr>
-</tbody>
-</table>
-
-<h2>Elsewhere</h2>
-<p>You may also find me at a few other places online.  Stricken
-through accounts are those I don't use anymore, unless absolutely
-necessary.</p>
-
-<ul>
-<li><a href="//savannah.gnu.org/users/bandali">bandali</a> on GNU Savannah</li>
-<li><a href="//libreplanet.org/wiki/User:Bandali">bandali</a> on LibrePlanet</li>
-<li><a href="//emacsconf.org/bandali">bandali</a> on EmacsConf</li>
-<li><a href="//git.sr.ht/~bandali">bandali</a> on Sourcehut</li>
-<li><a href="//gitlab.com/bandali">bandali</a> on GitLab</li>
-<li><a href="//lobste.rs/u/bandali">bandali</a> on Lobsters</li>
-<li><a href="//hackage.haskell.org/user/bandali">bandali</a> on Hackage</li>
-<li><a href="//news.ycombinator.com/user?id=bandali">bandali</a> on HN</li>
-<li><a href="//www.reddit.com/u/bandali">bandali</a> on reddit</li>
-<li><del><a href="//github.com/notbandali">notbandali</a> on GitHub</del></li>
-<li><del><a href="//twitter.com/notbandali">notbandali</a> on Twitter</del></li>
-</ul>
-</article>
-<!--# include virtual="/ssi/post.html" -->
diff --git a/contact.m4 b/contact.m4
new file mode 100644 (file)
index 0000000..a56f36f
--- /dev/null
@@ -0,0 +1,65 @@
+dnl -*- html -*-
+define(__title, `Contact Information')dnl
+define(__slug, `contact')dnl
+include(header.html)
+<article>
+<h1>Contact information</h1>
+<p>Email is by far my preferred method of communication.  I may be
+contacted at any of the following addresses (choose the one most
+closely related):</p>
+
+<ul>
+<li>bandali@gnu.org</li>
+<li>bandali@uwaterloo.ca</li>
+<li>bandali@csclub.uwaterloo.ca</li>
+</ul>
+
+<p>If you want to send me GPG-encrypted mail, you can use my
+<a href="bandali-pubkey.txt">public key</a> with the
+fingerprint&nbsp;<code>BE62 7373 8E61 6D6D 1B3A  08E8 A21A 0202 4881 6103</code>.</p>
+
+<table>
+<tbody>
+<tr>
+<td>IRC</td>
+<td>bandali on <a href="//freenode.net">freenode</a> and
+<a href="//www.oftc.net">oftc</a></td>
+</tr>
+
+<tr>
+<td>XMPP</td>
+<td><a href="xmpp:bandali@member.fsf.org">bandali@member.fsf.org</a></td>
+</tr>
+
+<tr>
+<td>Matrix</td>
+<td><a href="//matrix.to/#/@bandali:matrix.org">@bandali:matrix.org</a></td>
+</tr>
+
+<tr>
+<td>Fediverse</td>
+<td><a href="//pleroma.site/bandali">@bandali@pleroma.site</a></td>
+</tr>
+</tbody>
+</table>
+
+<h2>Elsewhere</h2>
+<p>You may also find me at a few other places online.  Stricken
+through accounts are those I don't use anymore, unless absolutely
+necessary.</p>
+
+<ul>
+<li><a href="//savannah.gnu.org/users/bandali">bandali</a> on GNU Savannah</li>
+<li><a href="//libreplanet.org/wiki/User:Bandali">bandali</a> on LibrePlanet</li>
+<li><a href="//emacsconf.org/bandali">bandali</a> on EmacsConf</li>
+<li><a href="//git.sr.ht/~bandali">bandali</a> on Sourcehut</li>
+<li><a href="//gitlab.com/bandali">bandali</a> on GitLab</li>
+<li><a href="//lobste.rs/u/bandali">bandali</a> on Lobsters</li>
+<li><a href="//hackage.haskell.org/user/bandali">bandali</a> on Hackage</li>
+<li><a href="//news.ycombinator.com/user?id=bandali">bandali</a> on HN</li>
+<li><a href="//www.reddit.com/u/bandali">bandali</a> on reddit</li>
+<li><del><a href="//github.com/notbandali">notbandali</a> on GitHub</del></li>
+<li><del><a href="//twitter.com/notbandali">notbandali</a> on Twitter</del></li>
+</ul>
+</article>
+include(footer.html)
diff --git a/cv.html b/cv.html
deleted file mode 100644 (file)
index c0ba44c..0000000
--- a/cv.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--# set var="title" value="Curriculum vitae" -->
-<!--# include virtual="/ssi/pre0.html" -->
-<main>
-<h1>Curriculum vitae (<a href="bandali-cv.pdf">PDF</a>)</h1>
-
-<table>
-<tbody>
-<tr>
-<td>Site</td>
-<td><a href="//bandali.eu.org">bandali.eu.org</a></td>
-</tr>
-<tr>
-<td>Email</td>
-<td>bandali@uwaterloo.ca</td>
-</tr>
-<tr>
-<td>Phone</td>
-<td>available upon request via email</td>
-</tr>
-</tbody>
-</table>
-
-<h2>Education</h2>
-
-<h3>Master of Mathematics (Computer Science) | 2018–present</h3>
-<p>University of Waterloo, Canada</p>
-<p>Supervised by Dr. Nancy Day | GPA: 3.7/4.0 | Expected completion: April 2020</p>
-<p>Research focusing on formal logic, model checking, and verification.</p>
-
-<h3>B.Sc. Honours Computer Science | 2013–2017</h3>
-<p>York University, Toronto, Canada</p>
-<p>GPA: 7.84/9.0</p><p>Relevant courses: System Specification &amp;
-Refinement, Software Requirements Eng., Software Design, Operating
-Systems, Computational Complexity, Design &amp; Analysis of Algorithms.</p>
-<p>Finished first year (2013-14) at <em>Carleton University</em> with
-a GPA of 11.0/12.0, then transferred to <em>York University</em> in
-Fall 2014.</p>
-
-<h2>Publications</h2>
-
-<p>Listed on my <a href="/#papers">homepage</a></p>
-
-<h2>Work &amp; Research Experience</h2>
-
-<h3>Cheriton School of Computer Science, University of Waterloo | 2018–present</h3>
-<p>Instructional Apprentice, Teaching Assistant, Research Assistant</p>
-
-<ul>
-<li><abbr title="Logic and Computation">SE 212</abbr>:
-<a href="se212-f19/"><abbr title="Instructional Apprentice">IA</abbr> in Fall 2019</a>,
-<abbr title="Teaching Assistant">TA</abbr> in Fall 2018</li>
-<li><abbr title="Software Requirements Specification and Analysis">SE 463</abbr>:
-TA in Summer 2019 and 2018</li>
-<li><abbr title="Elementary Algorithm Design and Data Abstraction">CS 136</abbr>:
-TA in Winter 2018</li>
-</ul>
-
-<h3><abbr title="Electrical Engineering &amp; Computer Science">EECS</abbr>
-Department, York University | Fall 2017</h3>
-<p>Teaching Assistant</p>
-<p><abbr title="Net-Centric Introduction to Computing">EECS 1012</abbr>:
-TA in Fall 2017</p>
-<!--# include virtual="/ssi/post.html" -->
diff --git a/cv.m4 b/cv.m4
new file mode 100644 (file)
index 0000000..4a485f4
--- /dev/null
+++ b/cv.m4
@@ -0,0 +1,65 @@
+dnl -*- html -*-
+define(__title, `Curriculum vitae')dnl
+define(__slug, `cv')dnl
+include(header.html)
+<main>
+<h1>Curriculum vitae (<a href="bandali-cv.pdf">PDF</a>)</h1>
+
+<table>
+<tbody>
+<tr>
+<td>Site</td>
+<td><a href="//bandali.eu.org">bandali.eu.org</a></td>
+</tr>
+<tr>
+<td>Email</td>
+<td>bandali@uwaterloo.ca</td>
+</tr>
+<tr>
+<td>Phone</td>
+<td>available upon request via email</td>
+</tr>
+</tbody>
+</table>
+
+<h2>Education</h2>
+
+<h3>Master of Mathematics (Computer Science) | 2018–present</h3>
+<p>University of Waterloo, Canada</p>
+<p>Supervised by Dr. Nancy Day | GPA: 3.7/4.0 | Expected completion: April 2020</p>
+<p>Research focusing on formal logic, model checking, and verification.</p>
+
+<h3>B.Sc. Honours Computer Science | 2013–2017</h3>
+<p>York University, Toronto, Canada</p>
+<p>GPA: 7.84/9.0</p><p>Relevant courses: System Specification &amp;
+Refinement, Software Requirements Eng., Software Design, Operating
+Systems, Computational Complexity, Design &amp; Analysis of Algorithms.</p>
+<p>Finished first year (2013-14) at <em>Carleton University</em> with
+a GPA of 11.0/12.0, then transferred to <em>York University</em> in
+Fall 2014.</p>
+
+<h2>Publications</h2>
+
+<p>Listed on my <a href="/#papers">homepage</a></p>
+
+<h2>Work &amp; Research Experience</h2>
+
+<h3>Cheriton School of Computer Science, University of Waterloo | 2018–present</h3>
+<p>Instructional Apprentice, Teaching Assistant, Research Assistant</p>
+
+<ul>
+<li><abbr title="Logic and Computation">SE 212</abbr>:
+<a href="se212-f19/"><abbr title="Instructional Apprentice">IA</abbr> in Fall 2019</a>,
+<abbr title="Teaching Assistant">TA</abbr> in Fall 2018</li>
+<li><abbr title="Software Requirements Specification and Analysis">SE 463</abbr>:
+TA in Summer 2019 and 2018</li>
+<li><abbr title="Elementary Algorithm Design and Data Abstraction">CS 136</abbr>:
+TA in Winter 2018</li>
+</ul>
+
+<h3><abbr title="Electrical Engineering &amp; Computer Science">EECS</abbr>
+Department, York University | Fall 2017</h3>
+<p>Teaching Assistant</p>
+<p><abbr title="Net-Centric Introduction to Computing">EECS 1012</abbr>:
+TA in Fall 2017</p>
+include(footer.html)
diff --git a/feed.m4 b/feed.m4
new file mode 100644 (file)
index 0000000..712a9b5
--- /dev/null
+++ b/feed.m4
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
+  <title>Amin Bandali's Personal Site</title>
+  <id>tag:bandali.eu.org,2016:notes/</id>
+  <link href="https://bandali.eu.org/atom.xml" rel="self" type="application/atom+xml"/>
+  <link href="https://bandali.eu.org" rel="alternate" type="text/html"/>
+  <updated>syscmd(date -Iseconds -u | tr -d \\n)</updated>
+define(__feed)dnl
+define(`fordown',`ifelse($#,0,``$0'',`ifelse(eval($2>=$3),1,
+  `pushdef(`$1',$2)$4`'popdef(`$1')$0(`$1',decr($2),$3,`$4')')')')
+fordown(`__i',__latest,eval(__latest-10),`
+  syscmd(sed "s/\&/\&amp;/g;s/>/\&gt;/g;s/</\&lt;/g" __i.m4 | m4 -D__feed)')
+</feed>
diff --git a/feed.svg b/feed.svg
deleted file mode 100644 (file)
index 4efd2ef..0000000
--- a/feed.svg
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="128px" height="128px" id="RSSicon" viewBox="0 0 256 256">
-<defs>
-<linearGradient x1="0.085" y1="0.085" x2="0.915" y2="0.915" id="RSSg">
-<stop  offset="0.0" stop-color="#E3702D"/><stop  offset="0.1071" stop-color="#EA7D31"/>
-<stop  offset="0.3503" stop-color="#F69537"/><stop  offset="0.5" stop-color="#FB9E3A"/>
-<stop  offset="0.7016" stop-color="#EA7C31"/><stop  offset="0.8866" stop-color="#DE642B"/>
-<stop  offset="1.0" stop-color="#D95B29"/>
-</linearGradient>
-</defs>
-<rect width="256" height="256" rx="55" ry="55" x="0"  y="0"  fill="#CC5D15"/>
-<rect width="246" height="246" rx="50" ry="50" x="5"  y="5"  fill="#F49C52"/>
-<rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#RSSg)"/>
-<circle cx="68" cy="189" r="24" fill="#FFF"/>
-<path d="M160 213h-34a82 82 0 0 0 -82 -82v-34a116 116 0 0 1 116 116z" fill="#FFF"/>
-<path d="M184 213A140 140 0 0 0 44 73 V 38a175 175 0 0 1 175 175z" fill="#FFF"/>
-</svg>
diff --git a/footer.html b/footer.html
new file mode 100644 (file)
index 0000000..ae2825c
--- /dev/null
@@ -0,0 +1,15 @@
+ifdef(`__feed', `</content></entry>',
+`ifdef(`__pub',
+`<p class="muted inbox">Got a question or comment?  You can find my
+email address on my <a href="contact">contact</a> page.
+<span class="smly">:-)</span></p>
+</article>')
+</main>
+ifdef(`__copy',
+`<footer>
+<p>Copyright &copy; __copy Amin Bandali.
+See the ifelse(__slug,`license',`above for license conditions',`<a href="/license">license conditions</a>').
+Please copy and share.</p>
+</footer>')
+</body>
+</html>')
diff --git a/gnu.ico b/gnu.ico
deleted file mode 100644 (file)
index e363826..0000000
Binary files a/gnu.ico and /dev/null differ
diff --git a/gpl-3.0.html b/gpl-3.0.html
deleted file mode 100644 (file)
index 3817471..0000000
+++ /dev/null
@@ -1,698 +0,0 @@
-<!doctype html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8"/>
-    <meta name=viewport content="width=device-width, initial-scale=1"/>
-    <title>GNU General Public License v3.0</title>
-    <link rel="stylesheet" href="/style.css"/>
-  </head>
-  <body>
-    <main style="font-size: 0.92em;
-                 max-width: 55em;
-                 line-height: 1.5;">
-      <h3 style="text-align: center;">GNU GENERAL PUBLIC LICENSE</h3>
-      <p style="text-align: center;">Version 3, 29 June 2007</p>
-
-      <p>Copyright &copy; 2007 Free Software Foundation, Inc.
-        &lt;<a href="https://fsf.org/">https://fsf.org/</a>&gt;</p><p>
-        Everyone is permitted to copy and distribute verbatim copies
-        of this license document, but changing it is not allowed.</p>
-
-      <h3><a name="preamble"></a>Preamble</h3>
-
-      <p>The GNU General Public License is a free, copyleft license for
-        software and other kinds of works.</p>
-
-      <p>The licenses for most software and other practical works are designed
-        to take away your freedom to share and change the works.  By contrast,
-        the GNU General Public License is intended to guarantee your freedom to
-        share and change all versions of a program--to make sure it remains free
-        software for all its users.  We, the Free Software Foundation, use the
-        GNU General Public License for most of our software; it applies also to
-        any other work released this way by its authors.  You can apply it to
-        your programs, too.</p>
-
-      <p>When we speak of free software, we are referring to freedom, not
-        price.  Our General Public Licenses are designed to make sure that you
-        have the freedom to distribute copies of free software (and charge for
-        them if you wish), that you receive source code or can get it if you
-        want it, that you can change the software or use pieces of it in new
-        free programs, and that you know you can do these things.</p>
-
-      <p>To protect your rights, we need to prevent others from denying you
-        these rights or asking you to surrender the rights.  Therefore, you have
-        certain responsibilities if you distribute copies of the software, or if
-        you modify it: responsibilities to respect the freedom of others.</p>
-
-      <p>For example, if you distribute copies of such a program, whether
-        gratis or for a fee, you must pass on to the recipients the same
-        freedoms that you received.  You must make sure that they, too, receive
-        or can get the source code.  And you must show them these terms so they
-        know their rights.</p>
-
-      <p>Developers that use the GNU GPL protect your rights with two steps:
-        (1) assert copyright on the software, and (2) offer you this License
-        giving you legal permission to copy, distribute and/or modify it.</p>
-
-      <p>For the developers' and authors' protection, the GPL clearly explains
-        that there is no warranty for this free software.  For both users' and
-        authors' sake, the GPL requires that modified versions be marked as
-        changed, so that their problems will not be attributed erroneously to
-        authors of previous versions.</p>
-
-      <p>Some devices are designed to deny users access to install or run
-        modified versions of the software inside them, although the manufacturer
-        can do so.  This is fundamentally incompatible with the aim of
-        protecting users' freedom to change the software.  The systematic
-        pattern of such abuse occurs in the area of products for individuals to
-        use, which is precisely where it is most unacceptable.  Therefore, we
-        have designed this version of the GPL to prohibit the practice for those
-        products.  If such problems arise substantially in other domains, we
-        stand ready to extend this provision to those domains in future versions
-        of the GPL, as needed to protect the freedom of users.</p>
-
-      <p>Finally, every program is threatened constantly by software patents.
-        States should not allow patents to restrict development and use of
-        software on general-purpose computers, but in those that do, we wish to
-        avoid the special danger that patents applied to a free program could
-        make it effectively proprietary.  To prevent this, the GPL assures that
-        patents cannot be used to render the program non-free.</p>
-
-      <p>The precise terms and conditions for copying, distribution and
-        modification follow.</p>
-
-      <h3><a name="terms"></a>TERMS AND CONDITIONS</h3>
-
-      <h4><a name="section0"></a>0. Definitions.</h4>
-
-      <p>&ldquo;This License&rdquo; refers to version 3 of the GNU General Public License.</p>
-
-      <p>&ldquo;Copyright&rdquo; also means copyright-like laws that apply to other kinds of
-        works, such as semiconductor masks.</p>
-
-      <p>&ldquo;The Program&rdquo; refers to any copyrightable work licensed under this
-        License.  Each licensee is addressed as &ldquo;you&rdquo;.  &ldquo;Licensees&rdquo; and
-        &ldquo;recipients&rdquo; may be individuals or organizations.</p>
-
-      <p>To &ldquo;modify&rdquo; a work means to copy from or adapt all or part of the work
-        in a fashion requiring copyright permission, other than the making of an
-        exact copy.  The resulting work is called a &ldquo;modified version&rdquo; of the
-        earlier work or a work &ldquo;based on&rdquo; the earlier work.</p>
-
-      <p>A &ldquo;covered work&rdquo; means either the unmodified Program or a work based
-        on the Program.</p>
-
-      <p>To &ldquo;propagate&rdquo; a work means to do anything with it that, without
-        permission, would make you directly or secondarily liable for
-        infringement under applicable copyright law, except executing it on a
-        computer or modifying a private copy.  Propagation includes copying,
-        distribution (with or without modification), making available to the
-        public, and in some countries other activities as well.</p>
-
-      <p>To &ldquo;convey&rdquo; a work means any kind of propagation that enables other
-        parties to make or receive copies.  Mere interaction with a user through
-        a computer network, with no transfer of a copy, is not conveying.</p>
-
-      <p>An interactive user interface displays &ldquo;Appropriate Legal Notices&rdquo;
-        to the extent that it includes a convenient and prominently visible
-        feature that (1) displays an appropriate copyright notice, and (2)
-        tells the user that there is no warranty for the work (except to the
-        extent that warranties are provided), that licensees may convey the
-        work under this License, and how to view a copy of this License.  If
-        the interface presents a list of user commands or options, such as a
-        menu, a prominent item in the list meets this criterion.</p>
-
-      <h4><a name="section1"></a>1. Source Code.</h4>
-
-      <p>The &ldquo;source code&rdquo; for a work means the preferred form of the work
-        for making modifications to it.  &ldquo;Object code&rdquo; means any non-source
-        form of a work.</p>
-
-      <p>A &ldquo;Standard Interface&rdquo; means an interface that either is an official
-        standard defined by a recognized standards body, or, in the case of
-        interfaces specified for a particular programming language, one that
-        is widely used among developers working in that language.</p>
-
-      <p>The &ldquo;System Libraries&rdquo; of an executable work include anything, other
-        than the work as a whole, that (a) is included in the normal form of
-        packaging a Major Component, but which is not part of that Major
-        Component, and (b) serves only to enable use of the work with that
-        Major Component, or to implement a Standard Interface for which an
-        implementation is available to the public in source code form.  A
-        &ldquo;Major Component&rdquo;, in this context, means a major essential component
-        (kernel, window system, and so on) of the specific operating system
-        (if any) on which the executable work runs, or a compiler used to
-        produce the work, or an object code interpreter used to run it.</p>
-
-      <p>The &ldquo;Corresponding Source&rdquo; for a work in object code form means all
-        the source code needed to generate, install, and (for an executable
-        work) run the object code and to modify the work, including scripts to
-        control those activities.  However, it does not include the work's
-        System Libraries, or general-purpose tools or generally available free
-        programs which are used unmodified in performing those activities but
-        which are not part of the work.  For example, Corresponding Source
-        includes interface definition files associated with source files for
-        the work, and the source code for shared libraries and dynamically
-        linked subprograms that the work is specifically designed to require,
-        such as by intimate data communication or control flow between those
-        subprograms and other parts of the work.</p>
-
-      <p>The Corresponding Source need not include anything that users
-        can regenerate automatically from other parts of the Corresponding
-        Source.</p>
-
-      <p>The Corresponding Source for a work in source code form is that
-        same work.</p>
-
-      <h4><a name="section2"></a>2. Basic Permissions.</h4>
-
-      <p>All rights granted under this License are granted for the term of
-        copyright on the Program, and are irrevocable provided the stated
-        conditions are met.  This License explicitly affirms your unlimited
-        permission to run the unmodified Program.  The output from running a
-        covered work is covered by this License only if the output, given its
-        content, constitutes a covered work.  This License acknowledges your
-        rights of fair use or other equivalent, as provided by copyright law.</p>
-
-      <p>You may make, run and propagate covered works that you do not
-        convey, without conditions so long as your license otherwise remains
-        in force.  You may convey covered works to others for the sole purpose
-        of having them make modifications exclusively for you, or provide you
-        with facilities for running those works, provided that you comply with
-        the terms of this License in conveying all material for which you do
-        not control copyright.  Those thus making or running the covered works
-        for you must do so exclusively on your behalf, under your direction
-        and control, on terms that prohibit them from making any copies of
-        your copyrighted material outside their relationship with you.</p>
-
-      <p>Conveying under any other circumstances is permitted solely under
-        the conditions stated below.  Sublicensing is not allowed; section 10
-        makes it unnecessary.</p>
-
-      <h4><a name="section3"></a>3. Protecting Users' Legal Rights From Anti-Circumvention Law.</h4>
-
-      <p>No covered work shall be deemed part of an effective technological
-        measure under any applicable law fulfilling obligations under article
-        11 of the WIPO copyright treaty adopted on 20 December 1996, or
-        similar laws prohibiting or restricting circumvention of such
-        measures.</p>
-
-      <p>When you convey a covered work, you waive any legal power to forbid
-        circumvention of technological measures to the extent such circumvention
-        is effected by exercising rights under this License with respect to
-        the covered work, and you disclaim any intention to limit operation or
-        modification of the work as a means of enforcing, against the work's
-        users, your or third parties' legal rights to forbid circumvention of
-        technological measures.</p>
-
-      <h4><a name="section4"></a>4. Conveying Verbatim Copies.</h4>
-
-      <p>You may convey verbatim copies of the Program's source code as you
-        receive it, in any medium, provided that you conspicuously and
-        appropriately publish on each copy an appropriate copyright notice;
-        keep intact all notices stating that this License and any
-        non-permissive terms added in accord with section 7 apply to the code;
-        keep intact all notices of the absence of any warranty; and give all
-        recipients a copy of this License along with the Program.</p>
-
-      <p>You may charge any price or no price for each copy that you convey,
-        and you may offer support or warranty protection for a fee.</p>
-
-      <h4><a name="section5"></a>5. Conveying Modified Source Versions.</h4>
-
-      <p>You may convey a work based on the Program, or the modifications to
-        produce it from the Program, in the form of source code under the
-        terms of section 4, provided that you also meet all of these conditions:</p>
-
-      <ul>
-        <li>a) The work must carry prominent notices stating that you modified
-          it, and giving a relevant date.</li>
-
-        <li>b) The work must carry prominent notices stating that it is
-          released under this License and any conditions added under section
-          7.  This requirement modifies the requirement in section 4 to
-          &ldquo;keep intact all notices&rdquo;.</li>
-
-        <li>c) You must license the entire work, as a whole, under this
-          License to anyone who comes into possession of a copy.  This
-          License will therefore apply, along with any applicable section 7
-          additional terms, to the whole of the work, and all its parts,
-          regardless of how they are packaged.  This License gives no
-          permission to license the work in any other way, but it does not
-          invalidate such permission if you have separately received it.</li>
-
-        <li>d) If the work has interactive user interfaces, each must display
-          Appropriate Legal Notices; however, if the Program has interactive
-          interfaces that do not display Appropriate Legal Notices, your
-          work need not make them do so.</li>
-      </ul>
-
-      <p>A compilation of a covered work with other separate and independent
-        works, which are not by their nature extensions of the covered work,
-        and which are not combined with it such as to form a larger program,
-        in or on a volume of a storage or distribution medium, is called an
-        &ldquo;aggregate&rdquo; if the compilation and its resulting copyright are not
-        used to limit the access or legal rights of the compilation's users
-        beyond what the individual works permit.  Inclusion of a covered work
-        in an aggregate does not cause this License to apply to the other
-        parts of the aggregate.</p>
-
-      <h4><a name="section6"></a>6. Conveying Non-Source Forms.</h4>
-
-      <p>You may convey a covered work in object code form under the terms
-        of sections 4 and 5, provided that you also convey the
-        machine-readable Corresponding Source under the terms of this License,
-        in one of these ways:</p>
-
-      <ul>
-        <li>a) Convey the object code in, or embodied in, a physical product
-          (including a physical distribution medium), accompanied by the
-          Corresponding Source fixed on a durable physical medium
-          customarily used for software interchange.</li>
-
-        <li>b) Convey the object code in, or embodied in, a physical product
-          (including a physical distribution medium), accompanied by a
-          written offer, valid for at least three years and valid for as
-          long as you offer spare parts or customer support for that product
-          model, to give anyone who possesses the object code either (1) a
-          copy of the Corresponding Source for all the software in the
-          product that is covered by this License, on a durable physical
-          medium customarily used for software interchange, for a price no
-          more than your reasonable cost of physically performing this
-          conveying of source, or (2) access to copy the
-          Corresponding Source from a network server at no charge.</li>
-
-        <li>c) Convey individual copies of the object code with a copy of the
-          written offer to provide the Corresponding Source.  This
-          alternative is allowed only occasionally and noncommercially, and
-          only if you received the object code with such an offer, in accord
-          with subsection 6b.</li>
-
-        <li>d) Convey the object code by offering access from a designated
-          place (gratis or for a charge), and offer equivalent access to the
-          Corresponding Source in the same way through the same place at no
-          further charge.  You need not require recipients to copy the
-          Corresponding Source along with the object code.  If the place to
-          copy the object code is a network server, the Corresponding Source
-          may be on a different server (operated by you or a third party)
-          that supports equivalent copying facilities, provided you maintain
-          clear directions next to the object code saying where to find the
-          Corresponding Source.  Regardless of what server hosts the
-          Corresponding Source, you remain obligated to ensure that it is
-          available for as long as needed to satisfy these requirements.</li>
-
-        <li>e) Convey the object code using peer-to-peer transmission, provided
-          you inform other peers where the object code and Corresponding
-          Source of the work are being offered to the general public at no
-          charge under subsection 6d.</li>
-      </ul>
-
-      <p>A separable portion of the object code, whose source code is excluded
-        from the Corresponding Source as a System Library, need not be
-        included in conveying the object code work.</p>
-
-      <p>A &ldquo;User Product&rdquo; is either (1) a &ldquo;consumer product&rdquo;, which means any
-        tangible personal property which is normally used for personal, family,
-        or household purposes, or (2) anything designed or sold for incorporation
-        into a dwelling.  In determining whether a product is a consumer product,
-        doubtful cases shall be resolved in favor of coverage.  For a particular
-        product received by a particular user, &ldquo;normally used&rdquo; refers to a
-        typical or common use of that class of product, regardless of the status
-        of the particular user or of the way in which the particular user
-        actually uses, or expects or is expected to use, the product.  A product
-        is a consumer product regardless of whether the product has substantial
-        commercial, industrial or non-consumer uses, unless such uses represent
-        the only significant mode of use of the product.</p>
-
-      <p>&ldquo;Installation Information&rdquo; for a User Product means any methods,
-        procedures, authorization keys, or other information required to install
-        and execute modified versions of a covered work in that User Product from
-        a modified version of its Corresponding Source.  The information must
-        suffice to ensure that the continued functioning of the modified object
-        code is in no case prevented or interfered with solely because
-        modification has been made.</p>
-
-      <p>If you convey an object code work under this section in, or with, or
-        specifically for use in, a User Product, and the conveying occurs as
-        part of a transaction in which the right of possession and use of the
-        User Product is transferred to the recipient in perpetuity or for a
-        fixed term (regardless of how the transaction is characterized), the
-        Corresponding Source conveyed under this section must be accompanied
-        by the Installation Information.  But this requirement does not apply
-        if neither you nor any third party retains the ability to install
-        modified object code on the User Product (for example, the work has
-        been installed in ROM).</p>
-
-      <p>The requirement to provide Installation Information does not include a
-        requirement to continue to provide support service, warranty, or updates
-        for a work that has been modified or installed by the recipient, or for
-        the User Product in which it has been modified or installed.  Access to a
-        network may be denied when the modification itself materially and
-        adversely affects the operation of the network or violates the rules and
-        protocols for communication across the network.</p>
-
-      <p>Corresponding Source conveyed, and Installation Information provided,
-        in accord with this section must be in a format that is publicly
-        documented (and with an implementation available to the public in
-        source code form), and must require no special password or key for
-        unpacking, reading or copying.</p>
-
-      <h4><a name="section7"></a>7. Additional Terms.</h4>
-
-      <p>&ldquo;Additional permissions&rdquo; are terms that supplement the terms of this
-        License by making exceptions from one or more of its conditions.
-        Additional permissions that are applicable to the entire Program shall
-        be treated as though they were included in this License, to the extent
-        that they are valid under applicable law.  If additional permissions
-        apply only to part of the Program, that part may be used separately
-        under those permissions, but the entire Program remains governed by
-        this License without regard to the additional permissions.</p>
-
-      <p>When you convey a copy of a covered work, you may at your option
-        remove any additional permissions from that copy, or from any part of
-        it.  (Additional permissions may be written to require their own
-        removal in certain cases when you modify the work.)  You may place
-        additional permissions on material, added by you to a covered work,
-        for which you have or can give appropriate copyright permission.</p>
-
-      <p>Notwithstanding any other provision of this License, for material you
-        add to a covered work, you may (if authorized by the copyright holders of
-        that material) supplement the terms of this License with terms:</p>
-
-      <ul>
-        <li>a) Disclaiming warranty or limiting liability differently from the
-          terms of sections 15 and 16 of this License; or</li>
-
-        <li>b) Requiring preservation of specified reasonable legal notices or
-          author attributions in that material or in the Appropriate Legal
-          Notices displayed by works containing it; or</li>
-
-        <li>c) Prohibiting misrepresentation of the origin of that material, or
-          requiring that modified versions of such material be marked in
-          reasonable ways as different from the original version; or</li>
-
-        <li>d) Limiting the use for publicity purposes of names of licensors or
-          authors of the material; or</li>
-
-        <li>e) Declining to grant rights under trademark law for use of some
-          trade names, trademarks, or service marks; or</li>
-
-        <li>f) Requiring indemnification of licensors and authors of that
-          material by anyone who conveys the material (or modified versions of
-          it) with contractual assumptions of liability to the recipient, for
-          any liability that these contractual assumptions directly impose on
-          those licensors and authors.</li>
-      </ul>
-
-      <p>All other non-permissive additional terms are considered &ldquo;further
-        restrictions&rdquo; within the meaning of section 10.  If the Program as you
-        received it, or any part of it, contains a notice stating that it is
-        governed by this License along with a term that is a further
-        restriction, you may remove that term.  If a license document contains
-        a further restriction but permits relicensing or conveying under this
-        License, you may add to a covered work material governed by the terms
-        of that license document, provided that the further restriction does
-        not survive such relicensing or conveying.</p>
-
-      <p>If you add terms to a covered work in accord with this section, you
-        must place, in the relevant source files, a statement of the
-        additional terms that apply to those files, or a notice indicating
-        where to find the applicable terms.</p>
-
-      <p>Additional terms, permissive or non-permissive, may be stated in the
-        form of a separately written license, or stated as exceptions;
-        the above requirements apply either way.</p>
-
-      <h4><a name="section8"></a>8. Termination.</h4>
-
-      <p>You may not propagate or modify a covered work except as expressly
-        provided under this License.  Any attempt otherwise to propagate or
-        modify it is void, and will automatically terminate your rights under
-        this License (including any patent licenses granted under the third
-        paragraph of section 11).</p>
-
-      <p>However, if you cease all violation of this License, then your
-        license from a particular copyright holder is reinstated (a)
-        provisionally, unless and until the copyright holder explicitly and
-        finally terminates your license, and (b) permanently, if the copyright
-        holder fails to notify you of the violation by some reasonable means
-        prior to 60 days after the cessation.</p>
-
-      <p>Moreover, your license from a particular copyright holder is
-        reinstated permanently if the copyright holder notifies you of the
-        violation by some reasonable means, this is the first time you have
-        received notice of violation of this License (for any work) from that
-        copyright holder, and you cure the violation prior to 30 days after
-        your receipt of the notice.</p>
-
-      <p>Termination of your rights under this section does not terminate the
-        licenses of parties who have received copies or rights from you under
-        this License.  If your rights have been terminated and not permanently
-        reinstated, you do not qualify to receive new licenses for the same
-        material under section 10.</p>
-
-      <h4><a name="section9"></a>9. Acceptance Not Required for Having Copies.</h4>
-
-      <p>You are not required to accept this License in order to receive or
-        run a copy of the Program.  Ancillary propagation of a covered work
-        occurring solely as a consequence of using peer-to-peer transmission
-        to receive a copy likewise does not require acceptance.  However,
-        nothing other than this License grants you permission to propagate or
-        modify any covered work.  These actions infringe copyright if you do
-        not accept this License.  Therefore, by modifying or propagating a
-        covered work, you indicate your acceptance of this License to do so.</p>
-
-      <h4><a name="section10"></a>10. Automatic Licensing of Downstream Recipients.</h4>
-
-      <p>Each time you convey a covered work, the recipient automatically
-        receives a license from the original licensors, to run, modify and
-        propagate that work, subject to this License.  You are not responsible
-        for enforcing compliance by third parties with this License.</p>
-
-      <p>An &ldquo;entity transaction&rdquo; is a transaction transferring control of an
-        organization, or substantially all assets of one, or subdividing an
-        organization, or merging organizations.  If propagation of a covered
-        work results from an entity transaction, each party to that
-        transaction who receives a copy of the work also receives whatever
-        licenses to the work the party's predecessor in interest had or could
-        give under the previous paragraph, plus a right to possession of the
-        Corresponding Source of the work from the predecessor in interest, if
-        the predecessor has it or can get it with reasonable efforts.</p>
-
-      <p>You may not impose any further restrictions on the exercise of the
-        rights granted or affirmed under this License.  For example, you may
-        not impose a license fee, royalty, or other charge for exercise of
-        rights granted under this License, and you may not initiate litigation
-        (including a cross-claim or counterclaim in a lawsuit) alleging that
-        any patent claim is infringed by making, using, selling, offering for
-        sale, or importing the Program or any portion of it.</p>
-
-      <h4><a name="section11"></a>11. Patents.</h4>
-
-      <p>A &ldquo;contributor&rdquo; is a copyright holder who authorizes use under this
-        License of the Program or a work on which the Program is based.  The
-        work thus licensed is called the contributor's &ldquo;contributor version&rdquo;.</p>
-
-      <p>A contributor's &ldquo;essential patent claims&rdquo; are all patent claims
-        owned or controlled by the contributor, whether already acquired or
-        hereafter acquired, that would be infringed by some manner, permitted
-        by this License, of making, using, or selling its contributor version,
-        but do not include claims that would be infringed only as a
-        consequence of further modification of the contributor version.  For
-        purposes of this definition, &ldquo;control&rdquo; includes the right to grant
-        patent sublicenses in a manner consistent with the requirements of
-        this License.</p>
-
-      <p>Each contributor grants you a non-exclusive, worldwide, royalty-free
-        patent license under the contributor's essential patent claims, to
-        make, use, sell, offer for sale, import and otherwise run, modify and
-        propagate the contents of its contributor version.</p>
-
-      <p>In the following three paragraphs, a &ldquo;patent license&rdquo; is any express
-        agreement or commitment, however denominated, not to enforce a patent
-        (such as an express permission to practice a patent or covenant not to
-        sue for patent infringement).  To &ldquo;grant&rdquo; such a patent license to a
-        party means to make such an agreement or commitment not to enforce a
-        patent against the party.</p>
-
-      <p>If you convey a covered work, knowingly relying on a patent license,
-        and the Corresponding Source of the work is not available for anyone
-        to copy, free of charge and under the terms of this License, through a
-        publicly available network server or other readily accessible means,
-        then you must either (1) cause the Corresponding Source to be so
-        available, or (2) arrange to deprive yourself of the benefit of the
-        patent license for this particular work, or (3) arrange, in a manner
-        consistent with the requirements of this License, to extend the patent
-        license to downstream recipients.  &ldquo;Knowingly relying&rdquo; means you have
-        actual knowledge that, but for the patent license, your conveying the
-        covered work in a country, or your recipient's use of the covered work
-        in a country, would infringe one or more identifiable patents in that
-        country that you have reason to believe are valid.</p>
-
-      <p>If, pursuant to or in connection with a single transaction or
-        arrangement, you convey, or propagate by procuring conveyance of, a
-        covered work, and grant a patent license to some of the parties
-        receiving the covered work authorizing them to use, propagate, modify
-        or convey a specific copy of the covered work, then the patent license
-        you grant is automatically extended to all recipients of the covered
-        work and works based on it.</p>
-
-      <p>A patent license is &ldquo;discriminatory&rdquo; if it does not include within
-        the scope of its coverage, prohibits the exercise of, or is
-        conditioned on the non-exercise of one or more of the rights that are
-        specifically granted under this License.  You may not convey a covered
-        work if you are a party to an arrangement with a third party that is
-        in the business of distributing software, under which you make payment
-        to the third party based on the extent of your activity of conveying
-        the work, and under which the third party grants, to any of the
-        parties who would receive the covered work from you, a discriminatory
-        patent license (a) in connection with copies of the covered work
-        conveyed by you (or copies made from those copies), or (b) primarily
-        for and in connection with specific products or compilations that
-        contain the covered work, unless you entered into that arrangement,
-        or that patent license was granted, prior to 28 March 2007.</p>
-
-      <p>Nothing in this License shall be construed as excluding or limiting
-        any implied license or other defenses to infringement that may
-        otherwise be available to you under applicable patent law.</p>
-
-      <h4><a name="section12"></a>12. No Surrender of Others' Freedom.</h4>
-
-      <p>If conditions are imposed on you (whether by court order, agreement or
-        otherwise) that contradict the conditions of this License, they do not
-        excuse you from the conditions of this License.  If you cannot convey a
-        covered work so as to satisfy simultaneously your obligations under this
-        License and any other pertinent obligations, then as a consequence you may
-        not convey it at all.  For example, if you agree to terms that obligate you
-        to collect a royalty for further conveying from those to whom you convey
-        the Program, the only way you could satisfy both those terms and this
-        License would be to refrain entirely from conveying the Program.</p>
-
-      <h4><a name="section13"></a>13. Use with the GNU Affero General Public License.</h4>
-
-      <p>Notwithstanding any other provision of this License, you have
-        permission to link or combine any covered work with a work licensed
-        under version 3 of the GNU Affero General Public License into a single
-        combined work, and to convey the resulting work.  The terms of this
-        License will continue to apply to the part which is the covered work,
-        but the special requirements of the GNU Affero General Public License,
-        section 13, concerning interaction through a network will apply to the
-        combination as such.</p>
-
-      <h4><a name="section14"></a>14. Revised Versions of this License.</h4>
-
-      <p>The Free Software Foundation may publish revised and/or new versions of
-        the GNU General Public License from time to time.  Such new versions will
-        be similar in spirit to the present version, but may differ in detail to
-        address new problems or concerns.</p>
-
-      <p>Each version is given a distinguishing version number.  If the
-        Program specifies that a certain numbered version of the GNU General
-        Public License &ldquo;or any later version&rdquo; applies to it, you have the
-        option of following the terms and conditions either of that numbered
-        version or of any later version published by the Free Software
-        Foundation.  If the Program does not specify a version number of the
-        GNU General Public License, you may choose any version ever published
-        by the Free Software Foundation.</p>
-
-      <p>If the Program specifies that a proxy can decide which future
-        versions of the GNU General Public License can be used, that proxy's
-        public statement of acceptance of a version permanently authorizes you
-        to choose that version for the Program.</p>
-
-      <p>Later license versions may give you additional or different
-        permissions.  However, no additional obligations are imposed on any
-        author or copyright holder as a result of your choosing to follow a
-        later version.</p>
-
-      <h4><a name="section15"></a>15. Disclaimer of Warranty.</h4>
-
-      <p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-        APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-        HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; WITHOUT WARRANTY
-        OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-        THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-        PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-        IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-        ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p>
-
-      <h4><a name="section16"></a>16. Limitation of Liability.</h4>
-
-      <p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-        WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-        THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-        GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-        USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-        DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-        PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-        EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-        SUCH DAMAGES.</p>
-
-      <h4><a name="section17"></a>17. Interpretation of Sections 15 and 16.</h4>
-
-      <p>If the disclaimer of warranty and limitation of liability provided
-        above cannot be given local legal effect according to their terms,
-        reviewing courts shall apply local law that most closely approximates
-        an absolute waiver of all civil liability in connection with the
-        Program, unless a warranty or assumption of liability accompanies a
-        copy of the Program in return for a fee.</p>
-
-      <p>END OF TERMS AND CONDITIONS</p>
-
-      <h3><a name="howto"></a>How to Apply These Terms to Your New Programs</h3>
-
-      <p>If you develop a new program, and you want it to be of the greatest
-        possible use to the public, the best way to achieve this is to make it
-        free software which everyone can redistribute and change under these terms.</p>
-
-      <p>To do so, attach the following notices to the program.  It is safest
-        to attach them to the start of each source file to most effectively
-        state the exclusion of warranty; and each file should have at least
-        the &ldquo;copyright&rdquo; line and a pointer to where the full notice is found.</p>
-
-      <pre>    &lt;one line to give the program's name and a brief idea of what it does.&gt;
-    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see &lt;https://www.gnu.org/licenses/&gt;.
-      </pre>
-
-      <p>Also add information on how to contact you by electronic and paper mail.</p>
-
-      <p>If the program does terminal interaction, make it output a short
-        notice like this when it starts in an interactive mode:</p>
-
-      <pre>    &lt;program&gt;  Copyright (C) &lt;year&gt;  &lt;name of author&gt;
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-      </pre>
-
-      <p>The hypothetical commands `show w' and `show c' should show the appropriate
-        parts of the General Public License.  Of course, your program's commands
-        might be different; for a GUI interface, you would use an &ldquo;about box&rdquo;.</p>
-
-      <p>You should also get your employer (if you work as a programmer) or school,
-        if any, to sign a &ldquo;copyright disclaimer&rdquo; for the program, if necessary.
-        For more information on this, and how to apply and follow the GNU GPL, see
-        &lt;<a href="https://www.gnu.org/licenses/">https://www.gnu.org/licenses/</a>&gt;.</p>
-
-      <p>The GNU General Public License does not permit incorporating your program
-        into proprietary programs.  If your program is a subroutine library, you
-        may consider it more useful to permit linking proprietary applications with
-        the library.  If this is what you want to do, use the GNU Lesser General
-        Public License instead of this License.  But first, please read
-        &lt;<a href="https://www.gnu.org/licenses/why-not-lgpl.html">https://www.gnu.org/licenses/why-not-lgpl.html</a>&gt;.</p>
-    </main>
-  </body>
-</html>
diff --git a/guix.scm b/guix.scm
deleted file mode 100644 (file)
index c1e02d9..0000000
--- a/guix.scm
+++ /dev/null
@@ -1,73 +0,0 @@
-;;; bandali's personal site, using haunt-next (git)
-;;; Copyright © 2019 Amin Bandali <bandali@gnu.org>
-;;;
-;;; This program is free software: you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation, either version 3 of the License, or
-;;; (at your option) any later version.
-;;;
-;;; This program is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;; To set up a hacking environment:
-;;     guix environment -l guix.scm
-
-(use-modules (guix packages)
-             (guix licenses)
-             (guix git-download)
-             (guix build-system gnu)
-             (guix utils)               ; substitute-keyword-arguments
-             (gnu packages autotools)
-             (gnu packages base)        ; glibc-locales
-             (gnu packages guile)
-             (gnu packages guile-xyz))
-
-(define haunt-next
-  (package
-   (inherit haunt)
-   (source
-    (origin
-     (method git-fetch)
-     (uri (git-reference
-           (url "https://git.dthompson.us/haunt.git")
-           (commit "65adbb052f7d27c382b7f9f3c665635aeab96a02")))
-     (sha256
-      (base32
-       "19vybz0hczjxj3npznnams5740vqi1gsdsyjiqpy241f783f4i83"))))
-   (arguments
-    (substitute-keyword-arguments (package-arguments haunt)
-      ((#:phases phases)
-       `(modify-phases ,phases
-          (add-before 'configure 'bootstrap
-            (lambda _
-              (zero? (system* "./bootstrap"))))))))
-   (native-inputs
-    `(("autoconf" ,autoconf)            ; autoreconf
-      ("automake" ,automake)            ; aclocal
-      ,@(package-native-inputs haunt)))
-   (propagated-inputs
-    `(("glibc-locales" ,glibc-locales)  ; setlocale-related runtime error
-      ,@(package-propagated-inputs haunt)))))
-
-(package
- (name "bandali-site")
- (version "git")
- (source #f)
- (build-system gnu-build-system)
- (synopsis #f)
- (description #f)
- (license gpl3+)
- (home-page "https://bandali.eu.org")
- (inputs
-  `(("guile" ,guile-2.2)))
- (native-inputs
-  `(("haunt" ,haunt-next)
-    ("guile-reader" ,guile-reader)
-    ("guile-sjson" ,guile-sjson)
-    ("guile-commonmark" ,guile-commonmark)
-    ("guile-syntax-highlight" ,guile-syntax-highlight))))
diff --git a/haunt.scm b/haunt.scm
deleted file mode 100644 (file)
index 414ef08..0000000
--- a/haunt.scm
+++ /dev/null
@@ -1,54 +0,0 @@
-;;; Copyright © 2019 Amin Bandali <bandali@gnu.org>
-;;;
-;;; This program is free software; you can redistribute it and/or
-;;; modify it under the terms of the GNU General Public License as
-;;; published by the Free Software Foundation; either version 3 of the
-;;; License, or (at your option) any later version.
-;;;
-;;; This program is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;;; General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with this program. If not, see
-;;; <http://www.gnu.org/licenses/>.
-
-(use-modules (bandali feeds)
-             (bandali pages)
-             (bandali prefs)
-             (bandali tags)
-             (bandali theme)
-             (haunt builder blog)
-             (haunt builder assets)
-             (haunt post)
-             (haunt reader commonmark)
-             (haunt site))
-
-(site #:title "Amin Bandali"
-      #:scheme my-scheme                ; requires haunt-next
-      #:domain my-domain
-      #:default-metadata
-      '((author . "Amin Bandali")
-        (email  . "bandali@gnu.org")
-        (domain . my-domain))
-      #:readers (list commonmark-reader)
-      #:builders (list (blog #:theme bandali-theme
-                             #:collections
-                             `(("Notes" "notes.html"
-                                ,posts/reverse-chronological)))
-                       (tag-pages)
-                       index-page
-                       (atom-feed
-                        #:file-name "notes.atom")
-                       (atom-feeds-by-tag
-                        #:prefix my-tag-prefix)
-                       (rss-feed
-                        #:file-name "notes.rss")
-                       (rss-feeds-by-tag
-                        #:prefix my-tag-prefix)
-                       contact-page
-                       cv-page
-                       license-page
-                       se212-f19-page
-                       (static-directory "static" "")))
diff --git a/header.html b/header.html
new file mode 100644 (file)
index 0000000..e371576
--- /dev/null
@@ -0,0 +1,46 @@
+ifdef(`__feed',
+`<entry xml:base="https://bandali.eu.org">
+<author><name>Amin Bandali</name></author>
+<id>tag:bandali.eu.org,2016:__slug</id>
+<published>__pub</published>
+<updated>__upd</updated>
+<link href="https://bandali.eu.org/__slug" rel="alternate" type="text/html"/>
+<title>__title</title>
+<content type="html">',
+`<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<meta name="author" content="Amin Bandali"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>__title`'ifdef(`__nts',,` &mdash; Amin Bandali')</title>
+<link rel="alternate" href="/atom.xml" type="application/atom+xml"/>
+<link rel="icon" href="/gnu.ico"/>
+<link rel="stylesheet" href="/style.css"/>
+<link rel="index" href="/"/>
+ifdef(`__pub',
+`ifdef(`__first',,`<link rel="prev" href="/decr(__id)">')'
+`ifdef(`__last',,`<link rel="next" href="/incr(__id)">')')
+</head>
+<body>
+<header>
+ifelse(__slug,`home',`<h1>__title</h1>',
+`<strong><a href="/">Amin Bandali</a>&apos;s Personal Site</strong>')
+</header>
+<nav>
+<ul>
+<li><a href="/#papers">Publications</a></li>
+<li><a href="/#projects">Projects</a></li>
+<li><a href="/#notes">Notes</a></li>
+<li><a href="/cv" title="curriculum vitae">CV</a></li>
+<li><a href="/contact">Contact</a></li>
+</ul>
+</nav>
+<main>
+ifdef(`__pub',
+`<article>
+<header>
+<h1>__title</h1>
+<p>Published on syscmd(date "-d __pub" "+%B %e`,' %Y")`'ifdef(`__upd',`<br/>
+Last updated on syscmd(date "-d __upd" "+%B %e`,' %Y")')</p>
+</header>')')
diff --git a/icon-12px.png b/icon-12px.png
deleted file mode 100644 (file)
index 3fe8b0a..0000000
Binary files a/icon-12px.png and /dev/null differ
diff --git a/icon-16px.png b/icon-16px.png
deleted file mode 100644 (file)
index 1151f76..0000000
Binary files a/icon-16px.png and /dev/null differ
diff --git a/index.html b/index.html
deleted file mode 100644 (file)
index a1f7823..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-<!--# set var="title" value="Amin Bandali's Personal Site" -->
-<!--# set var="nts" value="true" -->
-<!--# include virtual="/ssi/pre.html" -->
-<section id="intro">
-<p>Hi, I'm Amin.  I am currently a graduate student at the
-<a href="//watform.uwaterloo.ca">Waterloo Formal Methods</a>
-group at the University of Waterloo, supervised by
-<a href="//cs.uwaterloo.ca/~nday/">Nancy&nbsp;Day</a>.
-The main goal of my research is
-improving <strong>software and systems reliability</strong>
-through application of
-<a href="//en.wikipedia.org/wiki/Formal_methods">formal methods</a>.</p>
-
-<p>My research at WatForm focuses on formal logic, model checking, and
-verification.  I am also interested in programming languages, proof
-assistants, and their type systems.</p>
-
-<p>On the side, I enjoy
-<a href="//stallman.org/articles/on-hacking.html">hacking</a> on
-<a href="//www.gnu.org/software/emacs/manual/elisp.html">elisp</a>
-and <a href="//www.gnu.org/software/guile/">guile</a>.  I am a
-GNU <a href="//www.gnu.org/people/#bandali">maintainer</a>,
-<a href="//www.gnu.org/people/webmeisters.html#bandali">webmaster</a>,
-and <a href="//savanna.gnu.org/maintenance/SavannahHacker/">Savannah
-hacker</a>.  I am also a
-<a href="//www.gnu.org/philosophy/free-sw.html">free software</a>
-activist, and an <a href="//www.fsf.org/associate/">associate
-member</a> of the <a href="///www.fsf.org">Free Software
-Foundation</a>.  I'm the chief organizer of
-the <a href="//emacsconf.org">EmacsConf</a> conference, and the
-co-host of the <a href="//emacsel.com">Emacs.el</a> podcast with
-<a href="//www.pygopar.com">Daniel Gopar</a>.  I am also a member of
-the Systems Committee of the
-<a href="//csclub.uwaterloo.ca">Computer Science Club</a> of the
-University of Waterloo.</p>
-</section>
-
-<section id="papers">
-<h2>Papers</h2>
-<dl>
-<dt>A Comparison of the Declarative Modelling Languages B, DASH, and
-TLA<sup>+</sup>
-<small>
-[ <a href="papers/modre2018-declarative.pdf">pdf</a>
-| <a href="papers/modre2018-declarative.bib">bib</a>
-]
-</small>
-</dt>
-<dd>
-Ali Abbassi, <a href="//bandali.eu.org">Amin Bandali</a>,
-<a href="//cs.uwaterloo.ca/~nday/">Nancy A. Day</a>, Jose Serna<br/>
-<em>2018 IEEE 8th International Model-Driven Requirements Engineering
-Workshop (MoDRE)</em><br/>
-Copyright &copy; 2018 IEEE.  All Rights Reserved.  Sadly.
-</dd>
-</dl>
-</section>
-
-<section id="talks">
-<h2>Talks</h2>
-<dl>
-<dt>The Magic of Specifications and Type Systems
-<small>
-[ <a href="talks/cucsc-2017-slides.pdf"
-     title="presented at the Canadian Undergraduate Computer Science Conference 2017,
-University of Toronto, Canada, June 15–17, 2017">slides</a>
-| <a href="talks/eecs4080-poster.pdf"
-     title="presented at the Lassonde Undergraduate Summer Student Research Conference,
-York University, Toronto, Canada, August 15, 2017">poster</a>
-]
-</small>
-</dt>
-<dd>
-<a href="//bandali.eu.org">Amin Bandali</a>,
-<a href="//github.com/cipher1024">Simon Hudon</a>,
-<a href="//www.cse.yorku.ca/~jonathan/">Jonathan S. Ostroff</a>
-</dd>
-</dl>
-</section>
-
-<section id="projects">
-<h2>Projects</h2>
-<p>Below are a number of free software projects I have worked on:</p>
-<dl>
-<dt><a href="//git.bandali.eu.org/george-mode">george-mode</a></dt>
-<dd>Emacs major mode for editing George files</dd>
-
-<dt><a href="//git.bandali.eu.org/alloy-catalyst">alloy-catalyst</a></dt>
-<dd>Framework for performance analysis of Alloy models</dd>
-
-<dt><a href="//github.com/unitb/unitb-web">unitb-web</a></dt>
-<dd>Web interface for Unit-B</dd>
-
-<dt><a href="//github.com/unitb/tex2png-hs">tex2png-hs</a></dt>
-<dd>Library and CLI for converting TeX and LaTeX to PNG images</dd>
-</dl>
-</section>
-
-<section id="notes">
-<h2>Notes</h2>
-<p>Here are notes about a variety of topics and issues I care
-about.<!--<br/>
-They're also available via
-<a href="notes.atom">
-<img class="feed-icon" src="/icon-12px.png"
-     alt="subscribe to atom feed">Atom</a>
-and
-<a href="notes.rss">
-<img class="feed-icon" src="/icon-12px.png"
-     alt="subscribe to rss feed">RSS</a> feeds.--></p>
-
-<table class="post-list">
-<tbody>
-<tr>
-<td><a href="computing">How I do my Computing</a></td>
-<td><small>September 14, 2019</small></td>
-</tr>
-
-<tr>
-<td><a href="arch-macbook-air">Arch GNU/Linux on MacBook Air 2013</a></td>
-<td><small>November 1, 2016</small></td>
-</tr>
-</tbody>
-</table>
-</section>
-<!--# set var="copy" value="2016&ndash;2019" -->
-<!--# include virtual="/ssi/post.html" -->
diff --git a/index.m4 b/index.m4
new file mode 100644 (file)
index 0000000..54fe7a2
--- /dev/null
+++ b/index.m4
@@ -0,0 +1,129 @@
+dnl -*- html -*-
+define(__title, `Amin Bandali''`s Personal Site')dnl
+define(__slug, `home')dnl
+define(__nts)dnl
+include(header.html)
+<section id="intro">
+<p>Hi, I'm Amin.  I am currently a graduate student at the
+<a href="//watform.uwaterloo.ca">Waterloo Formal Methods</a>
+group at the University of Waterloo, supervised by
+<a href="//cs.uwaterloo.ca/~nday/">Nancy&nbsp;Day</a>.
+The main goal of my research is
+improving <strong>software and systems reliability</strong>
+through application of
+<a href="//en.wikipedia.org/wiki/Formal_methods">formal methods</a>.</p>
+
+<p>My research at WatForm focuses on formal logic, model checking, and
+verification.  I am also interested in programming languages, proof
+assistants, and their type systems.</p>
+
+<p>On the side, I enjoy
+<a href="//stallman.org/articles/on-hacking.html">hacking</a> on
+<a href="//www.gnu.org/software/emacs/manual/elisp.html">elisp</a>
+and <a href="//www.gnu.org/software/guile/">guile</a>.  I am a
+GNU <a href="//www.gnu.org/people/#bandali">maintainer</a>,
+<a href="//www.gnu.org/people/webmeisters.html#bandali">webmaster</a>,
+and <a href="//savanna.gnu.org/maintenance/SavannahHacker/">Savannah
+hacker</a>.  I am also a
+<a href="//www.gnu.org/philosophy/free-sw.html">free software</a>
+activist, and an <a href="//www.fsf.org/associate/">associate
+member</a> of the <a href="///www.fsf.org">Free Software
+Foundation</a>.  I'm the chief organizer of
+the <a href="//emacsconf.org">EmacsConf</a> conference, and the
+co-host of the <a href="//emacsel.com">Emacs.el</a> podcast with
+<a href="//www.pygopar.com">Daniel Gopar</a>.  I am also a member of
+the Systems Committee of the
+<a href="//csclub.uwaterloo.ca">Computer Science Club</a> of the
+University of Waterloo.</p>
+</section>
+
+<section id="papers">
+<h2>Papers</h2>
+<dl>
+<dt>A Comparison of the Declarative Modelling Languages B, DASH, and
+TLA<sup>+</sup>
+<small>
+[ <a href="papers/modre2018-declarative.pdf">pdf</a>
+| <a href="papers/modre2018-declarative.bib">bib</a>
+]
+</small>
+</dt>
+<dd>
+Ali Abbassi, <a href="//bandali.eu.org">Amin Bandali</a>,
+<a href="//cs.uwaterloo.ca/~nday/">Nancy A. Day</a>, Jose Serna<br/>
+<em>2018 IEEE 8th International Model-Driven Requirements Engineering
+Workshop (MoDRE)</em><br/>
+Copyright &copy; 2018 IEEE.  All Rights Reserved.  Sadly.
+</dd>
+</dl>
+</section>
+
+<section id="talks">
+<h2>Talks</h2>
+<dl>
+<dt>The Magic of Specifications and Type Systems
+<small>
+[ <a href="talks/cucsc-2017-slides.pdf"
+     title="presented at the Canadian Undergraduate Computer Science Conference 2017,
+University of Toronto, Canada, June 15–17, 2017">slides</a>
+| <a href="talks/eecs4080-poster.pdf"
+     title="presented at the Lassonde Undergraduate Summer Student Research Conference,
+York University, Toronto, Canada, August 15, 2017">poster</a>
+]
+</small>
+</dt>
+<dd>
+<a href="//bandali.eu.org">Amin Bandali</a>,
+<a href="//github.com/cipher1024">Simon Hudon</a>,
+<a href="//www.cse.yorku.ca/~jonathan/">Jonathan S. Ostroff</a>
+</dd>
+</dl>
+</section>
+
+<section id="projects">
+<h2>Projects</h2>
+<p>Below are a number of free software projects I have worked on:</p>
+<dl>
+<dt><a href="//git.bandali.eu.org/george-mode">george-mode</a></dt>
+<dd>Emacs major mode for editing George files</dd>
+
+<dt><a href="//git.bandali.eu.org/alloy-catalyst">alloy-catalyst</a></dt>
+<dd>Framework for performance analysis of Alloy models</dd>
+
+<dt><a href="//github.com/unitb/unitb-web">unitb-web</a></dt>
+<dd>Web interface for Unit-B</dd>
+
+<dt><a href="//github.com/unitb/tex2png-hs">tex2png-hs</a></dt>
+<dd>Library and CLI for converting TeX and LaTeX to PNG images</dd>
+</dl>
+</section>
+
+<section id="notes">
+<h2>Notes</h2>
+<p>Here are notes about a variety of topics and issues I care
+about.<!--<br/>
+They're also available via
+<a href="notes.atom">
+<img class="feed-icon" src="/icon-12px.png"
+     alt="subscribe to atom feed">Atom</a>
+and
+<a href="notes.rss">
+<img class="feed-icon" src="/icon-12px.png"
+     alt="subscribe to rss feed">RSS</a> feeds.--></p>
+
+<table class="post-list">
+<tbody>
+<tr>
+<td><a href="computing">How I do my Computing</a></td>
+<td><small>September 14, 2019</small></td>
+</tr>
+
+<tr>
+<td><a href="arch-macbook-air">Arch GNU/Linux on MacBook Air 2013</a></td>
+<td><small>November 1, 2016</small></td>
+</tr>
+</tbody>
+</table>
+</section>
+define(__copy, `2016&ndash;2019')dnl
+include(footer.html)
diff --git a/license.html b/license.html
deleted file mode 100644 (file)
index d9df1b6..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--# set var="title" value="Licensing Information" -->
-<!--# include virtual="/ssi/pre.html" -->
-<article>
-<h1>License information for bandali.eu.org</h1>
-<p>I strongly believe in
-<a href="//questioncopyright.org/what_is_free_culture">free culture</a>
-and that all creative works everywhere should be
-<a href="//freedomdefined.org/Definition">free</a>.</p>
-
-<p>Unless otherwise noted, material on this site is licensed under the
-GNU General Public License as published by the Free Software
-Foundation, either version 3 of the License, or (at your option) any
-later version.  A copy of the license is included at
-<a href="gpl-3.0.html">gpl-3.0.html</a>.</p>
-
-<p>Some resources on free software and licenses:</p>
-<ul>
-<li><a href="//www.gnu.org/philosophy/free-sw.html">What is free software?</a></li>
-<li><a href="//www.gnu.org/licenses/license-list.html">Various Licenses and Comments about Them</a></li>
-<li><a href="//www.gnu.org/proprietary/proprietary.html">Proprietary Software Is Often Malware</a></li>
-</ul>
-</article>
-<!--# set var="copy" value="2019" -->
-<!--# include virtual="/ssi/post.html" -->
diff --git a/license.m4 b/license.m4
new file mode 100644 (file)
index 0000000..1cf8818
--- /dev/null
@@ -0,0 +1,26 @@
+dnl -*- html -*-
+define(__title, `Licensing Information')dnl
+define(__slug, `license')dnl
+include(header.html)
+<article>
+<h1>License information for bandali.eu.org</h1>
+<p>I strongly believe in
+<a href="//questioncopyright.org/what_is_free_culture">free culture</a>
+and that all creative works everywhere should be
+<a href="//freedomdefined.org/Definition">free</a>.</p>
+
+<p>Unless otherwise noted, material on this site is licensed under the
+GNU General Public License as published by the Free Software
+Foundation, either version 3 of the License, or (at your option) any
+later version.  A copy of the license is included at
+<a href="gpl-3.0.html">gpl-3.0.html</a>.</p>
+
+<p>Some resources on free software and licenses:</p>
+<ul>
+<li><a href="//www.gnu.org/philosophy/free-sw.html">What is free software?</a></li>
+<li><a href="//www.gnu.org/licenses/license-list.html">Various Licenses and Comments about Them</a></li>
+<li><a href="//www.gnu.org/proprietary/proprietary.html">Proprietary Software Is Often Malware</a></li>
+</ul>
+</article>
+define(__copy, `2019')dnl
+include(footer.html)
diff --git a/se212-f19/se212-h02q04d-soln.grg b/se212-f19/se212-h02q04d-soln.grg
deleted file mode 100644 (file)
index e395717..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#u abandali
-#a h02
-
-#q q04d
-
-p <=> q, p & q <=> (p | q)
-
-#check TP
-
-p <=> q  <->  p & q <=> (p | q)
-
- 1) p & q             <=> (p | q)
- 2) (p & q   => p | q) &  (p | q => p & q)                by equiv
- 3) (!(p & q) | p | q) & (!(p | q) | p & q)               by impl * 2
- 4) (!p | !q  | p | q) & (!(p | q) | p & q)               by dm
- 5) (true | !q | q)    & (!(p | q) | p & q)               by lem
- 6) true               & (!(p | q) | p & q)               by simp1
- 7)                       !(p | q) | p & q                by simp1
- 8)                       !p & !q  | p & q                by dm
- 9)                  (!p & !q | p) & (!p & !q | q)        by distr
-10)            (!p | p) & (!q | p) & (!p | q) & (!q | q)  by distr * 2
-11)                true & (!q | p) & (!p | q) & true      by lem * 2
-12)                       (!q | p) & (!p | q)             by simp1 * 2
-13)                       (q => p) & (p => q)             by impl * 2
-14)                       p <=> q                         by equiv
diff --git a/se212-f19/se212-t01.html b/se212-f19/se212-t01.html
deleted file mode 100644 (file)
index d81cbd7..0000000
+++ /dev/null
@@ -1,343 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-<head>
-<!-- 2019-09-18 Wed 23:12 -->
-<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-<meta name="viewport" content="width=device-width, initial-scale=1" />
-<title>Propositional Logic</title>
-<meta name="generator" content="Org mode" />
-<meta name="author" content="Amin Bandali" />
-<style type="text/css">
- <!--/*--><![CDATA[/*><!--*/
-  .title  { text-align: center;
-             margin-bottom: .2em; }
-  .subtitle { text-align: center;
-              font-size: medium;
-              font-weight: bold;
-              margin-top:0; }
-  .todo   { font-family: monospace; color: red; }
-  .done   { font-family: monospace; color: green; }
-  .priority { font-family: monospace; color: orange; }
-  .tag    { background-color: #eee; font-family: monospace;
-            padding: 2px; font-size: 80%; font-weight: normal; }
-  .timestamp { color: #bebebe; }
-  .timestamp-kwd { color: #5f9ea0; }
-  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
-  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
-  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
-  .underline { text-decoration: underline; }
-  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
-  p.verse { margin-left: 3%; }
-  pre {
-    border: 1px solid #ccc;
-    box-shadow: 3px 3px 3px #eee;
-    padding: 8pt;
-    font-family: monospace;
-    overflow: auto;
-    margin: 1.2em;
-  }
-  pre.src {
-    position: relative;
-    overflow: visible;
-    padding-top: 1.2em;
-  }
-  pre.src:before {
-    display: none;
-    position: absolute;
-    background-color: white;
-    top: -10px;
-    right: 10px;
-    padding: 3px;
-    border: 1px solid black;
-  }
-  pre.src:hover:before { display: inline;}
-  /* Languages per Org manual */
-  pre.src-asymptote:before { content: 'Asymptote'; }
-  pre.src-awk:before { content: 'Awk'; }
-  pre.src-C:before { content: 'C'; }
-  /* pre.src-C++ doesn't work in CSS */
-  pre.src-clojure:before { content: 'Clojure'; }
-  pre.src-css:before { content: 'CSS'; }
-  pre.src-D:before { content: 'D'; }
-  pre.src-ditaa:before { content: 'ditaa'; }
-  pre.src-dot:before { content: 'Graphviz'; }
-  pre.src-calc:before { content: 'Emacs Calc'; }
-  pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
-  pre.src-fortran:before { content: 'Fortran'; }
-  pre.src-gnuplot:before { content: 'gnuplot'; }
-  pre.src-haskell:before { content: 'Haskell'; }
-  pre.src-hledger:before { content: 'hledger'; }
-  pre.src-java:before { content: 'Java'; }
-  pre.src-js:before { content: 'Javascript'; }
-  pre.src-latex:before { content: 'LaTeX'; }
-  pre.src-ledger:before { content: 'Ledger'; }
-  pre.src-lisp:before { content: 'Lisp'; }
-  pre.src-lilypond:before { content: 'Lilypond'; }
-  pre.src-lua:before { content: 'Lua'; }
-  pre.src-matlab:before { content: 'MATLAB'; }
-  pre.src-mscgen:before { content: 'Mscgen'; }
-  pre.src-ocaml:before { content: 'Objective Caml'; }
-  pre.src-octave:before { content: 'Octave'; }
-  pre.src-org:before { content: 'Org mode'; }
-  pre.src-oz:before { content: 'OZ'; }
-  pre.src-plantuml:before { content: 'Plantuml'; }
-  pre.src-processing:before { content: 'Processing.js'; }
-  pre.src-python:before { content: 'Python'; }
-  pre.src-R:before { content: 'R'; }
-  pre.src-ruby:before { content: 'Ruby'; }
-  pre.src-sass:before { content: 'Sass'; }
-  pre.src-scheme:before { content: 'Scheme'; }
-  pre.src-screen:before { content: 'Gnu Screen'; }
-  pre.src-sed:before { content: 'Sed'; }
-  pre.src-sh:before { content: 'shell'; }
-  pre.src-sql:before { content: 'SQL'; }
-  pre.src-sqlite:before { content: 'SQLite'; }
-  /* additional languages in org.el's org-babel-load-languages alist */
-  pre.src-forth:before { content: 'Forth'; }
-  pre.src-io:before { content: 'IO'; }
-  pre.src-J:before { content: 'J'; }
-  pre.src-makefile:before { content: 'Makefile'; }
-  pre.src-maxima:before { content: 'Maxima'; }
-  pre.src-perl:before { content: 'Perl'; }
-  pre.src-picolisp:before { content: 'Pico Lisp'; }
-  pre.src-scala:before { content: 'Scala'; }
-  pre.src-shell:before { content: 'Shell Script'; }
-  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
-  /* additional language identifiers per "defun org-babel-execute"
-       in ob-*.el */
-  pre.src-cpp:before  { content: 'C++'; }
-  pre.src-abc:before  { content: 'ABC'; }
-  pre.src-coq:before  { content: 'Coq'; }
-  pre.src-groovy:before  { content: 'Groovy'; }
-  /* additional language identifiers from org-babel-shell-names in
-     ob-shell.el: ob-shell is the only babel language using a lambda to put
-     the execution function name together. */
-  pre.src-bash:before  { content: 'bash'; }
-  pre.src-csh:before  { content: 'csh'; }
-  pre.src-ash:before  { content: 'ash'; }
-  pre.src-dash:before  { content: 'dash'; }
-  pre.src-ksh:before  { content: 'ksh'; }
-  pre.src-mksh:before  { content: 'mksh'; }
-  pre.src-posh:before  { content: 'posh'; }
-  /* Additional Emacs modes also supported by the LaTeX listings package */
-  pre.src-ada:before { content: 'Ada'; }
-  pre.src-asm:before { content: 'Assembler'; }
-  pre.src-caml:before { content: 'Caml'; }
-  pre.src-delphi:before { content: 'Delphi'; }
-  pre.src-html:before { content: 'HTML'; }
-  pre.src-idl:before { content: 'IDL'; }
-  pre.src-mercury:before { content: 'Mercury'; }
-  pre.src-metapost:before { content: 'MetaPost'; }
-  pre.src-modula-2:before { content: 'Modula-2'; }
-  pre.src-pascal:before { content: 'Pascal'; }
-  pre.src-ps:before { content: 'PostScript'; }
-  pre.src-prolog:before { content: 'Prolog'; }
-  pre.src-simula:before { content: 'Simula'; }
-  pre.src-tcl:before { content: 'tcl'; }
-  pre.src-tex:before { content: 'TeX'; }
-  pre.src-plain-tex:before { content: 'Plain TeX'; }
-  pre.src-verilog:before { content: 'Verilog'; }
-  pre.src-vhdl:before { content: 'VHDL'; }
-  pre.src-xml:before { content: 'XML'; }
-  pre.src-nxml:before { content: 'XML'; }
-  /* add a generic configuration mode; LaTeX export needs an additional
-     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
-  pre.src-conf:before { content: 'Configuration File'; }
-
-  table { border-collapse:collapse; }
-  caption.t-above { caption-side: top; }
-  caption.t-bottom { caption-side: bottom; }
-  td, th { vertical-align:top;  }
-  th.org-right  { text-align: center;  }
-  th.org-left   { text-align: center;   }
-  th.org-center { text-align: center; }
-  td.org-right  { text-align: right;  }
-  td.org-left   { text-align: left;   }
-  td.org-center { text-align: center; }
-  dt { font-weight: bold; }
-  .footpara { display: inline; }
-  .footdef  { margin-bottom: 1em; }
-  .figure { padding: 1em; }
-  .figure p { text-align: center; }
-  .equation-container {
-    display: table;
-    text-align: center;
-    width: 100%;
-  }
-  .equation {
-    vertical-align: middle;
-  }
-  .equation-label {
-    display: table-cell;
-    text-align: right;
-    vertical-align: middle;
-  }
-  .inlinetask {
-    padding: 10px;
-    border: 2px solid gray;
-    margin: 10px;
-    background: #ffffcc;
-  }
-  #org-div-home-and-up
-   { text-align: right; font-size: 70%; white-space: nowrap; }
-  textarea { overflow-x: auto; }
-  .linenr { font-size: smaller }
-  .code-highlighted { background-color: #ffff00; }
-  .org-info-js_info-navigation { border-style: none; }
-  #org-info-js_console-label
-    { font-size: 10px; font-weight: bold; white-space: nowrap; }
-  .org-info-js_search-highlight
-    { background-color: #ffff00; color: #000000; font-weight: bold; }
-  .org-svg { width: 90%; }
-  /*]]>*/-->
-</style>
-<script type="text/javascript">
-/*
-@licstart  The following is the entire license notice for the
-JavaScript code in this tag.
-
-Copyright (C) 2012-2019 Free Software Foundation, Inc.
-
-The JavaScript code in this tag is free software: you can
-redistribute it and/or modify it under the terms of the GNU
-General Public License (GNU GPL) as published by the Free Software
-Foundation, either version 3 of the License, or (at your option)
-any later version.  The code is distributed WITHOUT ANY WARRANTY;
-without even the implied warranty of MERCHANTABILITY or FITNESS
-FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
-
-As additional permission under GNU GPL version 3 section 7, you
-may distribute non-source (e.g., minimized or compacted) forms of
-that code without the copy of the GNU GPL normally required by
-section 4, provided you include this license notice and a URL
-through which recipients can access the Corresponding Source.
-
-
-@licend  The above is the entire license notice
-for the JavaScript code in this tag.
-*/
-<!--/*--><![CDATA[/*><!--*/
- function CodeHighlightOn(elem, id)
- {
-   var target = document.getElementById(id);
-   if(null != target) {
-     elem.cacheClassElem = elem.className;
-     elem.cacheClassTarget = target.className;
-     target.className = "code-highlighted";
-     elem.className   = "code-highlighted";
-   }
- }
- function CodeHighlightOff(elem, id)
- {
-   var target = document.getElementById(id);
-   if(elem.cacheClassElem)
-     elem.className = elem.cacheClassElem;
-   if(elem.cacheClassTarget)
-     target.className = elem.cacheClassTarget;
- }
-/*]]>*///-->
-</script>
-</head>
-<body>
-<div id="content">
-<h1 class="title">Propositional Logic
-<br />
-<span class="subtitle">(SE 212 TUT 102)</span>
-</h1>
-
-<div id="outline-container-org3ca277c" class="outline-2">
-<h2 id="org3ca277c"><span class="section-number-2">1</span> Are you at the right place?</h2>
-<div class="outline-text-2" id="text-1">
-<p>
-We’re in MC 4040, for SE 212 TUT 102 (03:30-04:20W)
-</p>
-</div>
-</div>
-
-<div id="outline-container-orgc50c656" class="outline-2">
-<h2 id="orgc50c656"><span class="section-number-2">2</span> </h2>
-<div class="outline-text-2" id="text-2">
-<div class="org-center">
-<p>
-George
-</p>
-</div>
-</div>
-</div>
-
-<div id="outline-container-orgc4929c6" class="outline-2">
-<h2 id="orgc4929c6"><span class="section-number-2">3</span> </h2>
-<div class="outline-text-2" id="text-3">
-
-<div class="figure">
-<p><img src="./george.png" alt="george.png" />
-</p>
-</div>
-
-<p>
-<a href="https://www.student.cs.uwaterloo.ca/~se212/george/ask-george/">https://www.student.cs.uwaterloo.ca/~se212/george/ask-george/</a>
-</p>
-</div>
-</div>
-
-<div id="outline-container-org67896df" class="outline-2">
-<h2 id="org67896df"><span class="section-number-2">4</span> Tool support</h2>
-<div class="outline-text-2" id="text-4">
-<p>
-Over the years, students have developed a number of tools for using
-George and/or editing <code>.grg</code> files, such as plugins for Vim and Atom.
-</p>
-
-<p>
-Check them out at
-</p>
-
-<div class="org-center">
-<p>
-Course website → George User Manual → Contributions
-</p>
-</div>
-</div>
-</div>
-
-<div id="outline-container-org88ee3fd" class="outline-2">
-<h2 id="org88ee3fd"><span class="section-number-2">5</span> George mode for Emacs (new!)</h2>
-<div class="outline-text-2" id="text-5">
-<ul class="org-ul">
-<li>Syntax highlighting + a number of convenience functions</li>
-<li>Grab it from <a href="https://git.sr.ht/~bandali/george-mode">https://git.sr.ht/~bandali/george-mode</a> <br />
-(soon on Contributions page)</li>
-</ul>
-</div>
-</div>
-
-<div id="outline-container-org0ba02d1" class="outline-2">
-<h2 id="org0ba02d1"><span class="section-number-2">6</span> <code>a00q01.grg</code> (demo)</h2>
-<div class="outline-text-2" id="text-6">
-<p>
-Walk through answering <code>a00q01.grg</code> and submitting on MarkUs
-</p>
-</div>
-</div>
-
-<div id="outline-container-orgb863070" class="outline-2">
-<h2 id="orgb863070"><span class="section-number-2">7</span> Homework 1</h2>
-<div class="outline-text-2" id="text-7">
-<ul class="org-ul">
-<li>Let’s do a couple of questions from Homework 1</li>
-<li>Now you try the rest, let me know if you have any questions</li>
-</ul>
-</div>
-</div>
-</div>
-<div id="postamble" class="status">
-<p class="date">Date: Wed Sep 11, 2019</p>
-<p class="author">Author: Amin Bandali</p>
-<p class="email">Email: <a href="mailto:bandali@uwaterloo.ca">bandali@uwaterloo.ca</a></p>
-<p class="date">Created: 2019-09-18 Wed 23:12</p>
-<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
-</div>
-</body>
-</html>
diff --git a/se212-f19/se212-t01.org b/se212-f19/se212-t01.org
deleted file mode 100644 (file)
index 12e9cdd..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#+macro: topic Propositional Logic
-
-#+macro: room MC 4040
-#+macro: sec1 SE 212 TUT 101
-#+macro: sec2 SE 212 TUT 102
-#+macro: time1 02:30-03:20W
-#+macro: time2 03:30-04:20W
-
-#+macro: sec {{{sec2}}}
-#+macro: sectime {{{time2}}}
-
-#+title:    {{{topic}}}
-#+subtitle: ({{{sec}}})
-#+author:   Amin Bandali
-#+email:    bandali@uwaterloo.ca
-#+date:     Wed Sep 11, 2019
-#+language: en
-#+options:  email:t num:t toc:nil \n:nil ::t |:t ^:t -:t f:t *:t <:t
-#+options:  tex:t  d:nil todo:t pri:nil tags:not-in-toc
-#+select_tags: export
-#+exclude_tags: noexport
-#+startup: beamer
-#+latex_class: beamer
-# #+latex_class_options: [bigger]
-#+latex_header: \setbeamercovered{transparent}
-#+latex: \setbeamertemplate{itemize items}[circle]
-#+beamer_color_theme: beaver
-
-* Are you at the right place?
-
-We’re in {{{room}}}, for {{{sec}}} ({{{sectime}}})
-
-* 
-
-#+latex: \definecolor{darkred}{rgb}{0.8,0,0}
-#+latex: {\Large \color{darkred}
-#+begin_center
-George
-#+end_center
-#+latex: }
-
-* 
-
-#+latex: \vspace{-2.5em}
-file:./george.png
-
-#+latex: {\footnotesize
-https://www.student.cs.uwaterloo.ca/~se212/george/ask-george/
-#+latex: }
-
-* Tool support
-
-Over the years, students have developed a number of tools for using
-George and/or editing =.grg= files, such as plugins for Vim and Atom.
-
-Check them out at
-
-#+begin_center
-Course website → George User Manual → Contributions
-#+end_center
-
-* George mode for Emacs (new!)
-
-- Syntax highlighting + a number of convenience functions
-- Grab it from https://git.sr.ht/~bandali/george-mode \\
-  (soon on Contributions page)
-
-* =a00q01.grg= (demo)
-
-Walk through answering =a00q01.grg= and submitting on MarkUs
-
-* Homework 1
-:PROPERTIES:
-:BEAMER_act: [<+->]
-:END:
-
-- Let’s do a couple of questions from Homework 1
-- Now you try the rest, let me know if you have any questions
diff --git a/se212-f19/se212-t05.org b/se212-f19/se212-t05.org
deleted file mode 100644 (file)
index a85896d..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-#+title:    Predicate Logic
-#+subtitle: (SE 212 Tutorial 5)
-#+author:   Amin Bandali
-#+email:    bandali@uwaterloo.ca
-#+date:     Wed Oct 9, 2019
-#+language: en
-#+options:  email:t num:t toc:nil \n:nil ::t |:t ^:t -:t f:t *:t <:t
-#+options:  tex:t  d:nil todo:t pri:nil tags:not-in-toc
-#+select_tags: export
-#+exclude_tags: noexport
-#+startup: beamer
-#+latex_class: beamer
-# #+latex_class_options: [bigger]
-#+latex_header: \setbeamercovered{transparent}
-#+latex: \setbeamertemplate{itemize items}[circle]
-#+beamer_color_theme: beaver
-
-* Today’s plan
-:PROPERTIES:
-:BEAMER_act: [<+->]
-:END:
-
-- do some semantics questions from homework 4
-- do some ND questions from homework 5
-
-* =h04q05=
-
-Provide a counterexample to show that the following argument is not
-valid and demonstrate that your answer is correct.
-
-#+begin_example
-forall y : M . exists x : N . p(g(x), y)
-|=
-exists z : M . p(z, z)
-#+end_example
-
-* =h04q05= \small{(cont’d)}
-
-#+begin_example
-Domain:
-    M = {m1, m2}
-    N = {n1, n2}
-
-Mapping:
-    Syntax  | Meaning
-    --------------------------
-      g(.)  |  G(n1) := m1
-            |  G(n2) := m2
-    --------------------------
-    p(., .) | P(m1, m1) := F
-            | P(m1, m2) := T
-            | P(m2, m1) := T
-            | P(m2, m2) := F
-#+end_example
-
-* =h04q05= \small{(cont’d)}
-
-#+begin_example
-Premise:
-      [forall y : M . exists x : N . p(g(x), y)]
-    = [exists x: N. p(g(x), ^m1)] AND
-      [exists x: N . p(g(x), ^m2)]
-    = (P(G(n1), m1) OR P(G(n2), m1)) AND
-      (P(G(n1), m2) OR P(G(n2), m2))
-    = (P(m1, m1) OR P(m2, m1)) AND
-      (P(m1, m2) OR P(m2, m2))
-    = (F OR T) AND (T OR F)
-    = T
-#+end_example
-
-* =h04q05= \small{(cont’d)}
-
-#+begin_example
-Conclusion:
-      [exists z: M . p(z, z)]
-    = P(m1, m1) OR P(m2, m2)
-    = F OR F
-    = F
-#+end_example
-
-* =h04q06=
-
-Express the following sentences in predicate logic. Use types in your
-formalization.  Is the set of formulas consistent?  Demonstrate that
-your answer is correct using the semantics of predicate logic.
-
-#+begin_example
-All programmer like some computers.
-Some programmers use MAC.
-Therefore, some people who like some computers use MAC.
-#+end_example
-
-* =h04q06= \small{(cont’d)}
-
-All programmer like some computers.\\
-Some programmers use MAC.\\
-Therefore, some people who like some computers use MAC.
-
-#+begin_example
-Formalization:
-    programmer(x) means x is a programmer
-    usesmac(x) means x uses MAC
-    likes(x, y) means x likes y
-
-forall x: Person . programmer(x) =>
-           exists y: Computer . likes(x, y),
-exists x: Person . programmer(x) & usesmac(x)
-|-
-exists x: Person .
-  (exists y: Computer . likes(x, y) & usesmac(x))
-#+end_example
-
-* =h04q06= \small{(cont’d)}
-
-These sentences are /consistent/.  Here is an interpretation in which
-all the formulas are T:
-
-#+begin_example
-Domain:
-    People = {John}
-    Computer = {MacPro}
-
-Mapping:
-    Syntax          | Meaning
-    -------------------------------------------
-    programmer(.)   | programmer(John) = T
-    likes(.,.)      | likes(John, MacPro) = T
-    usesmac(.)      | usesmac(John) = T
-#+end_example
-
-* =h04q06= \small{(cont’d)}
-
-#+begin_example
-formula 1:
-      [forall x: Person . programmer(x) =>
-       exists y: Computer . likes(x, y)]
-    = [programmer(^John) =>
-       exists y: Computer . likes(^John, y)]]
-    = programmer(John) IMP likes(John, MacPro)
-    = T IMP T
-    = T
-
-formula 2:
-      [exists x: Person . programmer(x) & usesmac(x)]
-    = programmer(John) AND usesmac(John)
-    = T AND T
-    = T
-#+end_example
-
-* =h04q06= \small{(cont’d)}
-
-#+begin_example
-formula 3:
-      [exists x: Person . (exists y: Computer .
-       likes(x, y) & usesmac(x))]
-    = [exists y: Computer .
-       likes(^John, y) & usesmac(^John)]
-    = likes(John, MacPro) AND usesmac(John)
-    = T AND T
-    = T
-#+end_example
-
-* =h05q01a=
-
-If the following arguments are valid, use natural deduction AND
-semantic tableaux to prove them; otherwise, provide a counterexample.
-
-#+begin_example
-forall x . s(x) | t(x),
-forall x . s(x) => t(x) & k(c, x),
-forall x . t(x) => m(x)
-|-
-m(c)
-where c is a constant
-#+end_example
-
-* =h05q01a= \small{(cont’d)}
-
-#+begin_example
-#check ND
-forall x . s(x) | t(x),
-forall x . s(x) => t(x) & k(c, x),
-forall x . t(x) => m(x)
-|-
-m(c)
-#+end_example
-
-* =h05q01a= \small{(cont’d)}
-
-#+begin_example
-1) forall x . s(x) | t(x) premise
-2) forall x . s(x) => t(x) & k(c, x) premise
-3) forall x . t(x) => m(x) premise
-4) s(c) | t(c) by forall_e on 1
-5) s(c) => t(c) & k(c, c) by forall_e on 2
-6) t(c) => m(c) by forall_e on 3
-7) case s(c) {
-    8) t(c) & k(c, c) by imp_e on 5, 7
-    9) t(c) by and_e on 8
-    10) m(c) by imp_e on 6, 9
-}
-11) case t(c) {
-    12) m(c) by imp_e on 6, 11
-}
-13) m(c) by cases on 4, 7-10, 11-12
-#+end_example
-
-* =h05q01b=
-
-Is this formula a tautology?
-
-#+begin_example
-|- (exists x . p(x)) => forall y . p(y)
-#+end_example
-
-* =h05q01b= \small{(cont’d)}
-
-No, this formula is not a tautology.  Interpretation:
-
-#+begin_example
-1) Domain = {a, b}
-
-2) Mapping:
-    Syntax  | Meaning
-    ----------------------
-    p(.)    | P(a) = T
-            | P(b) = F
-
-Conclusion:
-  [(exists x. p(x)) => forall y. p(y)]
-= (P(a) OR P(b)) IMP (P(a) AND P(b))
-= (T OR F) IMP (T AND F)
-= T IMP F
-= F
-#+end_example
-
-* =h05q01d=
-
-Is this argument valid?
-
-#+begin_example
-forall x . p(x) | q(x),
-forall x . !p(x)
-|-
-forall x . q(x)
-#+end_example
-
-* =h05q01d= \small{(cont’d)}
-
-#+begin_example
-#check ND
-
-forall x . p(x) | q(x), forall x . !p(x) |- forall x . q(x)
-
-1) forall x . p(x) | q(x) premise
-2) forall x . !p(x) premise
-3) for every xg {
-    4) p(xg) | q(xg) by forall_e on 1
-    5) case p(xg) {
-        6) !p(xg) by forall_e on 2
-        7) q(xg) by not_e on 5, 6
-    }
-    8) case q(xg) {}
-    9) q(xg) by cases on 4, 5-7, 8-8
-}
-10) forall x. q(x) by forall_i on 3-9
-#+end_example
-
-* Announcements
-
-- no tutorial next week (Oct 16) (reading week)
-- no tutorial the week after (Oct 23) (midterm marking)
diff --git a/ssi/license.html b/ssi/license.html
deleted file mode 100644 (file)
index 9bdecfa..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<footer>
-<p>Copyright &copy; <!--# echo var="copy" encoding="none" --> Amin Bandali.
-See the <!--# if expr="$title = Licensing Information" -->above for license conditions<!--# else --><a href="/license">license conditions</a><!--# endif -->.
-Please copy and share.</p>
-</footer>
diff --git a/ssi/post.html b/ssi/post.html
deleted file mode 100644 (file)
index 08e9c1b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-</main>
-<!--# if expr="$copy" --><!--# include virtual="license.html" --><!--# endif -->
-</body>
-</html>
diff --git a/ssi/postn.html b/ssi/postn.html
deleted file mode 100644 (file)
index 71ed959..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<p class="muted inbox">Got a question or comment?  You can find my
-email address on my <a href="contact">contact</a> page.
-<span class="smly">:-)</span></p>
-</article>
-<!--# include virtual="/ssi/post.html" -->
diff --git a/ssi/pre.html b/ssi/pre.html
deleted file mode 100644 (file)
index 49e2780..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--# include virtual="/ssi/pre0.html" -->
-<header><!--# if expr="$title = Amin Bandali's Personal Site" -->
-<h1><!--# echo var="title" --></h1>
-<!--# else -->
-<strong><a href="/">Amin Bandali</a>'s Personal Site</strong>
-<!--# endif --></header>
-<nav>
-<ul>
-<li><a href="/#papers">Publications</a></li>
-<li><a href="/#projects">Projects</a></li>
-<li><a href="/#notes">Notes</a></li>
-<li><a href="/cv" title="curriculum vitae">CV</a></li>
-<li><a href="/contact">Contact</a></li>
-</ul>
-</nav>
-<main>
diff --git a/ssi/pre0.html b/ssi/pre0.html
deleted file mode 100644 (file)
index cac6873..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-<meta charset="utf-8"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title><!--# echo var="title" --><!--# if expr="$nts" --><!--# else --> &mdash; Amin Bandali<!--# endif --></title>
-<link rel="icon" href="/gnu.ico"/>
-<link rel="stylesheet" href="/style.css"/>
-</head>
-<body>
diff --git a/ssi/pren.html b/ssi/pren.html
deleted file mode 100644 (file)
index 71e1004..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--# include virtual="/ssi/pre.html" -->
-<article>
-<header>
-<h1><!--# echo var="title" --></h1>
-<p>Published on <!--# echo var="pub" --><!--# if expr="$upd" --><br/>
-Last updated on <!--# echo var="upd" --><!--# endif --></p>
-</header>
diff --git a/static/404.html b/static/404.html
new file mode 100644 (file)
index 0000000..26f3f81
--- /dev/null
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>404 Not Found</title>
+<link rel="icon" href="/gnu.ico"/>
+<link rel="stylesheet" href="/style.css"/>
+</head>
+<body>
+<nav><a href="/">bandali.eu.org</a></nav>
+<main>
+<h1>404</h1>
+<p>Sorry, that page does not exist.</p>
+</main>
+</body>
+</html>
diff --git a/static/bandali-pubkey.txt b/static/bandali-pubkey.txt
new file mode 100644 (file)
index 0000000..551889f
--- /dev/null
@@ -0,0 +1,391 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+vhM+q4339VYMt/RYM0PIraejWttGAtb6bQ==
+=7ozV
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/static/feed.svg b/static/feed.svg
new file mode 100644 (file)
index 0000000..4efd2ef
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="128px" height="128px" id="RSSicon" viewBox="0 0 256 256">
+<defs>
+<linearGradient x1="0.085" y1="0.085" x2="0.915" y2="0.915" id="RSSg">
+<stop  offset="0.0" stop-color="#E3702D"/><stop  offset="0.1071" stop-color="#EA7D31"/>
+<stop  offset="0.3503" stop-color="#F69537"/><stop  offset="0.5" stop-color="#FB9E3A"/>
+<stop  offset="0.7016" stop-color="#EA7C31"/><stop  offset="0.8866" stop-color="#DE642B"/>
+<stop  offset="1.0" stop-color="#D95B29"/>
+</linearGradient>
+</defs>
+<rect width="256" height="256" rx="55" ry="55" x="0"  y="0"  fill="#CC5D15"/>
+<rect width="246" height="246" rx="50" ry="50" x="5"  y="5"  fill="#F49C52"/>
+<rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#RSSg)"/>
+<circle cx="68" cy="189" r="24" fill="#FFF"/>
+<path d="M160 213h-34a82 82 0 0 0 -82 -82v-34a116 116 0 0 1 116 116z" fill="#FFF"/>
+<path d="M184 213A140 140 0 0 0 44 73 V 38a175 175 0 0 1 175 175z" fill="#FFF"/>
+</svg>
diff --git a/static/gnu.ico b/static/gnu.ico
new file mode 100644 (file)
index 0000000..e363826
Binary files /dev/null and b/static/gnu.ico differ
diff --git a/static/gpl-3.0.html b/static/gpl-3.0.html
new file mode 100644 (file)
index 0000000..3817471
--- /dev/null
@@ -0,0 +1,698 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8"/>
+    <meta name=viewport content="width=device-width, initial-scale=1"/>
+    <title>GNU General Public License v3.0</title>
+    <link rel="stylesheet" href="/style.css"/>
+  </head>
+  <body>
+    <main style="font-size: 0.92em;
+                 max-width: 55em;
+                 line-height: 1.5;">
+      <h3 style="text-align: center;">GNU GENERAL PUBLIC LICENSE</h3>
+      <p style="text-align: center;">Version 3, 29 June 2007</p>
+
+      <p>Copyright &copy; 2007 Free Software Foundation, Inc.
+        &lt;<a href="https://fsf.org/">https://fsf.org/</a>&gt;</p><p>
+        Everyone is permitted to copy and distribute verbatim copies
+        of this license document, but changing it is not allowed.</p>
+
+      <h3><a name="preamble"></a>Preamble</h3>
+
+      <p>The GNU General Public License is a free, copyleft license for
+        software and other kinds of works.</p>
+
+      <p>The licenses for most software and other practical works are designed
+        to take away your freedom to share and change the works.  By contrast,
+        the GNU General Public License is intended to guarantee your freedom to
+        share and change all versions of a program--to make sure it remains free
+        software for all its users.  We, the Free Software Foundation, use the
+        GNU General Public License for most of our software; it applies also to
+        any other work released this way by its authors.  You can apply it to
+        your programs, too.</p>
+
+      <p>When we speak of free software, we are referring to freedom, not
+        price.  Our General Public Licenses are designed to make sure that you
+        have the freedom to distribute copies of free software (and charge for
+        them if you wish), that you receive source code or can get it if you
+        want it, that you can change the software or use pieces of it in new
+        free programs, and that you know you can do these things.</p>
+
+      <p>To protect your rights, we need to prevent others from denying you
+        these rights or asking you to surrender the rights.  Therefore, you have
+        certain responsibilities if you distribute copies of the software, or if
+        you modify it: responsibilities to respect the freedom of others.</p>
+
+      <p>For example, if you distribute copies of such a program, whether
+        gratis or for a fee, you must pass on to the recipients the same
+        freedoms that you received.  You must make sure that they, too, receive
+        or can get the source code.  And you must show them these terms so they
+        know their rights.</p>
+
+      <p>Developers that use the GNU GPL protect your rights with two steps:
+        (1) assert copyright on the software, and (2) offer you this License
+        giving you legal permission to copy, distribute and/or modify it.</p>
+
+      <p>For the developers' and authors' protection, the GPL clearly explains
+        that there is no warranty for this free software.  For both users' and
+        authors' sake, the GPL requires that modified versions be marked as
+        changed, so that their problems will not be attributed erroneously to
+        authors of previous versions.</p>
+
+      <p>Some devices are designed to deny users access to install or run
+        modified versions of the software inside them, although the manufacturer
+        can do so.  This is fundamentally incompatible with the aim of
+        protecting users' freedom to change the software.  The systematic
+        pattern of such abuse occurs in the area of products for individuals to
+        use, which is precisely where it is most unacceptable.  Therefore, we
+        have designed this version of the GPL to prohibit the practice for those
+        products.  If such problems arise substantially in other domains, we
+        stand ready to extend this provision to those domains in future versions
+        of the GPL, as needed to protect the freedom of users.</p>
+
+      <p>Finally, every program is threatened constantly by software patents.
+        States should not allow patents to restrict development and use of
+        software on general-purpose computers, but in those that do, we wish to
+        avoid the special danger that patents applied to a free program could
+        make it effectively proprietary.  To prevent this, the GPL assures that
+        patents cannot be used to render the program non-free.</p>
+
+      <p>The precise terms and conditions for copying, distribution and
+        modification follow.</p>
+
+      <h3><a name="terms"></a>TERMS AND CONDITIONS</h3>
+
+      <h4><a name="section0"></a>0. Definitions.</h4>
+
+      <p>&ldquo;This License&rdquo; refers to version 3 of the GNU General Public License.</p>
+
+      <p>&ldquo;Copyright&rdquo; also means copyright-like laws that apply to other kinds of
+        works, such as semiconductor masks.</p>
+
+      <p>&ldquo;The Program&rdquo; refers to any copyrightable work licensed under this
+        License.  Each licensee is addressed as &ldquo;you&rdquo;.  &ldquo;Licensees&rdquo; and
+        &ldquo;recipients&rdquo; may be individuals or organizations.</p>
+
+      <p>To &ldquo;modify&rdquo; a work means to copy from or adapt all or part of the work
+        in a fashion requiring copyright permission, other than the making of an
+        exact copy.  The resulting work is called a &ldquo;modified version&rdquo; of the
+        earlier work or a work &ldquo;based on&rdquo; the earlier work.</p>
+
+      <p>A &ldquo;covered work&rdquo; means either the unmodified Program or a work based
+        on the Program.</p>
+
+      <p>To &ldquo;propagate&rdquo; a work means to do anything with it that, without
+        permission, would make you directly or secondarily liable for
+        infringement under applicable copyright law, except executing it on a
+        computer or modifying a private copy.  Propagation includes copying,
+        distribution (with or without modification), making available to the
+        public, and in some countries other activities as well.</p>
+
+      <p>To &ldquo;convey&rdquo; a work means any kind of propagation that enables other
+        parties to make or receive copies.  Mere interaction with a user through
+        a computer network, with no transfer of a copy, is not conveying.</p>
+
+      <p>An interactive user interface displays &ldquo;Appropriate Legal Notices&rdquo;
+        to the extent that it includes a convenient and prominently visible
+        feature that (1) displays an appropriate copyright notice, and (2)
+        tells the user that there is no warranty for the work (except to the
+        extent that warranties are provided), that licensees may convey the
+        work under this License, and how to view a copy of this License.  If
+        the interface presents a list of user commands or options, such as a
+        menu, a prominent item in the list meets this criterion.</p>
+
+      <h4><a name="section1"></a>1. Source Code.</h4>
+
+      <p>The &ldquo;source code&rdquo; for a work means the preferred form of the work
+        for making modifications to it.  &ldquo;Object code&rdquo; means any non-source
+        form of a work.</p>
+
+      <p>A &ldquo;Standard Interface&rdquo; means an interface that either is an official
+        standard defined by a recognized standards body, or, in the case of
+        interfaces specified for a particular programming language, one that
+        is widely used among developers working in that language.</p>
+
+      <p>The &ldquo;System Libraries&rdquo; of an executable work include anything, other
+        than the work as a whole, that (a) is included in the normal form of
+        packaging a Major Component, but which is not part of that Major
+        Component, and (b) serves only to enable use of the work with that
+        Major Component, or to implement a Standard Interface for which an
+        implementation is available to the public in source code form.  A
+        &ldquo;Major Component&rdquo;, in this context, means a major essential component
+        (kernel, window system, and so on) of the specific operating system
+        (if any) on which the executable work runs, or a compiler used to
+        produce the work, or an object code interpreter used to run it.</p>
+
+      <p>The &ldquo;Corresponding Source&rdquo; for a work in object code form means all
+        the source code needed to generate, install, and (for an executable
+        work) run the object code and to modify the work, including scripts to
+        control those activities.  However, it does not include the work's
+        System Libraries, or general-purpose tools or generally available free
+        programs which are used unmodified in performing those activities but
+        which are not part of the work.  For example, Corresponding Source
+        includes interface definition files associated with source files for
+        the work, and the source code for shared libraries and dynamically
+        linked subprograms that the work is specifically designed to require,
+        such as by intimate data communication or control flow between those
+        subprograms and other parts of the work.</p>
+
+      <p>The Corresponding Source need not include anything that users
+        can regenerate automatically from other parts of the Corresponding
+        Source.</p>
+
+      <p>The Corresponding Source for a work in source code form is that
+        same work.</p>
+
+      <h4><a name="section2"></a>2. Basic Permissions.</h4>
+
+      <p>All rights granted under this License are granted for the term of
+        copyright on the Program, and are irrevocable provided the stated
+        conditions are met.  This License explicitly affirms your unlimited
+        permission to run the unmodified Program.  The output from running a
+        covered work is covered by this License only if the output, given its
+        content, constitutes a covered work.  This License acknowledges your
+        rights of fair use or other equivalent, as provided by copyright law.</p>
+
+      <p>You may make, run and propagate covered works that you do not
+        convey, without conditions so long as your license otherwise remains
+        in force.  You may convey covered works to others for the sole purpose
+        of having them make modifications exclusively for you, or provide you
+        with facilities for running those works, provided that you comply with
+        the terms of this License in conveying all material for which you do
+        not control copyright.  Those thus making or running the covered works
+        for you must do so exclusively on your behalf, under your direction
+        and control, on terms that prohibit them from making any copies of
+        your copyrighted material outside their relationship with you.</p>
+
+      <p>Conveying under any other circumstances is permitted solely under
+        the conditions stated below.  Sublicensing is not allowed; section 10
+        makes it unnecessary.</p>
+
+      <h4><a name="section3"></a>3. Protecting Users' Legal Rights From Anti-Circumvention Law.</h4>
+
+      <p>No covered work shall be deemed part of an effective technological
+        measure under any applicable law fulfilling obligations under article
+        11 of the WIPO copyright treaty adopted on 20 December 1996, or
+        similar laws prohibiting or restricting circumvention of such
+        measures.</p>
+
+      <p>When you convey a covered work, you waive any legal power to forbid
+        circumvention of technological measures to the extent such circumvention
+        is effected by exercising rights under this License with respect to
+        the covered work, and you disclaim any intention to limit operation or
+        modification of the work as a means of enforcing, against the work's
+        users, your or third parties' legal rights to forbid circumvention of
+        technological measures.</p>
+
+      <h4><a name="section4"></a>4. Conveying Verbatim Copies.</h4>
+
+      <p>You may convey verbatim copies of the Program's source code as you
+        receive it, in any medium, provided that you conspicuously and
+        appropriately publish on each copy an appropriate copyright notice;
+        keep intact all notices stating that this License and any
+        non-permissive terms added in accord with section 7 apply to the code;
+        keep intact all notices of the absence of any warranty; and give all
+        recipients a copy of this License along with the Program.</p>
+
+      <p>You may charge any price or no price for each copy that you convey,
+        and you may offer support or warranty protection for a fee.</p>
+
+      <h4><a name="section5"></a>5. Conveying Modified Source Versions.</h4>
+
+      <p>You may convey a work based on the Program, or the modifications to
+        produce it from the Program, in the form of source code under the
+        terms of section 4, provided that you also meet all of these conditions:</p>
+
+      <ul>
+        <li>a) The work must carry prominent notices stating that you modified
+          it, and giving a relevant date.</li>
+
+        <li>b) The work must carry prominent notices stating that it is
+          released under this License and any conditions added under section
+          7.  This requirement modifies the requirement in section 4 to
+          &ldquo;keep intact all notices&rdquo;.</li>
+
+        <li>c) You must license the entire work, as a whole, under this
+          License to anyone who comes into possession of a copy.  This
+          License will therefore apply, along with any applicable section 7
+          additional terms, to the whole of the work, and all its parts,
+          regardless of how they are packaged.  This License gives no
+          permission to license the work in any other way, but it does not
+          invalidate such permission if you have separately received it.</li>
+
+        <li>d) If the work has interactive user interfaces, each must display
+          Appropriate Legal Notices; however, if the Program has interactive
+          interfaces that do not display Appropriate Legal Notices, your
+          work need not make them do so.</li>
+      </ul>
+
+      <p>A compilation of a covered work with other separate and independent
+        works, which are not by their nature extensions of the covered work,
+        and which are not combined with it such as to form a larger program,
+        in or on a volume of a storage or distribution medium, is called an
+        &ldquo;aggregate&rdquo; if the compilation and its resulting copyright are not
+        used to limit the access or legal rights of the compilation's users
+        beyond what the individual works permit.  Inclusion of a covered work
+        in an aggregate does not cause this License to apply to the other
+        parts of the aggregate.</p>
+
+      <h4><a name="section6"></a>6. Conveying Non-Source Forms.</h4>
+
+      <p>You may convey a covered work in object code form under the terms
+        of sections 4 and 5, provided that you also convey the
+        machine-readable Corresponding Source under the terms of this License,
+        in one of these ways:</p>
+
+      <ul>
+        <li>a) Convey the object code in, or embodied in, a physical product
+          (including a physical distribution medium), accompanied by the
+          Corresponding Source fixed on a durable physical medium
+          customarily used for software interchange.</li>
+
+        <li>b) Convey the object code in, or embodied in, a physical product
+          (including a physical distribution medium), accompanied by a
+          written offer, valid for at least three years and valid for as
+          long as you offer spare parts or customer support for that product
+          model, to give anyone who possesses the object code either (1) a
+          copy of the Corresponding Source for all the software in the
+          product that is covered by this License, on a durable physical
+          medium customarily used for software interchange, for a price no
+          more than your reasonable cost of physically performing this
+          conveying of source, or (2) access to copy the
+          Corresponding Source from a network server at no charge.</li>
+
+        <li>c) Convey individual copies of the object code with a copy of the
+          written offer to provide the Corresponding Source.  This
+          alternative is allowed only occasionally and noncommercially, and
+          only if you received the object code with such an offer, in accord
+          with subsection 6b.</li>
+
+        <li>d) Convey the object code by offering access from a designated
+          place (gratis or for a charge), and offer equivalent access to the
+          Corresponding Source in the same way through the same place at no
+          further charge.  You need not require recipients to copy the
+          Corresponding Source along with the object code.  If the place to
+          copy the object code is a network server, the Corresponding Source
+          may be on a different server (operated by you or a third party)
+          that supports equivalent copying facilities, provided you maintain
+          clear directions next to the object code saying where to find the
+          Corresponding Source.  Regardless of what server hosts the
+          Corresponding Source, you remain obligated to ensure that it is
+          available for as long as needed to satisfy these requirements.</li>
+
+        <li>e) Convey the object code using peer-to-peer transmission, provided
+          you inform other peers where the object code and Corresponding
+          Source of the work are being offered to the general public at no
+          charge under subsection 6d.</li>
+      </ul>
+
+      <p>A separable portion of the object code, whose source code is excluded
+        from the Corresponding Source as a System Library, need not be
+        included in conveying the object code work.</p>
+
+      <p>A &ldquo;User Product&rdquo; is either (1) a &ldquo;consumer product&rdquo;, which means any
+        tangible personal property which is normally used for personal, family,
+        or household purposes, or (2) anything designed or sold for incorporation
+        into a dwelling.  In determining whether a product is a consumer product,
+        doubtful cases shall be resolved in favor of coverage.  For a particular
+        product received by a particular user, &ldquo;normally used&rdquo; refers to a
+        typical or common use of that class of product, regardless of the status
+        of the particular user or of the way in which the particular user
+        actually uses, or expects or is expected to use, the product.  A product
+        is a consumer product regardless of whether the product has substantial
+        commercial, industrial or non-consumer uses, unless such uses represent
+        the only significant mode of use of the product.</p>
+
+      <p>&ldquo;Installation Information&rdquo; for a User Product means any methods,
+        procedures, authorization keys, or other information required to install
+        and execute modified versions of a covered work in that User Product from
+        a modified version of its Corresponding Source.  The information must
+        suffice to ensure that the continued functioning of the modified object
+        code is in no case prevented or interfered with solely because
+        modification has been made.</p>
+
+      <p>If you convey an object code work under this section in, or with, or
+        specifically for use in, a User Product, and the conveying occurs as
+        part of a transaction in which the right of possession and use of the
+        User Product is transferred to the recipient in perpetuity or for a
+        fixed term (regardless of how the transaction is characterized), the
+        Corresponding Source conveyed under this section must be accompanied
+        by the Installation Information.  But this requirement does not apply
+        if neither you nor any third party retains the ability to install
+        modified object code on the User Product (for example, the work has
+        been installed in ROM).</p>
+
+      <p>The requirement to provide Installation Information does not include a
+        requirement to continue to provide support service, warranty, or updates
+        for a work that has been modified or installed by the recipient, or for
+        the User Product in which it has been modified or installed.  Access to a
+        network may be denied when the modification itself materially and
+        adversely affects the operation of the network or violates the rules and
+        protocols for communication across the network.</p>
+
+      <p>Corresponding Source conveyed, and Installation Information provided,
+        in accord with this section must be in a format that is publicly
+        documented (and with an implementation available to the public in
+        source code form), and must require no special password or key for
+        unpacking, reading or copying.</p>
+
+      <h4><a name="section7"></a>7. Additional Terms.</h4>
+
+      <p>&ldquo;Additional permissions&rdquo; are terms that supplement the terms of this
+        License by making exceptions from one or more of its conditions.
+        Additional permissions that are applicable to the entire Program shall
+        be treated as though they were included in this License, to the extent
+        that they are valid under applicable law.  If additional permissions
+        apply only to part of the Program, that part may be used separately
+        under those permissions, but the entire Program remains governed by
+        this License without regard to the additional permissions.</p>
+
+      <p>When you convey a copy of a covered work, you may at your option
+        remove any additional permissions from that copy, or from any part of
+        it.  (Additional permissions may be written to require their own
+        removal in certain cases when you modify the work.)  You may place
+        additional permissions on material, added by you to a covered work,
+        for which you have or can give appropriate copyright permission.</p>
+
+      <p>Notwithstanding any other provision of this License, for material you
+        add to a covered work, you may (if authorized by the copyright holders of
+        that material) supplement the terms of this License with terms:</p>
+
+      <ul>
+        <li>a) Disclaiming warranty or limiting liability differently from the
+          terms of sections 15 and 16 of this License; or</li>
+
+        <li>b) Requiring preservation of specified reasonable legal notices or
+          author attributions in that material or in the Appropriate Legal
+          Notices displayed by works containing it; or</li>
+
+        <li>c) Prohibiting misrepresentation of the origin of that material, or
+          requiring that modified versions of such material be marked in
+          reasonable ways as different from the original version; or</li>
+
+        <li>d) Limiting the use for publicity purposes of names of licensors or
+          authors of the material; or</li>
+
+        <li>e) Declining to grant rights under trademark law for use of some
+          trade names, trademarks, or service marks; or</li>
+
+        <li>f) Requiring indemnification of licensors and authors of that
+          material by anyone who conveys the material (or modified versions of
+          it) with contractual assumptions of liability to the recipient, for
+          any liability that these contractual assumptions directly impose on
+          those licensors and authors.</li>
+      </ul>
+
+      <p>All other non-permissive additional terms are considered &ldquo;further
+        restrictions&rdquo; within the meaning of section 10.  If the Program as you
+        received it, or any part of it, contains a notice stating that it is
+        governed by this License along with a term that is a further
+        restriction, you may remove that term.  If a license document contains
+        a further restriction but permits relicensing or conveying under this
+        License, you may add to a covered work material governed by the terms
+        of that license document, provided that the further restriction does
+        not survive such relicensing or conveying.</p>
+
+      <p>If you add terms to a covered work in accord with this section, you
+        must place, in the relevant source files, a statement of the
+        additional terms that apply to those files, or a notice indicating
+        where to find the applicable terms.</p>
+
+      <p>Additional terms, permissive or non-permissive, may be stated in the
+        form of a separately written license, or stated as exceptions;
+        the above requirements apply either way.</p>
+
+      <h4><a name="section8"></a>8. Termination.</h4>
+
+      <p>You may not propagate or modify a covered work except as expressly
+        provided under this License.  Any attempt otherwise to propagate or
+        modify it is void, and will automatically terminate your rights under
+        this License (including any patent licenses granted under the third
+        paragraph of section 11).</p>
+
+      <p>However, if you cease all violation of this License, then your
+        license from a particular copyright holder is reinstated (a)
+        provisionally, unless and until the copyright holder explicitly and
+        finally terminates your license, and (b) permanently, if the copyright
+        holder fails to notify you of the violation by some reasonable means
+        prior to 60 days after the cessation.</p>
+
+      <p>Moreover, your license from a particular copyright holder is
+        reinstated permanently if the copyright holder notifies you of the
+        violation by some reasonable means, this is the first time you have
+        received notice of violation of this License (for any work) from that
+        copyright holder, and you cure the violation prior to 30 days after
+        your receipt of the notice.</p>
+
+      <p>Termination of your rights under this section does not terminate the
+        licenses of parties who have received copies or rights from you under
+        this License.  If your rights have been terminated and not permanently
+        reinstated, you do not qualify to receive new licenses for the same
+        material under section 10.</p>
+
+      <h4><a name="section9"></a>9. Acceptance Not Required for Having Copies.</h4>
+
+      <p>You are not required to accept this License in order to receive or
+        run a copy of the Program.  Ancillary propagation of a covered work
+        occurring solely as a consequence of using peer-to-peer transmission
+        to receive a copy likewise does not require acceptance.  However,
+        nothing other than this License grants you permission to propagate or
+        modify any covered work.  These actions infringe copyright if you do
+        not accept this License.  Therefore, by modifying or propagating a
+        covered work, you indicate your acceptance of this License to do so.</p>
+
+      <h4><a name="section10"></a>10. Automatic Licensing of Downstream Recipients.</h4>
+
+      <p>Each time you convey a covered work, the recipient automatically
+        receives a license from the original licensors, to run, modify and
+        propagate that work, subject to this License.  You are not responsible
+        for enforcing compliance by third parties with this License.</p>
+
+      <p>An &ldquo;entity transaction&rdquo; is a transaction transferring control of an
+        organization, or substantially all assets of one, or subdividing an
+        organization, or merging organizations.  If propagation of a covered
+        work results from an entity transaction, each party to that
+        transaction who receives a copy of the work also receives whatever
+        licenses to the work the party's predecessor in interest had or could
+        give under the previous paragraph, plus a right to possession of the
+        Corresponding Source of the work from the predecessor in interest, if
+        the predecessor has it or can get it with reasonable efforts.</p>
+
+      <p>You may not impose any further restrictions on the exercise of the
+        rights granted or affirmed under this License.  For example, you may
+        not impose a license fee, royalty, or other charge for exercise of
+        rights granted under this License, and you may not initiate litigation
+        (including a cross-claim or counterclaim in a lawsuit) alleging that
+        any patent claim is infringed by making, using, selling, offering for
+        sale, or importing the Program or any portion of it.</p>
+
+      <h4><a name="section11"></a>11. Patents.</h4>
+
+      <p>A &ldquo;contributor&rdquo; is a copyright holder who authorizes use under this
+        License of the Program or a work on which the Program is based.  The
+        work thus licensed is called the contributor's &ldquo;contributor version&rdquo;.</p>
+
+      <p>A contributor's &ldquo;essential patent claims&rdquo; are all patent claims
+        owned or controlled by the contributor, whether already acquired or
+        hereafter acquired, that would be infringed by some manner, permitted
+        by this License, of making, using, or selling its contributor version,
+        but do not include claims that would be infringed only as a
+        consequence of further modification of the contributor version.  For
+        purposes of this definition, &ldquo;control&rdquo; includes the right to grant
+        patent sublicenses in a manner consistent with the requirements of
+        this License.</p>
+
+      <p>Each contributor grants you a non-exclusive, worldwide, royalty-free
+        patent license under the contributor's essential patent claims, to
+        make, use, sell, offer for sale, import and otherwise run, modify and
+        propagate the contents of its contributor version.</p>
+
+      <p>In the following three paragraphs, a &ldquo;patent license&rdquo; is any express
+        agreement or commitment, however denominated, not to enforce a patent
+        (such as an express permission to practice a patent or covenant not to
+        sue for patent infringement).  To &ldquo;grant&rdquo; such a patent license to a
+        party means to make such an agreement or commitment not to enforce a
+        patent against the party.</p>
+
+      <p>If you convey a covered work, knowingly relying on a patent license,
+        and the Corresponding Source of the work is not available for anyone
+        to copy, free of charge and under the terms of this License, through a
+        publicly available network server or other readily accessible means,
+        then you must either (1) cause the Corresponding Source to be so
+        available, or (2) arrange to deprive yourself of the benefit of the
+        patent license for this particular work, or (3) arrange, in a manner
+        consistent with the requirements of this License, to extend the patent
+        license to downstream recipients.  &ldquo;Knowingly relying&rdquo; means you have
+        actual knowledge that, but for the patent license, your conveying the
+        covered work in a country, or your recipient's use of the covered work
+        in a country, would infringe one or more identifiable patents in that
+        country that you have reason to believe are valid.</p>
+
+      <p>If, pursuant to or in connection with a single transaction or
+        arrangement, you convey, or propagate by procuring conveyance of, a
+        covered work, and grant a patent license to some of the parties
+        receiving the covered work authorizing them to use, propagate, modify
+        or convey a specific copy of the covered work, then the patent license
+        you grant is automatically extended to all recipients of the covered
+        work and works based on it.</p>
+
+      <p>A patent license is &ldquo;discriminatory&rdquo; if it does not include within
+        the scope of its coverage, prohibits the exercise of, or is
+        conditioned on the non-exercise of one or more of the rights that are
+        specifically granted under this License.  You may not convey a covered
+        work if you are a party to an arrangement with a third party that is
+        in the business of distributing software, under which you make payment
+        to the third party based on the extent of your activity of conveying
+        the work, and under which the third party grants, to any of the
+        parties who would receive the covered work from you, a discriminatory
+        patent license (a) in connection with copies of the covered work
+        conveyed by you (or copies made from those copies), or (b) primarily
+        for and in connection with specific products or compilations that
+        contain the covered work, unless you entered into that arrangement,
+        or that patent license was granted, prior to 28 March 2007.</p>
+
+      <p>Nothing in this License shall be construed as excluding or limiting
+        any implied license or other defenses to infringement that may
+        otherwise be available to you under applicable patent law.</p>
+
+      <h4><a name="section12"></a>12. No Surrender of Others' Freedom.</h4>
+
+      <p>If conditions are imposed on you (whether by court order, agreement or
+        otherwise) that contradict the conditions of this License, they do not
+        excuse you from the conditions of this License.  If you cannot convey a
+        covered work so as to satisfy simultaneously your obligations under this
+        License and any other pertinent obligations, then as a consequence you may
+        not convey it at all.  For example, if you agree to terms that obligate you
+        to collect a royalty for further conveying from those to whom you convey
+        the Program, the only way you could satisfy both those terms and this
+        License would be to refrain entirely from conveying the Program.</p>
+
+      <h4><a name="section13"></a>13. Use with the GNU Affero General Public License.</h4>
+
+      <p>Notwithstanding any other provision of this License, you have
+        permission to link or combine any covered work with a work licensed
+        under version 3 of the GNU Affero General Public License into a single
+        combined work, and to convey the resulting work.  The terms of this
+        License will continue to apply to the part which is the covered work,
+        but the special requirements of the GNU Affero General Public License,
+        section 13, concerning interaction through a network will apply to the
+        combination as such.</p>
+
+      <h4><a name="section14"></a>14. Revised Versions of this License.</h4>
+
+      <p>The Free Software Foundation may publish revised and/or new versions of
+        the GNU General Public License from time to time.  Such new versions will
+        be similar in spirit to the present version, but may differ in detail to
+        address new problems or concerns.</p>
+
+      <p>Each version is given a distinguishing version number.  If the
+        Program specifies that a certain numbered version of the GNU General
+        Public License &ldquo;or any later version&rdquo; applies to it, you have the
+        option of following the terms and conditions either of that numbered
+        version or of any later version published by the Free Software
+        Foundation.  If the Program does not specify a version number of the
+        GNU General Public License, you may choose any version ever published
+        by the Free Software Foundation.</p>
+
+      <p>If the Program specifies that a proxy can decide which future
+        versions of the GNU General Public License can be used, that proxy's
+        public statement of acceptance of a version permanently authorizes you
+        to choose that version for the Program.</p>
+
+      <p>Later license versions may give you additional or different
+        permissions.  However, no additional obligations are imposed on any
+        author or copyright holder as a result of your choosing to follow a
+        later version.</p>
+
+      <h4><a name="section15"></a>15. Disclaimer of Warranty.</h4>
+
+      <p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+        APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+        HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; WITHOUT WARRANTY
+        OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+        THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+        PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+        IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+        ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p>
+
+      <h4><a name="section16"></a>16. Limitation of Liability.</h4>
+
+      <p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+        WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+        THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+        GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+        USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+        DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+        PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+        EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+        SUCH DAMAGES.</p>
+
+      <h4><a name="section17"></a>17. Interpretation of Sections 15 and 16.</h4>
+
+      <p>If the disclaimer of warranty and limitation of liability provided
+        above cannot be given local legal effect according to their terms,
+        reviewing courts shall apply local law that most closely approximates
+        an absolute waiver of all civil liability in connection with the
+        Program, unless a warranty or assumption of liability accompanies a
+        copy of the Program in return for a fee.</p>
+
+      <p>END OF TERMS AND CONDITIONS</p>
+
+      <h3><a name="howto"></a>How to Apply These Terms to Your New Programs</h3>
+
+      <p>If you develop a new program, and you want it to be of the greatest
+        possible use to the public, the best way to achieve this is to make it
+        free software which everyone can redistribute and change under these terms.</p>
+
+      <p>To do so, attach the following notices to the program.  It is safest
+        to attach them to the start of each source file to most effectively
+        state the exclusion of warranty; and each file should have at least
+        the &ldquo;copyright&rdquo; line and a pointer to where the full notice is found.</p>
+
+      <pre>    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see &lt;https://www.gnu.org/licenses/&gt;.
+      </pre>
+
+      <p>Also add information on how to contact you by electronic and paper mail.</p>
+
+      <p>If the program does terminal interaction, make it output a short
+        notice like this when it starts in an interactive mode:</p>
+
+      <pre>    &lt;program&gt;  Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+      </pre>
+
+      <p>The hypothetical commands `show w' and `show c' should show the appropriate
+        parts of the General Public License.  Of course, your program's commands
+        might be different; for a GUI interface, you would use an &ldquo;about box&rdquo;.</p>
+
+      <p>You should also get your employer (if you work as a programmer) or school,
+        if any, to sign a &ldquo;copyright disclaimer&rdquo; for the program, if necessary.
+        For more information on this, and how to apply and follow the GNU GPL, see
+        &lt;<a href="https://www.gnu.org/licenses/">https://www.gnu.org/licenses/</a>&gt;.</p>
+
+      <p>The GNU General Public License does not permit incorporating your program
+        into proprietary programs.  If your program is a subroutine library, you
+        may consider it more useful to permit linking proprietary applications with
+        the library.  If this is what you want to do, use the GNU Lesser General
+        Public License instead of this License.  But first, please read
+        &lt;<a href="https://www.gnu.org/licenses/why-not-lgpl.html">https://www.gnu.org/licenses/why-not-lgpl.html</a>&gt;.</p>
+    </main>
+  </body>
+</html>
diff --git a/static/icon-12px.png b/static/icon-12px.png
new file mode 100644 (file)
index 0000000..3fe8b0a
Binary files /dev/null and b/static/icon-12px.png differ
diff --git a/static/icon-16px.png b/static/icon-16px.png
new file mode 100644 (file)
index 0000000..1151f76
Binary files /dev/null and b/static/icon-16px.png differ
diff --git a/static/se212-f19/se212-h02q04d-soln.grg b/static/se212-f19/se212-h02q04d-soln.grg
new file mode 100644 (file)
index 0000000..e395717
--- /dev/null
@@ -0,0 +1,25 @@
+#u abandali
+#a h02
+
+#q q04d
+
+p <=> q, p & q <=> (p | q)
+
+#check TP
+
+p <=> q  <->  p & q <=> (p | q)
+
+ 1) p & q             <=> (p | q)
+ 2) (p & q   => p | q) &  (p | q => p & q)                by equiv
+ 3) (!(p & q) | p | q) & (!(p | q) | p & q)               by impl * 2
+ 4) (!p | !q  | p | q) & (!(p | q) | p & q)               by dm
+ 5) (true | !q | q)    & (!(p | q) | p & q)               by lem
+ 6) true               & (!(p | q) | p & q)               by simp1
+ 7)                       !(p | q) | p & q                by simp1
+ 8)                       !p & !q  | p & q                by dm
+ 9)                  (!p & !q | p) & (!p & !q | q)        by distr
+10)            (!p | p) & (!q | p) & (!p | q) & (!q | q)  by distr * 2
+11)                true & (!q | p) & (!p | q) & true      by lem * 2
+12)                       (!q | p) & (!p | q)             by simp1 * 2
+13)                       (q => p) & (p => q)             by impl * 2
+14)                       p <=> q                         by equiv
diff --git a/static/se212-f19/se212-t01.html b/static/se212-f19/se212-t01.html
new file mode 100644 (file)
index 0000000..d81cbd7
--- /dev/null
@@ -0,0 +1,343 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+<!-- 2019-09-18 Wed 23:12 -->
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>Propositional Logic</title>
+<meta name="generator" content="Org mode" />
+<meta name="author" content="Amin Bandali" />
+<style type="text/css">
+ <!--/*--><![CDATA[/*><!--*/
+  .title  { text-align: center;
+             margin-bottom: .2em; }
+  .subtitle { text-align: center;
+              font-size: medium;
+              font-weight: bold;
+              margin-top:0; }
+  .todo   { font-family: monospace; color: red; }
+  .done   { font-family: monospace; color: green; }
+  .priority { font-family: monospace; color: orange; }
+  .tag    { background-color: #eee; font-family: monospace;
+            padding: 2px; font-size: 80%; font-weight: normal; }
+  .timestamp { color: #bebebe; }
+  .timestamp-kwd { color: #5f9ea0; }
+  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
+  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
+  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
+  .underline { text-decoration: underline; }
+  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
+  p.verse { margin-left: 3%; }
+  pre {
+    border: 1px solid #ccc;
+    box-shadow: 3px 3px 3px #eee;
+    padding: 8pt;
+    font-family: monospace;
+    overflow: auto;
+    margin: 1.2em;
+  }
+  pre.src {
+    position: relative;
+    overflow: visible;
+    padding-top: 1.2em;
+  }
+  pre.src:before {
+    display: none;
+    position: absolute;
+    background-color: white;
+    top: -10px;
+    right: 10px;
+    padding: 3px;
+    border: 1px solid black;
+  }
+  pre.src:hover:before { display: inline;}
+  /* Languages per Org manual */
+  pre.src-asymptote:before { content: 'Asymptote'; }
+  pre.src-awk:before { content: 'Awk'; }
+  pre.src-C:before { content: 'C'; }
+  /* pre.src-C++ doesn't work in CSS */
+  pre.src-clojure:before { content: 'Clojure'; }
+  pre.src-css:before { content: 'CSS'; }
+  pre.src-D:before { content: 'D'; }
+  pre.src-ditaa:before { content: 'ditaa'; }
+  pre.src-dot:before { content: 'Graphviz'; }
+  pre.src-calc:before { content: 'Emacs Calc'; }
+  pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
+  pre.src-fortran:before { content: 'Fortran'; }
+  pre.src-gnuplot:before { content: 'gnuplot'; }
+  pre.src-haskell:before { content: 'Haskell'; }
+  pre.src-hledger:before { content: 'hledger'; }
+  pre.src-java:before { content: 'Java'; }
+  pre.src-js:before { content: 'Javascript'; }
+  pre.src-latex:before { content: 'LaTeX'; }
+  pre.src-ledger:before { content: 'Ledger'; }
+  pre.src-lisp:before { content: 'Lisp'; }
+  pre.src-lilypond:before { content: 'Lilypond'; }
+  pre.src-lua:before { content: 'Lua'; }
+  pre.src-matlab:before { content: 'MATLAB'; }
+  pre.src-mscgen:before { content: 'Mscgen'; }
+  pre.src-ocaml:before { content: 'Objective Caml'; }
+  pre.src-octave:before { content: 'Octave'; }
+  pre.src-org:before { content: 'Org mode'; }
+  pre.src-oz:before { content: 'OZ'; }
+  pre.src-plantuml:before { content: 'Plantuml'; }
+  pre.src-processing:before { content: 'Processing.js'; }
+  pre.src-python:before { content: 'Python'; }
+  pre.src-R:before { content: 'R'; }
+  pre.src-ruby:before { content: 'Ruby'; }
+  pre.src-sass:before { content: 'Sass'; }
+  pre.src-scheme:before { content: 'Scheme'; }
+  pre.src-screen:before { content: 'Gnu Screen'; }
+  pre.src-sed:before { content: 'Sed'; }
+  pre.src-sh:before { content: 'shell'; }
+  pre.src-sql:before { content: 'SQL'; }
+  pre.src-sqlite:before { content: 'SQLite'; }
+  /* additional languages in org.el's org-babel-load-languages alist */
+  pre.src-forth:before { content: 'Forth'; }
+  pre.src-io:before { content: 'IO'; }
+  pre.src-J:before { content: 'J'; }
+  pre.src-makefile:before { content: 'Makefile'; }
+  pre.src-maxima:before { content: 'Maxima'; }
+  pre.src-perl:before { content: 'Perl'; }
+  pre.src-picolisp:before { content: 'Pico Lisp'; }
+  pre.src-scala:before { content: 'Scala'; }
+  pre.src-shell:before { content: 'Shell Script'; }
+  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
+  /* additional language identifiers per "defun org-babel-execute"
+       in ob-*.el */
+  pre.src-cpp:before  { content: 'C++'; }
+  pre.src-abc:before  { content: 'ABC'; }
+  pre.src-coq:before  { content: 'Coq'; }
+  pre.src-groovy:before  { content: 'Groovy'; }
+  /* additional language identifiers from org-babel-shell-names in
+     ob-shell.el: ob-shell is the only babel language using a lambda to put
+     the execution function name together. */
+  pre.src-bash:before  { content: 'bash'; }
+  pre.src-csh:before  { content: 'csh'; }
+  pre.src-ash:before  { content: 'ash'; }
+  pre.src-dash:before  { content: 'dash'; }
+  pre.src-ksh:before  { content: 'ksh'; }
+  pre.src-mksh:before  { content: 'mksh'; }
+  pre.src-posh:before  { content: 'posh'; }
+  /* Additional Emacs modes also supported by the LaTeX listings package */
+  pre.src-ada:before { content: 'Ada'; }
+  pre.src-asm:before { content: 'Assembler'; }
+  pre.src-caml:before { content: 'Caml'; }
+  pre.src-delphi:before { content: 'Delphi'; }
+  pre.src-html:before { content: 'HTML'; }
+  pre.src-idl:before { content: 'IDL'; }
+  pre.src-mercury:before { content: 'Mercury'; }
+  pre.src-metapost:before { content: 'MetaPost'; }
+  pre.src-modula-2:before { content: 'Modula-2'; }
+  pre.src-pascal:before { content: 'Pascal'; }
+  pre.src-ps:before { content: 'PostScript'; }
+  pre.src-prolog:before { content: 'Prolog'; }
+  pre.src-simula:before { content: 'Simula'; }
+  pre.src-tcl:before { content: 'tcl'; }
+  pre.src-tex:before { content: 'TeX'; }
+  pre.src-plain-tex:before { content: 'Plain TeX'; }
+  pre.src-verilog:before { content: 'Verilog'; }
+  pre.src-vhdl:before { content: 'VHDL'; }
+  pre.src-xml:before { content: 'XML'; }
+  pre.src-nxml:before { content: 'XML'; }
+  /* add a generic configuration mode; LaTeX export needs an additional
+     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
+  pre.src-conf:before { content: 'Configuration File'; }
+
+  table { border-collapse:collapse; }
+  caption.t-above { caption-side: top; }
+  caption.t-bottom { caption-side: bottom; }
+  td, th { vertical-align:top;  }
+  th.org-right  { text-align: center;  }
+  th.org-left   { text-align: center;   }
+  th.org-center { text-align: center; }
+  td.org-right  { text-align: right;  }
+  td.org-left   { text-align: left;   }
+  td.org-center { text-align: center; }
+  dt { font-weight: bold; }
+  .footpara { display: inline; }
+  .footdef  { margin-bottom: 1em; }
+  .figure { padding: 1em; }
+  .figure p { text-align: center; }
+  .equation-container {
+    display: table;
+    text-align: center;
+    width: 100%;
+  }
+  .equation {
+    vertical-align: middle;
+  }
+  .equation-label {
+    display: table-cell;
+    text-align: right;
+    vertical-align: middle;
+  }
+  .inlinetask {
+    padding: 10px;
+    border: 2px solid gray;
+    margin: 10px;
+    background: #ffffcc;
+  }
+  #org-div-home-and-up
+   { text-align: right; font-size: 70%; white-space: nowrap; }
+  textarea { overflow-x: auto; }
+  .linenr { font-size: smaller }
+  .code-highlighted { background-color: #ffff00; }
+  .org-info-js_info-navigation { border-style: none; }
+  #org-info-js_console-label
+    { font-size: 10px; font-weight: bold; white-space: nowrap; }
+  .org-info-js_search-highlight
+    { background-color: #ffff00; color: #000000; font-weight: bold; }
+  .org-svg { width: 90%; }
+  /*]]>*/-->
+</style>
+<script type="text/javascript">
+/*
+@licstart  The following is the entire license notice for the
+JavaScript code in this tag.
+
+Copyright (C) 2012-2019 Free Software Foundation, Inc.
+
+The JavaScript code in this tag is free software: you can
+redistribute it and/or modify it under the terms of the GNU
+General Public License (GNU GPL) as published by the Free Software
+Foundation, either version 3 of the License, or (at your option)
+any later version.  The code is distributed WITHOUT ANY WARRANTY;
+without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
+
+As additional permission under GNU GPL version 3 section 7, you
+may distribute non-source (e.g., minimized or compacted) forms of
+that code without the copy of the GNU GPL normally required by
+section 4, provided you include this license notice and a URL
+through which recipients can access the Corresponding Source.
+
+
+@licend  The above is the entire license notice
+for the JavaScript code in this tag.
+*/
+<!--/*--><![CDATA[/*><!--*/
+ function CodeHighlightOn(elem, id)
+ {
+   var target = document.getElementById(id);
+   if(null != target) {
+     elem.cacheClassElem = elem.className;
+     elem.cacheClassTarget = target.className;
+     target.className = "code-highlighted";
+     elem.className   = "code-highlighted";
+   }
+ }
+ function CodeHighlightOff(elem, id)
+ {
+   var target = document.getElementById(id);
+   if(elem.cacheClassElem)
+     elem.className = elem.cacheClassElem;
+   if(elem.cacheClassTarget)
+     target.className = elem.cacheClassTarget;
+ }
+/*]]>*///-->
+</script>
+</head>
+<body>
+<div id="content">
+<h1 class="title">Propositional Logic
+<br />
+<span class="subtitle">(SE 212 TUT 102)</span>
+</h1>
+
+<div id="outline-container-org3ca277c" class="outline-2">
+<h2 id="org3ca277c"><span class="section-number-2">1</span> Are you at the right place?</h2>
+<div class="outline-text-2" id="text-1">
+<p>
+We’re in MC 4040, for SE 212 TUT 102 (03:30-04:20W)
+</p>
+</div>
+</div>
+
+<div id="outline-container-orgc50c656" class="outline-2">
+<h2 id="orgc50c656"><span class="section-number-2">2</span> </h2>
+<div class="outline-text-2" id="text-2">
+<div class="org-center">
+<p>
+George
+</p>
+</div>
+</div>
+</div>
+
+<div id="outline-container-orgc4929c6" class="outline-2">
+<h2 id="orgc4929c6"><span class="section-number-2">3</span> </h2>
+<div class="outline-text-2" id="text-3">
+
+<div class="figure">
+<p><img src="./george.png" alt="george.png" />
+</p>
+</div>
+
+<p>
+<a href="https://www.student.cs.uwaterloo.ca/~se212/george/ask-george/">https://www.student.cs.uwaterloo.ca/~se212/george/ask-george/</a>
+</p>
+</div>
+</div>
+
+<div id="outline-container-org67896df" class="outline-2">
+<h2 id="org67896df"><span class="section-number-2">4</span> Tool support</h2>
+<div class="outline-text-2" id="text-4">
+<p>
+Over the years, students have developed a number of tools for using
+George and/or editing <code>.grg</code> files, such as plugins for Vim and Atom.
+</p>
+
+<p>
+Check them out at
+</p>
+
+<div class="org-center">
+<p>
+Course website → George User Manual → Contributions
+</p>
+</div>
+</div>
+</div>
+
+<div id="outline-container-org88ee3fd" class="outline-2">
+<h2 id="org88ee3fd"><span class="section-number-2">5</span> George mode for Emacs (new!)</h2>
+<div class="outline-text-2" id="text-5">
+<ul class="org-ul">
+<li>Syntax highlighting + a number of convenience functions</li>
+<li>Grab it from <a href="https://git.sr.ht/~bandali/george-mode">https://git.sr.ht/~bandali/george-mode</a> <br />
+(soon on Contributions page)</li>
+</ul>
+</div>
+</div>
+
+<div id="outline-container-org0ba02d1" class="outline-2">
+<h2 id="org0ba02d1"><span class="section-number-2">6</span> <code>a00q01.grg</code> (demo)</h2>
+<div class="outline-text-2" id="text-6">
+<p>
+Walk through answering <code>a00q01.grg</code> and submitting on MarkUs
+</p>
+</div>
+</div>
+
+<div id="outline-container-orgb863070" class="outline-2">
+<h2 id="orgb863070"><span class="section-number-2">7</span> Homework 1</h2>
+<div class="outline-text-2" id="text-7">
+<ul class="org-ul">
+<li>Let’s do a couple of questions from Homework 1</li>
+<li>Now you try the rest, let me know if you have any questions</li>
+</ul>
+</div>
+</div>
+</div>
+<div id="postamble" class="status">
+<p class="date">Date: Wed Sep 11, 2019</p>
+<p class="author">Author: Amin Bandali</p>
+<p class="email">Email: <a href="mailto:bandali@uwaterloo.ca">bandali@uwaterloo.ca</a></p>
+<p class="date">Created: 2019-09-18 Wed 23:12</p>
+<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
+</div>
+</body>
+</html>
diff --git a/static/se212-f19/se212-t01.org b/static/se212-f19/se212-t01.org
new file mode 100644 (file)
index 0000000..12e9cdd
--- /dev/null
@@ -0,0 +1,78 @@
+#+macro: topic Propositional Logic
+
+#+macro: room MC 4040
+#+macro: sec1 SE 212 TUT 101
+#+macro: sec2 SE 212 TUT 102
+#+macro: time1 02:30-03:20W
+#+macro: time2 03:30-04:20W
+
+#+macro: sec {{{sec2}}}
+#+macro: sectime {{{time2}}}
+
+#+title:    {{{topic}}}
+#+subtitle: ({{{sec}}})
+#+author:   Amin Bandali
+#+email:    bandali@uwaterloo.ca
+#+date:     Wed Sep 11, 2019
+#+language: en
+#+options:  email:t num:t toc:nil \n:nil ::t |:t ^:t -:t f:t *:t <:t
+#+options:  tex:t  d:nil todo:t pri:nil tags:not-in-toc
+#+select_tags: export
+#+exclude_tags: noexport
+#+startup: beamer
+#+latex_class: beamer
+# #+latex_class_options: [bigger]
+#+latex_header: \setbeamercovered{transparent}
+#+latex: \setbeamertemplate{itemize items}[circle]
+#+beamer_color_theme: beaver
+
+* Are you at the right place?
+
+We’re in {{{room}}}, for {{{sec}}} ({{{sectime}}})
+
+* 
+
+#+latex: \definecolor{darkred}{rgb}{0.8,0,0}
+#+latex: {\Large \color{darkred}
+#+begin_center
+George
+#+end_center
+#+latex: }
+
+* 
+
+#+latex: \vspace{-2.5em}
+file:./george.png
+
+#+latex: {\footnotesize
+https://www.student.cs.uwaterloo.ca/~se212/george/ask-george/
+#+latex: }
+
+* Tool support
+
+Over the years, students have developed a number of tools for using
+George and/or editing =.grg= files, such as plugins for Vim and Atom.
+
+Check them out at
+
+#+begin_center
+Course website → George User Manual → Contributions
+#+end_center
+
+* George mode for Emacs (new!)
+
+- Syntax highlighting + a number of convenience functions
+- Grab it from https://git.sr.ht/~bandali/george-mode \\
+  (soon on Contributions page)
+
+* =a00q01.grg= (demo)
+
+Walk through answering =a00q01.grg= and submitting on MarkUs
+
+* Homework 1
+:PROPERTIES:
+:BEAMER_act: [<+->]
+:END:
+
+- Let’s do a couple of questions from Homework 1
+- Now you try the rest, let me know if you have any questions
diff --git a/static/se212-f19/se212-t05.org b/static/se212-f19/se212-t05.org
new file mode 100644 (file)
index 0000000..a85896d
--- /dev/null
@@ -0,0 +1,272 @@
+#+title:    Predicate Logic
+#+subtitle: (SE 212 Tutorial 5)
+#+author:   Amin Bandali
+#+email:    bandali@uwaterloo.ca
+#+date:     Wed Oct 9, 2019
+#+language: en
+#+options:  email:t num:t toc:nil \n:nil ::t |:t ^:t -:t f:t *:t <:t
+#+options:  tex:t  d:nil todo:t pri:nil tags:not-in-toc
+#+select_tags: export
+#+exclude_tags: noexport
+#+startup: beamer
+#+latex_class: beamer
+# #+latex_class_options: [bigger]
+#+latex_header: \setbeamercovered{transparent}
+#+latex: \setbeamertemplate{itemize items}[circle]
+#+beamer_color_theme: beaver
+
+* Today’s plan
+:PROPERTIES:
+:BEAMER_act: [<+->]
+:END:
+
+- do some semantics questions from homework 4
+- do some ND questions from homework 5
+
+* =h04q05=
+
+Provide a counterexample to show that the following argument is not
+valid and demonstrate that your answer is correct.
+
+#+begin_example
+forall y : M . exists x : N . p(g(x), y)
+|=
+exists z : M . p(z, z)
+#+end_example
+
+* =h04q05= \small{(cont’d)}
+
+#+begin_example
+Domain:
+    M = {m1, m2}
+    N = {n1, n2}
+
+Mapping:
+    Syntax  | Meaning
+    --------------------------
+      g(.)  |  G(n1) := m1
+            |  G(n2) := m2
+    --------------------------
+    p(., .) | P(m1, m1) := F
+            | P(m1, m2) := T
+            | P(m2, m1) := T
+            | P(m2, m2) := F
+#+end_example
+
+* =h04q05= \small{(cont’d)}
+
+#+begin_example
+Premise:
+      [forall y : M . exists x : N . p(g(x), y)]
+    = [exists x: N. p(g(x), ^m1)] AND
+      [exists x: N . p(g(x), ^m2)]
+    = (P(G(n1), m1) OR P(G(n2), m1)) AND
+      (P(G(n1), m2) OR P(G(n2), m2))
+    = (P(m1, m1) OR P(m2, m1)) AND
+      (P(m1, m2) OR P(m2, m2))
+    = (F OR T) AND (T OR F)
+    = T
+#+end_example
+
+* =h04q05= \small{(cont’d)}
+
+#+begin_example
+Conclusion:
+      [exists z: M . p(z, z)]
+    = P(m1, m1) OR P(m2, m2)
+    = F OR F
+    = F
+#+end_example
+
+* =h04q06=
+
+Express the following sentences in predicate logic. Use types in your
+formalization.  Is the set of formulas consistent?  Demonstrate that
+your answer is correct using the semantics of predicate logic.
+
+#+begin_example
+All programmer like some computers.
+Some programmers use MAC.
+Therefore, some people who like some computers use MAC.
+#+end_example
+
+* =h04q06= \small{(cont’d)}
+
+All programmer like some computers.\\
+Some programmers use MAC.\\
+Therefore, some people who like some computers use MAC.
+
+#+begin_example
+Formalization:
+    programmer(x) means x is a programmer
+    usesmac(x) means x uses MAC
+    likes(x, y) means x likes y
+
+forall x: Person . programmer(x) =>
+           exists y: Computer . likes(x, y),
+exists x: Person . programmer(x) & usesmac(x)
+|-
+exists x: Person .
+  (exists y: Computer . likes(x, y) & usesmac(x))
+#+end_example
+
+* =h04q06= \small{(cont’d)}
+
+These sentences are /consistent/.  Here is an interpretation in which
+all the formulas are T:
+
+#+begin_example
+Domain:
+    People = {John}
+    Computer = {MacPro}
+
+Mapping:
+    Syntax          | Meaning
+    -------------------------------------------
+    programmer(.)   | programmer(John) = T
+    likes(.,.)      | likes(John, MacPro) = T
+    usesmac(.)      | usesmac(John) = T
+#+end_example
+
+* =h04q06= \small{(cont’d)}
+
+#+begin_example
+formula 1:
+      [forall x: Person . programmer(x) =>
+       exists y: Computer . likes(x, y)]
+    = [programmer(^John) =>
+       exists y: Computer . likes(^John, y)]]
+    = programmer(John) IMP likes(John, MacPro)
+    = T IMP T
+    = T
+
+formula 2:
+      [exists x: Person . programmer(x) & usesmac(x)]
+    = programmer(John) AND usesmac(John)
+    = T AND T
+    = T
+#+end_example
+
+* =h04q06= \small{(cont’d)}
+
+#+begin_example
+formula 3:
+      [exists x: Person . (exists y: Computer .
+       likes(x, y) & usesmac(x))]
+    = [exists y: Computer .
+       likes(^John, y) & usesmac(^John)]
+    = likes(John, MacPro) AND usesmac(John)
+    = T AND T
+    = T
+#+end_example
+
+* =h05q01a=
+
+If the following arguments are valid, use natural deduction AND
+semantic tableaux to prove them; otherwise, provide a counterexample.
+
+#+begin_example
+forall x . s(x) | t(x),
+forall x . s(x) => t(x) & k(c, x),
+forall x . t(x) => m(x)
+|-
+m(c)
+where c is a constant
+#+end_example
+
+* =h05q01a= \small{(cont’d)}
+
+#+begin_example
+#check ND
+forall x . s(x) | t(x),
+forall x . s(x) => t(x) & k(c, x),
+forall x . t(x) => m(x)
+|-
+m(c)
+#+end_example
+
+* =h05q01a= \small{(cont’d)}
+
+#+begin_example
+1) forall x . s(x) | t(x) premise
+2) forall x . s(x) => t(x) & k(c, x) premise
+3) forall x . t(x) => m(x) premise
+4) s(c) | t(c) by forall_e on 1
+5) s(c) => t(c) & k(c, c) by forall_e on 2
+6) t(c) => m(c) by forall_e on 3
+7) case s(c) {
+    8) t(c) & k(c, c) by imp_e on 5, 7
+    9) t(c) by and_e on 8
+    10) m(c) by imp_e on 6, 9
+}
+11) case t(c) {
+    12) m(c) by imp_e on 6, 11
+}
+13) m(c) by cases on 4, 7-10, 11-12
+#+end_example
+
+* =h05q01b=
+
+Is this formula a tautology?
+
+#+begin_example
+|- (exists x . p(x)) => forall y . p(y)
+#+end_example
+
+* =h05q01b= \small{(cont’d)}
+
+No, this formula is not a tautology.  Interpretation:
+
+#+begin_example
+1) Domain = {a, b}
+
+2) Mapping:
+    Syntax  | Meaning
+    ----------------------
+    p(.)    | P(a) = T
+            | P(b) = F
+
+Conclusion:
+  [(exists x. p(x)) => forall y. p(y)]
+= (P(a) OR P(b)) IMP (P(a) AND P(b))
+= (T OR F) IMP (T AND F)
+= T IMP F
+= F
+#+end_example
+
+* =h05q01d=
+
+Is this argument valid?
+
+#+begin_example
+forall x . p(x) | q(x),
+forall x . !p(x)
+|-
+forall x . q(x)
+#+end_example
+
+* =h05q01d= \small{(cont’d)}
+
+#+begin_example
+#check ND
+
+forall x . p(x) | q(x), forall x . !p(x) |- forall x . q(x)
+
+1) forall x . p(x) | q(x) premise
+2) forall x . !p(x) premise
+3) for every xg {
+    4) p(xg) | q(xg) by forall_e on 1
+    5) case p(xg) {
+        6) !p(xg) by forall_e on 2
+        7) q(xg) by not_e on 5, 6
+    }
+    8) case q(xg) {}
+    9) q(xg) by cases on 4, 5-7, 8-8
+}
+10) forall x. q(x) by forall_i on 3-9
+#+end_example
+
+* Announcements
+
+- no tutorial next week (Oct 16) (reading week)
+- no tutorial the week after (Oct 23) (midterm marking)
diff --git a/static/style.css b/static/style.css
new file mode 100644 (file)
index 0000000..8d43f66
--- /dev/null
@@ -0,0 +1,178 @@
+body {
+  /* background: #fffffa; */
+  font-family: sans-serif;
+  line-height: 1.6;
+  padding: 2em;
+}
+
+header, nav, main, footer {
+  margin: auto;
+  max-width: 38rem;
+}
+
+body > header {
+  margin-bottom: 0.25em;
+}
+body > header h1 {
+  margin: 0;
+  font-size: 100%;
+}
+header a {
+  color: inherit;
+}
+nav ul {
+  margin: 0;
+  padding: 0;
+}
+nav li {
+  display: inline;
+  text-transform: lowercase;
+}
+nav li + li {
+  margin-left: 0.5em;
+}
+nav a {
+  color: #333;
+}
+nav, main {
+  margin-bottom: 1.5em;
+}
+header >:not(h1) {
+  font-size: 0.875em;
+}
+header > h1 + p {
+  margin-top: -1em;
+}
+footer {
+  border-top: 1px solid #bbb;
+  font-size: 0.84em;
+  padding-top: 1em;
+}
+footer p {
+  margin: 0;
+}
+
+h1 {
+  font-size: 1.5em;
+}
+h2 {
+  font-size: 1.25em;
+}
+h3 {
+  font-size: 1.125em;
+}
+
+a {
+  color: #036;
+}
+/*
+a:hover, a:focus {
+  color: #005a6a;
+}
+*/
+a:active {
+  outline-offset: 2px;
+}
+
+h4 {
+  margin: 0.75em auto;
+}
+
+article h3 {
+  font-weight: normal;
+  color: #777;
+}
+
+.notice {
+  background-color: #efefef;
+  text-align: center;
+  position: relative;
+}
+.notice::before {
+  content: "↪";
+  position: absolute;
+  left: 0.5em;
+  bottom: 0.05em;
+}
+.notice::after {
+  content: "↩";
+  position: absolute;
+  right: 0.5em;
+  bottom: 0.05em;
+}
+
+pre, code {
+  background: #f6f6f6;
+  font: 1.15em monospace;
+  padding: 1em;
+}
+pre > code {
+  padding: 0;
+  background: initial;
+}
+code {
+  text-transform: none;
+  padding: .2em .3em;
+}
+strong {
+  font-weight: bold;
+}
+em {
+  font-style: italic;
+}
+
+table td {
+  padding: 0.125em 0.3em;
+}
+table td:first-child {
+  padding-left: 0;
+}
+table td:last-child {
+  padding-right: 0
+}
+#notes {
+  margin-top: 0.9em;
+}
+.post-list {
+  width: 100%;
+}
+.post-list tr:hover {
+  background: #fafafa;
+}
+.post-list td {
+  padding: 0.25em 0;
+}
+.post-list td:nth-child(2) {
+  text-align: right;
+}
+
+small, dd {
+  font-size: 0.875em;
+}
+.muted {
+  color: #666;
+}
+.inbox {
+  margin-top: 2em;
+}
+
+li, dd {
+  margin-bottom: 0.25em;
+}
+
+.feed-icon {
+  margin-right: 3px
+}
+.feed-icon-h2 {
+  margin-left: 5px;
+  position: relative;
+  top: 2px
+}
+.smly {
+  display: inline-block;
+  transform: rotate(90deg);
+  margin-left: 0.2em;
+}
+.warn {
+  color: #a10029;
+}
diff --git a/style.css b/style.css
deleted file mode 100644 (file)
index 8d43f66..0000000
--- a/style.css
+++ /dev/null
@@ -1,178 +0,0 @@
-body {
-  /* background: #fffffa; */
-  font-family: sans-serif;
-  line-height: 1.6;
-  padding: 2em;
-}
-
-header, nav, main, footer {
-  margin: auto;
-  max-width: 38rem;
-}
-
-body > header {
-  margin-bottom: 0.25em;
-}
-body > header h1 {
-  margin: 0;
-  font-size: 100%;
-}
-header a {
-  color: inherit;
-}
-nav ul {
-  margin: 0;
-  padding: 0;
-}
-nav li {
-  display: inline;
-  text-transform: lowercase;
-}
-nav li + li {
-  margin-left: 0.5em;
-}
-nav a {
-  color: #333;
-}
-nav, main {
-  margin-bottom: 1.5em;
-}
-header >:not(h1) {
-  font-size: 0.875em;
-}
-header > h1 + p {
-  margin-top: -1em;
-}
-footer {
-  border-top: 1px solid #bbb;
-  font-size: 0.84em;
-  padding-top: 1em;
-}
-footer p {
-  margin: 0;
-}
-
-h1 {
-  font-size: 1.5em;
-}
-h2 {
-  font-size: 1.25em;
-}
-h3 {
-  font-size: 1.125em;
-}
-
-a {
-  color: #036;
-}
-/*
-a:hover, a:focus {
-  color: #005a6a;
-}
-*/
-a:active {
-  outline-offset: 2px;
-}
-
-h4 {
-  margin: 0.75em auto;
-}
-
-article h3 {
-  font-weight: normal;
-  color: #777;
-}
-
-.notice {
-  background-color: #efefef;
-  text-align: center;
-  position: relative;
-}
-.notice::before {
-  content: "↪";
-  position: absolute;
-  left: 0.5em;
-  bottom: 0.05em;
-}
-.notice::after {
-  content: "↩";
-  position: absolute;
-  right: 0.5em;
-  bottom: 0.05em;
-}
-
-pre, code {
-  background: #f6f6f6;
-  font: 1.15em monospace;
-  padding: 1em;
-}
-pre > code {
-  padding: 0;
-  background: initial;
-}
-code {
-  text-transform: none;
-  padding: .2em .3em;
-}
-strong {
-  font-weight: bold;
-}
-em {
-  font-style: italic;
-}
-
-table td {
-  padding: 0.125em 0.3em;
-}
-table td:first-child {
-  padding-left: 0;
-}
-table td:last-child {
-  padding-right: 0
-}
-#notes {
-  margin-top: 0.9em;
-}
-.post-list {
-  width: 100%;
-}
-.post-list tr:hover {
-  background: #fafafa;
-}
-.post-list td {
-  padding: 0.25em 0;
-}
-.post-list td:nth-child(2) {
-  text-align: right;
-}
-
-small, dd {
-  font-size: 0.875em;
-}
-.muted {
-  color: #666;
-}
-.inbox {
-  margin-top: 2em;
-}
-
-li, dd {
-  margin-bottom: 0.25em;
-}
-
-.feed-icon {
-  margin-right: 3px
-}
-.feed-icon-h2 {
-  margin-left: 5px;
-  position: relative;
-  top: 2px
-}
-.smly {
-  display: inline-block;
-  transform: rotate(90deg);
-  margin-left: 0.2em;
-}
-.warn {
-  color: #a10029;
-}