CMPSC 190D Introduction to Allolib

This course provides an introduction to digital audio through the lens of the software used by the Allosphere Research Group at UC Santa Barbara. (See: https://github.com/AlloSphere-Research-Group ). We will learn the basics of music synthesis (e.g. Additive Synthesis, Subtractive Synthesis, FM Synthesis, etc.) by exploring these concepts using the software library used to power the Allosphere at UCSB. If time permits, we may also explore some of the graphics capabilities of the software, but the focus will be on sound.

CMPSC 292C Computer-Aided Reasoning for Software

This course is a graduate-level introduction to automated reasoning techniques and their application in tools for the design, analysis, and construction of software. In the first half of the course, we will survey the logical foundations and algorithms behind SAT solvers and SMT solvers. In the second half of the course, we will apply these techniques to automatic bug finding, program verification, and program synthesis. As a student in this course, you will learn how solvers work, and how to use them to build cool programming tools. 

CMPSC 293N ML for Networked Systems

In recent years, we have witnessed the widespread usage of ML tools for various classification, detection, and control problems. More recently, we have witnessed the use of ML for various networking problems as well. However, operationalizing ML solutions for networked systems is more nuanced than simply calibrating existing tools, developed for other domains (image classification, NLP, etc.). More in-depth exploration to develop flexible, scalable, and generalizable ML-based networked systems.

CMPSC 293E Computer Science of Accelerator Design

From Microsoft’s Catapult, to Amazon’s F1 service, to Google’s ASIC cloud, it is clear that to achieve the energy efficiency demanded by computing at enormous scale we will need specialized machines for everything from neural network training and inference to media re-coding and beyond.  The design of such accelerators will require new algorithms more suited to efficient hardware operation, new programming languages that can cleanly and rapidly define computations ready for acceleration, and new software tools for exploring and rapidly prototyping design options.

CMPSC 293C Software Fuzzing for Correctness and Security

Software fuzzing is a testing technique that is heavily used in industry and studied in academia. The basic idea is simple: randomly generate inputs to the system under test and determine if the system executes properly for each input. However, there are many complexities and hard problems that arise when putting this idea into practice. We will study the different types of software fuzzing and the current state of fuzzing research through reading a number of relevant papers.

CMPSC 291A Mixed and Augmented Reality

Mixed and Augmented Reality, an active research field since the 1990s, has recently gained significant popularity because of the possibility of being implemented on smartphones and because of its unique approach of offering context-based computing directly in a person's field of vision. Augmented Reality is the concept of overlaying computer-generated information on top of the physical world. Mixed Reality is a bit broader and subsumes the fields of Augmented Reality, Augmented Virtuality, and Virtual Reality.

CMPSC 291A Real-Time High Quality Rendering

One of the perennial goals of computer graphics is creating high quality images which are indistinguishable from photographs: a goal referred to as photorealism. Another important goal is interactivity for visualization, simulation, gaming and other real-time applications. These two goals have historically been at odds with each other. In this course, we will review the history and some of the recent ideas that seek to bridge the gap between realism and interactivity. We will focus on the use of complex lighting and shading within limited computation time.