C++ topics

Template code trimming
Smart Pointers — Intro (templates, STL, TR1)
Notes on shared_ptr< T >
Managed memory and shared_ptrs
Using const_pointer_cast(..)
Using static_pointer_cast(..) and dynamic_pointer_cast(..)
static_pointer_cast(..) for weak_ptrs (Boost)
Class factories and shared_ptr
Specializing make_shared< T > and allocate_shared< T >
Arrays, shared_ptr< T >s, and deleters (STL, TR1)
Tuples and structs (TR1, C++0x)
Variadic tuple<..> — clever vs obvious
Variadic tuple<..> — the get() method
Variadic tuple<..> — imperative meta programming
Exactly when are templates expanded?
Template programming with MPL — XOR example (tutorial, Boost)
Defining const_cast(..) as a templated function (Boost)
Improved const_cast(..) definition in C++ (Boost)
C++ — cast_away_const(..) revisited (templates)
C++ — cast_away_const(..) (templates)
Boost — member_object_pointer_traits
Bugs in C++ — returned memory refs
Function types in C++ (STL)
Using templates to define an array class with constructors
Using BOOST_PP_.. macros to define an array class with constructors
Recursive inline expansion (templates vs macros)
Template specialization
Template recursion
The C++ preprocessor – recursive includes
The C++ preprocessor – recursion
The C++ preprocessor – undefined tokens

Graphics, Diagrams, Visualizations

Fractal curve — Sierpinski arrowhead (C++, template)
Fractal curve — Koch snowflake (C++, template)

General programming

Tail recursion (Erlang, C++)
Transformative pattern: re-factoring a function to make it tail recursive (Erlang)
Erlang as C++ code generator
Templates and the C++ syntax tree (defining a DOM for C++ programs and a macro (scripting) language
Variadic tuple<..> — imperative meta programming (DOM for C++ and scripting)

Tic-tac-toe in Erlang

Top-level loop
User input
Board display
Board abstraction
Game abstraction
Next move calculations and predictions
    Game space search
    Parallel processing
    Game space symmetries
    Full game space
    Smart game space
    Alternative rules
Predicted outcome abstraction
Utilities to introduce randomness
Macros for testing and debugging

Parallel programming

Tic-tac-toe in Erlang — parallel processing
Why is parallel programming difficult?
We’re not used to thinking parallel
Meta functions and parallel programming: map, filter, and reduce

MPI — Message Passing Interface, Multi Process Interface

Notes on MPI
MPI Object Types
   Wins (shared memory windows)
   Group (group of processes)
   Op (operator)
   Home process (one-of-a-kind object)
   Process reference
   Error code
   Topology (attached to some communicators)
   Attribute key (integer value chosen by MPI)
   Request group (group of request objects)
   Message content


Infinite sums, integer sequences
Freeman Dyson and 1/19
Crossing the street — what are the odds?
Home Depot’s decline?
Inventions and innovations that shaped history
Collectivist societies, Deming, and Agile development