+++ /dev/null
-<!--# 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" -->
-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
+++ /dev/null
-<!--# 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 & 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" -->
--- /dev/null
+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 & 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)
+++ /dev/null
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-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
-vhM+q4339VYMt/RYM0PIraejWttGAtb6bQ==
-=7ozV
------END PGP PUBLIC KEY BLOCK-----
+++ /dev/null
-<!--# 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
-“Desktop”, 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 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" -->
--- /dev/null
+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
+“Desktop”, 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 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)
+++ /dev/null
-<!--# 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 <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" -->
--- /dev/null
+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 <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)
+++ /dev/null
-<!--# 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 &
-Refinement, Software Requirements Eng., Software Design, Operating
-Systems, Computational Complexity, Design & 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 & 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 & 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" -->
--- /dev/null
+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 &
+Refinement, Software Requirements Eng., Software Design, Operating
+Systems, Computational Complexity, Design & 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 & 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 & 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)
--- /dev/null
+<?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/\&/\&/g;s/>/\>/g;s/</\</g" __i.m4 | m4 -D__feed)')
+</feed>
+++ /dev/null
-<?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>
--- /dev/null
+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 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>')
+++ /dev/null
-<!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 © 2007 Free Software Foundation, Inc.
- <<a href="https://fsf.org/">https://fsf.org/</a>></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>“This License” refers to version 3 of the GNU General Public License.</p>
-
- <p>“Copyright” also means copyright-like laws that apply to other kinds of
- works, such as semiconductor masks.</p>
-
- <p>“The Program” refers to any copyrightable work licensed under this
- License. Each licensee is addressed as “you”. “Licensees” and
- “recipients” may be individuals or organizations.</p>
-
- <p>To “modify” 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 “modified version” of the
- earlier work or a work “based on” the earlier work.</p>
-
- <p>A “covered work” means either the unmodified Program or a work based
- on the Program.</p>
-
- <p>To “propagate” 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 “convey” 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 “Appropriate Legal Notices”
- 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 “source code” for a work means the preferred form of the work
- for making modifications to it. “Object code” means any non-source
- form of a work.</p>
-
- <p>A “Standard Interface” 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 “System Libraries” 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
- “Major Component”, 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 “Corresponding Source” 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
- “keep intact all notices”.</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
- “aggregate” 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 “User Product” is either (1) a “consumer product”, 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, “normally used” 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>“Installation Information” 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>“Additional permissions” 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 “further
- restrictions” 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 “entity transaction” 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 “contributor” 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 “contributor version”.</p>
-
- <p>A contributor's “essential patent claims” 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, “control” 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 “patent license” 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 “grant” 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. “Knowingly relying” 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 “discriminatory” 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 “or any later version” 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 “AS IS” 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 “copyright” line and a pointer to where the full notice is found.</p>
-
- <pre> <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- 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 <https://www.gnu.org/licenses/>.
- </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> <program> Copyright (C) <year> <name of author>
- 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 “about box”.</p>
-
- <p>You should also get your employer (if you work as a programmer) or school,
- if any, to sign a “copyright disclaimer” for the program, if necessary.
- For more information on this, and how to apply and follow the GNU GPL, see
- <<a href="https://www.gnu.org/licenses/">https://www.gnu.org/licenses/</a>>.</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
- <<a href="https://www.gnu.org/licenses/why-not-lgpl.html">https://www.gnu.org/licenses/why-not-lgpl.html</a>>.</p>
- </main>
- </body>
-</html>
+++ /dev/null
-;;; 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))))
+++ /dev/null
-;;; 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" "")))
--- /dev/null
+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',,` — 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>'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>')')
+++ /dev/null
-<!--# 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 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 © 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–2019" -->
-<!--# include virtual="/ssi/post.html" -->
--- /dev/null
+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 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 © 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–2019')dnl
+include(footer.html)
+++ /dev/null
-<!--# 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" -->
--- /dev/null
+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)
+++ /dev/null
-#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
+++ /dev/null
-<?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>
+++ /dev/null
-#+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
+++ /dev/null
-#+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)
+++ /dev/null
-<footer>
-<p>Copyright © <!--# 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>
+++ /dev/null
-</main>
-<!--# if expr="$copy" --><!--# include virtual="license.html" --><!--# endif -->
-</body>
-</html>
+++ /dev/null
-<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" -->
+++ /dev/null
-<!--# 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>
+++ /dev/null
-<!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 --> — Amin Bandali<!--# endif --></title>
-<link rel="icon" href="/gnu.ico"/>
-<link rel="stylesheet" href="/style.css"/>
-</head>
-<body>
+++ /dev/null
-<!--# 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>
--- /dev/null
+<!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>
--- /dev/null
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+vhM+q4339VYMt/RYM0PIraejWttGAtb6bQ==
+=7ozV
+-----END PGP PUBLIC KEY BLOCK-----
--- /dev/null
+<?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>
--- /dev/null
+<!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 © 2007 Free Software Foundation, Inc.
+ <<a href="https://fsf.org/">https://fsf.org/</a>></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>“This License” refers to version 3 of the GNU General Public License.</p>
+
+ <p>“Copyright” also means copyright-like laws that apply to other kinds of
+ works, such as semiconductor masks.</p>
+
+ <p>“The Program” refers to any copyrightable work licensed under this
+ License. Each licensee is addressed as “you”. “Licensees” and
+ “recipients” may be individuals or organizations.</p>
+
+ <p>To “modify” 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 “modified version” of the
+ earlier work or a work “based on” the earlier work.</p>
+
+ <p>A “covered work” means either the unmodified Program or a work based
+ on the Program.</p>
+
+ <p>To “propagate” 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 “convey” 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 “Appropriate Legal Notices”
+ 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 “source code” for a work means the preferred form of the work
+ for making modifications to it. “Object code” means any non-source
+ form of a work.</p>
+
+ <p>A “Standard Interface” 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 “System Libraries” 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
+ “Major Component”, 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 “Corresponding Source” 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
+ “keep intact all notices”.</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
+ “aggregate” 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 “User Product” is either (1) a “consumer product”, 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, “normally used” 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>“Installation Information” 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>“Additional permissions” 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 “further
+ restrictions” 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 “entity transaction” 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 “contributor” 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 “contributor version”.</p>
+
+ <p>A contributor's “essential patent claims” 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, “control” 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 “patent license” 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 “grant” 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. “Knowingly relying” 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 “discriminatory” 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 “or any later version” 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 “AS IS” 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 “copyright” line and a pointer to where the full notice is found.</p>
+
+ <pre> <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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 <https://www.gnu.org/licenses/>.
+ </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> <program> Copyright (C) <year> <name of author>
+ 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 “about box”.</p>
+
+ <p>You should also get your employer (if you work as a programmer) or school,
+ if any, to sign a “copyright disclaimer” for the program, if necessary.
+ For more information on this, and how to apply and follow the GNU GPL, see
+ <<a href="https://www.gnu.org/licenses/">https://www.gnu.org/licenses/</a>>.</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
+ <<a href="https://www.gnu.org/licenses/why-not-lgpl.html">https://www.gnu.org/licenses/why-not-lgpl.html</a>>.</p>
+ </main>
+ </body>
+</html>
--- /dev/null
+#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
--- /dev/null
+<?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>
--- /dev/null
+#+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
--- /dev/null
+#+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)
--- /dev/null
+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;
+}
+++ /dev/null
-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;
-}