Courses and Tutorials

In this section of the Grotto Networking web site you will find technical course materials, short courses, tutorials, and academic advising information. Most of the material here has either to do with open source software projects, networking, or a combination of the two. Below is a brief description of current materials. Questions, comments, or suggestions can be sent to Dr. Greg Bernstein.

A course on Website Development for CS Majors
A semester length (16 week) course on web development for computer science students at the junior or senior level who have taken a class on data structures/algorithms. It includes: HTML5 and the Document Object Model (DOM), Cascading Style Sheets (CSS), JavaScript 6 and use it in procedural, object oriented, and functional programming styles on client and server, networking and HTTP, Cookies, Web servers (Node.js and Express.js), modern web apps and GUIs via React. It does not assume any familiarity with web technologies.
A course on Web Systems for CS Majors
This was a semester length course for computer science students (undergraduate or graduate) on client and server side web development, server architectures, and networking. It assumed a previous courses on web development and software engineering.
A Course on Broadband Networking
A fairly complete set of notes for a second course in wired networking. Covering networking concepts, tunnels and VPNs, MPLS, data center networking, software defined networks, network simulation, queueing theory, switch architectures, and quality of service. Applies concepts to current trends in networking, uses Python based simulations (code included), relates material to various standards and current implementations. As I taught this course for the second time the students told me that they preferred written notes over power point slides. Hence as the course progressed more effort was allocated to writing up these notes. I will update these notes as questions and comments come up. You can send your questions and comments to Dr. B. Updated in 2016.
Modern Network Design with Python (Graduate Course)
One of the challenges to teaching a network design course is to keep the focus on networks and not have the course become an "algorithms" course. In this course we survey many different network design problems with an emphasis on network data and control plane induced constraints (Ethernet, MPLS, GMPLS, Optical, IP). The solution techniques are primarily based on linear and integer programming (a large class of optimization problems). Such an approach reflects my own experience with the routing and wavelength assignment problem for optical networks, and network optimization in MPLS networks. This is also the approach taken by the very good text and reference book — M. Pioro and D. Medhi, Routing, Flow, and Capacity Design in Communication and Computer Networks. Elsevier, 2004— used in this course. This course uses the Python programming language in conjunction with open source optimization solvers —COIN-OR—to formulate and solve realistic network design problems.
Basic Discrete Event Network Simulations with Python (Tutorial)
For engineers and particularly for those in network probability, statistics, and queueing theory needs to be taught "hands on"! In addition to aid in understanding the fundamentals I wanted the tools used as "close to the metal" as possible while minimizing the learning curve. While teaching a graduate course on broadband networking I came up with a series of demonstrations programs and a small Python library to show the students how to: generate random variables, plot histograms, simulate network packet queues, simulate token bucket filters, and simulate more advanced networking queueing disciplines such as weighted fair queueing.
Java Universal Network/Graph Framework (JUNG)
"JUNG —the Java Universal Network/Graph Framework—is a software library that provides a common and extendible language for the modeling, analysis, and visualization of data that can be represented as a graph or network." When Grotto Networking was developing network design and analysis code in the Java programming language this was our primary library for graphs/networks. This is a very well designed library with tons of features. To give back to the open source community and particularly the authors of JUNG we wrote up a tutorial that features minimalistic examples to promote understanding and build up to a moderate level of complexity. Truly impressive examples of JUNG features can be found in the examples in the JUNG distribution. The JUNG tutorial in PDF for can be found at JUNG2-Tutorial and all the mentioned code examples can be found in the directory JUNG.