
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:
Everything you know about browser compatibility is wrong! At least, if you want mobile users of your site to have a good experience. Using Javascript frameworks and serving the same page to everyone is great for building compatible websites for desktops, but with mobile download speeds recapitulating the days of dial-up modems, the extra overhead becomes significant. Learn about the challenges and quirks of mobile devices and how to give your users a full-featured experience without locking out those with less-capable phones. We'll cover basic techniques, limitations of popular devices, testing, and taking advantage of advanced features. Bring your favorite smartphone or other mobile device if you have one.
Contact: Xavid Pretzer, W20-557, x3-7788, sipb-iap-mobileweb at mit dot eduZombie-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.
Contact: Alex Vandiver, W20-557, x3-7788, sipb-iap-6.001 at mit dot eduAlthough 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.
Contact: Steve Levine, W20-557, x3-7788, sipb-iap-caffphp 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-caffruby at mit dot eduThis two-hour session is a high-speed, low drag introduction to computer forensics. You'll see what kinds of data can be recovered from various devices found in the real world and in the cloud. There's treasure everywhere! Topics covered include hidden data in office documents, filesystems, flash storage, cell phones, GPS devices (which are mostly Linux boxen, anyway), computer memory (RAM), social networking sites, the Lobby 7 Anomalous Activity Hypothesis, Jesse's Dead Body Theory of Evidence, and the story of FRED. By the end you'll understand information hasn't been destroyed unless the media has been raised to the Curie Point.
Contact: Jesse Kornblum, W20-557, x3-7788, sipb-iap-forensics at mit dot edu
Complex Event Processing (CEP) is a new infrastructure technology for processing large volumes of data in real time. CEP platforms use new programming paradigms and languages to make event processing both high performance and highly scalable. The class will cover both the functionality of these systems as well as their design and implementation. Richard Tibbetts is CTO at StreamBase, an MIT startup and leading CEP platform vendor.
Complex Event Processing (CEP) is a new infrastructure technology for processing large volumes of data in real time. CEP is often used for developing high frequency trading applications, which consume data about market events and execute trades with sub-millisecond latency to capture opportunities. The class will discuss the architecture and ecosystem of these trading systems, how they are implemented and how new technologies are changing the landscape. Richard Tibbetts is CTO at StreamBase, an MIT startup and leading CEP platform vendor.
Contact: Richard Tibbetts, W20-557, x3-7788, sipb-iap-eventproc at mit dot eduCryptographic hash functions are used in many different applications--on their own, and as building blocks for more complicated protocols. Come learn how they actually work inside (and why you should never, ever try to implement them yourself). This course will describe what sorts of properties are desirable in cryptographic hash functions, a few techniques for achieving these properties, and what is actually done in practice. In-depth attention will be given to the MD4 family (which includes MD5 and SHA-1, among others). Time permitting, an overview of the design of selected SHA-3 candidates will also be given.
Contact: David Wilson, W20-557, x3-7788, sipb-iap-hash at mit dot eduYou've probably heard of Python, Java, and C. These languages were developed to be usable, idiomatic, and readable. What you've probably not heard of are those languages which test the boundaries of language design, throw out the established requirements of real-world programming, and create something nearly, but not quite, impossible to use. We will look at a multitude of examples to see just what makes them esoteric, including such innovations as INTERCAL, Brainf*ck, Piet, and Whitespace. We will also briefly talk about the concept Turing-completeness to get a grasp of what it means for a language to be powerful and come to the conclusion that it's really not hard to be equivalent to a Turing machine.
Contact: Kyle Miller, W20-557, x3-7788, sipb-iap-obscure at mit dot eduHave 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.
Contact: Geoffrey Thomas, W20-557, x3-7788, sipb-iap-git at mit dot edu
Haskell has become infamous because of its emphasis on the monad, a construct from category theory that Haskell's designers saw fit to ordain the gatekeeper of all IO actions. While it is possible to perform IO without a deep understanding of what it means to be a monad, you will be a much improved hacker if you understand the relationships between Haskell's standard typeclasses. This class will start off with a refresher of types and syntax, and then take the journey from functor to pointed to applicative to monad, with short interruptions from other delicious typeclasses.
Contact: Edward Yang, W20-557, x3-7788, sipb-iap-haskelltype at mit dot edu
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.
Free yourself from your hard drive! Come learn about the current state of the art in booting computers completely over the network using a centralized server. The class will be split between demonstration, tutorial, and technical explanation, so people of all backgrounds should be able to take away something useful. Topics covered will include installing Linux without a CD-ROM, installing to and booting from network-attached storage, booting securely with user authentication, booting wirelessly, flashing network boot code into a BIOS, and how all this stuff is currently used at MIT. Most demonstrations will focus on the open-source network booting firmware gPXE.
Contact: Joshua Oreman, W20-557, x3-7788, sipb-iap-netboot at mit dot eduRuby on Rails is an open-source web framework that is optimized for programmer happiness and sustainable productivity. It lets you write beautiful code by favoring convention over configuration. We will dive right in and learn the framework as we go.
Contact: Rajiv Manglani, W20-557, x3-7788, sipb-iap-rails at mit dot eduCome learn principles of web design: we'll be starting with an introduction to HTML, CSS, and other basics, and then we will move on to topics ranging from color schemes to internal infrastructure to validation. Whether you've never seen webpage source before or you've designed a multitude of websites in the past, join us for a good time and interesting discussion. Lectures will focus on higher-level design considerations (and will generally not take the entire 2-hour time period), while labs will generally begin with a short lecture detailing implementation and then give students a chance to experiment with the principles and elements themselves, so bring questions to lectures and questions and laptops to lab sections. Feel free to pick and choose lectures/labs to attend as appropriate for your interests and skill level. Lecture 1: Introduction to HTML & CSS This first lecture will serve as a gentle introduction to webpage source for new developers, mostly in HTML and CSS. The lecture will focus on getting everyone on equal footing in terms of a technical foundation for the following lectures. Topics will include common practices and standards, browser compatibility considerations, etc. Lecture 2: Look & Feel Layout considerations and colors schemes will be discussed in this lecture. Lecture 3: Internal Infrastructure Design of the internal structure of your website is important, from the standpoint of advanced users, future maintainers, and future developers. Issues of accessibility (including graceful degradation) and validation will also be covered.
Contact: Cathy Zhang, Jonte Craighead, W20-557, x3-7788, sipb-iap-webdesign at mit dot eduCome learn principles of web design: we'll be starting with an introduction to HTML, CSS, and other basics, and then we will move on to topics ranging from color schemes to internal infrastructure to validation. Whether you've never seen webpage source before or you've designed a multitude of websites in the past, join us for a good time and interesting discussion. Lectures will focus on higher-level design considerations (and will generally not take the entire 2-hour time period), while labs will generally begin with a short lecture detailing implementation and then give students a chance to experiment with the principles and elements themselves, so bring questions to lectures and questions and laptops to lab sections. Feel free to pick and choose lectures/labs to attend as appropriate for your interests and skill level. These are Lab hours to practice your web design skills and run through excersizes
Contact: Cathy Zhang, Jonte Craighead, W20-557, x3-7788, sipb-iap-webdesignlab at mit dot eduWake up and smell the coffee! Find out why this platform-independent object-oriented lanuage from Sun Microsystems (now an open-source project) is one of the fastest growing languages in the modern computing industry. Session Topics: Introduction to Java (syntax, variables, methods) Object Orientation (inheritance, abstraction, etc.) Cross-platform GUIs Advanced Java Programming
Contact: Tony Valderrama, W20-557, x3-7788, sipb-iap-java at mit dot edu
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.
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.
Contact: Bayard Wenzel, Eugene Kuznetsov, W20-557, x3-7788, sipb-iap-c at mit dot edu
Haskell is the world's most *reasonable* programming language -- a language ideally suited for reasoning about code by machines, by humans, and by machines aiding humans. We'll see how to make useful, beautiful, reasonable Haskell programs.
Contact: Kyle Miller, Patrick Hurst, W20-557, x3-7788, sipb-iap-haskell at mit dot eduPostScript 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 Wenzel, W20-557, x3-7788, sipb-iap-postscript at mit dot edu
January 4th: Intro to Linux What's on the command line, and how can I use it? How can I manage my files without a graphical interface? And how can I do the things I'm used to doing graphically? Please bring your own laptop and don't worry if you if doesn't already run linux. Afterward, we'll hand out liveCDs and show you how to install.
January 6th: Customizing Linux During this session, we'll talk about how to customize Linux to work exactly the way you want with dotfiles and other configuration tools, how to schedule tasks using cron, and how to take advantage of the services offered by MIT's Athena.
January 8th: Scripting Build a better life by automating things you do all the time! In this session we'll show you the real power of linux: the ability to chain together multiple tools to do something entirely unexpected. We'll show you how to use the shell as a full programming language, and at the end, how to write your own tools in your favorite scripting language
Contact: Ian Smith, Patrick Hurst, Andrew Farrell, W20-557, x3-7788, sipb-iap-linux at mit dot eduGDB, the GNU Project debugger, allows you to see what is going on `inside' another program while it executes -- or what another program was doing at the moment it crashed. GDB can do four main kinds of things (plus other things in support of these) to help you catch bugs in the act: Start your program, specifying anything that might affect its behavior. Make your program stop on specified conditions. Examine what has happened, when your program has stopped. Change things in your program, so you can experiment with correcting the effects of one bug and go on to learn about another. The program being debugged can be written in Ada, C, C++, Objective-C, Pascal (and many other languages). Those programs might be executing on the same machine as GDB (native) or on another machine (remote). GDB can run on most popular UNIX and Microsoft Windows variants.
Contact: Geoffrey Thomas, W20-557, x3-7788, sipb-iap-gdb at mit dot eduDeveloped four years ago by a fast-moving online-news operation, Django was designed to handle two challenges: the intensive deadlines of a newsroom and the stringent requirements of the experienced Web developers who wrote it. It lets you build high-performing, elegant Web applications quickly. Django comes with an easy-to-understand templating engine, an Object-relational matter that lets you manipulate your database though interactions with python objects, and an autoconfigured admin interface.
Contact: Maria Rodriguez, Steve Levine, W20-557, x3-7788, sipb-iap-django at mit dot edu