
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 eduC'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 eduLaptops Reccomended This course is designed for undergraduate and graduate students in science, social science and engineering programs who need to learn fundamental programming skills quickly but not in great depth. The course is ideal for undergraduate research positions or summer jobs requiring C++. It is not a class for experienced programmers in C++. Students with no programming background are welcome. Topics include control structures, arrays, functions, classes, objects, file handling, and simple algorithms for common tasks.
Contact: Tanmay Kumar, W20-557, x3-7788, sipb-iap-cpp 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, Rajiv Manglani, W20-557, x3-7788, sipb-iap-caffruby 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 eduDive 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.
Contact: Nathan Rittenhouse, W20-557, x3-7788, sipb-iap-exploit at mit dot edumore involved description coming soon
Contact: Jessica Mckellar, W20-557, x3-7788, sipb-iap-firstfoss 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 eduHaskell 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: Edward Yang, Kyle Miller, W20-557, x3-7788, sipb-iap-haskell 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
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.
more involved description coming soon
Contact: Andrew Farrell, Ian Smith, Rish Gupta, W20-557, x3-7788, sipb-iap-linux at mit dot eduFree 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 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.
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 Wenzel, W20-557, x3-7788, sipb-iap-postscript at mit dot edu
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.
You don't have to be a professional graphic designer to create
beautiful websites. This class will cover basic elements behind great
web design such as layout and composition, color theory, imagery, and
typography. It will also discuss W3C standards compliance and
accessibility guidelines and offer advice on how to go from design to
code, whether you are doing it yourself or working with another
developer.
Laptops encouraged!