ApacheLogo

Apache Training Contributing More Than Just Code

Your name here

Who am I?

  • TODO fill in your own details here

training

Apache Training

training

  • 💥 New TLP project (As of last month!)

  • Open source training material, and the tools to maintain and publish them

  • Slides! Workshops! Labs! Tutorials!

  • Come help us!

Why Apache Training?

  • Duplicated effort

  • Wisdom of the crowd

  • IP approved resources

  • Review of material

  • Free to reuse or re-purpose under the ALv2

What it is Not

  • A repo for all protects material

  • A place to create "official" material

  • To provide certifications

Issues to Sort Out

  • Content and releases

  • Ownership?

  • Licensing is more complex

  • Is ALv2 the best license for content?

Another issue

  • Slide file formats

  • They do have advantages and neat features

  • …​but lots of disadvantages

Slide format: AsciiDoctor

asciidoctor logo

asciidoc qr

AsciiDoctor Reveal.js

  • HTML / CSS

  • Reveal.js

  • Ruby, Node, Maven

reveal qr

Text vs other formats

  • Easy to edit

  • Easy to translate

  • Real version control

  • Searchable

Slide Features

  • Speaker notes / timer

  • Keyboard navigation

  • Vertical slides

  • Simple markup

  • Styled via CSS

  • PDF generation

Steps to build slides

Content goes in src/main

  • Edit the index.adoc file in asciidoc

  • Images go in resources/images

  • Build with mvn install

Converting …​

Presenting

  • HTML in browser

./target/generated-slides/index.html
  • Self hosted web server

Slide formatting:

Text

Put your text here

Titles

== !
No title
== Slide One

== Slide Two

== Slide Three

Images

image::cat.jpg[Cat, width=50%]
Cat

Video

video::sydney.mp4[width=640, start=30, end=60, options=autoplay]
video::dQw4w9WgXcQ[youtube]
video::148751763[vimeo]

sydney.mp4


Background images

image::stars.jpg[background, size=cover]

Background images

Background Video

  • Slide attribute, so different syntax

  • Place the following immediately before the slide header (ie, the == line)

[background-video="sydney.mp4",background-video-loop=true]
== Background Video

Background Video

Some content

Bullet Lists

* one
* two
* three
  • one

  • two

  • three

Bullet Lists

* one
* two
** one
** two
  • one

  • two

    • one

    • two

Speaker Notes

[.notes]
--
* your notes go here
* Slides should contain sufficient notes that a reasonably knowledgeable
  individual could pick them up and present confidently.
--

Speaker View

speakernotes

Other Features

  • HTML pass through

  • Layout Flex / grid

  • ASCII to diagrams

Vertical Slides

=== Next Slide

Use this when you want a 'deep dive' on a topic, or expect additional questions on a particular slide.

Next slide

This is the next slide

And another

How deep does the rabbit hole go?

Conditional slides

:IANAL: I am not a lawyer

Syntax highlighting

with urllib.request.urlopen("https://whimsy.apache.org/public/public_ldap_people.json") as url:
    data = json.loads(url.read().decode())
    people = data["people"]
    print(":committers: " + str(len(people)))
Uses highlight.js

Languages

Works for 34 "commonly used" languages.

use Acme::Bleach;
print "Hello world!";

Turning on

May need to put at the top of your doc:

// Highlight code samples
:source-highlighter: highlight.js

Project status

  • Graduated as a TLP in August 2025

  • Working with a few projects on content

You can help!

  • Did you speak at this conference?

  • Have some internal training material?

  • Have slide decks from other conference?

  • Consider donating

Other skills?

  • Writer? Work with a project to produce materials.

  • Designer? Help us make presentations more appealing.

  • Programmer? Improve the tools and developer experience.

Questions?

Ask now, see me after the session, or email me at Your email here.