Training Courses

Format of the Training Courses

For your convenience, the training courses are provided in multiple formats.

Available Training Courses

Skills You Need to Change the World

This is a multi-day training course for people who want to change the world, regardless of what label they apply to themselves (activist, community leader, inventor, entrepreneur, politician, scientist, concerned citizen, or something else).

You will probably want to download: (1) the slides manual, and (2) the notes manual. You may also optionally want to download: (3) the slides and/or the LaTeX source for the notes manual. If you want to promote this training course, you can print out a promotional poster and put it on a noticeboard.

The slides manual:

The notes manual: for A4 paper (322 KB),   or for US Letter paper (324 KB).

The slides: in PowerPoint 2000 format (2.7 MB zip file),   or in PDF format (4.3 MB zip file).

The LaTeX source for the notes manual: as a zip file (152 KB).

Promotional poster: A4 paper (61 KB PDF), or US Letter paper (62 KB PDF).

Java Reflection Explained Simply

This training course explains the concepts of Java reflection. Even if you will not use Java reflection in your own programs, it is still worthwhile knowing because reflection is used an an ever-growing number of popular Java tools, such as Ant, JUnit, Eclipse, Spring, Hibernate and code generators.

Secure Communication Concepts Explained Simply

This is a concise training course for people who want to understand the concepts of secure communications but don’t need to know the details. For example, perhaps you need to install and configure a new client-server system that supports SSL (encrypted) communication. To enable that functionality you may need to create an X509 certificate and configure the server to download that certificate from an LDAP server. If you don’t know anything about LDAP, X509 certificates, SSL, public-key encryption or other buzzwords associated with secure communications then this short course will get you started on learning what you need to know.

Multi-threaded Performance Pitfalls

Let’s assume you have just deployed a multi-threaded server application. It performs well when you test it on a 2-CPU computer and all requests take less than a second to be processed, even when there is a heavy load. Naturally, you expect it to perform even better when it goes into deployment on an 8-CPU computer. You are horrified when it performs worse on the more powerful computer, and customers complain that some of their requests take several minutes (rather than fractions of a second) to be processed. This presentation explains what might be going wrong and what you can do about it.

Generic Synchronization Policies

Generic Synchronization Policies (GSP) is a class library that provides what is possibly the simplest way ever invented to write synchronization code for C++ applications.

Note that an older version of this paper is provided as part of the “CORBA Utilities” package.

Miscellaneous Issues

Suggested Uses of the Training Courses

The training courses are suitable for several uses.

Open-source Copyright License

All the training courses are distributed under an MIT-style software license, except that I have replaced “Software” with “Training Course”. In brief, the copyright license states you must not remove the copyright notice but, aside from that, you can use or modify the training courses as you want. For example, you can use them in both open-source and closed-source training courses, and you can give away the training courses for free or you can sell them. You can find information about open-source licenses from the Open Source Initiative (

Here is the copyright notice.

Copyright © 2008 Ciaran McHale.

Permission is hereby granted, free of charge, to any person obtaining a copy of this training course and associated documentation files (the "Training Course"), to deal in the Training Course without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Training Course, and to permit persons to whom the Training Course is furnished to do so, subject to the following conditions:

Feedback and Contributions

If you have any comments on a training course, especially feedback that will help me to improve them, then please contact me through any of the means listed in my contact details.

If you modify one of the training courses then its open-source copyright license means that you are not obliged to send me your modifications. However, if you want to send me your modifications (or, even better, new material to extend a course) then that will help the training courses to improve over time. It is important to note that whenever you send me modifications or new material, I will assume you are agreeing to turn over their copyright to me. I will be happy to mention your name in the acknowledgements section of the training course.

The reason why I want to retain exclusive copyright of the training courses is that, although the free and open-source software community has had several decades to experiment with different copyright licenses and figure out what works well, the open-source courseware community is relatively young and is still finding its way with copyright issues. As an example, many people assume that all the Creative Commons licenses are suitable for open-source documentation. In fact, only two of the six licenses defined by the Creative Commons comply with the open-source definition; the other four Creative Commons licenses prevent derived works or commercial use, both of which must be allowed for a license to qualify as open source.

Because the open-source courseware community is still very young and there is widespread confusion over copyright licenses, I do not feel confident that the MIT-derived license will stand the test of time for use in open-source courseware. If, in a few years time, somebody develops a license better suited for open-source courseware then I might wish to use that new license on my courses. Switching from one license to another might be difficult if I had to contact dozens or hundreds of copyright co-owners and get their approval for the change in copyright license. By ensuring I am the sole copyright owner of the courses, it will be much easier to switch the courses to use another copyright that is better suited for open-source courseware.