Computational Text from A to Z +

This course is a survey of programming strategies and techniques for the procedural analysis and generation of text-based data. Topics include analyzing text based on its statistical properties, automated text production using probabilistic methods, and text visualization. Students will learn server-side and client-side JavaScript programming and build single-page web applications as well as bots for social media networks. Additionally, this course will critically investigate and explore open-source and commercial machine learning models for text and image generation. The course includes weekly homework coding exercises and an open-ended final project.

Dynamic Web Development +

Dynamic Web Development introduces the fundamentals of building “full stack” web applications. This course will focus on modern, client- and server- side web technologies and provide practical methods for approaching web development for creative and functional applications. The core technologies used in this course are HTML5, JavaScript, Node.js with the Express framework, and MongoDB database. Students will learn to design, develop, and deploy web applications and gain the necessary skills to extend and explore web development independently.

Prerequisite: ICM

Live Web +

The web has become an amazing platform for live communication.  Streaming media, audio and video conferencing, text chat and other real-time data transmission give us the ability to create a wide array of platforms that enable live cooperative and collaborative performance, real-time games, and novel real-time communications experiences.  

In this course, we focus on the types of content and interaction that can be supported through these technologies as well as explore new concepts around live participation.  We utilize browser based technologies such as WebSockets and WebRTC in combination with JavaScript and Node to build client/server based applications.  Experience with HTML and JavaScript are helpful but not required.

Collective Play +

Rules of play shape competitive games from checkers to football. But how do rules of interaction, both stated and unstated, shape everyday life? What happens when there are no established conventions and the rules are being made up as we go along? And last but not least, can we invent and facilitate new social norms through unconventional uses of technology?

In this course, we will design, code and test strategies for playful, serious, and bizarre group interactions drawing inspiration from daily life. We will interrogate both what it means to play and how individual identities and group behaviors emerge. What motivates participation? What hinders it? When does participation become oppressive? What’s the difference between self-consciousness and self-awareness? Who has power? Who doesn’t? Are leaders necessary? What’s the difference between taking turns and engaging in conversation? What happens when the slowest person sets the pace? What happens when there are no explicit rules? And how do we set the stage for breaking social conventions?

Class time will be a mix of technical material, play-testing, improvisation and movement work adapted from acting and dance training. All projects will be done in groups of 2-4.

We will work with both mobile sensors and traditional keyboard/mouse interaction with p5.js, socket.io and node.js to enable real-time interaction. Our challenge is to design technology-enabled interactions that encourage participants to be even more present in the physical world with each other.

The Nature of Code +

Can we capture the unpredictable evolutionary and emergent properties of nature in software? Can understanding the mathematical principles behind our physical world help us to create digital worlds? This class focuses on the programming strategies and techniques behind computer simulations of natural systems. We explore topics ranging from basic mathematics and physics concepts to more advanced simulations of complex systems. Subjects covered include physics simulation, trigonometry, self-organization, genetic algorithms, and neural networks. Examples are demonstrated in JavaScript using p5.js.

https://natureofcode.com/