揮発性のメモ2

http://d.hatena.ne.jp/iww/

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 とか)を指定すれば良い

株主優待目当てで買ったけど なんかすごい減ってる銘柄

株主優待目当てで買ったけど なんかすごい減ってる銘柄

銘柄 取得価額 時価評価額 評価損益
ウェルシアHD 3175 2309 -862
ライオン 1981 1339 -642
丸大食品 1883 1613 -270
物語コーポレーション 4770 4325 -445
一正蒲鉾 1231 750 -481
トリドールホールディングス 4162 3693 -469
江崎グリコ 4472 4166 -306
ロイヤルホールディングス 2653 2408 -245
SFPホールディングス 2133 1943 -190
イオン北海道 1136 946 -190
合計 27596 23492 -4100

売却しなければ損失は発生しないのでセーフ

PhpStormで、短いオープンタグを許す

PhpStormで、Short open tag を許可する
<?php の代わりに <? を許す


設定 ⇒ エディター ⇒ インスペクション から
PHP ⇒ コードスタイル ⇒ 短いオープンタグ を選んで
重要度を「弱い警告」とか、適当に好きなのに変更する。
PHP8以降はまたさらに別腹になっているので あわせて変更する。



それはそれとして
<? まで打ったら自動で <?php を補完するには

設定 ⇒ エディター ⇒ 一般 ⇒ スマートキー ⇒ PHP から
'<?'を入力した後に'<?php' タグを自動挿入する にチェックを入れておくと良い

秀丸で、カーソルを行末に移動する

秀丸で、カーソルを行末に移動するときにEndキーを使うと


ウィンドウの端で折り返す設定のとき、デフォルトでは 図1 のA(行末→と2の間)にカーソルが移動する。
しかし実際には折り返し位置なだけで行末でもなんでもない上に 見た目ではひとつ手前の中途半端な位置に見えるので 非常に使い勝手が悪い。

秀丸で行末に移動する機能は全部で3種類:

行末に移動
折り返されている場合、一番右端から1文字手前に移動する(A)
行末に移動(その2)
折り返されている場合、一番右端に移動する(B)
論理行末に移動
改行コードもしくはテキストの終わりまで移動する(C)

デフォルトでは Endキーのカーソル移動は「行末に移動」になっているので キー割り当てで「論理行末に移動」へ変更しよう

gccで、スレッド間で同じメモリを同時にアクセスしてる人を探してぶっ殺したい

gccで、スレッド間で同じメモリを同時にアクセスしてる人を探してぶっ殺したい。

そのためにはgccの TSAN(Thread Sanitizer)機能を使う

-fsanitize=thread

ソース
#include <pthread.h>
#include <stdio.h>

volatile long long A=0;

void *gettidtest( void *arg )
{
    int number = (int)(long) arg;
    long long i;

    printf("thread=%d start\n", number);
    for(i=0;i<1000000LL;i++){
        A++;     // 排他制御なし
//      __atomic_add_fetch( &A, 1, __ATOMIC_RELAXED );   // アトミック加算
    }
    printf("thread=%d end\n", number);

    return NULL;
}

int main( int argc, char **argv )
{
    int i;
    pthread_t p[10]={};

    for(i=0;i<10;i++){
        pthread_create( &p[i], NULL, gettidtest, (void*)(long)i );
    }
    for(i=0;i<10;i++){
        pthread_join( p[i], NULL );
    }
    printf("A=%lld\n",A);

    return 0;
}
コンパイル
$ gcc -g -fsanitize=thread thread.c
実行結果

競合したところを教えてくれる

問題点
  • 競合を発見しても終了しない
    -fno-sanitize-recover=all が効かず、検知後もプログラムは続行する
  • -fsanitize=address と一緒には使えない
    どちらか一方しか使えない
  • x86_64 でしかサポートしてない
    Cygwinもダメ、32bitもダメ、ARMもダメ
続きを読む