揮発性のメモ2

知識をメモ書きしておく

UltraVNCで、自動的に接続する

コマンドラインで接続先ホストとパスワードを設定して、自動でログインできるようにする

UltraVNCの起動ショートカットをコピーして、リンク先のところに起動オプションを設定する

"C:\Program Files\uvnc bvba\UltraVNC\vncviewer.exe" 192.168.0.7 -password unkounko

IPアドレス -password パスワード

uvnc.com


Windowsで、マイクの音量調整

Windowsでマイクの音量調整は「マイク」ではなく「サウンド」でおこなう


「設定」を起動し、システム から サウンドを開く
「設定のサウンド」の下の方の 関連設定 から サウンドコントロールパネル を開く

「コントロールパネルのサウンド」の「録音」を選択し、マイクのプロパティを開く

「マイクのプロパティ」 の「レベル」を選択すると、マイクのゲインを変更できる。

上のスライダーで音量を調節できる。 足りないときは マイクブースト で大きく変更できる
適用ボタンを押さずに即時適用されるので、別途「ボイスレコーダー」などを起動しておいて 音量を確かめながらの調整が可能


なにかここまで一気に飛べるショートカット機能か、マイク・スピーカー・カメラの設定を一手にできる設定ソフトがほしい。

エクセルで、ダークモードになってしまったのを直す

Excelが勝手にダークモードになってしまったので、システム設定に戻す

ファイル ⇒ その他 ⇒ オプション でオプション画面を開き、
全般 ⇒ Microsoft のユーザー設定 にて Officeテーマ に「システム設定を使用する」を選択。

ここが何かの拍子に空欄になってしまうとダークモード(黒)扱いになるらしい

clock_gettimeで指定するクロックの分解能を表示する

時刻をミリ秒まで欲しいんだけど、CLOCK_REALTIME_COARSE って精度十分だっけかなぁ
というのを調べる話


clock_getres() で、どれだけ細かく時間が測定できるかがわかる

#include <time.h>
#include <stdio.h>

int main() {
    struct timespec ts;

    clock_getres(CLOCK_MONOTONIC_COARSE , &ts);
    printf("CLOCK_MONOTONIC_COARSE : %ld.%09ld seconds\n", ts.tv_sec, ts.tv_nsec);

    clock_getres(CLOCK_MONOTONIC, &ts);
    printf("CLOCK_MONOTONIC        : %ld.%09ld seconds\n", ts.tv_sec, ts.tv_nsec);

    clock_getres(CLOCK_REALTIME_COARSE , &ts);
    printf("CLOCK_REALTIME_COARSE  : %ld.%09ld seconds\n", ts.tv_sec, ts.tv_nsec);

    clock_getres(CLOCK_REALTIME, &ts);
    printf("CLOCK_REALTIME         : %ld.%09ld seconds\n", ts.tv_sec, ts.tv_nsec);

  return 0;
}

man clock_gettime (2): クロックと時間の関数



実行例1:そのへんのパソコン

$ /tmp/a.out
CLOCK_MONOTONIC_COARSE : 0.004000000 seconds
CLOCK_MONOTONIC        : 0.000000001 seconds
CLOCK_REALTIME_COARSE  : 0.004000000 seconds
CLOCK_REALTIME         : 0.000000001 seconds

実行例2:そのへんのARMボード

$ /tmp/a.out
CLOCK_MONOTONIC_COARSE : 0.010000000 seconds
CLOCK_MONOTONIC        : 0.000000001 seconds
CLOCK_REALTIME_COARSE  : 0.010000000 seconds
CLOCK_REALTIME         : 0.000000001 seconds

というわけで CLOCK_REALTIME_COARSE ではミリ秒を得られなかったので、仕方ないので CLOCK_REALTIME を使う。


hexdumpの代わり2

Linuxでバイナリファイルをダンプするツール

od

パッケージ coreutils に入ってるツール
man od (1): ファイルを 8 進数やその他の形式でダンプする

オプション 意味 備考
-Ax -A でオフセット(左端のやつ)の表示を指定
x ←16進表記
未指定時は8進表記
-tx1z -t でフォーマットを指定
x1 ←16進で1バイトずつ
x4 ←16進で4バイトずつ
z ←テキスト表示
トルエンディアン
-v 重複行を省略しない デフォルトは省略する

od 1バイトごとに表示、省略なし

$ od -Ax -tx1z -v /tmp/test.bin
000000 78 56 34 12 01 02 03 04 30 31 32 33 34 35 36 37  >xV4.....01234567<
000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
000040 e3 81 82 00 82 a0 82 a2                          >........<
000048

od 4バイトごとに表示、省略あり

$ od -Ax -tx4z /tmp/test.bin
000000 12345678 04030201 33323130 37363534  >xV4.....01234567<
000010 00000000 00000000 00000000 00000000  >................<
*
000040 008281e3 a282a082                    >........<
000048

xxd

パッケージ xxd に入ってるツール
man xxd (1): 16 進ダンプを作成したり、元に戻したり。

オプション 意味 備考
-g1 -g 16進で表示するバイト数を指定
1 ←1バイトずつ
4 ←4バイトずつ
-e トルエンディアンで表示 デフォルトはビッグエンディアン
-a 重複行を省略する デフォルトは省略しない

xxd 1バイトごとに表示、省略なし

$ xxd -g1 /tmp/test.bin
00000000: 78 56 34 12 01 02 03 04 30 31 32 33 34 35 36 37  xV4.....01234567
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000040: e3 81 82 00 82 a0 82 a2                          ........

xxd 4バイトごとに表示、省略あり

$ xxd -eg4 -a /tmp/test.bin
00000000: 12345678 04030201 33323130 37363534  xV4.....01234567
00000010: 00000000 00000000 00000000 00000000  ................
*
00000040: 008281e3 a282a082                    ........

hexdump

パッケージ bsdextrautils に入っているツール
man hexdump (1): ASCII, 10 進, 16 進, 8 進でダンプする

オプション 意味 備考
-C 1バイトずつ表示するよう指定
-v 重複行を省略しない デフォルトは省略する

hexdump 1バイトごとに表示、省略なし

$ hexdump -Cv /tmp/test.bin
00000000  78 56 34 12 01 02 03 04  30 31 32 33 34 35 36 37  |xV4.....01234567|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  e3 81 82 00 82 a0 82 a2                           |........|
00000048

hexdump 4バイトごとに表示、省略あり

出力フォーマットを自分で作ればできるけど、すっげー大変なので省略



EUCに無い文字2

①②③、㌔㍉、㎞㎜ などは EUCJPに無い文字が EUCJP-MS, EUCJP-WIN にはある。
これらの文字を含んだテキストは iconv で変換可能

元テキスト

EUCJP⇒UTF8変換
iconv -c -f EUCJP -t utf8 /tmp/kishu.txt

EUCJP-WIN⇒UTF8変換
iconv -c -f EUCJP-WIN -t utf8 /tmp/kishu.txt

CP51932⇒UTF8変換

髙(はしご高)、﨑(たつ崎) などはEUCJP-WINには無いが CP51932 にはあるらしい。
iconvは CP51932 に未対応なので、PHPを使ってみる

#!/usr/bin/php -q
<?php

$euc = file_get_contents($argv[1]);
$utf8 = mb_convert_encoding($euc, "UTF-8", "CP51932");
print($utf8);

やったぜ

mysqldumpでエラーになる問題2

/tmp/hogeディレクトリに出力しようとしてエラーとなる

$ mkdir -p -m777 /tmp/hoge

$ mysqldump -uhoge -ppiyo fuga --tab=/tmp/hoge
mysqldump: Got error: 1: "Can't create/write to file '/tmp/hoge/SEQUENCE.txt' (Errcode: 2 "No such file or directory")" when executing 'SELECT INTO OUTFILE'

mysqldumpでエラーになる問題 - 揮発性のメモ2
昔は原因がわからなかったが、ようやく理解できた。



systemd には PrivateTmp とかいう機能があり、/tmpディレクトリなどをサービスごとに隠蔽することができる。
/tmp/systemd-private-xxxxxxxx-mariadb.service-xxxxxx
みたいな長い名前のディレクトリがあって、その中にそのサービスの仮ファイルとかが置かれる。

この場合、/tmp/hoge を作ったものの MariaDB から見える /tmp には当然そのディレクトリは無いので エラーとなった。


よって、/tmp以外の適当な場所( /work とか)を指定すれば良い