サーバレスアーキテクチャ

AWS lambda は知っていたが、今日初めて Fargate というサービスを知った。

www.ragate.co.jp

www.acrovision.jp

まだどんなものかさっぱりわからん(汗

sphinx + latex な環境を docker コンテナにして、サーバレスで運用したいのだが、lambda でいけるのか? lambda は制約が厳しいとのことだが、どんな制約なのか、今回やりたいことがその制約にひっかかるのか、知識と経験がなさすぎて判断できない。

【Rust】非同期プログラミング

ちょっと気になったので情報収集する。

2019 年の非同期 Rust の動向調査 - Qiita

Rust でお気楽非同期プログラミング - Qiita

Rust の非同期ランタイムの実行速度を比較してみる - Qiita

絶賛開発中!という感じですね。安定化するのはまだまだ先みたい。

 

非同期処理で複数のタスクの終了を待ち合わせるとき、それぞれのタスクの終了コード(実行結果)が Resultなので、

Vec<Result<Result<u64, anyhow::Error>, JoinError>>


みたいなことになるらしい。async/await が使えるようになるまでは、
and_then や map_err を組合せて処理をしていた、とのこと。

【Rust】エラー処理に関するメモ

ちょっと複雑な状況でのエラー処理方法について調査中。

忘れないように自分用メモ。

 

状況1

foo() -> bar() -> hoge() と関数呼び出しをする。引数と戻り値の型は仮に

  • foo(a:i32)->Result<bool, String>
  • bar(b:i32)->Result<String, String>
  • hoge(c:i32)->Result<i32, String>

とする。

hoge() で失敗していたものを foo()で処理するような場合、どう書くのか?

関数呼び出しが深くなる場合は map_or_else を使えそう。

https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.map_or_else

他にも、Result の入れ子を flatten して、find_map とか各種便利な関数を使えそうな気配。

https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.flatten

 

 

状況2

fn foo(a:i32)->Result<bool, String>;

fn bar(b:bool)->Result<String, String>;

fn hoge(c:string)->Result<i32, String>

fn main(){

    {

        let a = foo(3);

        let b  = bar(a);

        let c  = hoge(b);

     }

     println!("{:?}"  a or b or c};

}

foo() や bar() の時点で処理に失敗していたら、それ以降の処理は飛ばししたいところ。

このとき、Scala ならば for{} yeild() といった構文が使えるが、 Rust だとどうするのか?という疑問。

 and.then() を使えばよいのかも。メソッドチェーンを実現できるみたい。

https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.and_then

他にも便利そうな関数がいくつもある。状況に応じて使えるようになりたい。

https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.or

https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.or_else

https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.unwrap_or_else

 

こんなん見つけた。

qiita.com

qiita.com

 状況2に対する答えは、疑問符演算子? のようだ。1年前に調べていた(汗

kzono.hatenablog.com

やはり、ちゃんと動くサンプルコードを書けていないので、理解できていないようだ。。。

MkDocs と wkhtmltopdf

markdown -> MkDocs で HTMLに変換 -> wkhtmltopdf でPDFに変換

 

というパスもあるらしい。

note.com

 

docker で MkDocs を使うには。

nishipy.com

周りの人に環境を作ってもらうには docker が良いような気がする。

とりあえず動かすのはとっても簡単だった。

だが、カスタマイズするのに情報がまだまだ足りない感じ。

sphinx のほうがググって情報が見つかった。

 

具体的には、目次というかアウトラインの階層を増やしたり、

HTMLにしたときにスクロールしてもアウトラインを常に表示させる方法がわからなかった。

デフォルトで sticky な仕様だった。

 

sphinx 、素晴らしい!

グーグル先生に聞いて一通り試したところ、やりたいことは概ね実現できた。

HTMLとPDFに変換したとき、目次を作成できるかが気になったのだが、ちゃんとできた。

図の拡大・縮小やキャプション番号なども可能だった。

PDF化のため(?) ubuntuTeX 環境をインストールした。懐かしい。

自分で使うぶんにはなんの問題もない。が、一般ピープルにすすめるのは現状では敷居が高い。

- Tex

- sphinx

サーバもしくはサービスを用意して、 markdown または reStracturedText のファイルを指定したら HTML または PDF ファイルを作ってくれる、というところまで持っていかないと使ってもらえないだろう。 reStructuredText は markdown よりマイナーなので、 markdown からうまく変換できるように、機能が足りない部分はデフォルト値をうまい具合に設定しておく必要がありそう。 

 docker で sphinx を使うには

DockerでSphinxを使う — hnakamur's tech memo ドキュメント

- 見出し(階層化)
- 箇条書き(番号付き、番号なし)
- 表
- 図(pngなど)
- リンク
- ソースコード
- 引用
- コメント

reStructuredText と Sphinx

通常は markdown を使っているのだが、すこしちゃんとしたドキュメントを作成するのには reStructuredText のほうがよさそうだったので、試してみることにする。

postd.cc

sphinxUbuntu へインストールする方法を悩む。色々ありすぎて。

Sphinxのインストール — Sphinx 4.0.0+/b93aa3137 ドキュメント

sphinxpython なツール。phthon はバージョン問題があるので、素の環境でインストールするとトラブルことがある。なので、複数のバージョンを切り替えて使う方法が多々ある。

昔調べて、Anaconda を採用した。理由は忘れた(汗。

 

実際にホームディレクトリの下に anaconda3 ディレクトリがあった。すっかり忘れていたが。

 

また、今時な方法として Docker を使う、というのもあり。

DockerでSphinxを使う — hnakamur's tech memo ドキュメント

UML Modeling Tool on Ubuntu 20.04 LTS

試しに無料で使えるツールを2つインストールした。

  • UMLだけでなく SysML にも対応
  • Javaのコード生成ができる
  • モジュールを追加すると C++のコード生成もできる

Modelio C++ Designer - Code generation/reverse from/to UML

www.modelio.org

一方の Umbrello だが、なんだかいろんなプログラミング言語のコード生成ができるらしい。

umbrello.kde.org

Umbrello Project - Umbrello Features によれば

などなど。恐るべし。使い勝手はまだわからないが、ちょっと楽しみ。