2023-12-30

今年も終わるのでいつかやりたかった、自分のプロフィールホームページを作ってみた。手段は

など色々あったが、結局JuliaのDocumenter.jlを使うことにした。理由はJuliaのプログラム開発も一緒に勉強してみたかったから。

How to make bio

1. Prepare files

$ ls
CMakeLists.txt Project.toml   README.md      build          docs           installer.jl   src
$ cat CMakeLists.txt
cmake_minimum_required(VERSION 3.14)
project(installer NONE)

# Find Julia executable
find_program(Julia_EXECUTABLE julia)
if(Julia_EXECUTABLE)
    message(STATUS "Found Julia executable: ${Julia_EXECUTABLE}")
else()
    message(FATAL_ERROR "Julia executable not found. Please make sure Julia is installed.")
endif()

configure_file(
    installer.jl installer
    FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
    GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)
$ cat installer.jl
#!@Julia_EXECUTABLE@

using Pkg
# Create a virtual environment
Pkg.activate("env")

Pkg.add("Documenter")
Pkg.add("LiveServer")
Pkg.add("Colors")

# Install the package of the ../
Pkg.develop(PackageSpec(path = ".."))

2. Install

$ mkdir build
$ cd build
$ cmake ..
$ make
$ ./installer

3. Build

$ cd ../docs
$ vi src/xxx.md  # write markdown files as needed
$ julia --project=../build/env make.jl

4. Check

$ julia --project=../build/env -e 'using LiveServer; serve(dir="build")'

then, in your browser open http://localhost:8000/.

5. Depoly

Setting up GitHub Pages and push to repository. Then, the HP is available in GitHub Pages .

Comments

やっぱりJuliaはPythonに比べて情報が少ないのでフロムスクラッチで作るのはちょっと大変。 Juliaの仮想環境ってPythonのvenvでいうdeactivateみたいなのがactivateになっているのは絶対に命名ミスだと思う。 SphinxはServerを立てなくてもhtmlファイルが見れたけど、Documenter.jlはぜんぶindex.htmlという名前に変換されるからsidebarからのリンクがServerを立てないと見れないのはちょっと不便。 Markdownで書けたり、GitHubのリンクを貼れたり、dark-modeの切り替えができたり、Juliaのコードを実行できたり、Juliaパッケージがどれもおなじテーマを採用していたりと、良いところもある。(ユニークにしたかったので、light-modeだけCSSをいじってみた。)

Tensor network diagram by Graphviz

プロフィールにおいたMPSの図をGraphvizで作ってみた。深層学習の人たちがよく使っているのを知ってテンソルネットワークの図にも使えるのかなと思って試してみた。

digraph MPS {
  rankdir=TD; 

  node [shape=circle style=filled]; 

  A [label="A" fillcolor="#9558B2"]; // 紫
  B [label="A" fillcolor="#EA6B5A"]; // 赤
  C [label="A" fillcolor="#60BB93"]; // 緑

  A_dummy [label="" width=0 style=invis];
  B_dummy [label="" width=0 style=invis];
  C_dummy [label="" width=0 style=invis];

  A -> A_dummy [label="" arrowhead=none];
  B -> B_dummy [label="" arrowhead=none];
  C -> C_dummy [label="" arrowhead=none];
  
  A -> B [label="" arrowhead=none];
  B -> C [label="" arrowhead=none];

  {rank=same; A; B; C}
  {rank=same; A_dummy; B_dummy; C_dummy}
}

を用意して

$ dot -Tsvg sample.dot -o sample.svg

するだけ。(dotはGraphvizのコマンドでHomebrewでインストールできる。) 脱Draw.ioするには、数式組立も標準対応してほしいところ。dot2texというPythonライブラリを使えばできるそうだけども、それはめんどい。