Problem solving, search techniques including local search and genetic algorithms, knowledge representation, planning, learning, and neural networks. This course provides an overview of the foundations, problems, approaches, implementation, and applications of, artificial intelligence.

Topics covered include problem solving, goal-based and adversarial search, logical, probabilistic, and decision theoretic knowledge representation and inference, decision making, and learning. Through programming assignments that sample these topics, students acquire an understanding of what it means to build rational agents of different sorts as well as applications of AI techniques in language processing, planning, vision.

Introduction to theory and practice of computer security with an emphasis on Internet and operating system applications. The course begins with a presentation of overarching principles of secure software development that enable the design, implementation, and testing of secure systems that can withstand attacks. These principles and strategies for realizing them will be illustrated through an analysis of common security issues and pitfalls in the software development process. Students will develop and analyze programs that demonstrate security principles, strategies, coding techniques, and the use of tools that can help make code more resistant to attacks.

Applied machine learning techniques are used in many different areas, such as the classification, visualization and analysis of data, clustering, and understanding of natural languages for human-computer interactions. These applications are crossing the boundaries of computer science and data science. Big technology firms have all started offering their own cloud machine learning platforms. This course will start with an overview of supervised and unsupervised learning, and introduce the associated libraries. Natural language processing NLP techniques including n-gram models, grammar, parse trees, and part-of-speech tagging will be discussed.

### Computer Science Courses

The issue of dimensionality of data will be discussed, and the task of clustering data, as well as supervised approaches for creating predictive models will be described, and learners will be able to apply Python predictive modeling methods while understanding process issues related to data generalizability e. The course will also look at more advanced techniques, such as neural network, feed-forward network, back-propagation and deep learning with cloud AI services.

Technological differences between using cloud services at a higher level of abstraction and coding locally will be discussed. Students will be able to identify the difference between a supervised classification and unsupervised clustering technique, identify which technique they need to apply for a particular dataset, manage and understand data, and engineer features to meet that need.

Students will work in teams to develop web applications that use industry standard cloud services provided by one of the AI cloud service providers. This course explores the fundamental concepts and engineering processes of software development and testing to produce software that is designed for security. This course is intended as a senior-level course for computational majors such as computer science and computer engineering since it covers the exploitation of programs based on computer architecture, systems, and software concepts.

First, software engineering considerations associated with a variety of software vulnerabilities will be analyzed, along with defensive programming techniques to avoid such vulnerabilities. The next part of this course will introduce systematic software engineering principles for building secure software to defend its attack surface, such as reference monitors, privilege separation, information flow, and program verification.

The third part will focus on methods for security testing of software including fuzz testing, symbolic execution, grey-box testing, and forensics. The final week of the course will examine adding security into the software engineering life cycle. The design and implementation of techniques to develop reference monitors, information-flow secure programs, testing mechanisms and enhancements, as well as defensive programming against prominent software vulnerabilities will be studied and analyzed.

Upon completion of the course students will be able to critically analyze the design and implementation of software for security flaws and build security mechanisms to prevent exploitation of such flaws. Evaluation and use of machine learning models; algorithmic elements of artificial intelligence. Problems of synchronization, concurrent execution, and their solution techniques. Design and implementation of concurrent software in a distributed system. Algorithm efficiency and accuracy, function interpolation and polynomial approximation, numerical differentiation and integration, initial-value problems, and approximation of eigenvalues.

Floating point computation, numerical rootfinding, interpolation, numerical quadrature, direct methods for linear systems. Polynomial and piecewise polynomial approximation, matrix least squares problems, numerical solution of eigenvalue problems, numerical solution of ordinary differential equations. CMPSC CMPSC Computer Graphics Algorithms I 3 Concepts and techniques needed to draw geometrical objects with a discrete device: Coordinate systems, clipping, curves and regions, geometric transformations, parallel and projective projections, hidden line and surface removal, animation.

Visualization techniques for data analysis and presentation. Applying visualization and perceptual theory. Using extending platform independent visualization software. Historically, such visualization has taken place in the scientist's imagination and was then rendered in drawings, graphs and diagrams.

The rapid advance of computer technology, and in particular, computer graphics, has made new tools available to the scientist to aid in the interpretation and communication of scientific information. In this course students will study a variety of computer graphics, scientific visualization, and virtual reality techniques and apply them to scientific visualization projects. The projects will be drawn from all of the sciences and the resulting projects will then be available to faculty and students to use as tools in their disciplines.

They will also have the opportunity to apply the knowledge and skills gained in CMPBD and its predecessors, CSE and CSE within the context of a significant natural science or mathematical visualization problem. Software and languages used in this course will change as the discipline of scientific visualization evolves. Projects initiated in this course can form the basis for further development as a research project. The course will take advantage of a variety of computing platforms available at Behrend including Windows NT and Unix.

Design and implementation of high level programming languages and survey of language paradigms including imperative, functional, and object-oriented programming. Study of these topics should improve student skills in programming, debugging and problem solving. Fundamental concepts of programming language design, specifications, and implementation; programming language paradigms and features; program verification.

In-depth theoretical study of data structures such as balanced trees, hash tables, priority queues, B-trees, binomial heaps, and Fibonacci heaps. Recurrences, algorithms design techniques, searching, sorting, selection, graph algorithms, NP-completeness, approximation algorithms, local optimization algorithms. The course studies regular languages by means of deterministic and nondeterministic finite-state automata and regular expressions; it studies context-free languages through the use of context-free grammars and pushdown automata; and it studies computability by means of Turing machines and recursive and recursively-enumerable languages.

The unsolvability of the halting problem for Turing machines is proved by a diagonalization argument, and this result is then used to show that various problems about languages are unsolvable, such as the problem of determining whether two context-free grammars generate the same language. Finally, the concept of computational complexity is introduced, and the classes P and NP are defined. Informally, the former class consists of problems that can be solved computationally in a manageable amount of time, and the latter consists of problems for which a proposed solution can be verified in a manageable amount of time.

The concept of an NP-complete problem is defined, and some specific problems are proved to be values to the variable of a Boolean formula that will make the formula true. Fundamental concepts of computer science: data structures, analysis of algorithms, recursion, trees, sets, graphs, sorting. Prime sieves, factoring, computer numeration systems, congruences, multiplicative functions, primitive roots, cryptography, quadratic residues.

Regular, context free, recursive, and recursively enumerable languages; associated machine models; applications. Notations for specifying these languages regular expressions, finite automata, context free grammars and turing machines are emphasized. Applications of these languages, including pattern recognition, scanning, parsing, specification of programming language syntax and Unix shell programming, are also discussed. Study of these topics should provide a solid theoretical basis for students to draw on in studying diverse areas such as algorithm analysis, complexity theory and compiler construction.

Compiler design and implementation; scanning, parsing, semantic analysis, optimization including static analysis , code generation, garbage collection, and error detection. Both the concepts and the implementation of these techniques will be emphasized. Study of these topics should improve student skills in programming, debugging and software engineering.

- Performance Evaluation of Computer Systems Introduction?
- Spring 2011!
- The Vietnam War on Campus: Other Voices, More Distant Drums?
- Building Military Dioramas, Volume 6.
- Inorganic Reactions and Methods, Formation of Bonds to O, S, Se, Te, Po (Part 2) (Zuckerman: Inorganic Reactions and Methods).
- When the Moon Split: A biography of Prophet Muhammad.

The course builds on concepts learned in earlier programming, data structure and computer organization courses. Design and implementation of compilers; lexical analysis, parsing, semantic actions, optimization, and code generation.

- The Adventures of the Peerless Peer!
- Bachelor Of Science In Computer Science, Bsc in Computer Science | India?
- Knowledge and Diplomacy?
- Plutarchs Maxime Cum Principibus Philosopho Esse Disserendum: An Interpretation with Commentary.
- Women and Industrialization in Asia (Routledge Studies in the Growth Economies of Asia, 3);

This course is intended as an introduction to study the concepts, structure and mechanisms that underlie operating systems. A tremendous range and variety of computer systems exist for which operating systems are designed. Rather than focus on individual operating systems, this course discusses the key mechanisms of modern operating systems, the types of design trade-offs and decisions involved in operating system design and the context within which the operating system functions. It is intended for seniors to take this course in their fall semester. Operating Systems overview and principles; processes and signals; concurrency and synchronization; memory and file management; client-server computing; scripts; systems-programming.

Development of software for devices including smart phones, tablets, handheld units, and other general purpose computing platforms. Applications of scientific knowledge and methods in the design and construction of computer software using engineering concepts. Computer science capstone project with documentation emphasis. The course provides instruction and specification of a simulated real-world work environment and associated activities to employ and integrate computer science concepts. Technical instruction and delivered products will be required. Students enrolled in the program will: 1 produce a design for a significant senior project using a cooperative, team approach, 2 present concepts, progress, and products to and interact with peer and faculty review boards.

The course will: 1 provide the student with an opportunity to work in a team environment designed around sound development practice, 2 present to students current team organization and management techniques, 3 describe various forms of written communication targeted to different audiences, and 4 reinforce the technical knowledge attained through the computer science curriculum. Software development process, life cycle; requirements analysis, specification, design, prototyping, testing, project management, and documentation.

CMPSC W Software Engineering and Design 3 The primary goal of this course is to familiarize students with the wide variety of techniques and methodologies used in software engineering to assist in the development of large software systems. Issues discussed include the human factors involved in developing software, models of the software development process, the use of formal methods in software engineering, software validation and verification, and software maintenance.

A second goal is to help students understand the importance of written communication in software engineering, and to provide opportunities for students to improve the quality of their writing - specifically in describing software systems. The primary means of accomplishing this goal is a semester long project in which students write requirements for a large software system. In writing these requirements, students describe the system for non-technical readers clients and users and specify it for technical readers other system developers. A final goal is to emphasize the role of teams in software development.

Modern software systems are simply too large to reasonably be produced by one person, so the ability to work as part of a team is vital. To support achieving this goal, techniques and tools for working in groups are discussed in the course, and students work on the semester project in teams. This course is a required course in the computer science COMP BS curriculum, and is intended to be taken by seniors as the capstone course for the major. We can performance calculations faster than we can transfer the data! Oh the humanity!

Session Introduction to Heterogeneous Programming Concepts Motivation Heterogeneous computing is the use of hardware that is specialized to a particular task. The GPU has evolved over the years to have teraflops of floating point performance. The Intel Phi accelerator has also been very successful as its cores are simplified x86 cores. Modern GPGPU Computing and Associated Languages Potential for very high performance at low cost Architecture well suited for certain kinds of parallel applications data parallel Demonstrations of X speedup over CPU Some convergence between commodity and GPUs and their associated parallel programming models Programmer can express parallelism at a high level Correctness is not difficult to achieve Portable across platforms Performance gains over sequential easily achievable.

As such, it supports a wide variety of heterogeneous platforms. OpenACC and OpenMP These are pragma and directive based tools use to decorate code to provide instructions to compiles as to what and how sections of code can be run on an accelerator. OpenACC and OpenMP each began their work independently, but have since begun the work of integrating their standards as they are very similar. R R is a popular statistics programming language with a huge library of additional functions.

Python Python is a very popular language in scientific and high-performance computing due to its easy-to-learn syntax and its forgiving dynamic type system. Numba Numba is a Python just-in-time compiler that can uses decorators to instruct the interpreter when to compile blocks of code. Mathematica Mathematica is a computation platform that is also very popular. Libraries Libraries can provide drop-in replacement functions in some situations, this is particularly true of math functions. Advantages Library is developed by performance expert Can be used by average developer Accelerates development process Often programmer does not even need to think about parallelism Parallelism is embedded in the library itself.

Disadvantages Difficult to customize to specific contexts Complex and difficult to understand. Pthreads Compiler deals with complexity of index expressions, data movement, synchronization Has the potential to be portable and non-proprietary if adopted by other vendors Real gains are being achieved on real applications. Disadvantages Performance may suffer, possibly a lot Cannot express everything that can be expressed in CUDA Still not widely adopted by the community, but it is new so this may change.

OpenCL OpenCL is an open source standard specification for developing heterogeneous parallel applications, i. Data-parallel programming interface to GPU Data to be operated on is discretized into independent partition of memory Each thread performs roughly same computation to different partition of data When appropriate, easy to express and very efficient parallelization Programmer expresses: Thread programs to be launched on GPU, and how to launch Data placement and movement between host and GPU Synchronization, memory management, testing, etc.

Advantages Not proprietary Portable and ot hardware specific. Disadvantages Not necessarily performance portable Low level in terms of programmer abstractions. OpenCL Workflow The host program is the code that runs on the host to setup the environment for the OpenCL program and create and manage kernels. Numerical analysis of discretization schemes for partial differential equations including interpolation, integration, spatial discretization, systems of ordinary differential equations; stability, accuracy, aliasing, Gibbs and Runge phenomena, numerical dissipation and dispersion; boundary conditions.

## Computer Science (CMPSC)

Survey of finite difference, finite element, finite volume and spectral approximations for the numerical solution of the incompressible and compressible Euler and Navier-Stokes equations, including shock-capturing methods. Special Topics in Applied Mathematics. Prerequisite: ACM or equivalent. Introduction to finite element methods. Development of the most commonly used methodâ€”continuous, piecewise-linear finite elements on triangles for scalar elliptic partial differential equations; practical a posteriori error estimation techniques and adaptive improvement; formulation of finite element methods, with a few concrete examples of important equations that are not adequately treated by continuous, piecewise-linear finite elements, together with choices of finite elements that are appropriate for those problems.

Homogenization and optimal design. Topics covered include periodic homogenization, G- and H-convergence, Gamma-convergence, G-closure problems, bounds on effective properties, and optimal composites. Special Topics in Financial Mathematics. A basic knowledge of probability and statistics as well as transform methods for solving PDEs is assumed. This course develops some of the techniques of stochastic calculus and applies them to the theory of financial asset modeling. Concepts of risk-neutral pricing and martingale representation are introduced in the pricing of options.

Topics covered will be selected from standard options, exotic options, American derivative securities, term-structure models, and jump processes. Advanced Topics in Applied and Computational Mathematics. Hours and units by arrangement; second, third terms. Advanced topics in applied and computational mathematics that will vary according to student and instructor interest. May be repeated for credit. Research in Applied and Computational Mathematics. Introduction to Computer Programming. A course on computer programming emphasizing the program design process and pragmatic programming skills.

It will use the Python programming language and will not assume previous programming experience. Program development and maintenance skills including debugging, testing, and documentation will also be taught. Assignments will include problems drawn from fields such as graphics, numerics, networking, and games. At the end of the course, students will be ready to learn other programming languages in courses such as CS 11, and will also be ready to take more in-depth courses such as CS 2 and CS 4.

Introduction to Programming Methods. Prerequisites: CS 1 or equivalent. CS 2 is a demanding course in programming languages and computer science. Topics covered include data structures, including lists, trees, and graphs; implementation and performance analysis of fundamental algorithms; algorithm design principles, in particular recursion and dynamic programming; Heavy emphasis is placed on the use of compiled languages and development tools, including source control and debugging. The course includes weekly laboratory exercises and projects covering the lecture material and program design.

The course is intended to establish a foundation for further work in many topics in the computer science option. Introduction to Software Design. Prerequisites: CS 2 or equivalent. CS 3 is a practical introduction to designing large programs in a low-level language. Heavy emphasis is placed on documentation, testing, and software architecture.

Students will work in teams in two 5-week long projects. In the first half of the course, teams will focus on testing and extensibility. In the second half of the course, teams will use POSIX APIs, as well as their own code from the first five weeks, to develop a large software deliverable. Software engineering topics covered include code reviews, testing and testability, code readability, API design, refactoring, and documentation. Fundamentals of Computer Programming. This course gives students the conceptual background necessary to construct and analyze programs, which includes specifying computations, understanding evaluation models, and using major programming language constructs functions and procedures, conditionals, recursion and looping, scoping and environments, compound data, side effects, higher-order functions and functional programming, and object-oriented programming.

It emphasizes key issues that arise in programming and in computation in general, including time and space complexity, choice of data representation, and abstraction management. This course is intended for students with some programming background who want a deeper understanding of the conceptual issues involved in computer programming. Introduction to Discrete Mathematics. First term: a survey emphasizing graph theory, algorithms, and applications of algebraic structures. Graphs: paths, trees, circuits, breadth-first and depth-first searches, colorings, matchings.

Enumeration techniques; formal power series; combinatorial interpretations. Topics from coding and cryptography, including Hamming codes and RSA. Second term: directed graphs; networks; combinatorial optimization; linear programming. Permutation groups; counting nonisomorphic structures. Topics from extremal graph and set theory, and partially ordered sets. Third term: elements of computability theory and computational complexity. Introduction to Computer Science Research. This course will introduce students to research areas in CS through weekly overview talks by Caltech faculty and aimed at first-year undergraduates.

Others may wish to take the course to gain an understanding of the scope of research in computer science. Introduction to Digital Logic and Embedded Systems. This course is intended to give the student a basic understanding of the major hardware and software principles involved in the specification and design of embedded systems. The course will cover basic digital logic, programmable logic devices, CPU and embedded system architecture, and embedded systems programming principles interfacing to hardware, events, user interfaces, and multi-tasking.

CS Computer Language Shop. A series of exercises guide the student through the pragmatic use of the chosen language, building his or her familiarity, experience, and style. More advanced students may propose their own programming project as the target demonstration of their new language skills. CS 11 may be repeated for credit of up to a total of nine units. CS 19 ab. Introduction to Computer Science in Industry. This course will introduce students to CS in industry through weekly overview talks by alums and engineers in industry.

It is aimed at second-year undergraduates. Others may wish to take the course to gain an understanding of the scope of computer science in industry. Additionally students will complete short weekly assignments aimed at preparing them for interactions with industry. This course is closed to first and second term freshman for credit.

Decidability and Tractability. Prerequisite: CS 2 may be taken concurrently. This course introduces the formal foundations of computer science, the fundamental limits of computation, and the limits of efficient computation. Topics will include automata and Turing machines, decidability and undecidability, reductions between computational problems, and the theory of NP-completeness. Introduction to Computing Systems. Basic introduction to computer systems, including hardware-software interface, computer architecture, and operating systems.

Course emphasizes computer system abstractions and the hardware and software techniques necessary to support them, including virtualization e. Algorithms in the Real World. This course introduces algorithms in the context of their usage in the real world. The course covers compression, advanced data structures, numerical algorithms, cryptography, computer algebra, and parallelism. The goal of the course is for students to see how to use theoretical algorithms in real-world contexts, focusing both on correctness and the nitty-gritty details and optimizations.

Implementations focus on two orthogonal avenues: speed for which C is used and algorithmic thinking for which Python is used. This course introduces techniques for the design and analysis of efficient algorithms. Major design techniques the greedy approach, divide and conquer, dynamic programming, linear programming will be introduced through a variety of algebraic, graph, and optimization problems. Methods for identifying intractability via NP-completeness will be discussed.

Computer Science Education in K Settings. This course will focus on computer science education in K settings. Students will gain an understanding of the current state of computer science education within the United States, develop curricula targeted at students from diverse backgrounds, and gain hands on teaching experience. Through readings from educational psychology and neuropsychology, students will become familiar with various pedagogical methods and theories of learning, while applying these in practice as part of a teaching group partnered with a local school or community college.

Each week students are expected to spend about 2 hours teaching, 2 hours developing curricula, and 2 hours on readings and individual exercises. May not be repeated. Principles of Microprocessor Systems. The principles and design of microprocessor-based computer systems. Lectures cover both hardware and software aspects of microprocessor system design such as interfacing to input and output devices, user interface design, real-time systems, and table-driven software.

The homework emphasis is on software development, especially interfacing with hardware, in assembly language. Microprocessor Systems Laboratory. The student will design, build, and program a specified microprocessor-based system. This structured laboratory is organized to familiarize the student with electronic circuit construction techniques, modern development facilities, and standard design techniques. The lectures cover topics in microprocessor system design such as display technologies, interfacing with analog systems, and programming microprocessors in high-level languages.

Microprocessor Project Laboratory. A project laboratory to permit the student to select, design, and build a microprocessor-based system.

## BibTeX bibliography lulasedyxuxi.gq

The student is expected to take a project from proposal through design and implementation possibly including PCB fabrication to final review and documentation. Multidisciplinary Systems Engineering. This course presents the fundamentals of modern multidisciplinary systems engineering in the context of a substantial design project.

Students from a variety of disciplines will conceive, design, implement, and operate a system involving electrical, information, and mechanical engineering components. Specific tools will be provided for setting project goals and objectives, managing interfaces between component subsystems, working in design teams, and tracking progress against tasks. Students will be expected to apply knowledge from other courses at Caltech in designing and implementing specific subsystems.

During the first two terms of the course, students will attend project meetings and learn some basic tools for project design, while taking courses in CS, EE, and ME that are related to the course project. During the third term, the entire team will build, document, and demonstrate the course design project, which will differ from year to year. Freshmen must receive permission from the lead instructor to enroll. CS 80 abc. Individual research project, carried out under the supervision of a member of the computer science faculty or other faculty as approved by the computer science undergraduate option representative.

Open only to upperclass students. CS 81 a. Undergraduate Projects in Computer Science. Units are assigned in accordance with work accomplished. Supervised research or development in computer science by undergraduates. This course can with approval be used to satisfy the project requirement for the CS major.

Undergraduate Reading in Computer Science. Supervised reading in computer science by undergraduates. The topic must be approved by the reading supervisor, and a formal final report must be presented on completion of the term. CS abc.

### Works under MDS 004.24

Special Topics in Computer Science. Units in accordance with work accomplished; offered by announcement. The topics covered vary from year to year, depending on the students and staff. Primarily for undergraduates. Seminar in Computer Science. Reading in Computer Science. Causation and Explanation.

An examination of theories of causation and explanation in philosophy and neighboring disciplines. Topics discussed may include probabilistic and counterfactual treatments of causation, the role of statistical evidence and experimentation in causal inference, and the deductive-nomological model of explanation. The treatment of these topics by important figures from the history of philosophy such as Aristotle, Descartes, and Hume may also be considered.

Programming Practicum. A self-paced lab that provides students with extra practice and supervision in transferring their programming skills to a particular programming language. This course is available for graduate students only. Undergraduates should register for CS Functional Programming. Prerequisites: CS 1 and CS 4. This course is a both a theoretical and practical introduction to functional programming, a paradigm which allows programmers to work at an extremely high level of abstraction while simultaneously avoiding large classes of bugs that plague more conventional imperative and object-oriented languages.

The course will introduce and use the lazy functional language Haskell exclusively. Topics include: recursion, first-class functions, higher-order functions, algebraic data types, polymorphic types, function composition, point-free style, proving functions correct, lazy evaluation, pattern matching, lexical scoping, type classes, and modules.

Some advanced topics such as monad transformers, parser combinators, dynamic typing, and existential types are also covered. Reasoning about Program Correctness. Prerequisite: CS 1 or equivalent. This course presents the use of logic and formal reasoning to prove the correctness of sequential and concurrent programs. Topics in logic include propositional logic, basics of first-order logic, and the use of logic notations for specifying programs. The course presents a programming notation and its formal semantics, Hoare logic and its use in proving program correctness, predicate transformers and weakest preconditions, and fixed-point theory and its application to proofs of programs.

Computability Theory. Various approaches to computability theory, e. Theory of computable functions and effectively enumerable sets. Decision problems. Decidable problems, from number theory, algebra, combinatorics, and logic. Complexity of decision procedures. Inherently complex problems of exponential and superexponential difficulty. Feasible polynomial time computations. Polynomial deterministic vs. An introduction to the theory and practice of logic model checking as an aid in the formal proofs of correctness of concurrent programs and system designs. The specific focus is on automata-theoretic verification.

The course includes a study of the theory underlying formal verification, the correctness of programs, and the use of software tools in designs. Advanced Digital Systems Design. The course covers both design and implementation details of various systems and logic device technologies. The emphasis is on the practical aspects of ASIC design, such as timing, testing, and fault grading.

Students are expected to design and implement both systems discussed in the class as well as self-proposed systems using a variety of technologies and tools. Prerequisites: Ma 1b, CS 21, CS 38 or equivalent recommended and Ph 12b or Ph 2b recommended or instructor's permission , This course is an introduction to quantum cryptography: how to use quantum effects, such as quantum entanglement and uncertainty, to implement cryptographic tasks with levels of security that are impossible to achieve classically.

The course covers the fundamental ideas of quantum information that form the basis for quantum cryptography, such as entanglement and quantifying quantum knowledge. We will introduce the security definition for quantum key distribution and see protocols and proofs of security for this task.

We will also discuss the basics of device-independent quantum cryptography as well as other cryptographic tasks and protocols, such as bit commitment or position-based cryptography. Relational Databases. Introduction to the basic theory and usage of relational database systems. The course introduces the basics of database schema design and covers the entity-relationship model, functional dependency analysis, and normal forms. Additional topics include other query languages based on the relational calculi, data-warehousing and dimensional analysis, writing and using stored procedures, working with hierarchies and graphs within relational databases, and an overview of transaction processing and query evaluation.

Extensive hands-on work with SQL databases. Database System Implementation. This course explores the theory, algorithms, and approaches behind modern relational database systems. Topics include file storage formats, query planning and optimization, query evaluation, indexes, transaction processing, concurrency control, and recovery.

Assignments consist of a series of programming projects extending a working relational database, giving hands-on experience with the topics covered in class. The course also has a strong focus on proper software engineering practices, including version control, testing, and documentation. Projects in Database Systems. Students are expected to execute a substantial project in databases, write up a report describing their work, and make a presentation. Operating Systems. Prerequisites: CS This course explores the major themes and components of modern operating systems, such as kernel architectures, the process abstraction and process scheduling, system calls, concurrency within the OS, virtual memory management, and file systems.

Students must work in groups to complete a series of challenging programming projects, implementing major components of an instructional operating system. Most programming is in C, although some IA32 assembly language programming is also necessary. Familiarity with the material in CS 24 is strongly advised before attempting this course. Prerequisite: basic knowledge of digital electronics. Detailed study of the VHDL language, with basic and advanced applications. Review and discussion of digital design principles for combinational-logic, combinational-arithmetic, sequential, and state-machine circuits.

Wide selection of complete, real-world fundamental advanced projects, including theory, design, simulation, and physical implementation. All designs are implemented using state-of-the-art development boards. Information Theory. Prerequisites: Ma 3. Entropy, relative entropy, and mutual information for discrete and continuous random variables.

Mathematical models for information sources and communication channels, including memoryless, Markov, ergodic, and Gaussian. Calculation of capacity and rate-distortion functions. Universal source codes. Side information in source coding and communications. Network information theory, including multiuser data compression, multiple access channels, broadcast channels, and multiterminal networks. Discussion of philosophical and practical implications of the theory. Error-Correcting Codes. Prerequisites: Ma 2.

This course develops from first principles the theory and practical implementation of the most important techniques for combating errors in digital transmission or storage systems. Topics include algebraic block codes, e. LDPC codes, turbo codes, fountain coding. Emphasis will be placed on the associated encoding and decoding algorithms, and students will be asked to demonstrate their understanding with a software project.

Programming Languages. Prerequisites; CS 4. CS is a course on programming languages and their implementation. It teaches students how to program in a number of simplified languages representing the major programming paradigms in use today imperative, object-oriented, and functional.

It will also teach students how to build and modify the implementations of these languages. Emphasis will not be on syntax or parsing but on the essential differences in these languages and their implementations. Both dynamically-typed and statically-typed languages will be implemented.

Relevant theory will be covered as needed. Implementations will mostly be interpreters, but some features of compilers will be covered if time permits. Enrollment limited to 20 students. Advanced Robotics: Navigation and Vision. Prerequisite: ME ab.

## Introduction to Computer Performance Analysis with Mathematica

The course focuses on current topics in robotics research in the area of autonomous navigation and vision. Topics will include mobile robots, multilegged walking machines, use of vision in navigation systems. The lectures will be divided between a review of the appropriate analytical techniques and a survey of the current research literature. Course work will focus on an independent research project chosen by the student. Robotic Systems.