Fall 2013 Graduate Special Topics in
NOTE: for descriptions of standard graduate computer science
courses, see Graduate Course
In this course we will explore statistical, model based approaches to natural language processing.
There will be a focus on corpus-driven methods that make use of supervised and unsupervised machine
learning methods and algorithms. We will examine some of the core tasks in natural language
processing, starting with simple word-based models for text classification and building up to rich,
structured models for syntactic parsing and machine translation. In each case we will discuss recent
research progress in the area and how to design efficient systems for practical user applications. In
the course assignments you will construct basic systems and then improve them through a cycle of error
analysis and model redesign. This course assumes a good background in basic probability and a strong
ability and interest to program in Java. The class is open to graduate as well as undergraduate
In this course, students learn to develop production quality software. Lectures present real-world
development practices that maximize software correctness and minimize development time. A special
emphasis is placed on increasing proficiency in a particular programming language by doing weekly
development projects and participating in code reviews. Assignments become more sophisticated as the
semester progresses, eventually incorporating unit tests, build scripts, design patterns, and other
CSCI-GA 3033-004 Open Source Tools
This course covers a brief history and philosophy of open source software, followed by an in-depth
look at open source tools intended for developers. In particular, we will present an overview of the
Linux operating system, command line tools (find, grep, sed), programming tools (GIT, trace), web and
database tools (Apache, MySQL, App Engine), and system administration tools. We will also cover
scripting languages such as shell and Python, and use them to write web applications.
Distributed systems help programmers aggregate the resource of many networked computers to
construct highly available and scalable services. This class teaches the abstraction, design and
implementation techniques that allow one to build fast, scalable, fault-tolerant distributed systems.
Topics include multithreading, network programming, consistency, naming, fault tolerance, security and
several case studies of distributed systems.
Did you ever wonder why there are 12 notes in the western music scale? Or how the intervals between
notes came to be? When were the first musical scales developed or "discovered" and how (and
why) have they been modified since? Who were the key innovators of western music theory over the last
It is not uncommon for software developers to have an affinity for music. After all, the creation
of both software and music is part art and part science. Further, music and computing are built upon
fundamental mathematical principles. While it is not required to understand music theory to be a good
player, understanding why we are constrained to a certain set of notes is an enlightening topic - for
musicians and non-musicians alike.
This course is for students interested in how both music and software are constructed. Student
teams will build software in phases which will demonstrate the underlying rules in modern western
music theory. The beauty of software is that it can be applied in just about any domain.
Music students are encouraged to apply even though this course is primarily a software development
class. The interdisciplinary product development teams will be composed of at least one engineer and
one subject domain expert who will work together on the assignments. The software the teams build will
be used to demonstrate how music theory developed as well as give students an intuitive grasp of some
fascinating underlying universal truths.
In this course, we will cover architectural aspects and capabilities of modern GPUs (graphics processing unit) and will learn how to program GPUs to solve different type of problems. Many computations can be performed much faster on the GPU than on a traditional processors. This is why GPUs are present now in almost all computers; and the majority of Top 500 supercomputers in the world are built around GPUs. GPUs are now used for a diverse set of applications not only traditional graphics applications; this introduces the concept of general-purpose GPUs or GPGPUs, which is then main subject of this course.
This is a graduate level course on Cloud Computing with emphasis on hands-on design and implementations. Both Infrastructure as a Service (IaaS) and Platform as a Service (PaaS) cloud technologies and concepts will be covered. By the end of the course, students should have fair amount of knowledge about how to use a Cloud, write applications on Cloud and build your own private Cloud.
The first part of the course covers basic building blocks such as virtualization technologies, virtual appliance, automated provisioning, elasticity, and cloud monitoring. We shall learn these concepts by using and extending capabilities available in real clouds such as Amazon AWS, Google App Engine and OpenStack.
The second part of the course will cover more advanced topics with emphasis on ultra large scale systems, computation models and storage clouds for big data. Example topics are storage cloud, cloud security, Hadoop for Big Data, Network Virtualization (SDNs) and new services leveraging cloud migration. Several real world applications will be covered to illustrate these concepts and research innovations including Facebook Cassandra, Amazon Dynamo, Google Big Table, Hadoop HDFS, Yahoo Zookeeper.
Students will benefit from background in Operating Systems, and object oriented programming such as Java. The students are expected to participate in class discussions, present research papers, and conduct a significant course project.
The tremendous advances in process technology have created a revolution both in hardware and in software. On the hardware side, we moved from single core processors to multicore/manycore processors. Multicore chips are now everywhere. You can find them in smartphones, playstations, notebooks, all the way up to supercomputers. To benefit from these chips, software must be parallelized, which starts another revolution in software.
The purpose of this course is to introduce you to both the hardware advances and parallel programming techniques targeting multicore and manycore processors. You will learn how to make the best use of the underlying hardware to build applications that are faster, more power-efficient, and more reliable.
Computational photography is an exciting new area at the intersection of computer graphics and computer vision. Through the use of computation, its goal is to move beyond the limitations of conventional photography to produce enhanced and novel imagery of the world around us. The main focus of the course will be on software-based methods for producing visually compelling pictures. However, it will also cover novel camera designs, for which computation is integral to their operation. The course will explain the principles behind many of the advanced tools that can be found in Adobe Photoshop, although the use of this package itself is outside the scope of the course. The course will be suitable for advanced undergraduates, masters and PhD students. A reasonable knowledge of linear algebra is required and familiarity with Matlab is desirable.
We shall study algorithms for computing with integers, polynomials, and other algebraic objects. These algorithms play an essential role in the technologies underlying modern systems for storing and transmitting data, especially in the areas of error correcting codes and cryptography, and we shall study some of these applications as well.
I'd like to spend most class time focusing on number theory and algorithms. The lectures should be easily accessible to students who have had undergraduate courses in abstract algebra, linear algebra, and probability theory; however, the textbook for the course develops all of the necessary mathematics from scratch, and so students with some gaps in their mathematical background can fill any such gaps by reading the textbook.
It is also assumed that students have some basic background in algorithm design and analysis.
This course gives a computer science presentation of automatic speech recognition, the problem of transcribing accurately spoken utterances, and presents algorithms for creating large-scale speech recognition systems. The algorithms and techniques presented are now used in most research and industrial systems. The objective of the course is not only to familiarize students with particular algorithms used in speech recognition, but also to use that as a basis to explore general concepts of text and speech, as well as machine learning algorithms relevant to a variety of other areas in computer science. The course will make use of several software libraries and will study recent research and publications in this area.
This course will introduce technologies at the foundation of the Big Data
movement that have facilitated scalable management of vast quantities of data
collected through realtime and near realtime sensing. We will also explore the
tools enabling the acquisition of near realtime data in the social domain, the
fusion of those data when in flight and at rest, and their meaningful
representation in graphical visualizations. Students are required to complete
weekly reading and/or programming assignments and demonstrate mastery of course
topics by developing and demonstrating a software project of their choosing.
Class time will be set aside for project proposal and final demo.
Prerequisites: Â CSCI-GA 2250 or equivalent Operating Systems course;
programming experience in C/C++ or Java for assignments and final project;
CSCI-GA 2262, CSCI-GA 2620, or undergraduate course in networks. A familiarity
with databases will be useful.
The course will teach how to develop online casual multiplayer games using
open technologies such as GWT, AppEngine, DHTML, JSON, AJAX, long-polling,
HTML5, XMPP, OAuth2, PhoneGap, etc. The course has two big projects: An
individual project where you develop a turn-based multiplayer game (with
mobile and desktop graphics, artificial-intelligence, save&load, etc), and a
group project (you can choose on using a physics engine, integrating with
either Facebook, Google+, Hangouts, Android, iOS, etc). The course will also
teach about ranking systems, artificial intelligence for games, real-time and
turn-based games, location awareness, and advanced UI such as touch screen and
tilt. The course will not concern with 3D graphics, animations, or sounds.
| contact firstname.lastname@example.org