Commit f0032648 authored by Dario Pinto's avatar Dario Pinto
Browse files

improve course pages and training tab

parent b39f4651
# Course Mastering Opam & OCaml tooling
Overview
The OCaml package manager opam has reached an exceptional popularity in the OCaml world. It can now be seen as the easiest way to install OCaml and its development environment on any computer. But did you know that opam was also designed to integrate nicely in a professional could boost your development productivity too?
Objectives
Understand how opam interacts with repositories
Understand how opam manages package dependencies
Use expert-level opam options
Discover undocumented features of opam
Create your own public packages
Create your private repository
Include opam in your company development process
Course Prerequisites
The course assumes the knowledge of another programming language, so that basic programming paradigms are known. No prior knowledge of OCaml or functional programming is required.
Participants are expected to have a computer with Internet access during the course (Linux, Mac OS X or Windows), to be able to access the main opam repository. They should create a GitHub account prior to the course, and can upload an SSH key (it can be done during the course).
Practice
The course is half theory, half practice. Participants will have to call opam with many configuration parameters, they will create their own repositories and packages. Participants can come with their own (small) source packages as examples.
Registration
This course is tailored for a duration of 2 days on site (12k€ HT for a group of 10 participants at most). The content is adapted to the duration and participants’ profiles. Contact us!
<h1 id="page-title">Course OCaml Code Optimization</h1>
<h2 class="page-subtitle">Overview</h2>
<br />
This training has been designed by the OCamlPro team to focus specifically on writing the most efficient code for demanding applications. Participants will benefit from the direct involvement of the OCamlPro team in the development of OCaml compilers.
Objectives
1. Write the most efficient code for your applications
2. Understand the transformations performed by the compilers
3. Optimize data structures for garbage collection
<hr class="featurette-divider">
<h2 class="page-subtitle">Program</h2>
1. OCaml’s compilers internals
2. Analysis of code transformations at different passes
3. OCaml’s Garbage Collector internals
4. Efficient code examples
5. Efficient data structures
6. Profiling code and memory
<h2 class="page-subtitle">Course Prerequisites</h2>
The course assumes some experience of the OCaml language and its programming environment. Participants are expected to have a computer access during the course (Linux, Mac OS X or Windows), an easy-to-install OCaml archive will be provided before the course to setup a minimal but productive environment.
<h2 class="page-subtitle">Practice</h2>
The course is half theory, half practice. Participants will have to write and adapt simple applications in OCaml, to build and test them.
Participants can interact with the teachers about the problems they encounter with OCaml.
<h2 class="page-subtitle">Registration</h2>
This training is tailored on a duration of 2 days, on site (12k€ for a group of at most 10 participants). The content is customized according to the duration and participants’ profiles and needs. <a href="/contact">Contact us!</a>
<h1 id="page-title"> Course OCaml development</h1>
<br />
<h2 class="page-subtitle">Overview</h2>
This course has been designed by the OCamlPro team to enable developers to build upon their experience of other programming languages, such as C, C++, Python, C# or Java, to program confidently
in OCaml. This covers all the main aspects of the OCaml language and tools and interleaves theory and practice. Depending on the duration and the customer needs, we can focus more on specific topics and
design suitable learning projects.
<hr class="featurette-divider">
<h2 class="page-subtitle">Objectives</h2>
<br />
- Discover functional programming in OCaml
- Modelize real-world data in OCaml types
- Use the OCaml environment in a production context
- Read and write OCaml code
- Understand the architecture of OCaml applications
<h2 class="page-subtitle">Program</h2>
<br />
1. **Presentation of OCaml**
* History of OCaml
* OCaml Ecosystem
2. **Setting up an OCaml environment**
* The OCaml distribution
* The OPAM package installer
* Editor modes for OCaml
3. **OCaml develpment tools**
* The OCaml toplevel
* The OCaml compilers
4. **Language bases**
* Predefined types and simple values
* Functions and recursivity
* OCaml Imperative programming
* Modules and Functors
* Exceptions management
5. **Type-driven programming**
* Polymorphism and parametric types
* Variants and records
* Pattern-matching
6. **OCaml Standard Libraries**
* Basic modules
* Containers
* Input and Output
7. **More OCaml tools**
* Libraries and packing
* Preprocessing: camlp4 and ppx
* Lexer and Parser generators
8. **Overview of OCaml extensions**
* Polymorphic variants
* Objects and classes
<h2 class="page-subtitle">Course Prerequisites</h2>
<br />
<p>
The course assumes the knowledge of another programming language, so that basic programming paradigms are known. No prior knowledge of OCaml or functional programming s required.
Participants are expected to have a computer access during the course (Linux, Mac OS X or Windows), an easy-to-install OCaml archive will be provided before the course to setup a minimal but productive
environment.
</p>
<h2 class="page-subtitle">Practice</h2>
<br />
<p>
The course is half theory, half practice. Participants will have to write and adapt simple applications in OCaml, to build and test them.
</p>
<h2 class="page-subtitle">Registration</h2>
<br />
<p>
This training is usually proposed as a 5 days on site training (20k€ for a group of at most 10 participants). The content and tarif is customized depending on the duration and location. Contact us!
</p>
<h1 id="page-title">Course OCaml Expert</h1>
<h2 class="page-subtitle">Overview</h2>
<br/>
This training has been designed by the OCamlPro team to enable developers to use more advanced features of OCaml powerful type-system, benefit from all the open-source tools and libraries, and to write compact and efficient code.
Objectives
- Understand advanced features of the type-system
- Interface OCaml with its environment
- Understand the OCaml garbage collector
- Write efficient code in OCaml
<hr class="featurette-divider">
<h2 class="page-subtitle">Program</h2>
1. **OCaml type system insights:**
* polymorphic variants
* first-class modules
* GADTs
* Objects and classes
2. **Taming the OCaml’s Garbage Collector (dealing with memory leaks)**
3. **Expert preprocessing**
* Ppx rewriters
4. **OCaml community toolage**
* OPAM
* Build tools: dune, ocamlfind, ocamlbuild, etc.
5. **A tour of OCaml community contributions**
6. **OCaml and web programming**
* Writing web servers in OCaml
* OCaml to Javascript
<h2 class="page-subtitle">Course Prerequisites</h2>
The course assumes basic knowledge of the OCaml language and its programming environment.
Participants are expected to have a computer access during the course (Linux, Mac OS X or Windows), an easy-to-install OCaml archive will be provided before the course to setup a minimal but productive environment.
<h2 class="page-subtitle">Practice</h2>
The course is half theory, half practice. Participants will have to write and adapt simple applications in OCaml, to build and test them.
Participants can interact with the teachers about the problems they encounter with OCaml.
<h2 class="page-subtitle">Registration</h2>
This training is normally tailored as a 5 days training (10 participants at most, on site).
Content can be customized to better fit your needs and depending on the duration. <a href="/contact">Contact us!</a>
<h1 id="page-title">Rust Vocational Training</h1>
[Rust](https://www.rust-lang.org/) is a systems language with a strong focus on safety, efficiency and (safe) concurrency. Its development is spearheaded by Mozilla, although the vast majority of contributions to Rust come from external developers since Rust and its ecosystem are developed in the open.
Rust borrows heavily from functional programming languages to provide very expressive abstraction mechanisms. Because it is a systems language, these mechanisms are almost always zero-cost. For instance, polymorphic code has no runtime cost compared to a monomorphic version.
This concern for efficiency also means that Rust lets developers keep a very high level of control and freedom for optimizations. Rust has no Garbage Collection or any form of runtime memory inspection to decide when to free, allocate or re-use memory. But because manual memory management is almost universally regarded as dangerous, or at least very difficult to maintain, the Rust compiler has a borrow-checker which is responsible for i) proving that the input program is memory-safe (and thread-safe), and ii) generating a safe and “optimal” allocation/deallocation strategy. All of this is done **at compile-time.**
While ownership, the underlying principle of the borrow-checker, is often quite daunting for newcomers, Rust integrates this approach to memory management very nicely in the language. Huge efforts have been deployed to make this mechanism as natural as possible. In fact, most seasoned Rust developers internalize the borrow-checker and seldom actually think about it. For such developers, the borrow-checker is not a constraint: it only rejects programs because of typos, “minor oversights”, or (very rare) deep architectural errors from the developer. Meaning, the borrow-checker rejects memory-unsafe programs. (The same, to some extent, can be said about thread-unsafe programs.)
At the end of the day, Rust is a language with C/C++-like performance with very expressive, **zero-cost** abstraction mechanisms from functional programming languages; it also generates the memory allocation strategy of the program automatically if one exists, and, if none do, can point precisely to what the problem is. It it also worth noting that Rust has an extremely ergonomic and powerful project/package manager, [cargo](https://doc.rust-lang.org/stable/cargo/), and shines in the quality of the explanation and suggestions that come with its compiler errors. It is thus not surprising that Rust is so popular: it has been voted “most loved programming language” in the [StackOverflow developer survey](https://insights.stackoverflow.com/survey/2019#most-loved-dreaded-and-wanted) for four years in a row, and has an impressive number of [companies running it in production](https://prev.rust-lang.org/en-US/friends.html) for a young systems language.
<h2 class="page-subtitle">Layout</h2>
The session is divided in three parts:
1. A beginner introduction to Rust’s basics features (one day);
2. Crucial features and libraries for real-life development, along with a complex use-case used to showcase how to use them in a real project (two days);
3. Advanced/specific features (one day).
The road map below details the topics discussed in each part. Participants can chose to attend either the whole session, parts 1 through 3, parts 1 and 2, only part 2, or parts 2 and 3.
> Note that attendees planning to start at part 2 must make sure they are comfortable with the topics of part 1. This means, roughly, basic project management, having a basic understanding of ownership, and being able to write small programs that use some of the most common features of the standard library. Typically, this includes types Option, Result… and “simple” traits such as `Write`, `Read`, `Display`, `From`, `Into`...
<h2 class="page-subtitle">Road Map</h2>
1. **Day 1: Introduction**
* basics: types and expressions, functions, using macros, user-defined types, loops, panic…
* ecosystem: basic project management, dependencies, modules organization, rustfmt…
* traits: simple polymorphism, defining and implementing traits…
* ownership: copy/move semantics, references and basic lifetimes, slices…
2. **Days 2 and 3: Real-life Rust**
* macros: defining declarative macros, handling visibility…
* traits: rules, extensibility, associated types, advanced polymorphism constraints…
* ownership and memory: lifetimes, boxing, Copy and Clone, higher-order traits…
* ecosystem: meta-attributes, documentation, testing, anatomy of medium to big projects…
* must-know standard and extended (crates.io) libraries: iterators and collections, error-handling, simple but fearless concurrency over iterators…
* complex use-case: showcase virtually all topics discussed so far on a (relatively) complex
project (roughly 2~3kloc)
3. **Day 4 : advanced features**
* fearless concurrency: threads, the Send and Sync traits, mpsc, locks…
* advanced traits: higher-kinded types, trait objects (dynamic dispatch), function pointers…
* writing and using procedural macros
* (relatively) shallow dive in unsafe Rust
* complex use-case: showcase “fearless concurrency” and “advanced traits” topics on the complex use-case from days 2-3
> **NB:** while the different parts of the session are presented in chronological order, the topics inside each parts only loosely represent the actual order in which they will be discussed.
Part 3 discusses relatively specific topics, in particular unsafe Rust and procedural macros. This is where the training has the most flexibility and can be customized depending on the participants.
For instance, it is possible to replace the discussion on procedural macros and/or unsafe Rust by a deeper dive into fearless concurrency and/or an exercise session where attendees can practice the notions seen so far (typically from part 2) while the trainer provides hints, help and insights when needed.
<h2 class="page-subtitle">Open and Exclusive Sessions</h2>
So called “open sessions” are training sessions organized and hosted by OCamlPro in Paris, close to the Alésia metro station (line 4). These sessions are presented in French, although the slides are
in English. Open sessions do not provide any flexibility regarding part 3, except if **all** attendees agree on some modifications. For instance, trading the discussion on procedural macros for supervised exercises.
“Exclusive sessions” are training sessions given exclusively to a single company. These sessions can be hosted by OCamlPro or the company, although the latter depends on where the company is actually located. Compared to open ones, exclusive sessions let the company chose
1. The language used during the session, between French and English (note that the slides themselves will be in English regardless), and
2. Most aspects of part 3 (the last day).
<h2 class="page-subtitle">Workflow and Preparation</h2>
The whole session will rely heavily on examples. Attendees willing to follow along / experiment with the examples on their own machine during the session are encouraged to do so but should make sure they install Rust and setup a text editor or IDE appropriately.
Installing Rust is fairly easy on any mainstream operating system, see [rustup](https://www.rust-lang.org/tools/install) for more details. Do
note that installing Rust using a package manager is not recommended: Rust has a relatively fast release cycle that does not mix well with the inertia of most package managers. Ideally, one should always use the latest version, and attendees should make sure their Rust toolchain is up to date. Unless they do not plan to write code at all.
Mainstream text editors and IDEs have Rust syntax highlighting either built-in or available as a
plugin. Beware that code completion is currently a bit difficult to add to some text editors.
IntelliJ-based IDEs usually support code completion perfectly thanks to the [Rust IntelliJ plugin](https://intellij-rust.github.io/).
It is also worth noting that Rust has a very nice [online playground](https://play.rust-lang.org/) where one can write, build and run small programs. It constitutes a nice, hassle-free way to experiment with small examples without installing anything. Beware that attendees relying solely on the online playground will not be able to build, run or experiment with the complex use-case used in the session to showcase Rust features in the real world. This requires a local installation of the toolchain.
The trainer will use a terminal to run most commands and Sublime Text 3 (without code completion, but with error integration) to show and edit code during the session.
> **NB:** attendees to the open sessions will be provided free wifi, although we can give no guarantee in terms of bandwidth. Again, attendees should make sure to have their environment setup beforehand to avoid last minute issues impacting the session, bandwidth-related or otherwise.
<h2 class="page-subtile">Pricing</h2>
All costs given below are for open sessions. Pricing for exclusive sessions depends on the number of participants and the actual location, <a href="/contact">contact us</a> for an estimation.
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
overflow:hidden;padding:10px 5px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
.tg .tg-c3ow{border-color:inherit;text-align:center;vertical-align:top}
.tg .tg-7btt{border-color:inherit;font-weight:bold;text-align:center;vertical-align:top}
</style>
<table class="tg">
<thead>
<tr>
<th class="tg-7btt">Full Session</th>
<th class="tg-7btt">Beginner</th>
<th class="tg-7btt">Intermediate</th>
<th class="tg-7btt">Beginner and Intermediate</th>
<th class="tg-7btt">Intermediate and advanced</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tg-c3ow">3,500.00€</td>
<td class="tg-c3ow">1,500.00€</td>
<td class="tg-c3ow">2,000.00€</td>
<td class="tg-c3ow">3,000.00€</td>
<td class="tg-c3ow">3,000.00€</td>
</tr>
<tr>
<td class="tg-c3ow">4 days</td>
<td class="tg-c3ow">1 day</td>
<td class="tg-c3ow">2 days</td>
<td class="tg-c3ow">3 days</td>
<td class="tg-c3ow">3 days</td>
</tr>
</tbody>
</table>
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
This course has been designed by the OCamlPro team to enable developers to build upon their experience of other programming languages, such as C, C++, Python, C# or Java, to program confidently in OCaml. This covers all the main aspects of the OCaml language and tools and interleaves theory and practice. Depending on the duration and the customer needs, we can focus more on specific topics and design suitable learning projects. This course has been designed by the OCamlPro team to enable developers to build upon their experience of other programming languages, such as C, C++, Python, C# or Java, to program confidently in OCaml. This covers all the main aspects of the OCaml language and tools and interleaves theory and practice. Depending on the duration and the customer needs, we can focus more on specific topics and design suitable learning projects.
<a role="button" class="btn btn-primary" href="/training/ocaml-development">Learn more about this training</a> <a role="button" class="btn btn-primary" href="/course_ocaml_development">Learn more about this training</a>
<br /> <br />
<br /> <br />
<br /> <br />
...@@ -33,8 +33,9 @@ This course has been designed by the OCamlPro team to enable developers to build ...@@ -33,8 +33,9 @@ This course has been designed by the OCamlPro team to enable developers to build
This training has been designed by the OCamlPro team to enable developers to use more advanced features of OCaml powerful type-system, benefit from all the open-source tools and libraries, and to write compact and efficient code. Learn more about this training. This training has been designed by the OCamlPro team to enable developers to use more advanced features of OCaml powerful type-system, benefit from all the open-source tools and libraries, and to write compact and efficient code. Learn more about this training.
<hr class="featurette-divider"> <a role="button" class="btn btn-primary" href="/course_ocaml_expert">Learn more about this training</a>
<hr class="featurette-divider">
<h2 class="page-subtitle"> <h2 class="page-subtitle">
Rust vocational training Rust vocational training
...@@ -49,6 +50,8 @@ This training has been designed by the OCamlPro team to enable developers to use ...@@ -49,6 +50,8 @@ This training has been designed by the OCamlPro team to enable developers to use
We have designed the Rust Training as a highly-modular vocational course to enable developers to learn Rust. This young systems language has a strong focus on safety, efficiency and safe concurrency, with C/C++ like performance. The training covers a beginner introduction to Rust’s basics features, crucial features and libraries for real-life development and advanced features. Each part will be further demonstrated through complex use-cases. Learn more about this training. We have designed the Rust Training as a highly-modular vocational course to enable developers to learn Rust. This young systems language has a strong focus on safety, efficiency and safe concurrency, with C/C++ like performance. The training covers a beginner introduction to Rust’s basics features, crucial features and libraries for real-life development and advanced features. Each part will be further demonstrated through complex use-cases. Learn more about this training.
<a role="button" class="btn btn-primary" href="/course_rust_vocational_training">Learn more about this training</a>
<hr class="featurette-divider"> <hr class="featurette-divider">
...@@ -65,6 +68,7 @@ We have designed the Rust Training as a highly-modular vocational course to enab ...@@ -65,6 +68,7 @@ We have designed the Rust Training as a highly-modular vocational course to enab
This training has been designed by the OCaml team to focus specifically on writing the most efficient code for demanding applications. Participants will benefit from the direct involvement of the OCamlPro team in the development of OCaml compilers. Learn more about this training. This training has been designed by the OCaml team to focus specifically on writing the most efficient code for demanding applications. Participants will benefit from the direct involvement of the OCamlPro team in the development of OCaml compilers. Learn more about this training.
<a role="button" class="btn btn-primary" href="/course_ocaml_code_opti">Learn more about this training</a>
<hr class="featurette-divider"> <hr class="featurette-divider">
...@@ -82,6 +86,8 @@ This training has been designed by the OCaml team to focus specifically on writi ...@@ -82,6 +86,8 @@ This training has been designed by the OCaml team to focus specifically on writi
The opam source package manager has reached an exceptional popularity in the OCaml world. It can now be seen as the easiest way to install OCaml and its development environment on any computer. But did you know that opam was also designed to integrate nicely in a professional environment and could boost your development productivity too? Learn more about this training. The opam source package manager has reached an exceptional popularity in the OCaml world. It can now be seen as the easiest way to install OCaml and its development environment on any computer. But did you know that opam was also designed to integrate nicely in a professional environment and could boost your development productivity too? Learn more about this training.
<a role="button" class="btn btn-primary" href="/course_mastering_opam_ocaml_tools">Learn more about this training</a>
<hr class="featurette-divider"> <hr class="featurette-divider">
...@@ -95,4 +101,4 @@ The opam source package manager has reached an exceptional popularity in the OCa ...@@ -95,4 +101,4 @@ The opam source package manager has reached an exceptional popularity in the OCa
<br /> <br />
<br /> <br />
OCamlPro offers OCaml courses at all levels world-wide. Courses are adapted to software developers or test and support engineers. We can customize and run any of our regular courses for you at your offices. Our team of engineers can meet your specific needs and tailor a course for your company. Contact us. OCamlPro offers OCaml courses at all levels world-wide. Courses are adapted to software developers or test and support engineers. We can customize and run any of our regular courses for you at your offices. Our team of engineers can meet your specific needs and tailor a course for your company. <a href="/contact">Contact us.</a>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment