LinuxでCPUコア数を確認する
マルチスレッド化するときに, PCの最大スペックまで出したいので,CPUコア数を知りたかった.
今回はUbuntu環境で動作を確認しました.
物理CPU の個数
まずはCPUの物理的な個数を確認します.
$ grep physical.id /proc/cpuinfo | sort -u | wc -l 2
僕の場合は2つですが,多分,普通は1個だと思います.
CPUごとのコア数
次に各CPUが何コア持っているかを確認します.
$ grep cpu.cores /proc/cpuinfo | sort -u cpu cores : 20
僕の環境は,intel xeonを使っているので,こんなものです.
論理プロセッサーの数
コンピュータから見たときに,存在するように見えるCPUのコア数です.
ハイパースレッド処理が有効になっている場合,
物理的なCPUのコア数よりも,多く表示される場合があります.
$ grep processor /proc/cpuinfo | wc -l 40
僕の環境では,物理的なコア数(2 * 20=40)と同じ数になりました.
「Fランクの暴君」を読んだ
「天鏡のアルデラミン」が完結してしまったので, また頭脳戦系のラノベが読みたくなり探し出したのがコレ
- 作者: 御影瑛路
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2015/01/24
- メディア: Kindle版
- この商品を含むブログを見る
ダークヒーロー系の学園内頭脳戦で面白かった.
帝王学を引用しながら,無慈悲な主人公がガンガン頭脳戦を仕掛けるのが読んでて爽快感があります.
手段を選ばない感じの主人公なので,僕はすごい楽しめました.
個人的には,2巻での戦いが主人公無双していて,かつ作戦自体もよく考えられていて,非常に面白かったです.
本当に面白い作品なのですが,一点残念なことがあります.
それは,2巻で打ち切りになっていることです.
どう見ても,2巻で続きのある終わり方をしているのですが,
諸事情により打ち切りになっているらしいです.
Pythonで環境変数を参照する
最近はどっぷりとPythonに浸かっているので,
別々のコンピュータで,互換性の高いプログラムを書きたいことが多いです.
その時に,環境変数が参照できると便利なので,
N番線時になりますが,メモっておきます.
結論から言うと,os.environ.get(varname[, value])
でできます.
僕のuse caseで言うと,こんな感じで使いました.
openAIのbaselinesと言うライブラリを浸かっていましたが,
ログのフォーマットを確認したい時に使いました.
os.environ.get('OPENAI_LOG_FORMAT', 'tensorboard')
OPENAI_LOG_FORMAT
が,参照する環境変数名になります.
後ろにくっついているtensorboard
は,OPENAI_LOG_FORMAT
が存在しない場合に,セットする値になります.
返り値はOPENAI_LOG_FORMAT
の値になります.
コレをもう少し書き加えると,こんな感じで,loggerの設定をすることができます.
# logger if args.tensorboard: # for tensorboard # logのformatを確認 if os.environ.get('OPENAI_LOG_FORMAT', 'tensorboard') != 'tensorboard': logger.warn( "Overwriting OPENAI_LOG_FORMAT to 'tensorboard', which was '{}'".format(os.environ['OPENAI_LOG_FORMAT'])) os.environ['OPENAI_LOG_FORMAT'] = 'tensorboard' # logを保存するpathを確認 if os.environ.get('OPENAI_LOGDIR', args.tensorboard) != args.tensorboard: logger.warn( "Overwriting OPENAI_LOGDIR to '{}', which was '{}'".format(args.tensorboard, os.environ['OPENAI_LOGDIR'])) os.environ['OPENAI_LOGDIR'] = args.tensorboard # launch tensorboard logger.warn('Launching Tensorboard...') tensorboard_pid = Popen(['tensorboard', '--logdir', args.tensorboard]).pid def kill_tb(): os.kill(tensorboard_pid, signal.SIGTERM) atexit.register(kill_tb) logger.configure(format_strs=['tensorboard', 'log'])
RaspberryPi同士でbluetooth通信した
タイトルどおり,ラズパイ同士で情報のやりとりをしたく, bluetooth通信を行いました.
基本的には,以下の記事通りにやれば動きます.
いくつか引っかかる点があったので,メモっておきます.
sudoで実行しよう
bluetoothctl
を動かすとき,sudoで実行しないとペアリングなどのコマンドを受け付けてくれなかったです.
$ sudo bluetoothctl [bluetooth]#
Failed to pair: org.bluez.Error.AuthenticationFailed
hciconfig
を使って,ペアリングの実験をおこなう際に以下のようなエラーが発生しました.
(server)$ sudo bluetoothctl [bluetooth]# discoverable on Changing discoverable on succeeded [CHG] Controller SERVER_ADDR Discoverable: yes
(client)$ sudo bluetoothctl [bluetooth]# pair SERVER_ADDR Attempting to pair with SERVER_ADDR Failed to pair: org.bluez.Error.AuthenticationFailed
解決策は以下のサイトで見つけました.
結局,client側のbluetoothデバイスはoffになっていただけでした.
僕の環境では以下のようにしたら動くようになりました.
(client)$ sudo bluetoothctl [bluetooth]# power on Changing power on succeeded [CHG] Controller CLIENT_ADDR Powered: yes [bluetooth]# pair SERVER_ADDR Attempting to pair with SERVER_ADDR [CHG] Device SERVER_ADDR Connected: yes [CHG] Device SERVER_ADDR Paired: yes Pairing successful
Bluetoothの自動起動設定
「電源切れてました٩( ᐛ )و」なんて,アホっぽい間違いを犯さないように, 自動で電源が入るように設定しておきます.
/etc/bluetooth/main.conf
に以下を追記.
[Policy] AutoEnable=true
/etc/systemd/system/bluetooth.service.d/policy.conf
に以下を追記.
[Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd --plugin=policy
VSCodeで複数サーバーに対して,ファイルをアップロードする
サーバーを使ったプログラムを書くときは, ローカルでファイル編集して,ある程度になったらサーバー(リモート)側にファイルをアップロードするみたいなときがあると思います.
ここで,アップロード先のサーバーが複数台ある場合には, イチイチSFTPの接続先の設定を変えるのは面倒です.
そのときの,VSCodeでの設定に少し手間取ったので,メモしておきます.
結論から言うと
Deployパッケージを使いましょう
僕は普段はSFTPパッケージを利用していたのですが, 以下のリンクにもあるように,複数サーバーにはまだ対応していないらしいです.
僕は以下のように.vscode/setting.json
に設定を追記しました.
伏せ字はいい感じに設定してください.
{ "deploy": { "packages": [ { "name": "HOGE", "deployOnSave": true, "files": [ "**/*.sh", "**/*.py" ], "targets": [ "remote1", "remote2" ] } ], "targets": [ { "name": "remote1", "type": "sftp", "description": "A SFTP folder", "dir": "/workspace", "host": "ip address", "user": "*****", "password": "********" }, { "name": "remote2", "type": "sftp", "description": "A SFTP folder", "dir": "/workspace", "host": "ip address", "user": "*****", "password": "********" } ] } }
targets
にhostを追加することで,アップロード先を増やすことが出来ます.
ラズパイの「* failed to open vchiq instance」エラーを解決
ラズパイでカメラを使おうとしていたときに,以下のようなエラーが発生した.
$ raspistill -o image.png * failed to open vchiq instance
調べてみると,色々解決策が出るけど,以下のstackoverflowの解決法で解決した.
権限を変えるだけのシンプルな解決策.
$ sudo chmod 777 /dev/vchiq
セキュリティ的には問題あるけど, 一瞬だけ動かすだけなので,ひとまずこれで良しとしました.
【Python】一行で値を確認する
コマンドライン引数の値を確認したいなっと思っていて, assertが思い出せなかったのでメモする.
assert
文の使い方は,以下の通り
assert [条件式], [Falseの場合に出力するメッセージ]
今回はこんな感じで,コマンドラインの引数確認に使いました.
assert args.mode is 'sim' or args.mode is 'real', 'ERROR'
ま〜よく考えると,argparse
モジュールのchoices
オプションをつけたほうがスマートですが
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--mode', type=str, choices=['sim', 'real'], required=True, help='select mode, [sim] or [real]')