C, love it or hate it, is somewhere at the foundation of most software today. While some may call it a glorified assembler, C does provide many useful features while giving you the option to get close to the hardware and have precise control over everything your machine does. We'll learn how to make your C a lot less painful to write with features you thought were only in higher-level languages like LISP, and we'll also go over when you might want to get closer to the hardware and how to go about doing that with inline assembly and gcc-specific features.
Topics covered may include:
The operating system kernel provides the most critical services to your computer, has the most responsibility of any software on your machine, runs at the highest privilege level on your CPU… and is by far the most fun part of your system to gratuitously modify for no good reason. Join us as we take a look at the Linux kernel (mainly) and all the crazy things we can make it do to our poor, innocent, unsuspecting userspace applications. Along the way we might run across some actually useful ideas.
You are encouraged to bring your laptop. If you want to try out some of these ideas, you can borrow an Ubuntu live CD or create a virtual machine at XVM—if you're not brave enough to test them on your own Linux computer!
Web: http://stuff.mit.edu/iap/2009/kernel
Wed Jan 7 and 14, 6:00-7:00pm, 4-231
No enrollment limit, no advance sign up
Participants requested to attend all sessions (non-series)
Prereq: none
Emacs is a remarkably powerful text editor. It can be customized
extensively to automate common tasks and help you save time. Emacs
is also a platform which ships with dozens of applications
(including a mail client, a calendar, a debugger, among others),
with many more available for download. We'll cover some of the
notable features of Emacs, basic concepts and usage, and
customizing and programming Emacs.
Web: http://stuff.mit.edu/iap/2009/emacs/
Contact: Phil Sung, W20-557, x3-7788, sipb-iap-emacs at mit dot edu
FUSE is a library that allows you to easily create custom filesystems without needing to write any kernel code. FUSE has greatly lowered the barrier to writing custom filesystems, so whether you want to write a virtual filesystem to make information more easily accessed and modified or whether you actually want to store files in some cool new way, FUSE will have you on the ground and running in no time.
We'll go over the basics of FUSE, then break into exercises where you'll get to try your hand at using FUSE, with help available. Examples and starter code will be in Python, but basic concepts apply to using FUSE in any language.
Web: http://stuff.mit.edu/iap/2009/fuse
Cosponsor: Department of Electrical Engineering and Computer Science
Mon/Wed, Jan 5, 7, 12, 14, 21, 26, and 28, 7:00-9:00pm, 32-044
Limited to 30 students; attend first session.
Participants requested to attend all sessions (non-series)
Prereq: some programming experience; high confusion threshold.
Zombie-like, 6.001 rises from the dead to threaten students again.
Unlike a zombie, though, it's moving quite a bit faster than it did the
first time. Like the original, don't walk into the class expecting that
it will teach you scheme; instead, it attempts to teach thought patterns
for computer science, and the structure and interpretation of computer
programs. Weekly projects, many based on historic 6.001 projects, will
be assigned.
Web: http://web.mit.edu/alexmv/6.001/
Contact: Caffeinated 6.001 Team, W20-557, x3-7788, 6.001-zombies at mit dot edu
Wed Jan 21, 3:00–6:00pm, 1-115
No enrollment limit, no advance sign up
Single session event
Prereq: Prior experience in a C-like language (C++, Java, Perl, etc.)
C's influence is deeply pervasive in today's software systems, and in
the many currently-popular programming languages derived from C. In
fact, C plays a role somewhat similar to the one once played by
assembly language: even if you don't do any actual day-to-day C
programming, knowing C can be a huge help in better understanding the
other systems and languages you are working with.
This class will attempt to cover the entire C programming language in
3 hours, in the grand tradition of SIPB's IAP caffeinated crash
courses. Prior programming experience, preferably in a C-like language
(C++, Java, Perl, etc.) is very definitely assumed.
Web: http://stuff.mit.edu/iap/2009/cccc
Contact: Geoffrey Thomas, W20-557, x3-7788, sipb-iap-cccc at mit dot edu
Wed Jan 14, 3:00–6:00pm, 1-115
No enrollment limit, no advance sign up
Single session event
Prereq: Prior experience in a C-like language (C, Java, Perl, etc.)
A three-hour introduction to the C++ programming language.
Syntax, data types, and control flow. Object basics.
Polymorphism and templates. Dynamic memory management.
Standard library. Useful tools.
Web: http://stuff.mit.edu/iap/2009/ccccpp
Contact: Geoffrey Thomas and Steve Levine, W20-557, x3-7788, sipb-iap-ccccpp at mit dot edu
Thurs Jan 15, 7:00-10:00pm, 1-115
No enrollment limit, no advance sign up
Single session event
Prereq: Some programming experience; high confusion threshold.
Perl is the duct tape of the computing world -- it has a light side, a
dark side, and (if you're running Debian) it holds your operating
system together. This class will teach you to choose the light side
— that is, how to write simple, useful Perl scripts without having it
turn into a gooey, sticky mess.
Contact: Ken Takusagawa, W20-557, x3-7788, sipb-iap-caffeinatedperl at mit dot edu
Tues Jan 13, 7:30-10:30pm, 1-115
No enrollment limit, no advance sign up
Single session event
Prereq: Some programming experience; familiarity with HTML;
high confusion threshold.
Although PHP may not stand for "Programmed Hypertext Pwnage," it just may be
that awesome. PHP is a server-side scripting language that is used on
millions of websites around the world to dynamically generate websites. In
other words, your PHP code generates the HTML that is displayed in your
internet browser. This class will be a fast-paced introduction to
programming in PHP that will teach you the concepts and uses of the
language, as well as take you through several examples. Some topics to be
covered: basic syntax, using PHP to generate websites, accessing MySQL
databases, using cookies and sessions, security, PHP extensions such as cURL
(for accessing outside websites) and GD (for making images), and more. Some
basic programming experience and familiarity with HTML is highly encouraged.
Web: http://sipb-iap.scripts.mit.edu/2009/cccphp
Contact: Steve Levine, W20-557, x3-7788, sipb-iap-caffeinatedphp at mit dot edu
Ruby is a language that was designed to be "more powerful than Perl, and more object-oriented than Python"* It was designed taking some of the best ideas from Perl, Python, LISP, and Smalltalk to create a language "natural, not simple"* but, above all, it was designed to make programming with it an enjoyable experience.
In a quick 3 hour course I will take you through a nearly-complete tour of the Ruby language including such standbys as syntax, data structures, class creation, and control flow, along with the more unique concepts of Blocks, Mixins, Alias Chaining, and Duck Typing. If time allows, we will finish out the course showing off some of Ruby's meta-programming capabilities by creating a framework for customizable zephyrbots.
*: Yukihiro "Matz" Matsumoto, Ruby Language Creator and Chief Designer
Contact: Donald Guy, W20-557, x3-7788, sipb-iap-ruby at mit dot edu
Mon Jan 12, 3:00–5:00pm, 3-133
No enrollment limit, no advance sign up
Single session event
Prereq: Basic knowledge of Perl
BarnOwl (http://barnowl.mit.edu)
is the most popular Zephyr client in
use here at MIT. BarnOwl is designed to run fine with no configuration
or customization, but it supports the use of perl as a powerful
extension and customization language. I'll talk about building
extension modules for BarnOwl, as well as some of the cool,
lesser-known, features available in BarnOwl.
Contact: Nelson Elhage, W20-557, x3-7788, sipb-iap-barnowl at mit dot edu
Tues Jan 20, 3:00–5:00pm, 1-115
Single session event
Prereq: nontechnical computer literacy (Windows, Mac, or Linux).
Have you struggled with combining changes across a team of writers e-mailing
edited documents back and forth? Or created dozens of "old", "old2", etc.
copies of a file for yourself, and then forgot which is which? How do large
software projects such as Firefox, Linux, and Athena deal with hundreds of
developers and thousands of files? The answer is version control, a software
technology that takes the hard work out of managing changes to files. We'll
look at Git, a young decentralized version control system that is quickly
becoming the standard, and how it can help you manage your own documents,
whether just for yourself or for your team.
Web: stuff.mit.edu/iap/2009/git
Contact: Geoffrey Thomas, W20-557, x3-7788, sipb-iap-git at mit dot edu
Wed. Jan. 28, 5:00-7:00pm, 4-237
No enrollment limit, No advance sign up required
Single session event
Prereq: none
Come learn about what actually goes on in our favorite series of
tubes! We'll discuss the internet's structure, routing, and protocols,
with demos and hands-on experiments. No prerequisites presumed!
After this you'll know why you get spam with only garbage characters
and nothing to sell, how Comcast can tell that you're pirating all of
Season 2 of Arrested Development off Bittorrent, why all this trust
lets you read your friends' AIM conversations or hijack YouTube, and
more.
Bring a laptop so you can play with some of the utilities we'll be
using.
Web: http://stuff.mit.edu/iap/2009/internet
Contact: Jessica McKellar, W20-557, x3-7788, sipb-iap-internet at mit dot edu
Mon Jan 26, 5:00–7:00pm, 1-115
No enrollment limit, No advance sign up required
Single session event
Prereq: none
Leave Word behind forever! LaTeX is the gold standard for document
typesetting in academia, and in this single-session event we'll see
how easy it is to make professional-looking papers and resumes, get
you typesetting math like a pro, delve into macros, and finish with
Beamer, the popular open source LaTeX analog to Powerpoint.
The room has Athena machines for in-class practice.
Web: http://stuff.mit.edu/iap/2009/latex
Contact: Jessica McKellar, Paul Baranay, W20-557, x3-7788, sipb-iap-latex at mit dot edu
Dive into the world of reverse engineering and software exploitation. Learn theory and practice for how to analyze and reverse engineer software for both understanding its internals and for gaining the ability to execute arbitrary code. This class will cover various vulnerabilities in software running on Windows, Linux, and Mac OSX.
Topics include:
At least a primitive knowledge of x86 assembly and C is preferred (read: almost necessary, but nothing's stopping you from coming!). The crackme's/exploitme's will be put online during the course, along with the presentation used.
Web: http://stuff.mit.edu/iap/2009/exploit
Thur Jan 8, 9:00–11:00pm, 56-114
No enrollment limit, No advance sign up required
Single session event
Prereq: some experience with web scripting.
When it comes to a cracker and a web application, a security
vulnerability is not a question of "if" but "when." They can attack you
with anything: XSS, CSRF, clickjacking, HTTP header splitting, remote
file inclusion, session fixation, etc. Learn how to identify and how to
defend against all of these attacks, with a special emphasis on the
theory behind validating, escaping and sanitizing data in a web context.
Also on the agenda: standards compliance and valid Unicode as risk
mitigation factors.
Most examples will be in PHP, but techniques are applicable to any language.
Web: http://stuff.mit.edu/iap/2009/websecurity
Contact: Edward Yang, W20-557, x3-7788, sipb-iap-websecurity at mit dot edu
Tu/Thu 20, 22, 27, 29, 7:30-8:30pm, 56-114
No enrollment limit, no advance sign up
Participants welcome at individual sessions (series)
Prereq: None.
The computing world uses more math than you think. In this class
we'll cover spectral analysis of graphs, linear programming,
semidefinite programming for the only known attack on some NP-complete
problems, how flipping a coin can be better than heads or tails, and
why cryptography works (or does it?)
Web: http://stuff.mit.edu/iap/2009/math
Contact: Greg Price, W20-557, x3-7788, sipb-iap-math at mit dot edu
Tu/Thu 20, 22, 27, 29, 5:30-7:30pm, 56-114
No enrollment limit, no advance sign up
Participants requested to attend all sessions (non-series)
Prereq: some programming experience.
Introduction to programming in Perl: syntax, flow control, I/O, regular
expressions, data structures, objects, and some CGI programming.
NOTE: It is highly recommended that participants attend all four sessions,
as different material will be covered in each session. The last session will
probably be a question and answer session and will cover
participant-requested material.
Web: http://stuff.mit.edu/iap/2009/perl
Contact: Quentin Smith, W20-557, x3-7788, sipb-iap-perl at mit dot edu
Tues/Thurs, Jan 13, 15, 20, and 22, 9:00-11:00pm, 56-114
No enrollment limit, no advance sign up
Participants requested to attend all sessions (non-series)
Prereq: Some programming experience; not much needed.
A general introduction to the Python programming language. This class
will cover basic control flow structures, object-oriented development,
and may also cover such topics as developing extensions or Python web
development.
Basic experience with programming in any language will make the class
much more helpful; it is highly recommended.
Web: http://stuff.mit.edu/iap/2009/python
Contact: Evan Broder, W20-557, x3-7788, sipb-iap-python at mit dot edu
Tu/Thu Jan 6, 8, 13, 15, 6:00-7:00pm, 56-114
No enrollment limit, no advance sign up
Participants requested to attend all sessions (non-series)
Prereq: Familiarity with programming.
PostScript is the standard document formatting language for printers,
and the forerunner to PDF, the Portable Document Format. This class
will concentrate both on PostScript as a programming language, and
PostScript's approach to rendering graphics. Additional topics will
include the structure of PDF documents, font encoding, and font
rendering. This class should provide a working understanding of
stack machine programming, vector graphics, typography, and
portable document encoding.
Contact: Bayard W. Wenzel, W20-557, x3-7788, sipb-iap-postscript at mit dot edu
Thursday Jan 22, 3:30–5:30pm, 4-237
No enrollment limit, no advance sign up
Single session event
Prereq: Basic knowledge of how to write documents in LaTeX
You probably use LaTeX to format problem sets or lab reports or papers
for your classes, but did you realize that it's also (not) so secretly
actually a full-fledged programming language, too? I'll show you some
basics about programming in LaTeX, including how to define your own
document classes and packages, and the basic programming tools you'll
probably find yourself needing.
My list
of examples from the class.
Contact: Nelson Elhage, W20-557, x3-7788, sipb-iap-latex-programming at mit dot edu
For anyone needing a push to get comfortable on Athena or looking to expand one's UNIX toolbox. We'll rapid-fire demo and give usecases for as many utilities as we can fit into the hour and send you home with a comprehensive cheat sheet with even more tools to keep you learning.
Topics include: