はじめに


Meet ALMO!


ALMOは拡張Markdownパーサ / 静的サイトジェネレータ です。 入力として Markdownファイルを受け取り、単一の HTMLファイルを出力します。
ALMOの拡張構文の最大の特徴は、 実行環境を含むページを作成できる ことです。
下にいかにも入力可能そうなエディタと、ボタンがあります。
そこに、入力を受け取って、 Hello {入力された文字列}! という文字列を出力するPythonのプログラムを書いてみましょう。
(Pythonの文字列結合は + でできます。)

WJ
Hello ALMO!

サンプルの入力
ALMO
出力

サンプルの答え
Hello, ALMO!



コードができたら、下のボタンでジャッジをしてみましょう!

ボタンの
ができます。 ACを目指してコードを変更してみましょう!

さて、このPythonの実行は、サーバーで実行されているのではなく、
WebAseemblyを使ってユーザのブラウザ上で完結しています。

具体的にはALMOは、 Pyodide を使ってブラウザ上でPythonのコードを実行しています。

また、ジャッジを行うコード・テストケースも、全て HTMLファイルに埋め込まれていて、全ての処理がクライアント側で完結しています。
(つまり一度読み込みさえ終わればオフライン環境でも動作します。)

ALMOの機能


キホンのキ


ALMO は、競技プログラミング・データ分析・科学技術計算などのプログラミングに関連する記事を簡単に執筆できるように設計されています。
通常の Markdown記法のようにコードブロックを作ることもで画像を表示することもできますし、

def hello():
    print("Hello ALMO!")

if __name__ == "__main__":
    hello()

マンドリル

単に実行可能なコードブロックも書くことができます。




また、デフォルトテーマでは証明などの環境や注意・警告などのブロックもサポートされており、もちろんカスタマイズ可能です。

関数列 \( \{f_n\} \) が各点収束するとは、任意の \( x \) に対して \( \displaystyle \lim_{n \to \infty} f_n(x) \) が存在することである。
つまり、
\[ \forall \varepsilon > 0, \forall x \in X, \exists N \in \mathbb{N}, \forall n \geq N, |f_n(x) - f(x)| < \varepsilon \]

が成り立つことである。

ここで、 \( N \) は 各 \( \varepsilon, x \) に対してとってこれることに注意しよう。
\( \varepsilon \) に対してある \( N \) が存在して、 各 \( x \) に対して \( n \geq N \) ならば \( |f_n(x) - f(x)| < \varepsilon \) が成り立つときは、関数列 \( \{f_n\} \) 一様収束する という。



ライブラリの読み込み


さらに、主要なPythonのライブラリも実行環境に読み込ませることが可能です。
:::loadlib
numpy
scipy
matplotlib
:::

と書くと、 numpy , scipy , matplotlib import 可能になり、コードに含めることができます。

matplotlibのサポート


matplotlib を使ったプロットをサポートしています。
事前に matplotlib を読み込んでおいて、 matplotlib.use("module://matplotlib_pyodide.html5_canvas_backend") を追加すると、通常のように plt.show() とするだけで、ブラウザ上でプロットを表示することができます。




インストール


ALMOは、Homebrewを使ってインストールすることができます。
brew tap abap34/homebrew-almo
brew install almo

インストールが完了したら、MarkdownファイルをALMOに渡してみましょう。
almo example/example.md -o example.html

記法の詳細については レポジトリのREADME.md を参照してください。

ライブラリ


1. Visual Studio Codeでのプレビュー https://github.com/abap34/ALMO-extension


Visual Studio Code上で、執筆中の記事のプレビューが可能です.



2. GitHub Pages へのデプロイ https://github.com/abap34/ALMO-blog-template



GitHub Pages を使って、簡単にブログを構築することができます。