Classes and Talks by Mark Jason Dominus

Upcoming public appearances

About the speaker

Pricing and logistical information

Paid Classes

Advanced Topics in Perl (3-5 days)

Advanced Topics in Perl covers the construction and operations of modules, the Exporter, Perl's namespace structure, object-oriented programming, advanced use of subroutines, exception handling, the debugger, and the Perl symbol table. It overlaps Intermediate Topics in Perl and Object-Oriented Programming. It also incorporates the short Regular Expression Mastery class.

Full details are available

CGI Programming with Perl (3-5 days)

A comprehensive treatment of the development of applications that deliver dynamic content on the World-Wide Web. All the important issues are discussed, including simple forms, SQL database access, concurrency issues, and authentication, cryptography, and security.

Full details are available

Hands-On Introduction to Perl (2-3 days)

An introduction to Perl for programmers who already have experience with other languages. This class covers all of Perl's major language features: Scalars, arrays, and hashes; files and filehandles; control structures; and important built-in functions. The three-day version covers references, complex data structures, and DBI, the Perl interface to SQL databases.

Full details are available

Higher-Order Perl (3 hours)

(Advanced Programming Techniques for Perl)

(Why Perl is Better than Those Other Languages)

(Stolen Secrets of the Wizards of the Ivory Tower)

One of Perl's most valuable (but least-used) features is the ability to use functions as if they were data: to pass functions as arguments to other functions, and to write functions that construct and return new functions on request. This feature is the basis of many widely-used techniques, such as callbacks, and also some techniques that aren't as widely-used, but should be.

Full details are available

"How do I delete a line from a file?" (3 hours)

(Strategies for Lightweight Databases)

Perl provides two extremely inexpensive and simple solutions to data retrieval: Flat text files and DBM files. We'll examine the principles, programming, and tradeoffs of both techniques, and take a detailed look at the best modules for managing files of both kinds.

20071107: Now available online for free.

Full details are available

Intermediate Topics in Perl (2-3 days)

(Using and Building Modules)

This class covers features of Perl essential for large-scale and industrial programming: Modules; exportation; use; Perl's compile and run phases; CPAN; some essential standard modules; Perl's support for unit testing; debugging strategies; and references and compound data structures.

Full details are available

Making Programs Faster (3 hours)

(Benchmarking, Profiling, and Performance Tuning)

Almost every application must eventually be made to run faster. Performance tuning of applications has long been a dark art, successfully practiced by very few. This class will bring it into the light and show you how. We will investigate tools, strategies, and philosophies, all aimed at making programs faster with as little effort as possible.

Full details are available

Object-Oriented Programming In Perl (3 days)

This introduction to scalable programming covers in Perl all basic principles of OOP including discussing classes, objects, methods, single and multiple inheritance, and Perl syntax for these. The class also includes sections on object-oriented design and more specialized topics such as autoloading and conditional loading of modules.

Full details are available

Perl Program Repair Shop and Red Flags (3-6 hours)

It's hard to write great code, but it doesn't have to be hard to write good code. 'Red flags' are easy-to-see signs that you have an easy opportunity to make your code better. I'll show many red flags in real programs I've gathered and show easy ways to make these programs smaller, faster, and simpler to understand.

Full details are available

Perl Regular Expression Mastery (3 hours)

Almost everyone has written a regex that didn't behave as expected. This class will fix that. We'll take a detailed look at Perl's regex matching algorithm and learn how to predict what it will do and how long it will take. This session will demystify regular expressions.

Full details are available

Programing with Iterators and Generators (3 hours)

Everyone loves filehandles because they let you get data from a file a bit at a time, as you need it. In this class we'll examine this 'iterator' technique in detail, and see how it can cut the size of complex database lookup and web spidering modules by fifty percent.

Full details are available

Tricks of the Wizards (3 hours)

(Perl Tricks and Programming Technique)

This class will explore Perl's most unusual features: Globs, tie, AUTOLOAD, and source filters. We'll look at modules that use these features, written by famous wizards like Tom Christiansen, Damian Conway, and Larry Wall, and learn what they're for and how they work.

Full details are available

Web Application Security (6 hours (half-day versions available))

(Security with Apache)

CGI applications, mod_perl, servlets, and other generators of dynamic web content represent an enormous security threat, one that would not even have been considered by competent system administrators of the 1980's. This class will examine the most important classes of web-based security threats and discuss responses to them. It exhaustively examines Perl's unique `tainting' feature which can detect many security errors before they can cause any harm.

Full details are available

Welcome to my ~/bin (3 hours)

Over the years, I have built up a large collection of handy utilities in Perl. I'll take you on a tour of these utilities and show you what they do and how they work.

Full details are available

Free Talks

Arithmetic with Continued Fractions (60 minutes)

Multiprecision calculations are usually done with "synthetic numerals": long strings of decimal or binary digits. Continued fractions are a fascinating alternative that are preferable in many ways; for example, unlike synthetic numerals, continued fractions can represent all rational numbers finitely. In this talk, I explain what continued fractions are and how to calculate with them.

(This talk is not Perl-related.)

Full details are available

Atypical Typing (75 minutes)

A short history of type systems, and an introduction to Haskell's advanced type inference, with a stunning final example in which Haskell's type checker detected an infinite loop error at compile time.

Full details are available

Classic Unix Security Problems (60 minutes)

A survey of security problems in early Unix systems.

Full details are available

Conference Presentation Judo (30 minutes)

Secrets of how to give a good three-hour conference tutorial.

Full details are available

Debugging the de Bruijn Sequence (5 minutes)

Debugging the de Bruijn sequence.

Full details are available

"Design Patterns" Aren't (5 minutes)

The "design patterns" movement in software claims to have been inspired by the works of architect Christopher Alexander. But an examination of Alexander's books reveals that he was actually talking about something much more interesting.

Readers are cautioned that these slides were not originally intended for distribution on the web; they were written to accompany a five minute long talk given at Yet Another Perl Conference. They should not, therefore, be taken as a complete or well-reasoned presentation of my thoughts on this matter.

Full details are available

Dirty Secrets of the Perl Regex Engine (60 minutes)

Here's the description of this talk from the brochure:

This talk is too short to tell you all about how the Perl regex engine works---that would take years, and cost millions of lives. Instead, I'll do three very brief case studies of how it handles certain specific features. You've probably always suspected that the Perl regex engine concealed filthy secrets and nasty surprises; these three features are noteworthy for being particularly disgusting.

Barf bags will be provided.

Mark-Jason Dominus wrote the back-end of ActiveState's regex debugger. He is presently recuperating at the Miskatonic University Hospital in Whately, Massachusetts.

Full details are available

File Locking Tricks and Traps (15 minutes)

This short talk presents several common pitfalls of file locking and a few useful tricks for using file locking more effectively.

Full details are available

Functional Programming in Perl (60 minutes)

I discuss the value of functional programming techniques, with particular attention to the value that they provide to the great proletariat of the programming community. I also talk about the support that Perl provides for those techniques, and the support that it fails to provide, and I'll contrast this support with that of similar languages, such as Python.

Full details are available

git-rebase: Why and How (35 minutes)

git-rebase is probably the most useful intermediate-difficulty tool in Git. I will describe some of its many uses and explain what it is doing and how to use it.

Full details are available

Greenlight (60 minutes)

(is a Git branch merging service)

Greenlight is a Git branch merging service. When you want to land code on master, you notify Greenlight, which takes care of it for you. Easy!

Full details are available

Help! Help! (10 minutes)

This compendium of Perl introspection techniques will amaze, confound, or disgust you!

Full details are available

Higher-order Parsing (60 minutes)

Higher-order parsing techniques for Perl: using functions to generate parsers and assemble simple parsers into more complicated parsers.

Full details are available

Higher-order Parsing (60 minutes)

Higher-order parsing techniques for Perl: using functions to generate parsers and assemble simple parsers into more complicated parsers.

Full details are available

Historical how and why of hash tables (35 minutes)

History of lightweight associative data structures in programming languages

Full details are available

Hook::LexWrap (30 minutes)

This is a discussion of the usage and internals of Damian Conway's Hook::LexWrap module.

Full details are available

The Identity Function (35 minutes)

I gave this bizarre talk at TPC 2001 in San Diego. The title backfired: Too many people didn't know what the identity function was, and those who did know assumed that I must have been referring to something else.

The identity function is a function such as sub identity { return $_[0] } which returns its argument unchanged. In this talk, I show four unexpectedly useful uses for the identity function.

Full details are available

I found the best anagrams in English!! (10 minutes)

Two different algorithms for scoring anagrams by quality.

Full details are available

Internals of Familiar Unix Commands (60 minutes)

This talk is about the Unix process model, the semantics of the fork and exec calls, and how this impacts the design of certain well-known Unix commands such as the shell, ls, nice, and others.

Full details are available

Internals of the ext2 Filesystem (60 minutes)

ext2fs is the most popular disk filesystem type for Linux systems. I discuss the main structures of the filesystem and show some of the kernel code that deals with it.

Full details are available

Internals of the qmail Mailer (75 minutes)

This talk is an overview of the qmail mail system and its components, with a few implementation details.

Full details are available

It came from... the HOLD SPACE! (70 minutes)

(Alien horrors from the dawn of Unix)

How did we get anything done before the invention of Perl, Python, and those other guys? Answer: It wasn't always easy.

Full details are available

**UPDATED** Join my Army of Git Zombies! (60 minutes)

A very short introduction to git and its internals.

(This talk is not Perl-related.)

Full details are available

Linus Torvalds' Greatest Invention (60 minutes)

(Git Is Awesome)

Why Git is awesome. Does not show you how to use Git at all, but may convince you that Linus Torvalds is a genius.

(This talk is not Perl-related.)

Full details are available

My Favorite NP-Complete Problem (10 minutes)

What is my favorite NP-complete problem and what is an NP-complete problem anyway?

Full details are available

Perl Contains the Lambda Calculus (90 minutes)

(How to write a 163 line program to compute 1+1)

The lambda-calculus is an abstract model of computation, used to investigate fundamental questions of what can be computed and how. It is in some ways the simplest possible model of a programming language. A certain subset of Perl is essentially identical to the lambda calculus, so one can investigate the lambda calculus by merely writing programs in Perl.

Full details are available

The Perl Hardware Store (45 minutes)

(Tools You Didn't Know You Needed)

Six useful Perl tools that you probably didn't know you needed.

Full details are available

The Perl Hardware Store (DC.pm Version) (90 minutes)

Twelve useful Perl tools that you probably didn't know you needed.

Full details are available

The Perl Hardware Store (NYLUG Version) (45 minutes)

Nine more useful Perl tools that you probably didn't know you needed.

Full details are available

PIGS in SPACE!!! (50 minutes)

Moonpig is an innovative billing and accounting system that Rik Signes and I worked on between 2010 and 2012. This talk is about some of the non-obvious technical choices we made that made Moonpig a success.

Full details are available

Pseudohashes (20 minutes)

(History of a major mistake)

In 1998 work started on a Perl feature called “pseudohashes”, a major reworking of the way Perl represented objects. This work was a complete failure, and after ten years it was removed again. What went wrong, and why?

Full details are available

Quantitative Analysis of Memoization (10 minutes)

At a PHL.pm meeting, Walt Mankowski gave a talk about an occasion when the Memoize module didn't work for him---it made his program slower instead of faster. I gave this complementary talk explaining why.

Full details are available

Return To The Perl Hardware Store (45 minutes)

(More Tools You Didn't Know You Needed)

Eight more useful Perl tools that you probably didn't know you needed.

Full details are available

Roles in Moonpig (30 minutes)

A short and somewhat telegraphic description of the use of “roles” (also called “traits”) in the Moonpig project.

Full details are available

Rx, the Perl Regular Expression Debugger (0 minutes)

I wrote a technical paper about Rx for TPC 2001, which won the Larry Wall Award for Practical Utility.

Full details are available

Strong Typing and Perl (90 minutes)

(Strong Typing Doesn't Have to Suck)

Many people I know in the Perl community have concluded that strict, compile-time type checking is a failed idea, and that Perl's flexible, dynamic approach is more successful. But these people are basing their conclusion on an idea of strong type checking that is thirty years out of date. Modern type checking systems are not only powerful, but helpful, clever, and convenient.

Full details are available

System Programming in Perl (75 minutes)

(The Unix Process Model)

This talk is a revised version of Internals of Familiar Unix Commands, extended to have more Perl content. It is about the Unix process model and the semantics of the fork and exec calls, with code examples in Perl.

Full details are available

Things I think everyone should know about Git (65 min)

Git makes many people suffer unnecessarily.

I will help you suffer less, by telling you a few things that I think all newcomers to Git should be told.

Full details are available

Tie::File (45 minutes)

How do I change one line in a file?

How do I delete a line in a file?

How do I insert a line in the middle of a file?

How do I append to the beginning of a file?

Full details are available

Topology of Data Types (60 minutes)

There is a surprising correspondence between computability theory and classical topology. Computability is continuity, open sets are recursively enumerable, spaces are Hausdorff if they admit a definable ≠ operation, and a set over which one can universally quantify is compact. The natural numbers, being non-compact, can't be exhaustively searched: given a predicate p you can't guarantee to find a number n for which p(n) is true—there might not be one, and so your search might continue forever. But the naturals can be embedded in a compact set that can be exhaustively searched. Since this larger type can be modeled on the computer, I will present a simple computer program which, given any predicate p, either locates an n for which p(n) is true, or correctly asserts that no such n exists.

Full details are available

Twelve Views of Mark Jason Dominus (45-60 minutes)

(12 lightning talks in a row)

Twelve five-minute talks in 60 minutes.

Full details are available

Types are theorems; programs are proofs (60 minutes)

It is an astonishing fact that formal logic and programming system type systems are, in a very strong sense, the same thing. I will explain this, with many examples.

Full details are available

Using tie to Escape Feature Creep (15 minutes)

My Memoize module was very successful. As is usual with successful software projects, everyone wanted to change it. Users wrote in with requests for all sorts of new features, sometimes with patches. But every new feature makes the module a little bigger and a little slower, and after you put in twenty patches that make the module 5% bigger and slower, you have a big bloated slow monster. That is bad for any module, and it is especially bad for Memoize because the whole point of Memoize is that it is supposed to make your program faster.

So how to accomodate these folks' desire for features without making everyone else pay the price?

Full details are available

What's a file? (60 minutes)

Of all the many parts of Unix, the inode is the thing that makes Unix most like Unix, because Unix is all about files, and the inode is the filesystem data structure that represents a file. This talk takes the output of ls -l as a jumping-off point to discuss the inode and how the kernel uses it for essential operations such as permissions checking, reading and writing files, and the Unix rm and chmod commands.

Full details are available

Writing Automated Tests (45 minutes)

(I Feel Your Pain)

Why you would want to write automated tests and how you can get past your guilt and fear about doing it.

Full details are available

You Can't Get There From Here (60 minutes)

Various oddities of computer science, including problems that nobody knows how to solve well, and other problems that can't be solved at all.

Full details are available


Return to: Universe of Discourse main page | Perl Paraphernalia | Classes and Talks

mjd-perl-yak+@plover.com