e-tipsmemo

ごった煮

Ubuntu systemd getty autologin via Serial Console

Ubuntu17あたりでautologinする設定

普通のtty([0-9].)なら

systemctrl edit --force getty@tty0

(tty0はログインコンソールに変える)

[Service]
ExecStart=
ExecStart=-/sbin/agetty -a <username> --noclear %I $TERM

とすると、
/etc/systemd/system/getty@tty0.service.d/override.conf
に設定ファイルがきる。
実行されるコマンドを一度”空欄”で上書きして、
そのあとに自動ログインのオプション付きでagettyを実行する。

設定を確認するには

systemctl cat getty@tty0

とする。

シリアルコンソールなどから

であれば、ttyPS0とかttyS0とか

systemctrl edit --force serial-getty@ttyPS0

として

[Service]
ExecStart=
ExecStart=-/sbin/agetty -a <username> --keep-baud 115200,38400,9600 %I $TERM

keep-baudがないとdaemonが起動した途端ボーレートが変更されてしまって文字化けする。

0pointer.de

Rust レイトレーシング ⑨ 金属・ガラス


金属とガラスを実装した。


それぞれMaterial Traitを実装し、光が当たったときのその光のゆく方向を計算する。


再帰の呼び出しに条件を付けることで、不必要なほどの反射光の計算を適当に減らす。


fuzzは反射時のランダム要素


ガラスの球と屈折率

f:id:katakanan:20180213225531p:plain:w300
わかりにくいが手前にガラスの球。右側に金属の球がある。

f:id:katakanan:20180213230235p:plain
スレッド数でだいぶ差が出るようになった。

今は単純にスレッドを分割しているが、物体に当たるとわかったらスレッド数を増やして
動的にスーパーサンプリング数を増やすとかできたら良いかもしれない?。

Cargo build/update error "no match for id (some hash)"

Updating registry `https://github.com/rust-lang/crates.io-index`
error: failed to load source for a dependency on `image`

Caused by:
Unable to update registry `https://github.com/rust-lang/crates.io-index`

Caused by:
failed to fetch `https://github.com/rust-lang/crates.io-index`

Caused by:
object not found - no match for id (~~~~

Cargo buildを実行したらcrate.ioからフェッチできないと言われた。
色々と原因があるかもしれないのでなんとも言えないらしい?
ネットがつながっていても発生するのでそれによる問題ではない

解決方法

$ mv ~/.cargo/registry/ ~/.cargo/registry_
$ cargo build --verbose

ですべてをもう一度取得し直してビルドすることで解決することがある。

Rust レイトレーシング ⑧ 素材準備

今更このようなサイトを発見してしまったのでここも参考にしていこうと思う。
レイトレーシング入門1「光線の基本と反射」 - Qiita

色々な素材を利用できるようにするために、Material Traitを定義してこれを持つ構造体を各素材とする。


このTraitを実装する型はDebugとSyncとSendも実装する?
マルチスレッドでcloneされる要素となるためには必要。


Colorの代わりにMaterial Traitを実装する型のものをメンバにもつ。ここでArcで囲んだポインタにしておかないと、
マルチスレッドでクローンして渡せないと思われる。


senceでは物体に当たったら、その物体の素材に当たる光を渡して、帰ってくる光(この場合拡散光)を再びcolor関数に入れることで色々な物体からの拡散光とalbedo(反射光の比)を要素毎にかけてreturnする。


ついでにγ補正した。

f:id:katakanan:20180211154516p:plain:w300
おまけで8スレッドで動かしているとき
f:id:katakanan:20180211154703p:plain:w310

Programming Rust: Fast, Safe Systems Development

Programming Rust: Fast, Safe Systems Development

Rust 実行時間測定②

e-tipsmemo.hatenablog.com

このような記事を書いたが、time crateのリポジトリをよく見ると、

Notes
This library is no longer actively maintained, but bugfixes will be added (details).
In case you're looking for something a little fresher and more actively maintained have a look at the chrono crate.

とあった。
timeを計算するところでエラーがPCによっては出るようになってしまってメンテもされていないリポジトリなので使用を取りやめる。

なんとなく速くなっていることがわかりさえすればいいと思うので、'std::time'を使う。

Rust レイトレーシング ⑦床

http://e-tipsmemo.hatenablog.com/entry/2018/02/17/000000e-tipsmemo.hatenablog.com

複数の物体を表示できるようにする。

とりあえず複数の球体をvecに入れる。
shapelistにもHITトレイトを実装することで前と同じようにhitを呼ぶだけ。

t0 ~ closest間のものだけを当たった判定とするので、カメラに対し、一番近い物体のものが代表される。

床と球体を表示する。
床は半径の大きい球体で賄う。

じつは今まで画像を上下逆に描写していたらしいので最後にひっくり返すことにした。

実行結果。
f:id:katakanan:20180205003605p:plain:w300

本当は、

#[derive(Clone)]
pub struct ShapeList {
    pub v: Vec<Box<HIT + Send + Sync>>,
}

とできるのか?と思っていたがCloneがないとかなんとかで、thread間の共有ができるのかよくわからない。
意外とハマリポイントなのかもしれない。
球体だけならこのままの方法でゴールできる。
三角形などを表示したいときに困る。

Easy Origami (Dover Origami Papercraft)

Easy Origami (Dover Origami Papercraft)

Programming Rust: Fast, Safe Systems Development

Programming Rust: Fast, Safe Systems Development

MIPS 命令順序入れ替えない

前にこのような記事を書いたが、
e-tipsmemo.hatenablog.com

このままだとMIPSの遅延分岐やSW/LW関連の依存の解消のために勝手に命令が入れ替わってしまう。

解決法:
asmの先頭に.set noreorderをつける。

このプログラムを比較してみる。

add $1, $0, $10
add $2, $0, $11
L:addi $1, $1, 1
LW $3, 4($0)
nop
add $3, $1, $3
SW $3, 4($0)
bne $1, $2, L
nop
LW $4, 4($0)
nop
・・・

ない場合

ある場合

これは分岐する時点で普通のMIPSは分岐命令の次の命令をフェッチしてしまっているのでそこには
分岐(する|しない)にかかわらず、実行されるべき命令を置くように順番を変えてしまう。
[遅延分岐]

この場合、ストア命令は必ず実行され、分岐命令とは依存関係がないレジスタにアクセスしているのでストア命令で入れ替えられている。

コンピュータの構成と設計 第5版 上

コンピュータの構成と設計 第5版 上

コンピュータの構成と設計 第5版 下

コンピュータの構成と設計 第5版 下