狭い家で暮らす

広い家となると地方に行かなきゃいけないのだけど、移動が嫌いなので都心近くに住みたい。

都内だと80平米の家ともなると家賃18万とかかかってしまう。これが60平米でよければ家賃は14万くらいに下げることができて、毎月4万くらい浮かせられる。

ものをたくさん持つならそれに応じて家を広げなければいけないけど、ものを持ってなければ家なんて狭くても良い。

これは血反吐吐いてでもスペースを確保する努力をしながら書いているメモです。嫌味みたいな回答あるけど、自問自答の末に書いたもので、自分に当てて書いています。

洗濯

  • 洗濯物を干すなら外へ、部屋干しは禁止
  • 洗濯乾燥機を買えば外に干す必要すらもなくなる

収納

  • 紙を持たない
  • 届いた書類は物理的に所持しなければいけないもの以外はスキャンして捨てる

家具

  • 収納家具は買わない、買うくらいなら平起きで良い
  • デッドスペースを収納スペースにできる家具はOK
    • 例えば電子レンジの上に収納スペースを作るような家具はOK
  • ソファーは禁止して折りたたみリラックスチェアを買う
  • ダイニングテーブルとチェアはさすがにOKかな?

寝室

  • ベッドは折りたたみにするか収納付きベッドにする

書斎

  • 仕事机は横に長いものを買わない、代わりに奥行きを取る(ディスプレイ設置などで奥行きがあるったほうが捗る)
  • デュアルディスプレイにする場合横ではなく上に置く(立体的に部屋を使う)

料理

  • ティファールもしくはニトリの取っ手が取れるフライパンを使う
  • 食材は保存場所を取らないように保存するか使い切る

Q&A

箱に荷物を入れて送ると保管してくれるクラウドストレージで大抵解決できます。

万が一のために広めのスペースを確保したい

クラウドストレージを使えば良い。

子供が生まれた時どうするのか

クラウドストレージを使えば良い。

※子供は大人になって出ていく。子供のために広い家を買うのではなく、子供がいる間はに消費するスペース分だけ外部に倉庫を借りれば良い。

子供が狭い部屋で育つの可哀想

都内には遊ぶ場所がたくさんある。土日はそこに連れていけば良い、平日もそこで遊べば良い。お店もたくさんある、全てが小さいスペースに揃っている。

それでも子供が狭い部屋で育つの可哀想

田舎に行くと土地は安いです。

自然がない

土日は電車で移動しましょう。

Kotlin(Java)でアプリケーション終了時の処理を書く

RuntimeにaddShutdownHookというのがあり、そこで定義できます。アプリケーションが終了する時に、メモリ上に溜まったデータを保存したりとか、お上品に終了させる必要がある時に便利です。

Runtime.getRuntime().addShutdownHook(Thread {
    println("終了時に呼ばれる処理");
})

RustのOption型のis_someとis_none

Rustには取得できるか分からないOption型というのがあり、 SomeNone のどちらかが入っていて、これが Some だったら処理を実行したいなとか、None だったらエラー吐きたいなって時に SomeNone を判定したくなりますな。そんな時に is_someis_none ってのを返すものがあります。

use serde_json::{Value};

fn main() {
    let json = "{\"a\":1,\"b\":2,\"c\":{\"d\":3,\"e\":4,\"f\":5}}";
    let value: Value = serde_json::from_str(json).unwrap();

    let option_a = value.get("a");
    let option_z = value.get("z");

    assert_eq!(option_a.is_some(), true);
    assert_eq!(option_z.is_none(), true);
}

快便ですね。

Rustで配列を for, map, for_each で回す

配列をループで回す

基本なこんなイメージで回せる。よくあるやつ。

fn main() {
    for i in [1,2,3].to_vec() {
        dbg!(i);
    }
}

配列をfor_eachで回す

for_each なんか使ってみたい。Rustではイテレータに変換することで使える。

fn main() {
    [1,2,3].iter().for_each(|i| { dbg!(i); });
}

配列をmapで処理する

map もちゃんと使える。値を特定のオブジェクトに加工して返すなどの処理をする場合に常に活躍する。

fn main() {
    let result: Vec<i32> = [1,2,3].iter().map(|i| i * i).collect();
    result.iter().for_each(|r| {
        dbg!(r);
    });
}

参考

aws-cliでS3ライクストレージを管理するコマンドまとめ

GUI任せだったんですけど、Linuxで動く最後のGUIが起動しなくなったのでコマンドでやることにしました。一通りこんなもんでファイル管理は大丈夫かなと。

オブジェクトの一覧を見る

S3ライクの場合は endpoint でそのホストを指定します。

aws s3 ls \
  --profile example \
  --endpoint http://example.com \
  s3://example/path/to/

オブジェクトのアップロード

aws s3 cp \
  --profile example \
  --endpoint http://example.com \
  --acl public-read \
  --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers \
  ./hoge.png \
  s3://example/path/to/

スラッシュを付けないとその名前で保存され、スラッシュを付けるとそのパス以降にオブジェクトが配置される。

オブジェクトの削除

aws s3 rm \
  --profile example \
  --endpoint http://example.com \
  s3://example/path/to/hoge.png

パス以降を消す時には --recursive をけつに付ける

オブジェクトの変更

aws s3 mv \
  --profile example \
  --endpoint http://example.com \
  s3://example/path/to/hoge.png \
  s3://example/path/to/hoge.png

オブジェクトのディレクトリとの同期

aws s3 sync \
  --profile example \
  --endpoint http://example.com \
  --acl public-read \
  --exclude "*" \
  --include "*.png" \
  ./ \
  s3://example/path/to/

この例は追加のみで、削除もするには --delete オプションを付けると良い。ただし削除はパスミスった時に全部消えるので、個人的にはほとんど使わない。

オブジェクトの権限の確認

s3://example/path/to/hoge.png のようなパスにオブジェクトを配置していた場合は下記のようになる。

aws s3api get-object-acl \
  --profile example \
  --endpoint http://example.com \
  --bucket example \
  --key path/to/hoge.png

オブジェクトを一般ユーザーに公開する

aws s3api put-object-acl \
  --profile example \
  --endpoint http://example.com \
  --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers \
  --bucket example \
  --key path/to/hoge.png

参考