夏場になると不安なのが温度
夏場になると、SSDの温度で不安になるので、温度を調べることにしました
smartctl で見れます
takuya@:~$ sudo smartctl -a /dev/nvme0n1 | grep Temper Temperature: 43 Celsius
まだ43だった。なんとかなりそう。
夏場になると、SSDの温度で不安になるので、温度を調べることにしました
takuya@:~$ sudo smartctl -a /dev/nvme0n1 | grep Temper Temperature: 43 Celsius
まだ43だった。なんとかなりそう。
USBハブにあれこれ増設しています。作業用にノートPCとThinkCentre Tinyを使っているので、モニタ裏にPCを設置しているのでUSBのアクセス性が著しく悪いです。
USBハブを用いて使いやすい場所に引き出していますが、それも頻繁に使うわけでもないので、出っ放しだと邪魔になります。
マグネットにして貼り付けてしまえば良いわけです。磁力により磁界が発生しデータが云々と思うかもしれませんが、その程度のノイズに左右されないために、0/1の2進数でビット転送をしているわけですし、省電力なので磁界など気にしても仕方がない。
ダイソーやセリアで購入できます。
量は適当です。ボンドのチューブ先を軽くつけるだけで大丈夫ですね。私の写真のは付けすぎですね。
裏返しににしてその辺にくっつかないレベルまで乾燥させました。
ExcelでCtrl-Sで保存するときが大変手間である。
初心者向けにしてるんだろうが、初心者を甘やかすゆえに、初心者にわかりにくいし、他のWindowsソフトウェアと大きく操作方法が異なることになり不便であろう。
これは実質は広告である。
OneDriveは便利では有るが、作業中には邪魔でしか無い。 ファイルを送りたいなら同期機能を使えばいい。OneDrive内部のExceを編集するには、直接Chromeでひらけばいい。これは実質は広告である。削除しよう。どうしてもOneDriveに保存するなら保存ダイアログでOneDriveを選べばいいだけである、
保存先は、通常の保存ダイアログで選ぶほうがキーボード操作もしやすく、矢印キーやALT+矢印キーで移動しやすい。
せっかく設定しても、WEB側の設定が優先されては元も子もない。オフにしておく
人によっては、Excelなどで従来どおりWindows共通の保存ダイアログが出てこないものだと勘違いしてる人がいらっしゃるが、ちゃんとあります。
Ctrl-Sを押したとき「名前をつけて保存」(Windows共通の保存メニュー)が出てくるようにする。
以下の設定をすると、Ctrl-Sでファイル保存ダイアログになります。 エクセルの操作性はかなり改善される。無駄がなくなる。
上記の設定をしてない場合に「保存ダイアログ」を呼び出したいとき、Excelではとても奥の方に配置っされている。
「保存→名前をつけて保存→PC→その他のオプション」と4ステップで保存する。とてもめんどくさい
さきほどの設定をONにすれば Ctr-S でいつでも通常の保存ダイアログになります。
マイクロソフトは初心者を甘やかす。初心者を迷わないよう、いろいろな選択肢とその画面を目のつかないところに押し殺す。これは機会損失です。機会提供の視点から見て、これは初心者に優しくない。初心者にたくさんのオプションがあることを知らせ、自分が何を選んでいるのかも知らせてほしい。知らないまま使うというのも考えものでしょう。こういうことをやり、初心者を甘やかし、初心者を初心者のママで生活できるようにしてしまう。マイクロソフトは初心者をすぐ甘やかす。この結果が各種のマルウェア氾濫となり現れている。初心者を初心者のまま囲い込むからemotetのような初心者を釣るマルウェアに引っかかってしまうのだ。
クラウド・ストレージを利用させて良いのか、させないのか。これはPCの管理者(企業・個人)が各人の意思で決めることである。マイクロソフトが押し付けて良いものではない。保存先をOneDriveにしてそれ以外は見えないような選択肢にするのは流石に横暴ではないか。セキュリティ・ポリシーは各々が真剣に考えるべきでしょう。
企業ではGoogle Workspaceだったり他のクラウドストレージに使っていることも有るでしょう、押し売りによりユーザー周知の手間が増えます。マイクロソフトの行為は優越的地位の濫用に相当と判断しても過言ではないと思います。
このような初心を囲い込む押し付けには断固反対するべきです。
企業でPCを管理する立場にある人は、全体ポリシーでEXCELの共通設定として、通常のWindowsの保存ダイアログが出るように、設定流し込んでおきましょう。
OS提供企業が自社のソフトウェアを優先表示し、デフォルト動作に見せる広告行為は法規制も検討すべき段階にあると思います。
類似の広告行為としては、iOSのiCloud photo や WindowsのOneDriveやOneNoteレコメンドや、AndroidのGoogle Map、iOSのSafari Keychainなどが挙げられます。とくにiOSの Keychains/iCloud photoは他OSや他アプリからアクセスが不可能で囲い込みです。注意しましょう。
img2pdf は添付ファイルとして画像を処理してくれるみたいで、ファイルが変更されない。
imagemagick の conver でPDFを作ると。
convert 000.jpg magick.pdf pdfimages -j magick.pdf m
取り出した画像は少し変化している。
takuya@sample$ md5sum m-000.jpg 000.jpg cb183e325b265d0cd985ae6bcf8a7f45 m-000.jpg eeb3981fd491ad2dde29416db2144727 000.jpg
EXIFだけかと思ったら、画像全体を再エンコしてるっぽいので、オリジナルを含めたいときは不適切。
pip でインストールする img2pdf コマンドを使った場合
img2pdf 000.jpg i2p.pdf pdfimages -j i2p.pdf i2p
ファイルが入れた通りに取り出せる。
takuya@sample$ md5sum 000.jpg i2p-000.jpg m-000.jpg eeb3981fd491ad2dde29416db2144727 000.jpg eeb3981fd491ad2dde29416db2144727 i2p-000.jpg cb183e325b265d0cd985ae6bcf8a7f45 m-000.jpg
理由を詳しく考えるとめっちゃめんどくさいんで考えるのをやめた。 たぶん添付ファイルとして添付するときに、画像の色プロファイルをPDF標準に合わせて変換してるんだと思う。
次の方法で強引に解決した。
export C_INCLUDE_PATH=\ /Applications/Xcode.app\ /Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs\ /MacOSX.sdk/usr/include/libxml2:$C_INCLUDE_PATH pipenv run pip install lxml
理由は、あれだ。macOSのバージョンがうまく解決できないので、pyenv で作ったpythonが古い。
libxml とかコアなので、エラーになるとすごく焦る
とりあえず、インストールしちゃえば libxml 依存するパッケージ。例えばimg2pdf など
pipenv run img2pdf -h
などとちゃんと動く
7z コマンドが最強だと思ってました。 7z はアップデートも頻繁にされているし、利用者も多い枯れているツールだと思いこんでました。
tar.gz を展開するときは次のようになりますよね。
cat sample.tgz |gunzip | 7z -si -ttar l cat sample.tgz |gunzip | 7z -si -ttar x 001.jpg -so > out.jpg
同じように 7z / zip が扱えるかというと。
## zip / 7z cat sample.zip | 7z -si -tzip cat sample.7z| 7z -si -t7z
エラーになる。
ERROR: : opening : E_NOTIMPL : Not implemented
7z -si l < sample.7z 7z -si l < sample.zip
tar 以外では、STDINが使えません。まじかよって感じです。だったら -t tar
の形式指定オプションはなんのためにあるんだよって感じ。
公式マニュアルを読んでみると、STDINで想定してるのはtar だけっぽいぞ。
7z コマンドって微妙に使いにくいですね。
mac で特定の形式を7z すると、めっちゃめんどくさくなるよ。
takuya@mac$ /usr/local/Cellar/p7zip/17.04/bin/7z x 'sample.rar' -so '001.jpg' ERROR: Unsupported Method : 001.jpg
問題は2つ
文字コードの指定が全くうまく動かない。cp932 の指定どころか、LANG指定がうまく動かず、全部UTF16で取り出されちゃう
再現方法 ( brew 版 7z と rar など)
brew install p7zip /usr/local/Cellar/p7zip/17.04/bin/7z x 'sample.rar'
起こりうるエラー
ERROR: Unsupported Method : 001.txt
https://www.7-zip.org/download.html から 7zz のmac対応版を持ってくる。
他にもいろいろと、7z で問題が出るので、できる限り、homebrew の p7zip は避けたほうが無難っぽい
STDOUT/STDINを駆使してパイプする
7z -so x a.tgz | 7z l -aoa -ttar -si
tgz は tar.gz の名前通り、ネスト扱いです。
$ 7z -ba -r l a.tgz 2022-06-17 17:32:20 ..... 276480 259342 a.tar
なので、コマンドをパイプします。
7z -so x a.tgz | 7z l -ba -aoa -ttar -si 2021-03-02 00:30:30 ..... 266367 266752 aaaaaaaa.jpg 2021-08-23 08:38:44 ..... 54 512 md5sum.txt
パイプするときに、-ttar
でtar ファイルを明示しないといけない。めんどくさいですね。
一覧が見れたら、取り出します。
7z -so x a.tgz | 7z x -oOUTPUT_DIR -aoa -ttar -si
ちょっと冗長ですよね。
SplFileInfo / SplFileObject / SplTempFileObject で php://memory php://stream を使うとエラーになる。
<?php $sf= new \SplTempFileObject(); $sf->fwrite($ret); $sf->getSize(); // =>Error
fstat は動くのでそっちを使う。
<?php $sf= new \SplTempFileObject(); $sf->fwrite($ret); $sf->fstat()['size']; // => ok
こんなの気づかないよねぇ。
https://github.com/php/php-src/pull/4186
パット見だとClosedになっているので、そのうち使えるようになると思う。
写真の整理はexiftoolが確実です。
WindowsだとVectorや窓の杜にソフトウェアが紹介されていますが、あれはうまく動きません。
カメラで仕分けたり、日付で仕分けたりできる
写真を年月のフォルダに仕分ける。
exiftool '-Directory < DatetimeOriginal' -d '%Y/%m' *.jpg
sudo apt install exiftool
exiftool のアンインストール(ubuntu)
## ubuntu の場合のアンインストール sudo apt purge libimage-exiftool-perl
このように散らばったファイルがあるとき
takuya@:sample$ ls 2022 IMG_6824.JPG IMG_6827.JPG IMG_6831.WEBP IMG_6839.MOV IMG_6844.PNG IMG_6821.MOV IMG_6825.JPG IMG_6828.JPG IMG_6833.JPG IMG_6841.PNG IMG_6856.PNG IMG_6823.JPG IMG_6826.JPG IMG_6830.WEBP IMG_6834.JPG IMG_6842.PNG IMG_6857.PNG
コマンドを実行すると
exiftool '-Directory < DatetimeOriginal' -d '%Y/%m' *.jpg
次のように、YYYY/MMのフォルダに仕分けられる。
takuya@:sample$ find . ./IMG_6856.PNG ./IMG_6823.JPG ./IMG_6825.JPG ./IMG_6830.WEBP ./2022 ./2022/06 ./2022/06/IMG_6859.jpg ./2022/06/IMG_6858.jpg ./2022/06/IMG_6838.jpg ./2022/06/IMG_6848.jpg ./2022/06/IMG_6854.jpg ./2022/06/IMG_6845.jpg ./2022/06/IMG_6843.jpg ./2022/06/IMG_6820.jpg
DatetimeOriginal がないJPGファイルは、iPhone・スマートフォンの場合、スクショだったりWEBから保存したものだったり、アプリで編集(モザイク加工)したもの、誰かから送られた写真を保存したもの(LINEやFBなどSNS系はプライバシーのためExif削除される)だったりするので、DatetimeOriginalがあるものが自分の写真だとはっきりわかるので便利だったりする。
たとえば、ExifのModelには、カメラの名前が入ってるので、そっれを使って仕分けたり
exiftool '-Directory < Model' *.jpg
exif のタグなら仕分けに使えるので便利ですね。
GPSでいい感じに絞れたらいいんだろうけど、調べたけど厳しそうだった。
その他、exiftool に関する記事です。参考にしてください
https://takuya-1st.hatenablog.jp/search?q=exiftool
写真ファイルをバックアップしたら、ファイルの更新日時が撮影日にならない。
ファイルシステム上のタイムスタンプも撮影日にしておくと、エクスプローラーやFinderで見るときにべんりなので、写真のファイル更新日時を撮影日合わせたい時がある。
exiftool '-FileModifyDate<DatetimeOriginal' IMG_6862.jpg
ワイルドカードを使えば、対象ファイルをまとめて更新できる
exiftool '-FileModifyDate<DatetimeOriginal' *.jpg
exiftool でファイルを更新すると、_original
のバックアップファイルが作られることがある。
ファイルをスクリプトで処理していると バックアップファイルも書き換えにいき、バックアップのバックアップ( IMG_6862.jpg
の IMG_6862.jpg_original
の IMG_6862.jpg_original_original
) が作成されてしまうので、自動化処理には注意が必要だ。
バックアップを自動で削除するより、ちゃんと手作業でコマンドを打ち込みファイルの修正前後をしっかり確認したほうが無難だと思う。
_original ファイルを元に戻す には rename
が便利。
rename 's/_original//' *
日時の確認は、次のようになる。
exiftool -s -filemodifydate -datetimeoriginal IMG_6862.jpg
まとめてやるときは、-T
をつけると楽
exiftool -T -s -filemodifydate -datetimeoriginal *.jpg
その他、exiftool に関する記事です。参考にしてください
https://takuya-1st.hatenablog.jp/search?q=exiftool
exif に設定された写真の日時・タイムスタンプを確認する。
exiftool -time:all -s IMG_6862.jpg
次のような出力が得られる。
takuya@mac:~ $ exiftool -time:all -s IMG_6862.jpg FileModifyDate : 2022:06:07 22:59:13+09:00 FileAccessDate : 2022:06:16 00:47:35+09:00 FileInodeChangeDate : 2022:06:13 20:02:41+09:00 ModifyDate : 2022:06:07 22:58:57 DateTimeOriginal : 2022:06:07 22:58:57 CreateDate : 2022:06:07 22:58:57 OffsetTime : +09:00 OffsetTimeOriginal : +09:00 OffsetTimeDigitized : +09:00 SubSecTimeOriginal : 301 SubSecTimeDigitized : 301 ProfileDateTime : 2017:07:07 13:22:32 SubSecCreateDate : 2022:06:07 22:58:57.301+09:00 SubSecDateTimeOriginal : 2022:06:07 22:58:57.301+09:00 SubSecModifyDate : 2022:06:07 22:58:57+09:00
ただし、FileModifyDate・FileInodeChangeDate・FileAccessDateについてはファイルシステムから取得した値で、写真ファイルに埋め込まれた値ではない。
-s
空白を入れるとコマンドから再利用しにくいので -s
を使って、出力をCamelCaseにしている。
-s
なしでは、次のような出力になった
exiftool -time:all IMG_6862.jpg
名前に空白が含まれる。
File Modification Date/Time : 2022:06:07 22:59:13+09:00 File Access Date/Time : 2022:06:16 00:47:35+09:00 File Inode Change Date/Time : 2022:06:13 20:02:41+09:00 Modify Date : 2022:06:07 22:58:57 Date/Time Original : 2022:06:07 22:58:57 Create Date : 2022:06:07 22:58:57 Offset Time : +09:00 Offset Time Original : +09:00 Offset Time Digitized : +09:00 Sub Sec Time Original : 301 Sub Sec Time Digitized : 301 Profile Date Time : 2017:07:07 13:22:32 Create Date : 2022:06:07 22:58:57.301+09:00 Date/Time Original : 2022:06:07 22:58:57.301+09:00 Modify Date : 2022:06:07 22:58:57+09:00
Exifはタグで書き込まれているだけなので、同じキーに複数回の値を設定することができる。編集ソフトを使って冗長に何度も書き込まれている場合もあるので、それを確認する。
exiftool -a -s -time:all IMG_6862.jpg
上記のコマンドだと、DatetimeOriginalやCreateDateが何回も出力されることがある。EXIF編集を追記追記で適当にやった場合にそのようなミスがわかるので便利。
特に写真の日付は撮影者から人手を経るたびに何らかの編集ソフトでうっかり同じKEY-VAULEを書き加えてしまうことがあるので、日付がおかしいなと思ったら -a
でチェックするのも手だ。
撮影日だけ見たいとき
exiftool -datetimeoriginal -s *.jpg
作成日だけ見たいとき
exiftool -creatdate -s *.jpg
ファイルシステム上の更新日を見たいとき
exiftool -FileModifyDate -s *.jpg
複数個書いて、見たいものだけ指定するのもありだ
exiftool -FileModifyDate -DatetimeOriginal -s *.jpg
mov ファイルはQuicktimeなので、createDateでなくCreationDateで入ってることがある。
exiftool -CreationTime -s *.jpg
exiftoolでファイル名とカラム表示したい
ls -alt 的な感じでexiftools で写真のEXIFデータを見たい
-T
でカラム表示exiftool -T
にすると、カラム(タブ区切り)で表示できる
exiftool -filename
でファイル名を表示できる
DateTimeOriginal がシャッターを押した日付になる。
exiftool -DatetimeOriginal
すべてまとめて、次のようにコマンドを作ることができる。
takuya@mac:~/Photos/2022/06$ exiftool -T -filename -datetimeoriginal *.jpg IMG_6820.jpg 2022:06:01 01:22:12 IMG_6829.jpg 2022:06:01 19:55:41 IMG_6832.jpg 2022:06:02 14:44:53 IMG_6836.jpg 2022:06:03 14:32:40 IMG_6837.jpg 2022:06:04 15:48:09 IMG_6838.jpg 2022:06:04 15:48:11 IMG_6840.jpg 2022:06:04 23:12:00
カラム(縦方法)に1行に表示しない場合は、複数行に記載されてしまい、コマンドから非常に扱いにくい。
takuya@mac:~/Photos/2022/06$ exiftool -s -filename -datetimeoriginal IMG_6838.jpg ======== IMG_6860.jpg FileName : IMG_6860.jpg DateTimeOriginal : 2022:06:07 22:58:26 ======== IMG_6861.jpg FileName : IMG_6861.jpg DateTimeOriginal : 2022:06:07 22:58:40 ======== IMG_6862.jpg FileName : IMG_6862.jpg DateTimeOriginal : 2022:06:07 22:58:57 22 image files read
exiftool -T -Filename -DatetimeOriginal -CreateDate -FileModifyDate -file *.jpg
このコマンドは大文字小文字を区別しないようですね。
exiftool -T -filename -datetimeOriginal -createDate -filemodifydate -file *.jpg
このコマンドを使って、ファイル更新日と撮影日がずれているファイルを見つけたり、撮影日が未設定のファイルを探す事ができる。便利
xargs のマルチプロセス機能を組み合わせて、限界までCPUを使って演算を高速化する。
ls *.jpg | xargs -P10 -I@ exiftool -T -filename -datetimeoriginal @
写真フォルダには数千枚のファイルがあるので、xargs と組み合わせるとすこし速いかもしれない。
ただし、プロセス生成のオーバーヘッドがあるのでexiftool に複数ファイルを引数に渡すのと比べて、遅くなる場合も多い。
sudo apt install libimage-exiftool-perl
知らない間に、サーバーにDockerのキャッシュを溜めすぎて、残容量が底をついた。
気づかずに発生した
journld は閾値をもっていて、一定量以上のログを書き込みしないはずだが、容量不足なってエラーになり、エラーログを書き込もうとしてまたエラー、そのエラーを書き込もうとして更にエラーになった
自動設定ではjournald は無限ループになってしまうことがわかったので。
/etc/systemd/journald.conf
に設定を明示することにした。
[Journal] SyncIntervalSec=10m RuntimeMaxUse=5G RuntimeKeepFree=10G
こちら(https://isleofhoso.com/journald-conf/)を参考にいくつか設定を書いた。
sudo systemctl restart systemd-journald
sudo docker image prune -a sudo docker volume prune -a sudo docker container prune
image がいい感じに消えてくれないので 明示的に消した。
docker 怖いよ。。。
また、エラーになった。SSDがぶっ壊れか、XFSがエラーになったかどちらかだと思う。
XFSをリペアして様子見する。
The server requested authentication method unknown to the client
エラーの原因は mysql の認証方式の変更に対応できないエラー
いままで、mysql は mysql_native_password
だったが、mysql8 あたりで caching_sha2_password
になっている
候補は次の通り、
mysql 8 の caching_sha2_password を殺し、mysql_native_password を使う。
または、
mysql_native_password 時代に対応した mysql 5.x 系を使う。
ubuntu / debian で mysql を併存させるのは苦労でしかないので docker を使う
docker run -d --rm \ --name mysql-5 \ -p 3304:3306 \ -v /data/mysql5-server/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=**PASS** \ mysql:5
あえて古いUbuntuやDebianを用意してもいいけど、基本的に非推奨だし、Dockerに閉じ込めればいいわけですから、これでいいでしょう
これは、ちょっと茨の道。いくつかのポイントを抑える必要がある。
ユーザーの現在の認証方式を確認する。
以下のユーザの通り、mysql_native_password
にしていると、mysql_native_passwordを使って認証することになる。
mysql > select User, Plugin from mysql.user; mysql root@(none):(none)> select User, Plugin from mysql.user; +---------------------------------+-----------------------+ | User | Plugin | +---------------------------------+-----------------------+ | connect_test | mysql_native_password | | takuya | caching_sha2_password | | mysql.infoschema | caching_sha2_password | +---------------------------------+-----------------------+
my.cnf で設定を変更する
[mysqld] default_authentication_plugin=mysql_native_password
systemctl restart mysql
デフォルト値を変更すると、mysql_native_passwordが優先される。
接続時に mysql_native_password がクライアントに通知される。
caching_sha2_password は使えるけど、トラブルが多い。mysql_native_passwordが先に通ってしまうので。クライアントはmysql_native_passwordを送ってくる。
なので、mysql_native_password と caching_sha2_passwordを混ぜた運用はしないほうがいい。
また caching_sha2_password に未対応のphp といえば、php5.6 や php7.0 なので、そのような古いPHPでしか動かないコードを最新版のMySQLで動かそうとするほうが無茶なので、素直にphpのソースコードをアップデートしてパッチを當てるか、古いものは古いものと合わせてDocker環境に閉じ込めて動かしたほうが素直だと思います。