iOSアプリのデータ保存場所

保存場所

  • メモリ
    • NSCache:メモリが足りなくなれば自動的にアイテムが消される
    • Dictionary や Array
  • ファイルシステム
    • ディレクトリ:基本的に iCloud へバックアップされる
    • UserDefaults:プリミティブ型のユーザ設定を保存する、起動時にメモリに展開される、iCloud へバックアップされる
    • データベース:Core Data、Realm、SQLite など
    • KeyChain

テンソルと行列は何が違うのか

\[\def\bm{\boldsymbol}\]

理工系出身者の誰もが使ったことがあるけれど、その意味がよくわからない人が多いであろうテンソルについて学んだ。テンソルと行列は何が違うのだろうか。

概要

  • 行列は 2次元配列だが、テンソルは多次元配列の一種。0階のスカラー、1階のベクトル、2階の行列として表現可能なテンソル、そして3階以上のテンソルが存在する。
  • 全ての2階テンソルは行列として表記可能だが、全ての行列がテンソルの要件を満たすわけではない。
  • 【一番大事】テンソルは事実を表すもので座標系に依存しない。視点が変わっても事実は同じ。テンソルの要素はテンソルの数値的な表現手段であり、座標系が変われば値も適切に変わる。

マンデルブロ集合を Rust + WebAssembly で描く

マンデルブロ集合の見た目

マンデルブロ集合(Mandelbrot Set)は、このような図形で表されます。この図の黒い部分がマンデルブロ集合です。

Mandel zoom 00 mandelbrot set.jpg
By Created by Wolfgang Beyer with the program Ultra Fractal 3. - Own work, CC BY-SA 3.0, Link

Show EC2 instance tags for all instances

Show EC2 instance tags from single AWS account

$ aws ec2 describe-instances | jq -r '.Reservations[].Instances[].Tags | reduce .[] as $i ({}; .[$i.Key] += $i.Value) | [.Name, .Env, .Service, .Role] | @csv'
"xxx-prod-web1",,,"web"
"xxx-prod-web2","prod","xxx","web"
"yyy-prod-web1","prod","yyy","web"
"yyy-prod-web2","prod","yyy","web"
"zzz-work",,,"ope"
"xxx-prod-batch1","prod","yyy","batch"

Show EC2 instance tags from multiple AWS accounts

$ ./run-aws-cli-on-multiple-acconts -r administrator -c "ec2 describe-instances" -j '.Reservations[].Instances[].Tags | reduce .[] as $i ({}; .[$i.Key] += $i.Value) | [.Name, .Env, .Service, .Role] | @csv'

account1 arn:aws:iam::123456789012:role/qwert-administrator-role
"xxx-prod-web1",,,"web"
"xxx-prod-web2","prod","xxx","web"
"yyy-prod-web1","prod","yyy","web"
"yyy-prod-web2","prod","yyy","web"
"zzz-work",,,"ope"
"xxx-prod-batch1","prod","yyy","batch"

account2 arn:aws:iam::234567890123:role/qwert-administrator-role
"aaa-prod-web1",,,"web"
"aaa-prod-web2","prod","xxx","web"
...

See https://github.com/takah/run-aws-cli-on-multiple-accounts for run-aws-cli-on-multiple-acconts script.

並行処理と非同期処理

並行処理と並列処理

並行処理(Concurrent Processing)

複数の処理を同時に実行すること。ただしある瞬間には1つの処理だけを実行している。シングルコアCPUで実装可能。擬似的に同時に進んでいるように見える。普通の人の頭は並行処理しかできない。

並列処理(Parallel Processing)

複数の処理を同時に実行すること。ある瞬間に複数の処理を実行している。マルチコアCPUやマルチプロセッサー、GPUなど、ハードウェアのサポートが必要。伝説によれば聖徳太子の頭では並列処理ができたようだ。

同期処理と非同期処理

通常、コンピュータプログラムは休む暇なく次から次へと処理を実行するが、どうしても休まざるを得ないこともある。代表的なのが I/O だ。ユーザーの入力を待つ、ファイルへの書き込みを待つ、ネットワーク経由でデータを取得する、タイマーの設定時間を待つなど、CPU とは桁違いに遅い処理を実行するときに待ちが発生する。

このときにじっと待つのが同期処理(Synchronous Processing)で、一時的に中断して別の処理に実行の機会を譲るのが非同期処理(Asynchronous Processing)である。


Other posts