はじめに
Meet ALMO!
ALMOは拡張Markdownパーサ / 静的サイトジェネレータ です。 入力として Markdownファイルを受け取り、単一の HTMLファイルを出力します。
ALMOの拡張構文の最大の特徴は、 実行環境を含むページを作成できる ことです。
下にいかにも入力可能そうなエディタと、ボタンがあります。
そこに、入力を受け取って、
Hello {入力された文字列}!
という文字列を出力するPythonのプログラムを書いてみましょう。(Pythonの文字列結合は
+
でできます。) WJ Hello ALMO!
サンプルの入力 ALMO
出力
サンプルの答え Hello, ALMO!
コードができたら、下のボタンでジャッジをしてみましょう!
ボタンの- "Run Sample" ボタンでサンプルに対して実行
- "Submit" ボタンで複数のテストケースでテスト
ができます。 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 を使って、簡単にブログを構築することができます。
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\} \) は 一様収束する という。
各 \( \varepsilon \) に対してある \( N \) が存在して、 各 \( x \) に対して \( n \geq N \) ならば \( |f_n(x) - f(x)| < \varepsilon \) が成り立つときは、関数列 \( \{f_n\} \) は 一様収束する という。
:::loadlib
numpy
scipy
matplotlib
:::
brew tap abap34/homebrew-almo
brew install almo
almo example/example.md -o example.html