物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

セクターサイズ、クラスターサイズに関するメモ

セクターあたりのバイト数=論理セクターサイズ
物理セクターあたりのバイト数=物理セクターサイズ

論理セクターは、物理セクターに内包しており、OSからは物理セクターが見えている。一部の論理セクターだけを書き換えることは出来ない。

物理セクターサイズは、一部のSSDでは変更可能。最近の主流は4KiBらしい?

https://www.intel.co.jp/content/www/jp/ja/support/articles/000006392/memory-and-storage.html

クラスターあたりのバイト数=アロケーションユニットサイズ=クラスターサイズ

クラスターサイズは、ファイル管理の際の最小単位。ディスクをフォーマットするときに、アロケーションユニットサイズとして設定可能。 SSDにおいてこれを変えるメリットはないと思う。

NTFSの場合は、クラスターサイズ×232-1の上限があるため、大容量ディスクでクラスターサイズを小さくしすぎることは出来ない。

Yamaha RTX1200でIPアドレスでブロックする

9.1.10 IP パケットのフィルタの設定

9.1.26 フィルタリングによるセキュリティの設定

133.6.0.0と133.6.0.1の、外向きのアクセスをブロックしたい場合は、以下のように設定する。本設定でLAN2はWAN側

ip lan2 secure filter out 1 2 1000
ip filter 1 reject * 133.6.0.0 * * *
ip filter 2 reject * 133.6.0.1 * * *
ip filter 1000 pass * * * * *

最も重要なのは 1000番のフィルターで、これを設定しないと、条件に一致しない全てのパケットが破棄されてしまう。外向きはまだしも、LAN側で設定を間違えてしまうと、ルーターそのものへのアクセスができなくなり詰むので気をつけて欲しい。

ログを見るには、SYSLOGのNOTICEをONにする。

Slackのチャンネルに全メンバーを追加する簡単な方法

https://ワークスペース名.slack.com/admin

に行くと、全メンバーをExportできる。管理者だけかも。

f:id:onsanai:20200513112235p:plain:w300

出力はcsvファイル

username,email,status,billing-active,has-2fa,has-sso,userid,fullname,displayname,expiration-timestamp
physics,physics@station.station,Owner,1,0,0,U0000000000,PHST,"Physics Station",

みたいな形式になってる。重要なのはstatususeridで、statusBotのは招待しないので弾く。userid一覧を出力させる。生成にはPythonを使ったが、Excelでも良いだろう。

with open("slack-ワークスペース名-members.csv", encoding="utf_8") as f:
    lines = f.readlines()
    for line in lines[1:]:
        if line.split(',')[2] == "Bot" or line.split(',')[2] == "Deactivated":
            continue
        print(line.split(',')[6])

WindowsのSlack クライアントからメンバーの追加画面に行く

f:id:onsanai:20200513112642p:plain

この3番に出力したuserid一覧を入力する。Doneで全メンバーを招待できる。既に招待してるメンバーを入力しても問題ない。 (全メンバーと書いたが、試したのは約170人で、それ以上、例えば1000人とかでうまくいくかは分からない)

後から来たメンバーも追加されるように、

https://ワークスペース名.slack.com/admin/settings#default_channels

に追加するのを忘れないように。

SPNG形式(バイナリ形式で複数の画像を1ファイルに統合した独自形式)のPythonでの読み込み方

諸事情で複数の画像を簡易的に1つのファイルに統合したいことがあり、またそのファイルをPythonから読み込みたい需要があった。

Numpyを使ったバイナリファイルの読み込み方、OpenCVを使ったデコードの仕方などの知識を使う。

V00000001_L0_VX0001_VY0000_mat0_080.spng&8&426991 とJSONに書いてある場合、データ範囲は8バイト目から426991バイト分なので、以下のように読む。

import cv2
import numpy as np

f = open("V00000001_L0_VX0001_VY0000_mat0_080.spng", "rb")
data = np.fromfile(f, np.uint8, 426991, "", 8)
dst = cv2.imdecode(data, -1)
cv2.imshow("window", dst)
cv2.waitKey(0)

データ範囲の指定がないSPNGから全ての画像を読む方法は以下の通り。最初の8バイトは画像のデータサイズ(unsigned long long = uint64_t)を意味する。

import os
import numpy as np
import cv2
import matplotlib.pyplot as plt
import struct

filename = "ImageFilterWithStream_GPU_0_00000000_0_024_bin.spng"
size = os.path.getsize(filename)
f = open(filename, "rb")
while True:
    if f.tell() == size:break
    n_bytes = struct.unpack('Q', f.read(8))[0]
    data = np.fromfile(f, np.uint8, n_bytes, "", 0)
    dst = cv2.imdecode(data, -1)
    plt.imshow(dst)
    plt.show()

サンプルデータ

https://1drv.ms/u/s!Ap9xAxIuzM0xvIwQ3C62NhsqgRoDfA

画像データのリスト images がある状態で、SPNGファイルとして出力する方法

import numpy as np
import cv2
import struct
filename = "test.spng"

f = open(filename, "wb")
for frame in images:
    ret, encoded = cv2.imencode(".png",frame)
    f.write(struct.pack("Q", len(encoded)))
    encoded.tofile(f)