Home  >   Blog  >   Publishing My Master's Thesis with Documenter.jl


Publishing My Master's Thesis with Documenter.jl

  Support by donation   Gift a cup of coffee
  This article is part of the series: Building Recommender Systems in Julia

When I was a master's student, I had developed Recommendation.jl, a collection of well-known recommendation techniques written in Julia:

Recently I have been working on creating its documentation site by using Documenter.jl, a documentation generator for Julia. This article describes how the tool allows me to easily create the website and what I'm writing on it.

Importance of documentation for Julia packages

In fact, I do not actively add state-of-the-art recommendation techniques to the Recommendation.jl package because the package simply focuses on providing a way to test well-studied traditional methods, with leaving room for user-side customization. I personally believe everything in the package is trivial in the field of recommender systems, and hence I did not write any dedicated documentations so far.

However, even if the implemented techniques are widely known (e.g., collaborative filtering, matrix factorization), I recently realized that explicitly documenting their underlying scientific concepts and mathematical equations is beneficial to provide a better understanding of the package, especially in case of the Julia programming language.

Most importantly, Julia is designed for high-performance scientific computing, mostly in academia. As an alternative option to MATLAB, the language gives an easy access to complex scientific techniques to those who are relatively familiar with their theoretical aspect. Consequently, documentation of third-party Julia packages needs to be structured properly for the unique demographics.

To give an example, when I see a documentation page of Distribution.jl, it shows the probability density functions of a variety of distributions. On the other hand, scikit-learn documentation explains a similar topic in a more intuitive and visually stimulating way by showing abundant figures and function interfaces.

For the reasons that I mentioned above, documentation should be written for the right readers in the right way, and the detailed theoretical descriptions help Julia users a lot in practice.


Once I figured out the importance of theoretical documentation, I googled an effective way and finally found Documenter.jl. By the way, I do like Julia's language ecosystem that consists of such a variety of community-owned utility repositories like METADATA.jl and julia-logo-graphics; it simply makes developers comfortable.

We can easily create our documentation website by using Documenter.jl as follows:

  1. Install Documenter.jl:
     julia> import Pkg; Pkg.add("Documenter")
  2. Write Markdown documents under docs/src and/or write docstrings in your source code.
  3. Create docs/make.jl like:

     using Documenter, Recommendation
         format = :html,
         modules = [Recommendation],
         sitename = "Recommendation.jl",
         authors = "Takuya Kitazawa",
         linkcheck = !("skiplinks" in ARGS),
         pages = [
             "Home" => "index.md",
             "Getting Started" => "getting_started.md",
             "References" => [
         repo = "github.com/takuti/Recommendation.jl.git",
         target = "build",
  4. Compile documentation:
     $ julia docs/make.jl
  5. Open and check the site from docs/build/index.html.
  6. Push to your GitHub repo to update a gh-pages branch.

That's all. Thanks to Documenter, you can flexibly organize your pages in makedocs(pages=[]), and the website will automatically be published under gh-pages according to the deploydocs() configuration. Of course, the tool does support MathJax-based LaTeX syntax as well as many other useful syntax.

Porting my master's thesis to the Recommendation.jl documentation

Finally, I have been published the first version of Recommendation.jl documentation site. As I described above, the pages describe the theoretical detail of common recommendation techniques e.g., collaborative filtering.

It should be noted that these contents are originally from .tex files of my master's thesis. The thesis was entitled as "Persistently Cold-Starting Online Item Recommendation for Implicit Feedback Data," and I spent a lot of time to survey classical recommendation techniques. The topics are also compatible with Recommender Systems Specialization in Coursera; it is a great introductory course to see the inside of recommender systems.

While our thesis becomes publicly available after graduation, re-publishing it on the Internet in a different format gives another chance to attract attention and get feedback from more people. Building a relevant Julia package and writing its documentation (with Documenter.jl) would be a great option to do so.

Let's say, my master's thesis has been reborn on the website.

  This article is part of the series: Building Recommender Systems in Julia



Recommender Systems Programming

  See also

Moving Julia Project from Travis CI to GitHub Actions #JuliaLang
Lightning Talk about Recommender Systems in Julia at #JuliaCon 2019
Recommendation.jl: Building Recommender Systems in Julia


Last updated: 2022-08-06

  Author: Takuya Kitazawa

Takuya Kitazawa is a freelance software developer, previously working at a Big Tech and Silicon Valley-based start-up company where he wore multiple hats as a full-stack software developer, machine learning engineer, data scientist, and product manager. At the intersection of technological and social aspects of data-driven applications, he is passionate about promoting the ethical use of information technologies through his mentoring, business consultation, and public engagement activities. See CV for more information, or contact at [email protected].

  Support by donation   Gift a cup of coffee


  • Opinions are my own and do not represent the views of organizations I am/was belonging to.
  • I am doing my best to ensure the accuracy and fair use of the information. However, there might be some errors, outdated information, or biased subjective statements because the main purpose of this blog is to jot down my personal thoughts as soon as possible before conducting an extensive investigation. Visitors understand the limitations and rely on any information at their own risk.
  • That said, if there is any issue with the content, please contact me so I can take the necessary action.