Fall 2013 Graduate Special Topics in Computer Science

NOTE: for descriptions of standard graduate computer science courses, see Graduate Course Descriptions.

CSCI-GA 3033-001 Statistical Natural Language Processing

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

CSCI-GA 3033-002 Financial Software Projects

CSCI-GA 3033-003 Production Quality Software

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

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.

CSCI-GA 3033-005 Distributed Systems

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.

CSCI-GA 3033-006 Motion Capture for Gaming & Urban Sensing

CSCI-GA 3033-007 Music Software Projects

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 few centuries?

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.

CSCI-GA 3033-008 Graphics Processing Units (GPUs): Architecture & Programming

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.

CSCI-GA 3033-009 Cloud Computing: Concepts & Practice

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.

CSCI-GA 3033-010 Multicore Processors: Architecture & Programming

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.

CSCI-GA 3033-011 Principles of Software Security

CSCI-GA 3033-012 Computational Photography

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.

CSCI-GA 3033-013 Computational Number Theory & Algebra

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.

CSCI-GA 3033-014 Programming Paradigms for Concurrency


CSCI-GA 3033-015 Speech Recognition

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.

CSCI-GA 3033-016 Realtime & Big Data Analytics

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.

CSCI-GA 3033-017 Social Multiplayer Games

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. Prerequisite: Java.

top | contact webmaster@cs.nyu.edu