From: Amin Bandali Date: Mon, 20 Apr 2020 04:07:56 +0000 (-0400) Subject: port from an SSI-based setup to one using GNU M4 X-Git-Url: https://git.shemshak.org/~bandali/bndl.org/commitdiff_plain/505a94190f4aba9404b7c9d95444bfa0a14925ec?ds=sidebyside;hp=ac57122a8dbb81d639a386ba6547ba385e6ab0f2 port from an SSI-based setup to one using GNU M4 --- diff --git a/.gitignore b/.gitignore index 45ddf0a..89f9ac0 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -site/ +out/ diff --git a/404.html b/404.html deleted file mode 100644 index 33fab2f..0000000 --- a/404.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - -
-

404

-

Sorry, that page does not exist.

- diff --git a/Makefile b/Makefile index 526ef66..ff5e216 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,17 @@ -SOURCE_DIR = $(CURDIR)/ +RSYNC_PARAMS = --exclude-from='.rsync-exclude' -avzLP -RSYNC_PARAMS = --exclude-from='.rsync-exclude' --delete -avzP +LATEST=2 +SRC := $(wildcard *.m4 | grep -v feed.m4) +OUTPUTS := $(patsubst %.m4,out/%.html,$(SRC)) +STATIC := $(patsubst static/%,out/%,$(wildcard static/*)) -SSH_USER = abandali@bandali.eu.org -SSH_DEST = www/ +all: $(OUTPUTS) out/atom.xml out/style.css $(STATIC) -all: deploy +out/%.html: %.m4 header.html footer.html ; m4 -D__latest=$(LATEST) $< > $@ +out/atom.xml: feed.m4 ; m4 -D__latest=$(LATEST) $< > $@ +$(STATIC): ; ln -s $(PWD)/static/$(notdir $@) $@ deploy: - rsync $(RSYNC_PARAMS) $(SOURCE_DIR) $(SSH_USER):$(SSH_DEST) + rsync $(RSYNC_PARAMS) out/ abandali@bandali.eu.org:www/ .PHONY: deploy diff --git a/arch-macbook-air.html b/arch-macbook-air.html deleted file mode 100644 index 2a30027..0000000 --- a/arch-macbook-air.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - -

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 -Installation -Guide or the former -Beginner's -Guide. Rather, it mostly serves as a small summary with a few -useful notes about the gotchas.

- -

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.

- -

Note: 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).

- -

Shrinking the macOS partition

-

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!

- -

Creating a bootable Arch Installer USB

-

There are different ways of creating a bootable Arch USB, all -documented on the -USB -flash installation media page on the Arch wiki, but the simplest -one is using dd if you already have access to another -UNIX system.

- -

Warning: make sure you backup the -data on your flash drive, as dd will irrevocably destroy -all data on it.

- -

Use lsblk to find the name (block device) of your USB drive, then -run dd (as root) as shown below:

- -
-dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
-
- -

Replace /path/to/archlinux.iso with the path to the -Arch image you have downloaded, and /dev/sdx with your -drive.

- -

Booting up from the USB

-

After creating the install USB, reboot your laptop and hold the alt -key and boot from the USB.

- -

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 -note at the top of this post).

- -

Use ping to verify that you have established a -connection:

- -
-ping archlinux.org
-
- -

Updating the system clock

-

Once you're connected to the internet, make sure the system clock -is accurate:

- -
-timedatectl set-ntp true  # start and enable systemd-timesyncd
-
- -

You can check the service status using timedatectl -status.

- -

Partitioning

-

I won't dive into partitioning and instead, I will refer you to the -Partitioning -page of Arch wiki. Of the available partitioning tools, I personally -prefer cfdisk.

- -

Setting up LVM & LUKS

-

I use an -LVM -on LUKS setup, where I set up LVM on top of the encrypted -partition.

- -

First, let's set up the underlying encrypted partition:

- -
-cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 \
-           --iter-time 5000 --use-urandom -y luksFormat /dev/sdaX
-
- -

where /dev/sdaX is the partition you created in the -last step (e.g. /dev/sda4). For more information about -the cryptsetup options, see the -LUKS -encryption options.

- -

Then we open the container:

- -
-cryptsetup open --type luks /dev/sdaX lvm
-
- -

Now it's time to use lvm and prepare the logical volume(s):

- -
-pvcreate /dev/mapper/lvm vgcreate vg /dev/mapper/lvm
-lvcreate --extents +100%FREE -n root vg
-
- -

This will create a physical volume on the mapping we just opened, -create a volume group named vg on the physical volume, -and create a logical volume named root that spans the -entire volume group. More complex setups are possible thanks to the -great flexibility of lvm.

- -

We now format the logical volume with ext4:

- -
-mkfs.ext4 /dev/mapper/vg-root
-
- -

Installing the base system

-

Let's mount the logical volume, make a directory for the mount -point of the boot partition, and mount the boot partition -(/dev/sda1):

- -
-mount /dev/mapper/vg-root /mnt
-mkdir /mnt/boot
-mount /dev/sda1 /mnt/boot
-
- -

Finally, let's install the base system (and optionally -base-devel):

- -
-pacstrap /mnt base base-devel
-
- -

Configuring the system

-

Let's generate the fstab:

- -
-genfstab -U /mnt >> /mnt/etc/fstab
-
- -

Use your favorite terminal-based editor, edit the fstab file and -add the discard option for the root partition to enable -TRIM on the SSD.

- -

Now we change root into our newly installed system and will -configure it. Adjust these according to your own setup.

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

Then adjust the initramfs hooks in -/etc/mkinitcpio.conf and enable the -encrypt and lvm2 hooks, and make sure -keyboard is available before encrypt so you -can actually type in the LUKS password when booting. Your -HOOKS line should look similar to this:

- -
-HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 filesystems fsck)
-
- -

After adjusting the hooks, build the initramfs:

- -
-mkinitcpio -p linux
-
- -

Create the /boot/loader/loader.conf with the following -content (adjust the timeout to your liking):

- -
-default arch timeout 3
-
- -

Then create the entry for Arch:

- -
-mkdir -p /boot/loader/entries
-touch /boot/loader/entries/arch.conf
-
- -

Now edit /boot/loader/entries/arch.conf to specify the -Arch entry:

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

Again, /dev/sdaX is the partition you created in the -partitioning step earlier as the underlying encrypted partition.

- -

Finally, install the bootloader, exit the chroot, umount and -reboot!

- -
-bootctl install
-exit
-umount -R /mnt
-reboot
-
- -

Post-installation recommendations

-

Congratulations! You now have a minimal Arch installation.

- -

At this point, I usually install my favorite AUR helper, -pacaur, then I -install the -mba6x_bl-dkms -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%.

- -
-pacaur -S linux-headers dkms # linux-headers is required for dkms
-pacaur -S broadcom-wl-dkms
-pacaur -S mba6x_bl-dkms
-
- -

Then, I'd like to install

- - -

Check out the -General -recommendations for more details.

- -

References

-

Here are some resources I've come across each with lots of useful -bits and pieces, about installing Arch on a MacBook:

- - - - diff --git a/arch-macbook-air.m4 b/arch-macbook-air.m4 new file mode 100644 index 0000000..4d2a348 --- /dev/null +++ b/arch-macbook-air.m4 @@ -0,0 +1,276 @@ +dnl -*- html -*- +define(__pub, 2016-11-01T12:00:00Z)dnl +define(__upd, 2020-03-27T12:00:00Z)dnl +define(__title, `Arch GNU/Linux on MacBook Air 2013')dnl +define(__slug, `computing')dnl +define(__id, 1)dnl +include(header.html) +

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 +Installation +Guide or the former +Beginner's +Guide. Rather, it mostly serves as a small summary with a few +useful notes about the gotchas.

+ +

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.

+ +

Note: 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).

+ +

Shrinking the macOS partition

+

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!

+ +

Creating a bootable Arch Installer USB

+

There are different ways of creating a bootable Arch USB, all +documented on the +USB +flash installation media page on the Arch wiki, but the simplest +one is using dd if you already have access to another +UNIX system.

+ +

Warning: make sure you backup the +data on your flash drive, as dd will irrevocably destroy +all data on it.

+ +

Use lsblk to find the name (block device) of your USB drive, then +run dd (as root) as shown below:

+ +
+dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
+
+ +

Replace /path/to/archlinux.iso with the path to the +Arch image you have downloaded, and /dev/sdx with your +drive.

+ +

Booting up from the USB

+

After creating the install USB, reboot your laptop and hold the alt +key and boot from the USB.

+ +

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 +note at the top of this post).

+ +

Use ping to verify that you have established a +connection:

+ +
+ping archlinux.org
+
+ +

Updating the system clock

+

Once you're connected to the internet, make sure the system clock +is accurate:

+ +
+timedatectl set-ntp true  # start and enable systemd-timesyncd
+
+ +

You can check the service status using timedatectl +status.

+ +

Partitioning

+

I won't dive into partitioning and instead, I will refer you to the +Partitioning +page of Arch wiki. Of the available partitioning tools, I personally +prefer cfdisk.

+ +

Setting up LVM & LUKS

+

I use an +LVM +on LUKS setup, where I set up LVM on top of the encrypted +partition.

+ +

First, let's set up the underlying encrypted partition:

+ +
+cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 \
+           --iter-time 5000 --use-urandom -y luksFormat /dev/sdaX
+
+ +

where /dev/sdaX is the partition you created in the +last step (e.g. /dev/sda4). For more information about +the cryptsetup options, see the +LUKS +encryption options.

+ +

Then we open the container:

+ +
+cryptsetup open --type luks /dev/sdaX lvm
+
+ +

Now it's time to use lvm and prepare the logical volume(s):

+ +
+pvcreate /dev/mapper/lvm vgcreate vg /dev/mapper/lvm
+lvcreate --extents +100%FREE -n root vg
+
+ +

This will create a physical volume on the mapping we just opened, +create a volume group named vg on the physical volume, +and create a logical volume named root that spans the +entire volume group. More complex setups are possible thanks to the +great flexibility of lvm.

+ +

We now format the logical volume with ext4:

+ +
+mkfs.ext4 /dev/mapper/vg-root
+
+ +

Installing the base system

+

Let's mount the logical volume, make a directory for the mount +point of the boot partition, and mount the boot partition +(/dev/sda1):

+ +
+mount /dev/mapper/vg-root /mnt
+mkdir /mnt/boot
+mount /dev/sda1 /mnt/boot
+
+ +

Finally, let's install the base system (and optionally +base-devel):

+ +
+pacstrap /mnt base base-devel
+
+ +

Configuring the system

+

Let's generate the fstab:

+ +
+genfstab -U /mnt >> /mnt/etc/fstab
+
+ +

Use your favorite terminal-based editor, edit the fstab file and +add the discard option for the root partition to enable +TRIM on the SSD.

+ +

Now we change root into our newly installed system and will +configure it. Adjust these according to your own setup.

+ +
+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
+
+ +

Then adjust the initramfs hooks in +/etc/mkinitcpio.conf and enable the +encrypt and lvm2 hooks, and make sure +keyboard is available before encrypt so you +can actually type in the LUKS password when booting. Your +HOOKS line should look similar to this:

+ +
+HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 filesystems fsck)
+
+ +

After adjusting the hooks, build the initramfs:

+ +
+mkinitcpio -p linux
+
+ +

Create the /boot/loader/loader.conf with the following +content (adjust the timeout to your liking):

+ +
+default arch timeout 3
+
+ +

Then create the entry for Arch:

+ +
+mkdir -p /boot/loader/entries
+touch /boot/loader/entries/arch.conf
+
+ +

Now edit /boot/loader/entries/arch.conf to specify the +Arch entry:

+ +
+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
+
+ +

Again, /dev/sdaX is the partition you created in the +partitioning step earlier as the underlying encrypted partition.

+ +

Finally, install the bootloader, exit the chroot, umount and +reboot!

+ +
+bootctl install
+exit
+umount -R /mnt
+reboot
+
+ +

Post-installation recommendations

+

Congratulations! You now have a minimal Arch installation.

+ +

At this point, I usually install my favorite AUR helper, +pacaur, then I +install the +mba6x_bl-dkms +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%.

+ +
+pacaur -S linux-headers dkms # linux-headers is required for dkms
+pacaur -S broadcom-wl-dkms
+pacaur -S mba6x_bl-dkms
+
+ +

Then, I'd like to install

+ + +

Check out the +General +recommendations for more details.

+ +

References

+

Here are some resources I've come across each with lots of useful +bits and pieces, about installing Arch on a MacBook:

+ + +define(__copy, `2016, 2019, 2020')dnl +include(footer.html) diff --git a/bandali-pubkey.txt b/bandali-pubkey.txt deleted file mode 100644 index 551889f..0000000 --- a/bandali-pubkey.txt +++ /dev/null @@ -1,391 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -vhM+q4339VYMt/RYM0PIraejWttGAtb6bQ== -=7ozV ------END PGP PUBLIC KEY BLOCK----- diff --git a/computing.html b/computing.html deleted file mode 100644 index 357ec3e..0000000 --- a/computing.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - -

(Inspired by computing pages of -rms and -Leah Rowe)

- -

Computers

-

My main computer is a -soon-to-be-librebooted -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.

- -

I also have the privilege of having access to a fleet of beefy -servers through our school's -Computer Science Club, -which I use for some heavier computations every now and -again.

- -

GNU/Linux distros

-

I've used a large number of GNU/Linux distributions throughout the -years, but as of late, my favourite distros are -Trisquel, -Guix System, and -Debian (with no contrib or -non-free). I mostly use the -GNU Linux-libre kernel. -Guix System comes with GNU Linux-libre out of the box, and on -Debian-based distros I install it from jxself's -APT repository.

- -

Actual computing

-

I spend most of my time in -GNU Emacs.

-

TODO: elaborate

- -

Cell phone

-

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 -0G to become a -reality fast enough. -:-)

- - diff --git a/computing.m4 b/computing.m4 new file mode 100644 index 0000000..e15e2aa --- /dev/null +++ b/computing.m4 @@ -0,0 +1,51 @@ +dnl -*- html -*- +define(__pub, 2019-09-14T12:00:00Z)dnl +define(__upd, 2019-11-30T23:00:00Z)dnl +define(__title, `How I do my Computing')dnl +define(__slug, `computing')dnl +define(__id, 2)dnl +include(header.html) +

(Inspired by computing pages of +rms and +Leah Rowe)

+ +

Computers

+

My main computer is a +soon-to-be-librebooted +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.

+ +

I also have the privilege of having access to a fleet of beefy +servers through our school's +Computer Science Club, +which I use for some heavier computations every now and +again.

+ +

GNU/Linux distros

+

I've used a large number of GNU/Linux distributions throughout the +years, but as of late, my favourite distros are +Trisquel, +Guix System, and +Debian (with no contrib or +non-free). I mostly use the +GNU Linux-libre kernel. +Guix System comes with GNU Linux-libre out of the box, and on +Debian-based distros I install it from jxself's +APT repository.

+ +

Actual computing

+

I spend most of my time in +GNU Emacs.

+

TODO: elaborate

+ +

Cell phone

+

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 +0G to become a +reality fast enough. +:-)

+define(__copy, `2019')dnl +include(footer.html) diff --git a/contact.html b/contact.html deleted file mode 100644 index 0776021..0000000 --- a/contact.html +++ /dev/null @@ -1,63 +0,0 @@ - - -
-

Contact information

-

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

- -
    -
  • bandali@gnu.org
  • -
  • bandali@uwaterloo.ca
  • -
  • bandali@csclub.uwaterloo.ca
  • -
- -

If you want to send me GPG-encrypted mail, you can use my -public key with the -fingerprint BE62 7373 8E61 6D6D 1B3A 08E8 A21A 0202 4881 6103.

- - - - - - - - - - - - - - - - - - - - - - - -
IRCbandali on freenode and -oftc
XMPPbandali@member.fsf.org
Matrix@bandali:matrix.org
Fediverse@bandali@pleroma.site
- -

Elsewhere

-

You may also find me at a few other places online. Stricken -through accounts are those I don't use anymore, unless absolutely -necessary.

- - -
- diff --git a/contact.m4 b/contact.m4 new file mode 100644 index 0000000..a56f36f --- /dev/null +++ b/contact.m4 @@ -0,0 +1,65 @@ +dnl -*- html -*- +define(__title, `Contact Information')dnl +define(__slug, `contact')dnl +include(header.html) +
+

Contact information

+

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

+ +
    +
  • bandali@gnu.org
  • +
  • bandali@uwaterloo.ca
  • +
  • bandali@csclub.uwaterloo.ca
  • +
+ +

If you want to send me GPG-encrypted mail, you can use my +public key with the +fingerprint BE62 7373 8E61 6D6D 1B3A 08E8 A21A 0202 4881 6103.

+ + + + + + + + + + + + + + + + + + + + + + + +
IRCbandali on freenode and +oftc
XMPPbandali@member.fsf.org
Matrix@bandali:matrix.org
Fediverse@bandali@pleroma.site
+ +

Elsewhere

+

You may also find me at a few other places online. Stricken +through accounts are those I don't use anymore, unless absolutely +necessary.

+ + +
+include(footer.html) diff --git a/cv.html b/cv.html deleted file mode 100644 index c0ba44c..0000000 --- a/cv.html +++ /dev/null @@ -1,63 +0,0 @@ - - -
-

Curriculum vitae (PDF)

- - - - - - - - - - - - - - - - -
Sitebandali.eu.org
Emailbandali@uwaterloo.ca
Phoneavailable upon request via email
- -

Education

- -

Master of Mathematics (Computer Science) | 2018–present

-

University of Waterloo, Canada

-

Supervised by Dr. Nancy Day | GPA: 3.7/4.0 | Expected completion: April 2020

-

Research focusing on formal logic, model checking, and verification.

- -

B.Sc. Honours Computer Science | 2013–2017

-

York University, Toronto, Canada

-

GPA: 7.84/9.0

Relevant courses: System Specification & -Refinement, Software Requirements Eng., Software Design, Operating -Systems, Computational Complexity, Design & Analysis of Algorithms.

-

Finished first year (2013-14) at Carleton University with -a GPA of 11.0/12.0, then transferred to York University in -Fall 2014.

- -

Publications

- -

Listed on my homepage

- -

Work & Research Experience

- -

Cheriton School of Computer Science, University of Waterloo | 2018–present

-

Instructional Apprentice, Teaching Assistant, Research Assistant

- -
    -
  • SE 212: -IA in Fall 2019, -TA in Fall 2018
  • -
  • SE 463: -TA in Summer 2019 and 2018
  • -
  • CS 136: -TA in Winter 2018
  • -
- -

EECS -Department, York University | Fall 2017

-

Teaching Assistant

-

EECS 1012: -TA in Fall 2017

- diff --git a/cv.m4 b/cv.m4 new file mode 100644 index 0000000..4a485f4 --- /dev/null +++ b/cv.m4 @@ -0,0 +1,65 @@ +dnl -*- html -*- +define(__title, `Curriculum vitae')dnl +define(__slug, `cv')dnl +include(header.html) +
+

Curriculum vitae (PDF)

+ + + + + + + + + + + + + + + + +
Sitebandali.eu.org
Emailbandali@uwaterloo.ca
Phoneavailable upon request via email
+ +

Education

+ +

Master of Mathematics (Computer Science) | 2018–present

+

University of Waterloo, Canada

+

Supervised by Dr. Nancy Day | GPA: 3.7/4.0 | Expected completion: April 2020

+

Research focusing on formal logic, model checking, and verification.

+ +

B.Sc. Honours Computer Science | 2013–2017

+

York University, Toronto, Canada

+

GPA: 7.84/9.0

Relevant courses: System Specification & +Refinement, Software Requirements Eng., Software Design, Operating +Systems, Computational Complexity, Design & Analysis of Algorithms.

+

Finished first year (2013-14) at Carleton University with +a GPA of 11.0/12.0, then transferred to York University in +Fall 2014.

+ +

Publications

+ +

Listed on my homepage

+ +

Work & Research Experience

+ +

Cheriton School of Computer Science, University of Waterloo | 2018–present

+

Instructional Apprentice, Teaching Assistant, Research Assistant

+ +
    +
  • SE 212: +IA in Fall 2019, +TA in Fall 2018
  • +
  • SE 463: +TA in Summer 2019 and 2018
  • +
  • CS 136: +TA in Winter 2018
  • +
+ +

EECS +Department, York University | Fall 2017

+

Teaching Assistant

+

EECS 1012: +TA in Fall 2017

+include(footer.html) diff --git a/feed.m4 b/feed.m4 new file mode 100644 index 0000000..712a9b5 --- /dev/null +++ b/feed.m4 @@ -0,0 +1,13 @@ + + + Amin Bandali's Personal Site + tag:bandali.eu.org,2016:notes/ + + + syscmd(date -Iseconds -u | tr -d \\n) +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/ diff --git a/feed.svg b/feed.svg deleted file mode 100644 index 4efd2ef..0000000 --- a/feed.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/footer.html b/footer.html new file mode 100644 index 0000000..ae2825c --- /dev/null +++ b/footer.html @@ -0,0 +1,15 @@ +ifdef(`__feed', `', +`ifdef(`__pub', +`

Got a question or comment? You can find my +email address on my contact page. +:-)

+') +
+ifdef(`__copy', +`
+

Copyright © __copy Amin Bandali. +See the ifelse(__slug,`license',`above for license conditions',`license conditions'). +Please copy and share.

+
') + +') diff --git a/gnu.ico b/gnu.ico deleted file mode 100644 index e363826..0000000 Binary files a/gnu.ico and /dev/null differ diff --git a/gpl-3.0.html b/gpl-3.0.html deleted file mode 100644 index 3817471..0000000 --- a/gpl-3.0.html +++ /dev/null @@ -1,698 +0,0 @@ - - - - - - GNU General Public License v3.0 - - - -
-

GNU GENERAL PUBLIC LICENSE

-

Version 3, 29 June 2007

- -

Copyright © 2007 Free Software Foundation, Inc. - <https://fsf.org/>

- Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed.

- -

Preamble

- -

The GNU General Public License is a free, copyleft license for - software and other kinds of works.

- -

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.

- -

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.

- -

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.

- -

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.

- -

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.

- -

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.

- -

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.

- -

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.

- -

The precise terms and conditions for copying, distribution and - modification follow.

- -

TERMS AND CONDITIONS

- -

0. Definitions.

- -

“This License” refers to version 3 of the GNU General Public License.

- -

“Copyright” also means copyright-like laws that apply to other kinds of - works, such as semiconductor masks.

- -

“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.

- -

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.

- -

A “covered work” means either the unmodified Program or a work based - on the Program.

- -

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.

- -

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.

- -

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.

- -

1. Source Code.

- -

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.

- -

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.

- -

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.

- -

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.

- -

The Corresponding Source need not include anything that users - can regenerate automatically from other parts of the Corresponding - Source.

- -

The Corresponding Source for a work in source code form is that - same work.

- -

2. Basic Permissions.

- -

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.

- -

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.

- -

Conveying under any other circumstances is permitted solely under - the conditions stated below. Sublicensing is not allowed; section 10 - makes it unnecessary.

- -

3. Protecting Users' Legal Rights From Anti-Circumvention Law.

- -

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.

- -

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.

- -

4. Conveying Verbatim Copies.

- -

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.

- -

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.

- -

5. Conveying Modified Source Versions.

- -

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:

- -
    -
  • a) The work must carry prominent notices stating that you modified - it, and giving a relevant date.
  • - -
  • 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”.
  • - -
  • 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.
  • - -
  • 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.
  • -
- -

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.

- -

6. Conveying Non-Source Forms.

- -

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:

- -
    -
  • 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.
  • - -
  • 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.
  • - -
  • 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.
  • - -
  • 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.
  • - -
  • 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.
  • -
- -

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.

- -

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.

- -

“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.

- -

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

- -

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.

- -

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.

- -

7. Additional Terms.

- -

“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.

- -

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.

- -

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:

- -
    -
  • a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or
  • - -
  • 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
  • - -
  • 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
  • - -
  • d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or
  • - -
  • e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or
  • - -
  • 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.
  • -
- -

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.

- -

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.

- -

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.

- -

8. Termination.

- -

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

- -

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.

- -

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.

- -

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.

- -

9. Acceptance Not Required for Having Copies.

- -

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.

- -

10. Automatic Licensing of Downstream Recipients.

- -

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.

- -

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.

- -

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.

- -

11. Patents.

- -

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”.

- -

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.

- -

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.

- -

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.

- -

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.

- -

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.

- -

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.

- -

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.

- -

12. No Surrender of Others' Freedom.

- -

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.

- -

13. Use with the GNU Affero General Public License.

- -

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.

- -

14. Revised Versions of this License.

- -

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.

- -

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.

- -

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.

- -

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.

- -

15. Disclaimer of Warranty.

- -

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.

- -

16. Limitation of Liability.

- -

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.

- -

17. Interpretation of Sections 15 and 16.

- -

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.

- -

END OF TERMS AND CONDITIONS

- -

How to Apply These Terms to Your New Programs

- -

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.

- -

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.

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

Also add information on how to contact you by electronic and paper mail.

- -

If the program does terminal interaction, make it output a short - notice like this when it starts in an interactive mode:

- -
    <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.
-      
- -

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”.

- -

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 - <https://www.gnu.org/licenses/>.

- -

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 - <https://www.gnu.org/licenses/why-not-lgpl.html>.

-
- - diff --git a/guix.scm b/guix.scm deleted file mode 100644 index c1e02d9..0000000 --- a/guix.scm +++ /dev/null @@ -1,73 +0,0 @@ -;;; bandali's personal site, using haunt-next (git) -;;; Copyright © 2019 Amin Bandali -;;; -;;; 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 . - -;; To set up a hacking environment: -;; guix environment -l guix.scm - -(use-modules (guix packages) - (guix licenses) - (guix git-download) - (guix build-system gnu) - (guix utils) ; substitute-keyword-arguments - (gnu packages autotools) - (gnu packages base) ; glibc-locales - (gnu packages guile) - (gnu packages guile-xyz)) - -(define haunt-next - (package - (inherit haunt) - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://git.dthompson.us/haunt.git") - (commit "65adbb052f7d27c382b7f9f3c665635aeab96a02"))) - (sha256 - (base32 - "19vybz0hczjxj3npznnams5740vqi1gsdsyjiqpy241f783f4i83")))) - (arguments - (substitute-keyword-arguments (package-arguments haunt) - ((#:phases phases) - `(modify-phases ,phases - (add-before 'configure 'bootstrap - (lambda _ - (zero? (system* "./bootstrap")))))))) - (native-inputs - `(("autoconf" ,autoconf) ; autoreconf - ("automake" ,automake) ; aclocal - ,@(package-native-inputs haunt))) - (propagated-inputs - `(("glibc-locales" ,glibc-locales) ; setlocale-related runtime error - ,@(package-propagated-inputs haunt))))) - -(package - (name "bandali-site") - (version "git") - (source #f) - (build-system gnu-build-system) - (synopsis #f) - (description #f) - (license gpl3+) - (home-page "https://bandali.eu.org") - (inputs - `(("guile" ,guile-2.2))) - (native-inputs - `(("haunt" ,haunt-next) - ("guile-reader" ,guile-reader) - ("guile-sjson" ,guile-sjson) - ("guile-commonmark" ,guile-commonmark) - ("guile-syntax-highlight" ,guile-syntax-highlight)))) diff --git a/haunt.scm b/haunt.scm deleted file mode 100644 index 414ef08..0000000 --- a/haunt.scm +++ /dev/null @@ -1,54 +0,0 @@ -;;; Copyright © 2019 Amin Bandali -;;; -;;; 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 -;;; . - -(use-modules (bandali feeds) - (bandali pages) - (bandali prefs) - (bandali tags) - (bandali theme) - (haunt builder blog) - (haunt builder assets) - (haunt post) - (haunt reader commonmark) - (haunt site)) - -(site #:title "Amin Bandali" - #:scheme my-scheme ; requires haunt-next - #:domain my-domain - #:default-metadata - '((author . "Amin Bandali") - (email . "bandali@gnu.org") - (domain . my-domain)) - #:readers (list commonmark-reader) - #:builders (list (blog #:theme bandali-theme - #:collections - `(("Notes" "notes.html" - ,posts/reverse-chronological))) - (tag-pages) - index-page - (atom-feed - #:file-name "notes.atom") - (atom-feeds-by-tag - #:prefix my-tag-prefix) - (rss-feed - #:file-name "notes.rss") - (rss-feeds-by-tag - #:prefix my-tag-prefix) - contact-page - cv-page - license-page - se212-f19-page - (static-directory "static" ""))) diff --git a/header.html b/header.html new file mode 100644 index 0000000..e371576 --- /dev/null +++ b/header.html @@ -0,0 +1,46 @@ +ifdef(`__feed', +` +Amin Bandali +tag:bandali.eu.org,2016:__slug +__pub +__upd + +__title +', +` + + + + + +__title`'ifdef(`__nts',,` — Amin Bandali') + + + + +ifdef(`__pub', +`ifdef(`__first',,`')' +`ifdef(`__last',,`')') + + +
+ifelse(__slug,`home',`

__title

', +`Amin Bandali's Personal Site') +
+ +
+ifdef(`__pub', +`
+
+

__title

+

Published on syscmd(date "-d __pub" "+%B %e`,' %Y")`'ifdef(`__upd',`
+Last updated on syscmd(date "-d __upd" "+%B %e`,' %Y")')

+
')') diff --git a/icon-12px.png b/icon-12px.png deleted file mode 100644 index 3fe8b0a..0000000 Binary files a/icon-12px.png and /dev/null differ diff --git a/icon-16px.png b/icon-16px.png deleted file mode 100644 index 1151f76..0000000 Binary files a/icon-16px.png and /dev/null differ diff --git a/index.html b/index.html deleted file mode 100644 index a1f7823..0000000 --- a/index.html +++ /dev/null @@ -1,127 +0,0 @@ - - - -
-

Hi, I'm Amin. I am currently a graduate student at the -Waterloo Formal Methods -group at the University of Waterloo, supervised by -Nancy Day. -The main goal of my research is -improving software and systems reliability -through application of -formal methods.

- -

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.

- -

On the side, I enjoy -hacking on -elisp -and guile. I am a -GNU maintainer, -webmaster, -and Savannah -hacker. I am also a -free software -activist, and an associate -member of the Free Software -Foundation. I'm the chief organizer of -the EmacsConf conference, and the -co-host of the Emacs.el podcast with -Daniel Gopar. I am also a member of -the Systems Committee of the -Computer Science Club of the -University of Waterloo.

-
- -
-

Papers

-
-
A Comparison of the Declarative Modelling Languages B, DASH, and -TLA+ - -[ pdf -| bib -] - -
-
-Ali Abbassi, Amin Bandali, -Nancy A. Day, Jose Serna
-2018 IEEE 8th International Model-Driven Requirements Engineering -Workshop (MoDRE)
-Copyright © 2018 IEEE. All Rights Reserved. Sadly. -
-
-
- -
-

Talks

-
-
The Magic of Specifications and Type Systems - -[ slides -| poster -] - -
-
-Amin Bandali, -Simon Hudon, -Jonathan S. Ostroff -
-
-
- -
-

Projects

-

Below are a number of free software projects I have worked on:

-
-
george-mode
-
Emacs major mode for editing George files
- -
alloy-catalyst
-
Framework for performance analysis of Alloy models
- -
unitb-web
-
Web interface for Unit-B
- -
tex2png-hs
-
Library and CLI for converting TeX and LaTeX to PNG images
-
-
- -
-

Notes

-

Here are notes about a variety of topics and issues I care -about.

- - - - - - - - - - - - - -
How I do my ComputingSeptember 14, 2019
Arch GNU/Linux on MacBook Air 2013November 1, 2016
-
- - diff --git a/index.m4 b/index.m4 new file mode 100644 index 0000000..54fe7a2 --- /dev/null +++ b/index.m4 @@ -0,0 +1,129 @@ +dnl -*- html -*- +define(__title, `Amin Bandali''`s Personal Site')dnl +define(__slug, `home')dnl +define(__nts)dnl +include(header.html) +
+

Hi, I'm Amin. I am currently a graduate student at the +Waterloo Formal Methods +group at the University of Waterloo, supervised by +Nancy Day. +The main goal of my research is +improving software and systems reliability +through application of +formal methods.

+ +

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.

+ +

On the side, I enjoy +hacking on +elisp +and guile. I am a +GNU maintainer, +webmaster, +and Savannah +hacker. I am also a +free software +activist, and an associate +member of the Free Software +Foundation. I'm the chief organizer of +the EmacsConf conference, and the +co-host of the Emacs.el podcast with +Daniel Gopar. I am also a member of +the Systems Committee of the +Computer Science Club of the +University of Waterloo.

+
+ +
+

Papers

+
+
A Comparison of the Declarative Modelling Languages B, DASH, and +TLA+ + +[ pdf +| bib +] + +
+
+Ali Abbassi, Amin Bandali, +Nancy A. Day, Jose Serna
+2018 IEEE 8th International Model-Driven Requirements Engineering +Workshop (MoDRE)
+Copyright © 2018 IEEE. All Rights Reserved. Sadly. +
+
+
+ +
+

Talks

+
+
The Magic of Specifications and Type Systems + +[ slides +| poster +] + +
+
+Amin Bandali, +Simon Hudon, +Jonathan S. Ostroff +
+
+
+ +
+

Projects

+

Below are a number of free software projects I have worked on:

+
+
george-mode
+
Emacs major mode for editing George files
+ +
alloy-catalyst
+
Framework for performance analysis of Alloy models
+ +
unitb-web
+
Web interface for Unit-B
+ +
tex2png-hs
+
Library and CLI for converting TeX and LaTeX to PNG images
+
+
+ +
+

Notes

+

Here are notes about a variety of topics and issues I care +about.

+ + + + + + + + + + + + + +
How I do my ComputingSeptember 14, 2019
Arch GNU/Linux on MacBook Air 2013November 1, 2016
+
+define(__copy, `2016–2019')dnl +include(footer.html) diff --git a/license.html b/license.html deleted file mode 100644 index d9df1b6..0000000 --- a/license.html +++ /dev/null @@ -1,24 +0,0 @@ - - -
-

License information for bandali.eu.org

-

I strongly believe in -free culture -and that all creative works everywhere should be -free.

- -

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 -gpl-3.0.html.

- -

Some resources on free software and licenses:

- -
- - diff --git a/license.m4 b/license.m4 new file mode 100644 index 0000000..1cf8818 --- /dev/null +++ b/license.m4 @@ -0,0 +1,26 @@ +dnl -*- html -*- +define(__title, `Licensing Information')dnl +define(__slug, `license')dnl +include(header.html) +
+

License information for bandali.eu.org

+

I strongly believe in +free culture +and that all creative works everywhere should be +free.

+ +

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 +gpl-3.0.html.

+ +

Some resources on free software and licenses:

+ +
+define(__copy, `2019')dnl +include(footer.html) diff --git a/se212-f19/se212-h02q04d-soln.grg b/se212-f19/se212-h02q04d-soln.grg deleted file mode 100644 index e395717..0000000 --- a/se212-f19/se212-h02q04d-soln.grg +++ /dev/null @@ -1,25 +0,0 @@ -#u abandali -#a h02 - -#q q04d - -p <=> q, p & q <=> (p | q) - -#check TP - -p <=> q <-> p & q <=> (p | q) - - 1) p & q <=> (p | q) - 2) (p & q => p | q) & (p | q => p & q) by equiv - 3) (!(p & q) | p | q) & (!(p | q) | p & q) by impl * 2 - 4) (!p | !q | p | q) & (!(p | q) | p & q) by dm - 5) (true | !q | q) & (!(p | q) | p & q) by lem - 6) true & (!(p | q) | p & q) by simp1 - 7) !(p | q) | p & q by simp1 - 8) !p & !q | p & q by dm - 9) (!p & !q | p) & (!p & !q | q) by distr -10) (!p | p) & (!q | p) & (!p | q) & (!q | q) by distr * 2 -11) true & (!q | p) & (!p | q) & true by lem * 2 -12) (!q | p) & (!p | q) by simp1 * 2 -13) (q => p) & (p => q) by impl * 2 -14) p <=> q by equiv diff --git a/se212-f19/se212-t01.html b/se212-f19/se212-t01.html deleted file mode 100644 index d81cbd7..0000000 --- a/se212-f19/se212-t01.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - -Propositional Logic - - - - - - -
-

Propositional Logic -
-(SE 212 TUT 102) -

- -
-

1 Are you at the right place?

-
-

-We’re in MC 4040, for SE 212 TUT 102 (03:30-04:20W) -

-
-
- -
-

2

-
-
-

-George -

-
-
-
- - - -
-

4 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 -

- -
-

-Course website → George User Manual → Contributions -

-
-
-
- -
-

5 George mode for Emacs (new!)

-
- -
-
- -
-

6 a00q01.grg (demo)

-
-

-Walk through answering a00q01.grg and submitting on MarkUs -

-
-
- -
-

7 Homework 1

-
-
    -
  • Let’s do a couple of questions from Homework 1
  • -
  • Now you try the rest, let me know if you have any questions
  • -
-
-
-
-
-

Date: Wed Sep 11, 2019

-

Author: Amin Bandali

- -

Created: 2019-09-18 Wed 23:12

-

Validate

-
- - diff --git a/se212-f19/se212-t01.org b/se212-f19/se212-t01.org deleted file mode 100644 index 12e9cdd..0000000 --- a/se212-f19/se212-t01.org +++ /dev/null @@ -1,78 +0,0 @@ -#+macro: topic Propositional Logic - -#+macro: room MC 4040 -#+macro: sec1 SE 212 TUT 101 -#+macro: sec2 SE 212 TUT 102 -#+macro: time1 02:30-03:20W -#+macro: time2 03:30-04:20W - -#+macro: sec {{{sec2}}} -#+macro: sectime {{{time2}}} - -#+title: {{{topic}}} -#+subtitle: ({{{sec}}}) -#+author: Amin Bandali -#+email: bandali@uwaterloo.ca -#+date: Wed Sep 11, 2019 -#+language: en -#+options: email:t num:t toc:nil \n:nil ::t |:t ^:t -:t f:t *:t <:t -#+options: tex:t d:nil todo:t pri:nil tags:not-in-toc -#+select_tags: export -#+exclude_tags: noexport -#+startup: beamer -#+latex_class: beamer -# #+latex_class_options: [bigger] -#+latex_header: \setbeamercovered{transparent} -#+latex: \setbeamertemplate{itemize items}[circle] -#+beamer_color_theme: beaver - -* Are you at the right place? - -We’re in {{{room}}}, for {{{sec}}} ({{{sectime}}}) - -* - -#+latex: \definecolor{darkred}{rgb}{0.8,0,0} -#+latex: {\Large \color{darkred} -#+begin_center -George -#+end_center -#+latex: } - -* - -#+latex: \vspace{-2.5em} -file:./george.png - -#+latex: {\footnotesize -https://www.student.cs.uwaterloo.ca/~se212/george/ask-george/ -#+latex: } - -* Tool support - -Over the years, students have developed a number of tools for using -George and/or editing =.grg= files, such as plugins for Vim and Atom. - -Check them out at - -#+begin_center -Course website → George User Manual → Contributions -#+end_center - -* George mode for Emacs (new!) - -- Syntax highlighting + a number of convenience functions -- Grab it from https://git.sr.ht/~bandali/george-mode \\ - (soon on Contributions page) - -* =a00q01.grg= (demo) - -Walk through answering =a00q01.grg= and submitting on MarkUs - -* Homework 1 -:PROPERTIES: -:BEAMER_act: [<+->] -:END: - -- Let’s do a couple of questions from Homework 1 -- Now you try the rest, let me know if you have any questions diff --git a/se212-f19/se212-t05.org b/se212-f19/se212-t05.org deleted file mode 100644 index a85896d..0000000 --- a/se212-f19/se212-t05.org +++ /dev/null @@ -1,272 +0,0 @@ -#+title: Predicate Logic -#+subtitle: (SE 212 Tutorial 5) -#+author: Amin Bandali -#+email: bandali@uwaterloo.ca -#+date: Wed Oct 9, 2019 -#+language: en -#+options: email:t num:t toc:nil \n:nil ::t |:t ^:t -:t f:t *:t <:t -#+options: tex:t d:nil todo:t pri:nil tags:not-in-toc -#+select_tags: export -#+exclude_tags: noexport -#+startup: beamer -#+latex_class: beamer -# #+latex_class_options: [bigger] -#+latex_header: \setbeamercovered{transparent} -#+latex: \setbeamertemplate{itemize items}[circle] -#+beamer_color_theme: beaver - -* Today’s plan -:PROPERTIES: -:BEAMER_act: [<+->] -:END: - -- do some semantics questions from homework 4 -- do some ND questions from homework 5 - -* =h04q05= - -Provide a counterexample to show that the following argument is not -valid and demonstrate that your answer is correct. - -#+begin_example -forall y : M . exists x : N . p(g(x), y) -|= -exists z : M . p(z, z) -#+end_example - -* =h04q05= \small{(cont’d)} - -#+begin_example -Domain: - M = {m1, m2} - N = {n1, n2} - -Mapping: - Syntax | Meaning - -------------------------- - g(.) | G(n1) := m1 - | G(n2) := m2 - -------------------------- - p(., .) | P(m1, m1) := F - | P(m1, m2) := T - | P(m2, m1) := T - | P(m2, m2) := F -#+end_example - -* =h04q05= \small{(cont’d)} - -#+begin_example -Premise: - [forall y : M . exists x : N . p(g(x), y)] - = [exists x: N. p(g(x), ^m1)] AND - [exists x: N . p(g(x), ^m2)] - = (P(G(n1), m1) OR P(G(n2), m1)) AND - (P(G(n1), m2) OR P(G(n2), m2)) - = (P(m1, m1) OR P(m2, m1)) AND - (P(m1, m2) OR P(m2, m2)) - = (F OR T) AND (T OR F) - = T -#+end_example - -* =h04q05= \small{(cont’d)} - -#+begin_example -Conclusion: - [exists z: M . p(z, z)] - = P(m1, m1) OR P(m2, m2) - = F OR F - = F -#+end_example - -* =h04q06= - -Express the following sentences in predicate logic. Use types in your -formalization. Is the set of formulas consistent? Demonstrate that -your answer is correct using the semantics of predicate logic. - -#+begin_example -All programmer like some computers. -Some programmers use MAC. -Therefore, some people who like some computers use MAC. -#+end_example - -* =h04q06= \small{(cont’d)} - -All programmer like some computers.\\ -Some programmers use MAC.\\ -Therefore, some people who like some computers use MAC. - -#+begin_example -Formalization: - programmer(x) means x is a programmer - usesmac(x) means x uses MAC - likes(x, y) means x likes y - -forall x: Person . programmer(x) => - exists y: Computer . likes(x, y), -exists x: Person . programmer(x) & usesmac(x) -|- -exists x: Person . - (exists y: Computer . likes(x, y) & usesmac(x)) -#+end_example - -* =h04q06= \small{(cont’d)} - -These sentences are /consistent/. Here is an interpretation in which -all the formulas are T: - -#+begin_example -Domain: - People = {John} - Computer = {MacPro} - -Mapping: - Syntax | Meaning - ------------------------------------------- - programmer(.) | programmer(John) = T - likes(.,.) | likes(John, MacPro) = T - usesmac(.) | usesmac(John) = T -#+end_example - -* =h04q06= \small{(cont’d)} - -#+begin_example -formula 1: - [forall x: Person . programmer(x) => - exists y: Computer . likes(x, y)] - = [programmer(^John) => - exists y: Computer . likes(^John, y)]] - = programmer(John) IMP likes(John, MacPro) - = T IMP T - = T - -formula 2: - [exists x: Person . programmer(x) & usesmac(x)] - = programmer(John) AND usesmac(John) - = T AND T - = T -#+end_example - -* =h04q06= \small{(cont’d)} - -#+begin_example -formula 3: - [exists x: Person . (exists y: Computer . - likes(x, y) & usesmac(x))] - = [exists y: Computer . - likes(^John, y) & usesmac(^John)] - = likes(John, MacPro) AND usesmac(John) - = T AND T - = T -#+end_example - -* =h05q01a= - -If the following arguments are valid, use natural deduction AND -semantic tableaux to prove them; otherwise, provide a counterexample. - -#+begin_example -forall x . s(x) | t(x), -forall x . s(x) => t(x) & k(c, x), -forall x . t(x) => m(x) -|- -m(c) -where c is a constant -#+end_example - -* =h05q01a= \small{(cont’d)} - -#+begin_example -#check ND -forall x . s(x) | t(x), -forall x . s(x) => t(x) & k(c, x), -forall x . t(x) => m(x) -|- -m(c) -#+end_example - -* =h05q01a= \small{(cont’d)} - -#+begin_example -1) forall x . s(x) | t(x) premise -2) forall x . s(x) => t(x) & k(c, x) premise -3) forall x . t(x) => m(x) premise -4) s(c) | t(c) by forall_e on 1 -5) s(c) => t(c) & k(c, c) by forall_e on 2 -6) t(c) => m(c) by forall_e on 3 -7) case s(c) { - 8) t(c) & k(c, c) by imp_e on 5, 7 - 9) t(c) by and_e on 8 - 10) m(c) by imp_e on 6, 9 -} -11) case t(c) { - 12) m(c) by imp_e on 6, 11 -} -13) m(c) by cases on 4, 7-10, 11-12 -#+end_example - -* =h05q01b= - -Is this formula a tautology? - -#+begin_example -|- (exists x . p(x)) => forall y . p(y) -#+end_example - -* =h05q01b= \small{(cont’d)} - -No, this formula is not a tautology. Interpretation: - -#+begin_example -1) Domain = {a, b} - -2) Mapping: - Syntax | Meaning - ---------------------- - p(.) | P(a) = T - | P(b) = F - -Conclusion: - [(exists x. p(x)) => forall y. p(y)] -= (P(a) OR P(b)) IMP (P(a) AND P(b)) -= (T OR F) IMP (T AND F) -= T IMP F -= F -#+end_example - -* =h05q01d= - -Is this argument valid? - -#+begin_example -forall x . p(x) | q(x), -forall x . !p(x) -|- -forall x . q(x) -#+end_example - -* =h05q01d= \small{(cont’d)} - -#+begin_example -#check ND - -forall x . p(x) | q(x), forall x . !p(x) |- forall x . q(x) - -1) forall x . p(x) | q(x) premise -2) forall x . !p(x) premise -3) for every xg { - 4) p(xg) | q(xg) by forall_e on 1 - 5) case p(xg) { - 6) !p(xg) by forall_e on 2 - 7) q(xg) by not_e on 5, 6 - } - 8) case q(xg) {} - 9) q(xg) by cases on 4, 5-7, 8-8 -} -10) forall x. q(x) by forall_i on 3-9 -#+end_example - -* Announcements - -- no tutorial next week (Oct 16) (reading week) -- no tutorial the week after (Oct 23) (midterm marking) diff --git a/ssi/license.html b/ssi/license.html deleted file mode 100644 index 9bdecfa..0000000 --- a/ssi/license.html +++ /dev/null @@ -1,5 +0,0 @@ -
-

Copyright © Amin Bandali. -See the above for license conditionslicense conditions. -Please copy and share.

-
diff --git a/ssi/post.html b/ssi/post.html deleted file mode 100644 index 08e9c1b..0000000 --- a/ssi/post.html +++ /dev/null @@ -1,4 +0,0 @@ -
- - - diff --git a/ssi/postn.html b/ssi/postn.html deleted file mode 100644 index 71ed959..0000000 --- a/ssi/postn.html +++ /dev/null @@ -1,5 +0,0 @@ -

Got a question or comment? You can find my -email address on my contact page. -:-)

- - diff --git a/ssi/pre.html b/ssi/pre.html deleted file mode 100644 index 49e2780..0000000 --- a/ssi/pre.html +++ /dev/null @@ -1,16 +0,0 @@ - -
-

- -Amin Bandali's Personal Site -
- -
diff --git a/ssi/pre0.html b/ssi/pre0.html deleted file mode 100644 index cac6873..0000000 --- a/ssi/pre0.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - -<!--# echo var="title" --><!--# if expr="$nts" --><!--# else --> — Amin Bandali<!--# endif --> - - - - diff --git a/ssi/pren.html b/ssi/pren.html deleted file mode 100644 index 71e1004..0000000 --- a/ssi/pren.html +++ /dev/null @@ -1,7 +0,0 @@ - -
-
-

-

Published on
-Last updated on

-
diff --git a/static/404.html b/static/404.html new file mode 100644 index 0000000..26f3f81 --- /dev/null +++ b/static/404.html @@ -0,0 +1,17 @@ + + + + + +404 Not Found + + + + + +
+

404

+

Sorry, that page does not exist.

+
+ + diff --git a/static/bandali-pubkey.txt b/static/bandali-pubkey.txt new file mode 100644 index 0000000..551889f --- /dev/null +++ b/static/bandali-pubkey.txt @@ -0,0 +1,391 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +vhM+q4339VYMt/RYM0PIraejWttGAtb6bQ== +=7ozV +-----END PGP PUBLIC KEY BLOCK----- diff --git a/static/feed.svg b/static/feed.svg new file mode 100644 index 0000000..4efd2ef --- /dev/null +++ b/static/feed.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/gnu.ico b/static/gnu.ico new file mode 100644 index 0000000..e363826 Binary files /dev/null and b/static/gnu.ico differ diff --git a/static/gpl-3.0.html b/static/gpl-3.0.html new file mode 100644 index 0000000..3817471 --- /dev/null +++ b/static/gpl-3.0.html @@ -0,0 +1,698 @@ + + + + + + GNU General Public License v3.0 + + + +
+

GNU GENERAL PUBLIC LICENSE

+

Version 3, 29 June 2007

+ +

Copyright © 2007 Free Software Foundation, Inc. + <https://fsf.org/>

+ Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed.

+ +

Preamble

+ +

The GNU General Public License is a free, copyleft license for + software and other kinds of works.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

The precise terms and conditions for copying, distribution and + modification follow.

+ +

TERMS AND CONDITIONS

+ +

0. Definitions.

+ +

“This License” refers to version 3 of the GNU General Public License.

+ +

“Copyright” also means copyright-like laws that apply to other kinds of + works, such as semiconductor masks.

+ +

“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.

+ +

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.

+ +

A “covered work” means either the unmodified Program or a work based + on the Program.

+ +

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.

+ +

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.

+ +

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.

+ +

1. Source Code.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

The Corresponding Source need not include anything that users + can regenerate automatically from other parts of the Corresponding + Source.

+ +

The Corresponding Source for a work in source code form is that + same work.

+ +

2. Basic Permissions.

+ +

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.

+ +

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.

+ +

Conveying under any other circumstances is permitted solely under + the conditions stated below. Sublicensing is not allowed; section 10 + makes it unnecessary.

+ +

3. Protecting Users' Legal Rights From Anti-Circumvention Law.

+ +

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.

+ +

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.

+ +

4. Conveying Verbatim Copies.

+ +

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.

+ +

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.

+ +

5. Conveying Modified Source Versions.

+ +

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:

+ +
    +
  • a) The work must carry prominent notices stating that you modified + it, and giving a relevant date.
  • + +
  • 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”.
  • + +
  • 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.
  • + +
  • 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.
  • +
+ +

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.

+ +

6. Conveying Non-Source Forms.

+ +

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:

+ +
    +
  • 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.
  • + +
  • 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.
  • + +
  • 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.
  • + +
  • 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.
  • + +
  • 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.
  • +
+ +

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.

+ +

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.

+ +

“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.

+ +

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

+ +

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.

+ +

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.

+ +

7. Additional Terms.

+ +

“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.

+ +

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.

+ +

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:

+ +
    +
  • a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or
  • + +
  • 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
  • + +
  • 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
  • + +
  • d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or
  • + +
  • e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or
  • + +
  • 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.
  • +
+ +

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.

+ +

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.

+ +

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.

+ +

8. Termination.

+ +

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

+ +

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.

+ +

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.

+ +

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.

+ +

9. Acceptance Not Required for Having Copies.

+ +

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.

+ +

10. Automatic Licensing of Downstream Recipients.

+ +

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.

+ +

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.

+ +

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.

+ +

11. Patents.

+ +

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”.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

12. No Surrender of Others' Freedom.

+ +

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.

+ +

13. Use with the GNU Affero General Public License.

+ +

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.

+ +

14. Revised Versions of this License.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

15. Disclaimer of Warranty.

+ +

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.

+ +

16. Limitation of Liability.

+ +

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.

+ +

17. Interpretation of Sections 15 and 16.

+ +

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.

+ +

END OF TERMS AND CONDITIONS

+ +

How to Apply These Terms to Your New Programs

+ +

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.

+ +

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.

+ +
    <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/>.
+      
+ +

Also add information on how to contact you by electronic and paper mail.

+ +

If the program does terminal interaction, make it output a short + notice like this when it starts in an interactive mode:

+ +
    <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.
+      
+ +

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”.

+ +

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 + <https://www.gnu.org/licenses/>.

+ +

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 + <https://www.gnu.org/licenses/why-not-lgpl.html>.

+
+ + diff --git a/static/icon-12px.png b/static/icon-12px.png new file mode 100644 index 0000000..3fe8b0a Binary files /dev/null and b/static/icon-12px.png differ diff --git a/static/icon-16px.png b/static/icon-16px.png new file mode 100644 index 0000000..1151f76 Binary files /dev/null and b/static/icon-16px.png differ diff --git a/static/se212-f19/se212-h02q04d-soln.grg b/static/se212-f19/se212-h02q04d-soln.grg new file mode 100644 index 0000000..e395717 --- /dev/null +++ b/static/se212-f19/se212-h02q04d-soln.grg @@ -0,0 +1,25 @@ +#u abandali +#a h02 + +#q q04d + +p <=> q, p & q <=> (p | q) + +#check TP + +p <=> q <-> p & q <=> (p | q) + + 1) p & q <=> (p | q) + 2) (p & q => p | q) & (p | q => p & q) by equiv + 3) (!(p & q) | p | q) & (!(p | q) | p & q) by impl * 2 + 4) (!p | !q | p | q) & (!(p | q) | p & q) by dm + 5) (true | !q | q) & (!(p | q) | p & q) by lem + 6) true & (!(p | q) | p & q) by simp1 + 7) !(p | q) | p & q by simp1 + 8) !p & !q | p & q by dm + 9) (!p & !q | p) & (!p & !q | q) by distr +10) (!p | p) & (!q | p) & (!p | q) & (!q | q) by distr * 2 +11) true & (!q | p) & (!p | q) & true by lem * 2 +12) (!q | p) & (!p | q) by simp1 * 2 +13) (q => p) & (p => q) by impl * 2 +14) p <=> q by equiv diff --git a/static/se212-f19/se212-t01.html b/static/se212-f19/se212-t01.html new file mode 100644 index 0000000..d81cbd7 --- /dev/null +++ b/static/se212-f19/se212-t01.html @@ -0,0 +1,343 @@ + + + + + + + +Propositional Logic + + + + + + +
+

Propositional Logic +
+(SE 212 TUT 102) +

+ +
+

1 Are you at the right place?

+
+

+We’re in MC 4040, for SE 212 TUT 102 (03:30-04:20W) +

+
+
+ +
+

2

+
+
+

+George +

+
+
+
+ + + +
+

4 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 +

+ +
+

+Course website → George User Manual → Contributions +

+
+
+
+ +
+

5 George mode for Emacs (new!)

+
+ +
+
+ +
+

6 a00q01.grg (demo)

+
+

+Walk through answering a00q01.grg and submitting on MarkUs +

+
+
+ +
+

7 Homework 1

+
+
    +
  • Let’s do a couple of questions from Homework 1
  • +
  • Now you try the rest, let me know if you have any questions
  • +
+
+
+
+
+

Date: Wed Sep 11, 2019

+

Author: Amin Bandali

+ +

Created: 2019-09-18 Wed 23:12

+

Validate

+
+ + diff --git a/static/se212-f19/se212-t01.org b/static/se212-f19/se212-t01.org new file mode 100644 index 0000000..12e9cdd --- /dev/null +++ b/static/se212-f19/se212-t01.org @@ -0,0 +1,78 @@ +#+macro: topic Propositional Logic + +#+macro: room MC 4040 +#+macro: sec1 SE 212 TUT 101 +#+macro: sec2 SE 212 TUT 102 +#+macro: time1 02:30-03:20W +#+macro: time2 03:30-04:20W + +#+macro: sec {{{sec2}}} +#+macro: sectime {{{time2}}} + +#+title: {{{topic}}} +#+subtitle: ({{{sec}}}) +#+author: Amin Bandali +#+email: bandali@uwaterloo.ca +#+date: Wed Sep 11, 2019 +#+language: en +#+options: email:t num:t toc:nil \n:nil ::t |:t ^:t -:t f:t *:t <:t +#+options: tex:t d:nil todo:t pri:nil tags:not-in-toc +#+select_tags: export +#+exclude_tags: noexport +#+startup: beamer +#+latex_class: beamer +# #+latex_class_options: [bigger] +#+latex_header: \setbeamercovered{transparent} +#+latex: \setbeamertemplate{itemize items}[circle] +#+beamer_color_theme: beaver + +* Are you at the right place? + +We’re in {{{room}}}, for {{{sec}}} ({{{sectime}}}) + +* + +#+latex: \definecolor{darkred}{rgb}{0.8,0,0} +#+latex: {\Large \color{darkred} +#+begin_center +George +#+end_center +#+latex: } + +* + +#+latex: \vspace{-2.5em} +file:./george.png + +#+latex: {\footnotesize +https://www.student.cs.uwaterloo.ca/~se212/george/ask-george/ +#+latex: } + +* Tool support + +Over the years, students have developed a number of tools for using +George and/or editing =.grg= files, such as plugins for Vim and Atom. + +Check them out at + +#+begin_center +Course website → George User Manual → Contributions +#+end_center + +* George mode for Emacs (new!) + +- Syntax highlighting + a number of convenience functions +- Grab it from https://git.sr.ht/~bandali/george-mode \\ + (soon on Contributions page) + +* =a00q01.grg= (demo) + +Walk through answering =a00q01.grg= and submitting on MarkUs + +* Homework 1 +:PROPERTIES: +:BEAMER_act: [<+->] +:END: + +- Let’s do a couple of questions from Homework 1 +- Now you try the rest, let me know if you have any questions diff --git a/static/se212-f19/se212-t05.org b/static/se212-f19/se212-t05.org new file mode 100644 index 0000000..a85896d --- /dev/null +++ b/static/se212-f19/se212-t05.org @@ -0,0 +1,272 @@ +#+title: Predicate Logic +#+subtitle: (SE 212 Tutorial 5) +#+author: Amin Bandali +#+email: bandali@uwaterloo.ca +#+date: Wed Oct 9, 2019 +#+language: en +#+options: email:t num:t toc:nil \n:nil ::t |:t ^:t -:t f:t *:t <:t +#+options: tex:t d:nil todo:t pri:nil tags:not-in-toc +#+select_tags: export +#+exclude_tags: noexport +#+startup: beamer +#+latex_class: beamer +# #+latex_class_options: [bigger] +#+latex_header: \setbeamercovered{transparent} +#+latex: \setbeamertemplate{itemize items}[circle] +#+beamer_color_theme: beaver + +* Today’s plan +:PROPERTIES: +:BEAMER_act: [<+->] +:END: + +- do some semantics questions from homework 4 +- do some ND questions from homework 5 + +* =h04q05= + +Provide a counterexample to show that the following argument is not +valid and demonstrate that your answer is correct. + +#+begin_example +forall y : M . exists x : N . p(g(x), y) +|= +exists z : M . p(z, z) +#+end_example + +* =h04q05= \small{(cont’d)} + +#+begin_example +Domain: + M = {m1, m2} + N = {n1, n2} + +Mapping: + Syntax | Meaning + -------------------------- + g(.) | G(n1) := m1 + | G(n2) := m2 + -------------------------- + p(., .) | P(m1, m1) := F + | P(m1, m2) := T + | P(m2, m1) := T + | P(m2, m2) := F +#+end_example + +* =h04q05= \small{(cont’d)} + +#+begin_example +Premise: + [forall y : M . exists x : N . p(g(x), y)] + = [exists x: N. p(g(x), ^m1)] AND + [exists x: N . p(g(x), ^m2)] + = (P(G(n1), m1) OR P(G(n2), m1)) AND + (P(G(n1), m2) OR P(G(n2), m2)) + = (P(m1, m1) OR P(m2, m1)) AND + (P(m1, m2) OR P(m2, m2)) + = (F OR T) AND (T OR F) + = T +#+end_example + +* =h04q05= \small{(cont’d)} + +#+begin_example +Conclusion: + [exists z: M . p(z, z)] + = P(m1, m1) OR P(m2, m2) + = F OR F + = F +#+end_example + +* =h04q06= + +Express the following sentences in predicate logic. Use types in your +formalization. Is the set of formulas consistent? Demonstrate that +your answer is correct using the semantics of predicate logic. + +#+begin_example +All programmer like some computers. +Some programmers use MAC. +Therefore, some people who like some computers use MAC. +#+end_example + +* =h04q06= \small{(cont’d)} + +All programmer like some computers.\\ +Some programmers use MAC.\\ +Therefore, some people who like some computers use MAC. + +#+begin_example +Formalization: + programmer(x) means x is a programmer + usesmac(x) means x uses MAC + likes(x, y) means x likes y + +forall x: Person . programmer(x) => + exists y: Computer . likes(x, y), +exists x: Person . programmer(x) & usesmac(x) +|- +exists x: Person . + (exists y: Computer . likes(x, y) & usesmac(x)) +#+end_example + +* =h04q06= \small{(cont’d)} + +These sentences are /consistent/. Here is an interpretation in which +all the formulas are T: + +#+begin_example +Domain: + People = {John} + Computer = {MacPro} + +Mapping: + Syntax | Meaning + ------------------------------------------- + programmer(.) | programmer(John) = T + likes(.,.) | likes(John, MacPro) = T + usesmac(.) | usesmac(John) = T +#+end_example + +* =h04q06= \small{(cont’d)} + +#+begin_example +formula 1: + [forall x: Person . programmer(x) => + exists y: Computer . likes(x, y)] + = [programmer(^John) => + exists y: Computer . likes(^John, y)]] + = programmer(John) IMP likes(John, MacPro) + = T IMP T + = T + +formula 2: + [exists x: Person . programmer(x) & usesmac(x)] + = programmer(John) AND usesmac(John) + = T AND T + = T +#+end_example + +* =h04q06= \small{(cont’d)} + +#+begin_example +formula 3: + [exists x: Person . (exists y: Computer . + likes(x, y) & usesmac(x))] + = [exists y: Computer . + likes(^John, y) & usesmac(^John)] + = likes(John, MacPro) AND usesmac(John) + = T AND T + = T +#+end_example + +* =h05q01a= + +If the following arguments are valid, use natural deduction AND +semantic tableaux to prove them; otherwise, provide a counterexample. + +#+begin_example +forall x . s(x) | t(x), +forall x . s(x) => t(x) & k(c, x), +forall x . t(x) => m(x) +|- +m(c) +where c is a constant +#+end_example + +* =h05q01a= \small{(cont’d)} + +#+begin_example +#check ND +forall x . s(x) | t(x), +forall x . s(x) => t(x) & k(c, x), +forall x . t(x) => m(x) +|- +m(c) +#+end_example + +* =h05q01a= \small{(cont’d)} + +#+begin_example +1) forall x . s(x) | t(x) premise +2) forall x . s(x) => t(x) & k(c, x) premise +3) forall x . t(x) => m(x) premise +4) s(c) | t(c) by forall_e on 1 +5) s(c) => t(c) & k(c, c) by forall_e on 2 +6) t(c) => m(c) by forall_e on 3 +7) case s(c) { + 8) t(c) & k(c, c) by imp_e on 5, 7 + 9) t(c) by and_e on 8 + 10) m(c) by imp_e on 6, 9 +} +11) case t(c) { + 12) m(c) by imp_e on 6, 11 +} +13) m(c) by cases on 4, 7-10, 11-12 +#+end_example + +* =h05q01b= + +Is this formula a tautology? + +#+begin_example +|- (exists x . p(x)) => forall y . p(y) +#+end_example + +* =h05q01b= \small{(cont’d)} + +No, this formula is not a tautology. Interpretation: + +#+begin_example +1) Domain = {a, b} + +2) Mapping: + Syntax | Meaning + ---------------------- + p(.) | P(a) = T + | P(b) = F + +Conclusion: + [(exists x. p(x)) => forall y. p(y)] += (P(a) OR P(b)) IMP (P(a) AND P(b)) += (T OR F) IMP (T AND F) += T IMP F += F +#+end_example + +* =h05q01d= + +Is this argument valid? + +#+begin_example +forall x . p(x) | q(x), +forall x . !p(x) +|- +forall x . q(x) +#+end_example + +* =h05q01d= \small{(cont’d)} + +#+begin_example +#check ND + +forall x . p(x) | q(x), forall x . !p(x) |- forall x . q(x) + +1) forall x . p(x) | q(x) premise +2) forall x . !p(x) premise +3) for every xg { + 4) p(xg) | q(xg) by forall_e on 1 + 5) case p(xg) { + 6) !p(xg) by forall_e on 2 + 7) q(xg) by not_e on 5, 6 + } + 8) case q(xg) {} + 9) q(xg) by cases on 4, 5-7, 8-8 +} +10) forall x. q(x) by forall_i on 3-9 +#+end_example + +* Announcements + +- no tutorial next week (Oct 16) (reading week) +- no tutorial the week after (Oct 23) (midterm marking) diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..8d43f66 --- /dev/null +++ b/static/style.css @@ -0,0 +1,178 @@ +body { + /* background: #fffffa; */ + font-family: sans-serif; + line-height: 1.6; + padding: 2em; +} + +header, nav, main, footer { + margin: auto; + max-width: 38rem; +} + +body > header { + margin-bottom: 0.25em; +} +body > header h1 { + margin: 0; + font-size: 100%; +} +header a { + color: inherit; +} +nav ul { + margin: 0; + padding: 0; +} +nav li { + display: inline; + text-transform: lowercase; +} +nav li + li { + margin-left: 0.5em; +} +nav a { + color: #333; +} +nav, main { + margin-bottom: 1.5em; +} +header >:not(h1) { + font-size: 0.875em; +} +header > h1 + p { + margin-top: -1em; +} +footer { + border-top: 1px solid #bbb; + font-size: 0.84em; + padding-top: 1em; +} +footer p { + margin: 0; +} + +h1 { + font-size: 1.5em; +} +h2 { + font-size: 1.25em; +} +h3 { + font-size: 1.125em; +} + +a { + color: #036; +} +/* +a:hover, a:focus { + color: #005a6a; +} +*/ +a:active { + outline-offset: 2px; +} + +h4 { + margin: 0.75em auto; +} + +article h3 { + font-weight: normal; + color: #777; +} + +.notice { + background-color: #efefef; + text-align: center; + position: relative; +} +.notice::before { + content: "↪"; + position: absolute; + left: 0.5em; + bottom: 0.05em; +} +.notice::after { + content: "↩"; + position: absolute; + right: 0.5em; + bottom: 0.05em; +} + +pre, code { + background: #f6f6f6; + font: 1.15em monospace; + padding: 1em; +} +pre > code { + padding: 0; + background: initial; +} +code { + text-transform: none; + padding: .2em .3em; +} +strong { + font-weight: bold; +} +em { + font-style: italic; +} + +table td { + padding: 0.125em 0.3em; +} +table td:first-child { + padding-left: 0; +} +table td:last-child { + padding-right: 0 +} +#notes { + margin-top: 0.9em; +} +.post-list { + width: 100%; +} +.post-list tr:hover { + background: #fafafa; +} +.post-list td { + padding: 0.25em 0; +} +.post-list td:nth-child(2) { + text-align: right; +} + +small, dd { + font-size: 0.875em; +} +.muted { + color: #666; +} +.inbox { + margin-top: 2em; +} + +li, dd { + margin-bottom: 0.25em; +} + +.feed-icon { + margin-right: 3px +} +.feed-icon-h2 { + margin-left: 5px; + position: relative; + top: 2px +} +.smly { + display: inline-block; + transform: rotate(90deg); + margin-left: 0.2em; +} +.warn { + color: #a10029; +} diff --git a/style.css b/style.css deleted file mode 100644 index 8d43f66..0000000 --- a/style.css +++ /dev/null @@ -1,178 +0,0 @@ -body { - /* background: #fffffa; */ - font-family: sans-serif; - line-height: 1.6; - padding: 2em; -} - -header, nav, main, footer { - margin: auto; - max-width: 38rem; -} - -body > header { - margin-bottom: 0.25em; -} -body > header h1 { - margin: 0; - font-size: 100%; -} -header a { - color: inherit; -} -nav ul { - margin: 0; - padding: 0; -} -nav li { - display: inline; - text-transform: lowercase; -} -nav li + li { - margin-left: 0.5em; -} -nav a { - color: #333; -} -nav, main { - margin-bottom: 1.5em; -} -header >:not(h1) { - font-size: 0.875em; -} -header > h1 + p { - margin-top: -1em; -} -footer { - border-top: 1px solid #bbb; - font-size: 0.84em; - padding-top: 1em; -} -footer p { - margin: 0; -} - -h1 { - font-size: 1.5em; -} -h2 { - font-size: 1.25em; -} -h3 { - font-size: 1.125em; -} - -a { - color: #036; -} -/* -a:hover, a:focus { - color: #005a6a; -} -*/ -a:active { - outline-offset: 2px; -} - -h4 { - margin: 0.75em auto; -} - -article h3 { - font-weight: normal; - color: #777; -} - -.notice { - background-color: #efefef; - text-align: center; - position: relative; -} -.notice::before { - content: "↪"; - position: absolute; - left: 0.5em; - bottom: 0.05em; -} -.notice::after { - content: "↩"; - position: absolute; - right: 0.5em; - bottom: 0.05em; -} - -pre, code { - background: #f6f6f6; - font: 1.15em monospace; - padding: 1em; -} -pre > code { - padding: 0; - background: initial; -} -code { - text-transform: none; - padding: .2em .3em; -} -strong { - font-weight: bold; -} -em { - font-style: italic; -} - -table td { - padding: 0.125em 0.3em; -} -table td:first-child { - padding-left: 0; -} -table td:last-child { - padding-right: 0 -} -#notes { - margin-top: 0.9em; -} -.post-list { - width: 100%; -} -.post-list tr:hover { - background: #fafafa; -} -.post-list td { - padding: 0.25em 0; -} -.post-list td:nth-child(2) { - text-align: right; -} - -small, dd { - font-size: 0.875em; -} -.muted { - color: #666; -} -.inbox { - margin-top: 2em; -} - -li, dd { - margin-bottom: 0.25em; -} - -.feed-icon { - margin-right: 3px -} -.feed-icon-h2 { - margin-left: 5px; - position: relative; - top: 2px -} -.smly { - display: inline-block; - transform: rotate(90deg); - margin-left: 0.2em; -} -.warn { - color: #a10029; -}