Aftab Hussain
University of Houston

Teaching


UNIVERSITY OF HOUSTON (UH)


I have worked as an Instructional Assistant (IA) for the following courses at UH:

COSC3360 Operating Systems (Undergrad)
Spring 2021, Fall 2021, Spring 2022, Fall 2022

COSC4353 Software Design (Undergrad)
Fall 2020


UNIVERSITY OF CALIFORNIA, IRVINE (UCI)


I have worked as a Teaching Assistant (TA) for the following courses at UCI:

CS261P Data Structures (Grad)
Spring 2020
Lab Discussion Classes and Shared Material

CS201P Computer Security (Grad)
Winter 2020
Lab Discussion Classes and Shared Material

CS250P Computer Systems Architecture (Grad)
Fall 2019, Winter 2019
Discussion Classes and Shared Material (Fall 2019)
Discussion Classes and Shared Material (Winter 2019)

CS238P Operating Systems (Grad)
Spring 2019, Fall 2018
Lecture and Shared Material (Spring 2019)
Discussion Classes and Shared Material (Fall 2018)

CS142 Compilers and Interpreters (Undergrad)
Winter 2018, Winter 2017
Lecture and Shared Material (Winter 2018)
Lecture (Fall 2017)

CS141 Concepts in Programming Languages (Undergrad)
Summer 2018, Fall 2017
Shared Material (Fall 2017)

ICS53 Principles of System Design (Undergrad)
Spring 2018

ICS31 Introduction to Programming (Undergrad)
Winter 2014

INF113 Requirements Analysis and Engineering (Undergrad)
Winter 2014

I have worked as a Reader for the following course at UCI:

INF43 Introduction to Software Engineering (Undergrad)
Fall 2013


Operating Systems UH, COSC 3360 (Undergrad)

The course teaches object-oriented design principles, applying design patterns in software development, unit testing, evaluation of software systems, and software engineering tools that improve developer productivity. As an Instructional Assistant, I worked for this course in Spring & Fall 2021 with Prof. Jehan-François Pâris, and in Spring & Fall 2022 with Prof. Carlos Rincon.

Course page (Spring 2021)

Office Hours:
Tuesdays and Thursdays, 5.00pm to 7.00pm (Central Time), online via Microsoft Teams


Software Design UH, COSC 4353 (Undergrad)

The course teaches object-oriented design principles, applying design patterns in software development, unit testing, evaluation of software systems, and software engineering tools that improve developer productivity. I worked as an Instructional Assistant for this course in Fall 2020 with Prof. Mohammad Amin Alipour.

Course page

Office Hours:
Fridays, 5.30pm to 7.30pm (Central Time), online via Microsoft Teams


Data Structures UCI, CS261P (Grad)

The course teaches data structures and their associated management algorithms, including their applications and analysis. I worked as a TA for this course in Spring 2020 with Prof. Kevin Wortman.

Course page

Lab discussion class time and place:
Tuesdays, 8pm to 8.50pm (Pacific Time), online via Zoom


CS261P Lab Discussion Classes and Shared Material

Lab Discussion 1 - Lab Logistics, Student Experience Introductions for assisting Project Team Formation, Accessing UCI VPN and Openlab servers
March 31, 2020
(54:49)
Links for setting up project environment

Lab Discussion 2 - Student Group Activity Session (via Zoom Breakrooms) - Minimum Spanning Tree and Shortest Path Implementation
April 7, 2020
Activity Preview (Video starts after 30s) (04:10)
Student Group Solutions (17:23)

Lab Discussion 3 - Project 1 Objectives - Q & A Forum
April 14, 2020
(18:51)

Lab Discussion 4 - Project 1 Progress Feedback - Q & A Forum
April 21, 2020
(09:47)

Lab Discussion 5 - Workout Sheet (towards Midterm Prep)
Material based on slides by Prof. Kevin Wortman and Prof. Michael Dillencourt
April 28, 2020
(32:17)
Solutions

Lab Discussion 6 - Bloom Filter Review, Extra-credit activity on Mining Repositories implementing Bloom Filter
May 5, 2020
(27:38)

Lab Discussion 7 - Project 2 Objectives - Q & A Forum
May 13, 2020
(08:13)

Lab Discussion 8 - Extra-credit activity on Mining Repositories implementing AVL Tree
May 26, 2020

Lab Discussion 9 - Project 2 Progress Feedback
June 2, 2020


Computer Security UCI, CS201P (Grad)

The course teaches the principles of practical computer security, providing an overview of threats on computer systems and techniques to counteract these threats. I worked as a TA for this course in Winter 2020 with Prof. Stanislaw Jarecki. I held lab discussion sessions and revised concepts related to projects from SEED Labs, which offers a broad range of security projects. The SEED Labs virtual learning environment for computer security was created by Prof. Kevin Du (Syracuse University, NY).

Course page

Lab discussion class time and place:
Fridays, 6pm to 6.50pm, Steinhaus Hall (SH) 174

My office hours and room:
Mondays, 11am to 1pm, Donald Bren Hall (DBH) 3059A


CS201P Lab Discussion Classes and Shared Material

Lab Discussion 1 - Setting up the SEED Lab Environment
January 10, 2020
(50:06)
Lab 1, SEED project links

Lab Discussion 2 - Process, OS Interfaces, and getting hands-on with UNIX and C
January 17, 2020
(50:00)

Lab Discussion 3 - Feedback and Issue Review for Lab Assignment 1 (Environment variables and setuid programs)
January 24, 2020
More details on fork and exec (CS238P OS Interfaces, Anton Burtsev) (Video)

Lab Discussion 4 - Recap: SetUID, Environment Variables
(Session Cancelled – Recorded videos and material posted below)
January 31, 2020 to February 2, 2020
1 - The basic idea of setUID (02:28)
2 - What setUID programs look like (11:08)
3 - Unix file permission representations (08:21)
4 - Visualizing the setUID mechanism (15:32)
5 - The purpose of setUID programs (03:30)
6 - Shell setUID vulnerability demo (18:08)
7 - Environment variable sharing across processes (05:13)
8 - More subtleties in variable sharing, safeguarding against dynamic loading attacks (18:14)
Post - The SetUID Motivation (Refer to videos 1, 2, 4, 5)
Post - SetUID is Bad (Refer to Video 6)
Slides - Unix file permission representations (Refer to Video 3)

Lab Discussion 5 - The buffer overflow attack: Exploring the stack and the attack strategy
February 7, 2020
(37:32)
Post - Getting the call stack without a frame (for reference)

Lab Discussion 6 - Buffer-overflow Online Workout Task via Google Forms
February 14, 2020
Response Analytics
Solutions

Scapy Overview - Recorded videos and material
February 16, 2020
Scapy Overview Part I (NOTE: Please lower volume) (14:41)
Scapy Overview Part II (10:01)
Reference Video - Intro to Scapy by Stephen Haywood (55:46)
Code by AverageSecurityGuy (Stephen Haywood)

Lab Discussion 7 - Lab Assignment 3 (Packet Sniffing and Spoofing): Setting up Virtual Box Network Settings, Subnet, Feedback and Issue Review for the task
February 21, 2020
Virtual Box Network Settings (03:08)

Guest Lecture - Graspan: A Single-machine Disk-based Graph System for Analyzing Large-scale Systems Code
February 25, 2020
(Best viewed if opened with Microsoft Powerpoint 2013 or a more recent version)
Graspan Project Page

Lab Discussion 8 - SQL Injection Attack: Overviews on Web server, LAMP Stack, PHP, SQL, SQL Injection
February 28, 2020
(32:04)

3 Countermeasure Strategies against SQL Injection Attacks
March 6, 2020

Lab Discussion 9 - Feedback and Issue Review for Lab Assignment 4 (SQL Injection Attack)
March 6, 2020


Computer Systems Architecture UCI, CS250P (Grad)

The course teaches the architecture of complex modern microprocessors. It focuses on the evolution of computer architecture and the factors influencing the design of hardware and software elements of computer systems. I worked as a TA for this course in Fall 2019 and Winter 2019 with Prof. Anton Burtsev. I held lectures and discussion sessions on computer architecture design concepts.

Course page (Fall 2019)
Course page (Winter 2019)

Discussion class time and place (Fall 2019):
Mondays, 8pm to 8.50pm, Physical Sciences Classroom Building (PCSB) 140

My office hours and room (Fall 2019):
Tuesdays, 2pm to 3pm, Donald Bren Hall (DBH) 3059A

Discussion class time and place (Winter 2019):
Mondays, 8pm to 8.50pm, Steinhaus Hall (SH) 128

My office hours and room (Winter 2019):
Tuesdays, 2pm to 3pm, Donald Bren Hall (DBH) 3059A


CS250P Discussion Classes and Shared Material (Fall 2019)

Discussion 1 - MIPS Introduction
October 7, 2019
(51:00)
Lecture notes

Discussion 2 - More MIPS (mem. organization, shifting, branching)
October 14, 2019
(59:07)
Lecture notes

Discussion 3 - Pipelining
October 21, 2019
(53:30)

Discussion 4 - HW1 Team Contest
October 28, 2019
(01:20:20)

Discussion 5 - Team Quiz - Compiler-based ILP (with solutions)
November 4, 2019
(01:07:10)

Solution to HW1 Problem 3
November 7, 2019

Discussion 6 - HW2 Team Contest
November 18, 2019

Discussion 7 - Caches Workout
November 25, 2019
(50:01)
Workout questions
Workout solutions

Discussion 8 - Virtual Memory and Caches Workout
December 2, 2019
(49:29)
Workout questions
Workout solutions


CS250P Discussion Classes and Shared Material (Winter 2019)

Discussion 1 - CPU basics, performance metrics (execution time, power, energy)
January 14, 2019
(52:55)
Lecture notes - GM inconsistency
Lecture notes - IPC performance equation derivation

Discussion 2 - Dynamic frequency scaling, Dynamic voltage and frequency scaling
January 28, 2019
(50:44)

Discussion 3 - Pipelining
February 4, 2019
(48:24)

Discussion 4 - Out of order execution (Design)
February 25, 2019
(55:30)

Discussion 5 - Out of order execution (Handling LD and STR instructions)
March 4, 2019
(55:34)
Solution workout - Finding LD and STR activity times

Discussion 6 - Caches
March 11, 2019
(52:12)

Midterm Solutions
Midterm
Questions 1 to 3
Questions 4 to 6


Operating Systems UCI, CS238P (Grad)

The course teaches the fundamentals of operating systems, by diving into MIT PDOS’s xv6 kernel, a re-implementation of the UNIX version 6 operating system. I worked as a TA for this course in Spring 2019 and Fall 2018 with Prof. Anton Burtsev. I held lectures and discussion sessions on concepts and xv6 implementation.

Course page (Spring 2019)

My office hours and room (Spring 2019):
Tuesdays, 2pm to 3pm, Donald Bren Hall (DBH) 3059A

Discussion class time and place (Fall 2018):
Fridays, 4pm to 4.50pm, Physical Sciences Classroom Building (PCSB) 120

My office hours and room (Fall 2018):
Wednesdays, 2pm to 3pm, Donald Bren Hall (DBH) 3241


CS238P Lecture and Shared Material (Spring 2019)

Lecture - Review: Paging and Stack Management
December 13, 2019
(01:18:52)

Winter 2018 Midterm Solutions
Question 1a
Remaining Questions (Borrowed from Vikram’s rubric for some questions)

Fall 2018 Midterm Solution
Question 2
Remaining Questions


CS238P Discussion Classes and Shared Material (Fall 2018)

Discussion 1 - Basic UNIX shell commands, VIM
October 5, 2018

Discussion 2 - C basics, arrays, pointers
October 12, 2018
(53:30)
Code

Discussion 3 - C string manipulation, structures, function pointers
October 19, 2018
(49:15)
Code

Discussion 4 - C bitfields, xv6 setup, GDB
October 26, 2018
(42:29)
References

Discussion 5 - xv6 booting: Transitioning from 16 to 32 bit mode
November 3, 2018
(45:05)
Lecture notes - Memory layout after booting xv6

Discussion 6 - ELF header, real mode segmentation, paging
November 9, 2018
(37:21)

Discussion 7 - Threads, locks
November 30, 2018
(51:57)
Code
Lecture notes - Counting semaphores

Discussion 8 - Final review, system call chain
December 7, 2018
(49:03)

FAQs


Compilers and Interpreters UCI, CS142 (Undergrad)

The course teaches compiler design using the traditional compiler design approach, starting with the front-end and proceeding toward the back-end. Students learn the phases of the approach, hands-on, by incrementally building a compiler for the crux language. I worked as a TA for this course in Winter 2018 and in Winter 2017 with Prof. Guoqing (Harry) Xu. I conducted labs, guided student projects, took lectures on compiler design concepts, and developed an autograder for grading student projects.

Course page (Winter 2018)

Lab session time and place (Winter 2018):
Fridays, 9am to 11.50am, Information and Computer Sciences Building (ICS) 189

My office hours and room (Winter 2018):
Wednesdays, 11am to 12pm, Donald Bren Hall (DBH) 3241


CS142 Lecture and Shared Material (Winter 2018)

Lecture - LR(0) and LR(1) Parsing
February 5, 2018

Autograder - Crux Compiler Project
First released on January 12, 2018


CS142 Lecture (Fall 2017)

Lecture - Global Optimization (Borrowed from Prof. Harry)
March 10, 2017


Concepts in Programming Languages UCI, CS141 (Undergrad)

The course teaches the fundamentals of programming languages (PL) such as the life cycle of a program, objected oriented concepts, and functional and imperative languages. I worked as a TA for this course in Summer 2018 with Shannon Alfaro, and in Fall 2017 with Prof. Ray Klefstad. I helped students understand PL concepts and implement them in C, C++, and Java.


CS141 Shared Material (Fall 2017)

Memory Layout of Struct and Union in C
November 6, 2017


Principles of System Design UCI, ICS53 (Undergrad)

The course teaches UNIX programming, scripting, and socket programming. I worked as a TA for this course in Spring 2018 with Prof. Ray Klefstad. I conducted weekly programming sessions on coding problems and conducted bi-weekly quiz sessions.


Introduction to Programming UCI, ICS31 (Undergrad)

The course teaches systematic problem solving and how to implement the solutions using basic data structures in Python. I worked as a TA for this course in Winter 2014 with Prof. David Kay. I guided students on programming problems in lab sessions.

Course page


Requirements Analysis and Engineering UCI, INF113 (Undergrad)

The course teaches how to leverage requirements analysis techniques and requirements engineering towards developing software-intensive systems. I worked as a TA for this course in Winter 2014 with Prof. Birgit Penzenstadler. I co-designed the course framework, revised exam structure, and supervised student project groups.

Course page


Introduction to Software Engineering UCI, INF43 (Undergrad)

The course teaches concepts (e.g. life cycle models), methods, and current practices in software engineering (e.g. agile development) used in the industry. I worked as a Reader for this course during Fall 2013 with Prof. Hadar Ziv. My role was to evaluate student assignments on software engineering practices.