ネットワークグラフの可視化

前々から簡単に使えるアーミーナイフ的なグラフ可視化ツールを手懐けておこうと思っていた。

ということでgraph-toolというツールを導入した。

graph-tool.skewed.de
自分自身がcondaを使ってなかった事もありM1の依存関係諸々でちょいハマりしてしまったがとりあえず入った。

graph-tool,igraph,NetworkXと色々Pythonライブラリはあるみたいだが非常に早いのが売り出そうです。ダイクストラ(Single-Source Shortest Paths)、クラスタリングページランク、K-core(K縮退グラフ)、Minimum Spanning Tree(最小全域木)のアルゴリズムIntel Corei9-9980 24GHzで比較を行っている。結果から見ると非常に早そう。

graph-tool.skewed.de

今日はほぼ環境構築のみで終わってしまったので徐々に使っていきたい。

 

あとは、環境がマンネリしすぎていたのでディスプレイを縦置きに変更してみた。

割と良さそうかもしれない。

犬を飼う事

サピエンス全史を読んで学んだ事。

犬を飼うと言う文化は、諸説あるが1万2000年前には、すでに行われていたそうである。狩や防衛のために飼っていたそうである。

また、アチェ族がかつて足手まといになる老人や赤子を殺してリスクを減らしていたと言う話に衝撃を受けた。今の文化では考えられないだろう。

 

今日は、Google App Scriptを書いてたら1日終わった。JavaScriptむずい。

 

英語勉強をして

今日の英会話は、亡くなったエリザベス2世に関してだった。皇帝とか王政特有の、英単語が本当に難しかった。

そのあとTOEFLの勉強。科学系の記事は思ったより読めた。単語力は非常に重要なことを痛感した。地道にやっていきましょう。

 

あとスプラトゥーン3とりあえず買ってやったよ。おやすみ

堕落した社会人生活

今日は、10時からのミーティングで提出書類の確認をした。自分がメインで書いている資料と言う事もあり先輩に語気強めに言ってしまったことを反省。

 

午後からは出社し構築作業へ。NGAPなるAMFと接続するためのインターフェースをちょいと理解。あとは、風呂入って英会話してねるだけ。

 

やることを徹底的にまとめる

私生活・仕事共でやりたい事と、実際できている事に非常に乖離があることを非常にストレスに感じていた。

これまでもapple製のreminderを使って管理していたが、三日坊主で本当に維持できていなかった。

僕自身Googleのツールを使うことが非常に多かったので、なんとなくGoogle ToDoに変更した。正直身の回りは、ほとんどがApple製品なので非常に悩むがまぁいいだろう。

その中で今回徹底的にやっている部分として、本の目次から章をサブタスクとして入れ始めたことである。

これでうまく行けばいいが。

Rust Boxの整理

Rustを身につけたく色々記事を覗きながら書く練習を進めているが忘れるのでここに残す。 今回は、Boxについて書く。

まずは、コンピュータのメモリに関して復習から始める。 OSが管理するメモリ領域は、いくつかあるがその中でアプリケーションが利用可能なメモリ領域で「スタック」「ヒープ」がある。 スタックは、コンパイラやOSが自動的に割り当て、開放が行われる領域である。サイズは、コンパイル、リンクする際に決められる。 Rustは、デフォルトではすべての値がスタックに割当てられます。

もう一方のヒープに関しては、アプリケーションがメモリが必要になった際に確保するためのメモリ領域として利用される。 C言語ではmalloc関数を用いて一定サイズの領域を確保する。 今回のRustではBoxと呼ばれる標準ライブラリを用いてメモリ領域の確保を行う。 以下のRust by Exampleを元にまずは、簡単なコードを作る。

struct Point {
    x: f64,
    y: f64,
}

fn boxed_origin() -> Box<Point> {
    Box::new(Point {x:0.0,y:0.0})
}


fn main() {
    let boxed_point: Box<Point> = boxed_origin();
    println!("{}",boxed_point.x);
    println!("{}",boxed_point.y);
}

上記では boxed_origin関数で座標を表すPointという構造体の座標(0.0,0.0)のデータを持つデータ領域をBoxを用いて一つ確保し、 そのデータをメイン関数側でBox型の変数を作り受け渡しを行っている。 二段階にポインタを挟むと以下の様になる。 struct Point { x: f64, y: f64, }

fn boxed_origin() -> Box { Box::new(Point {x:0.0,y:0.0}) }

fn main() { let box_in_a_box: Box<Box> = Box::new(boxed_origin()); println!("{}",box_in_a_box.x); println!("{}",box_in_a_box.y);

}