Python debug: trace back

以下を必要な場所に書き込むと、

import logging
logger = logging.getLogger(__name__)
logger.error("ERROR", stack_info=True)

以下のような出力が得られる。便利。

traceback (most recent call last):
  File "/Users/hironobu/WORK/guide2dl/pg_tuner/pg_tuner.py", line 287, in <module>
    args.handler(args)
  File "/Users/hironobu/WORK/guide2dl/pg_tuner/pg_tuner.py", line 247, in run
    pgt.run()
  File "/Users/hironobu/WORK/guide2dl//pg_tuner/pg_tuner.py", line 216, in run
    study.optimize(self._objective, n_trials=self.conf.n_trials)

  File "/Users/hironobu/WORK/guide2dl/venv/lib/python3.9/site-packages/optuna/study/study.py", line 451, in optimize
    _optimize(
  File "/Users/hironobu/WORK/guide2dl/venv/lib/python3.9/site-packages/optuna/study/_optimize.py", line 66, in _optimize
    _optimize_sequential(
  File "/Users/hironobu/WORK/guide2dl/venv/lib/python3.9/site-packages/optuna/study/_optimize.py", line 163, in _optimize_sequential
    frozen_trial = _run_trial(study, func, catch)
  File "/Users/hironobu/WORK/guide2dl/venv/lib/python3.9/site-packages/optuna/study/_optimize.py", line 251, in _run_trial
    raise func_err
  File "/Users/hironobu/WORK/guide2dl/venv/lib/python3.9/site-packages/optuna/study/_optimize.py", line 200, in _run_trial
    value_or_values = func(trial)

  File "/Users/hironobu/WORK/guide2dl/pg_tuner/pg_tuner.py", line 50, in _objective
    score, ret = self.sc.run(self.conf.scenario, _log_dir, self.conf.monitoring_time)
  File "/Users/hironobu/WORK/guide2dl/pg_tuner/benchmark/sysbench.py", line 289, in run
    logger.error("ERROR", stack_info=True)

Vagrant上のホストに外部からアクセス

(WiFi経由で)パブリックネットワークを使って、Vagrantのホストにアクセスする。

構成

構成図は以下のとおり:

システム構成

Vagrantの設定

vagrantfileに以下を追加。

config.vm.network :public_network, :bridge => "en0: Wi-Fi (AirPort)"

host(ubuntu)が起動したら、IPアドレスを確認。ここでは"192.168.128.157"とする。

sshの設定

Vagrant host側 (Ubuntuの場合)

/etc/ssh/sshd_configを修正する。

PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords yes

次に以下のコマンドでポート22と5432を解放する。

$ sudo ufw allow 22
$ sudo ufw allow 5432
$ sudo ufw enable
$ sudo ufw reload
$ sudo ufw status
公開キー転送

以下コマンドでid_rsa.pubvagrant側ホストに転送する。

$ ssh-copy-id -i ~/.ssh/id_rsa.pub [リモートユーザー]@[リモートサーバーのホスト名]

これでhost(OSX)からssh、およびpsqlでアクセスできるようになる。

参考

blog.flinters.co.jp

qiita.com

qiita.com

sysbench on M1 Mac

M1MacでSysbenchを試す*1

1. sysbenchのインストール

github.com

$ git clone https://github.com/akopytov/sysbench.git
$ cd sysbench
$ autogen.sh
$ ./configure --prefix=/Users/hironobu/tmp/sysbench.bin \
> --without-mysql --with-pgsql=/Users/hironobu/tmp/pgsql/ \
> --with-pgsql-includes=/Users/hironobu/tmp/pgsql/include/ \
> -with-pgsql-libs=/Users/hironobu/tmp/pgsql/lib/
$ make
$ make install

2. PostgreSQLサーバの準備

$ ./bin/createdb testdb

3. データの準備

古いからか記事の内容のままでは動かないが、参考になる。 MySQL, PostgreSQL ベンチマーク(sysbench, pgbench) - hayashier Tech Blogs

$ cd /Users/hironobu/tmp/sysbench.bin
$ export MACOSX_DEPLOYMENT_TARGET=12.7
$ ./bin/sysbench oltp_common \
> --db-driver=pgsql --pgsql-host=192.168.128.17 --pgsql-user=postgres --pgsql-db=postgres \
> --table_size=10 prepare

4. ベンチマーク

$ ./bin/sysbench oltp_read_write \
> --db-driver=pgsql --pgsql-host=192.168.128.17 --pgsql-user=postgres --pgsql-db=testdb \
> --table_size=10 --tables=5 --threads=10 --time=10 run

*1:HammerDBはM1 Mac上で動かない。HammerDBを自前でコンパイルするのはtcltk関連の依存関係が非常に難しく現実的でない。HammerDBはLinux版がバイナリで提供されているが、M1Mac上の仮想マシン上では動かない。

ガザとイスラエルと

個人的な思い出と重ねて、今の想いを書く。

基本のキ

基本的な前提として「テロ行為と虐殺行為をおこなったハマスイスラエルは共に戦争犯罪者/国として国際司法の下で裁かれるべき」というスタンスを表明しておく*1

イスラエルの若者:1

20世紀、南米に住んでいた頃、Ronという名の一人の若いイスラエル人に出会った。彼は世界放浪中で気の弱そうな青年だった。 イスラエルが嫌で国を離れているようだった。イスラエルに戻るかブラジルにいくか幾度となく相談された。 数ヶ月の滞在の後、彼はブラジルに向かうと言って去っていた。彼がその後どうなったかは知らない。

イスラエルの若者:2

2001年頃、イスラエル企業と仕事をする機会があった。 数名の若いイスラエル人が来日したが、彼らはイスラエルへの移住者で、元々は南米人だった。彼らは改宗して家族を捨てイスラエルに移住したのだった。 南米で会った気の弱い青年とは違い、彼ら彼女らは野心に満ちた顔をしていた。

その頃、何度目かのイスラエルパレスチナの戦いがあった。まだネットが発達する前で、ニュースはTVを経由して得る時代だったが、 日本のメディアもその状況についてはっきりとイスラエルのやりすぎであるとの前提で報道がなされていた。

私は何気なく来日中のイスラエル人に、「ちょっと激し過ぎるね」とエレベーターを待つ間だったとおもうが、何の考えもなしに口走ってしまった。 もちろん今ならそういう話題は避けるべきであることは承知しているが、当時私は、他国で高い教育を受け育った人間がこれほど残虐な行為を無条件に肯定するとは思いもよらなかった。ナイーブすぎた。 そのときの彼女の顔は今でも思い浮かぶ。公共の場でできる最大限の怒りの表情を見せ、「そんなことはない」と言い放った。私は人間が一瞬で顔を真っ赤にできることをその時初めて知った。

彼らも中高年になっているが、昨年から続くネタニヤフ政権に対する反政府デモについてどのような態度を示しているのか、 今回のガザ攻撃を支持しているのかどうか、興味があるところである。

「奴らは動物だ」

1948年のイスラエル建国以降、イスラエルによるパレスチナの人たちへの攻撃は躊躇なく、 彼らを動物扱いし、殴りつけ、抵抗すれば射殺するなど、暴虐のかぎりを尽くしてきた。

2014 Protest Israel

この写真は今年のものではない。 2014年にも世界的に大規模なプロテストがあった。 このとき、イスラエルパレスチナへの膨大なミサイル攻撃を行ったが、イスラエル人は丘に椅子を並べて皆で見学していたのだ。 報道していたBBCのアナウンサーが流石にキレてそのイスラエル人たちに抗議していたのを覚えている。

www.theguardian.com

Israelis Watch Bombs Drop on Gaza From Front-Row Seats - The New York Times

ガザの祈り

一方、生まれながらに抑圧され続けたガザの子供たちは、311の犠牲者を弔ふ為、毎年凧を上げてくれているという。

jp.reuters.com

https://reliefweb.int/report/occupied-palestinian-territory/children-gaza-share-messages-hope-and-peace www.arabnews.jp

ジェノサイド

今回、ネタニヤフ政権はこういったパレスチナの子供だけでなく、 自国民の捕虜、100人を超える国連職員、ジャーナリストも関係なく無差別に爆撃して殺している。 病院も救急車も難民キャンプも爆撃されている。 プーチンですら躊躇する虐殺を続けているのが今のネタニヤフ政権である。

政権末期

ネタニヤフは一度政権を追われ、前回の総選挙で極右政党と手を組むことでかろうじて政権に返り咲いた。 国民の支持は明らかに低下しており、 さらに基本法の改正を巡り、国内で激しい反対デモが起きていた最中であった。

jp.reuters.com

戦争犯罪と文明

綺麗事だろうとなんだろうと、国際法に基づき、ネタニヤフは戦争犯罪者として裁かれなければならない。 欧米メディアではネタニヤフの戦争犯罪についての議論が始まっている。 ここでネタニヤフに逮捕状がでないと、プーチンとの対応でダブルスタンダードになってしまう。 これは国際的法秩序の崩壊であり、近代以前のやったもん勝ちの世界に戻ってしまう。

いや、中世ですら宣戦布告にはなんらかの言い訳があった。プーチンですら自分勝手な理屈をつけていた。 自らの正当化は、自身が権力を維持し続けるために必要不可欠なことだ。 これは家族という最小単位ですら成り立つ。社会性動物である人間の性のはずだ。

しかし今のイスラエルは虐殺を目的としていることを隠さない。これは近代国家としては前代未聞である。 まさにナチス以来のことをイスラエルがおこなっている。明確にエスニッククレンジングを目的とした虐殺を続けている。 ヒトラーが他国に隠しながら1939-1945年頃にやっていたことを、イスラエルは衆人環視の中で行っている。

2022年6月、プーチンが領土確保を目的にウクライナに侵攻した時、そしてブチャなどで拷問や虐殺を繰り返したことに衝撃を受けたのであれば、今回のイスラエルによるエスニッククレンジング(民族浄化)を目的としたガザ攻撃が何を意味するかよくわかるはずである。

ネタニヤフはプーチンの10倍以上凶悪な、おそらく裁ききれないほどの重罪を犯し続けている。 プーチン国際法下で戦争犯罪者であると思うのであれば、ネタニヤフも同様に戦争犯罪者として裁かれなければならないと考えなければならない。

そして、もしもネタニヤフが起訴も逮捕状もでないのであれば、それは国際法による国際秩序の崩壊、21世紀において数10万規模の民族浄化が正当化されるという文明の崩壊を目撃することに等しい。

もちろん、これまでも、そして今後も綺麗事100%の世界は不可能だ。だが、0か1かで割り切る話でもない。 問題は綺麗事、つまり悪は裁かれるという基本的なことが守られる、または守ろうとする社会を維持できるかどうかである。

今2014年を超える規模の世界的なデモが続いている。 人類がそのような各人の行動を可視化し、その思いを共有することは文明の維持に必須のことだ*2

*1:もちろん、プーチンも同様。

*2:日本ではデモはダサい、邪魔という非文明的で幼稚な意見が多いが、デモを禁止する国、デモが発生しない国がどんな国かちょっと考えれば良い。自国の環境を客観視できるか、鏡像認識の有無が知性の分かれ目である。

pgindent

備忘録。自分で探すとき、いつも一旦hatenaを探してから自分のサイトにいくので、こちらにも書いておくことにした。

www.interdb.jp

インストール

前提として (1) postgresは"/usr/local/pgsql"にインストールされている、 (2) PostgreSQLソースコードは"/usr/local/src/postgresql"以下にあるとする。

詳細はsrc/tools/pgindent/README参照。

1. pg_bsd_indentをインストール

以下のようにしてpg_bsd_indentをどこか適当な場所にインストールする。

$ git clone https://git.postgresql.org/git/pg_bsd_indent.git
$ cd pg_bsd_indent/
$ make PG_CONFIG=/usr/local/pgsql/bin/pg_config 
$ cp pg_bsd_indent /usr/local/bin

2. Perl-Tidyをインストール

以下のように、Perl-Tidyをインストールする。バージョンは20170521以外ダメなようだ。 PG17devではPerl-Tidy-20230309を使うらしい。

$ wget https://cpan.metacpan.org/authors/id/S/SH/SHANCOCK/Perl-Tidy-20230309.tar.gz
$ tar xvfz Perl-Tidy-20230309.tar.gz 
$ cd Perl-Tidy-20170521
$ perl Makefile.PL 
$ make
$ make test
$ make install

3. typedefsをインストール

PostgreSQLソースコードのトップディレクトリに移動し、以下のコマンドを実行する。

$ cd /usr/local/src/postgresql
$ wget -O src/tools/pgindent/typedefs.list https://buildfarm.postgresql.org/cgi-bin/typedefs.pl

Note

PG17devで試すと、以下のようなエラーが出る。

$ ../../src/tools/pgindent/pgindent 
You do not appear to have pg_bsd_indent version 2.1.2 installed on your system.

が、pg_bsd_indentのTAGを調べると、version 2.1.1.までしかできていない。

$ ~/pg_bsd_indent$ git tag
REL_2_1_1

仕方ないので、pgindentの変数を変更して対処する。

#!/usr/bin/perl                                                                                                                                

# Copyright (c) 2021-2023, PostgreSQL Global Development Group                                                                                 
                                                                                                                                               
use strict;                                                                                                                                    
use warnings;
                                                                                                                                               
use Cwd qw(abs_path getcwd);                                                                                                                   
use File::Find;                                                                                                                                
use File::Spec qw(devnull);                                                                                                                    
use File::Temp;                                                                                                                                
use IO::Handle;                                                                                                                                
use Getopt::Long;

# Update for pg_bsd_indent version                                                                                                             
my $INDENT_VERSION = "2.1.1";     # "2.1.2"から"2.1.1"へ。

とりあえず動くのでヨシ。

Usage

$ cd /usr/local/src/postgresql
$ ./src/tools/pgindent/pgindet

If you make an extension that is located in the contrib sub-directory, do the following command.

$ cd /usr/local/src/postgresql/contirb/your_extension
$ ../../src/tools/pgindent/pgindent .

Don't forget the last comma "."

加瀬レンタルスペースのセキュリティインシデントとその対応について

事情があり1ヶ月だけ、新横浜の加瀬レンタルスペースを借りた。 https://www.kase3535.com/details/030815.html

途中で何度か荷物の出し入れをしたのだが、ある日、レンタルスペースのある4Fのエレベータから出ると、廊下にはブザーが鳴り響き、レンタルスペースの扉が140度近く開いたままになっていた。

急いで扉を閉め、あらためて入場キーで入室した(自身の入室記録を残すため)。

内部で10分ほど荷物の詰め替えなどしていると、ALSOKの警備員がのんびり入ってきて「扉を開けっぱなしにしてました?」と間抜けな質問をしてきた。

ことの経緯を話すが、全く慌てた様子もない。何分くらいドアが開いていたのかと尋ねると「5分くらい開けっぱなしになっていた」と。

つまり、私がドアを閉めるまで5分間、レンタルスペースのドアが開きっぱなしになっており、もしも私が来なければまだ開いていた可能性が高い。また、ドアが閉まってから10分、つまりドアが開いてから15分間、ALSOKの警備員はレンタルスペースに来なかった。

これがどういうインシデントか、ここであらためて重大さを書く必要はないだろう。十分に荷物を喪失する可能性が高いインシデントである。

この件について、加瀬倉庫にインシデント報告と対処について要請したが、返事が来たのは数日後であった。 しかも、こんなやる気のない文章である。

お世話になっております。 加瀬倉庫でございます。

お問い合わせにつきまして、 この度はご迷惑をおかけしまして申し訳ございませんでした。

ご利用者様にたいしての注意喚起と、 アルソックの担当者へ報告いたします。

今後とも何卒宜しくお願い致します。

加瀬倉庫とALSOKは使わない方がよい。全くダメ。

しかし、久しぶりに帰国してみたが、これに限らず、いろいろ壊れてないか、日本。昔住んでいた南米クオリティに近づいてる。

ZHEAP is DEAD

タイトルの通りである。

以前「ZHEAPの現状」と称して可能な限り内部情報を使わずに状況をレポートしたが、今回は断言することにした。 interdb.hatenablog.com

ZHEAP IS DEAD

要は、EDBが投げ出しC社も宣伝目的で手を出したが、今や誰一人開発もメンテも行っていない。 ZHEAPは死んでいる*1

ZHEAPに甘い夢を見ている人たち*2が今だにいるのだが、いい加減目を覚ました方がいい。

*1:というか、前回のブログを書いた時点で死んでいた。内部情報は出せなかったが、エンジニアの良心に従い、可能な範囲でアラートを出していた。

*2:プラガブルストレージに甘い夢を見てる人も多いが、あれはストレージアクセスの関数が抽象化されてるだけ。よってそれ以外は結局ガシガシとコードを改変するしかない。ZHEAPはVACUUM関係や統計関係など結構な範囲にわたって膨大な追加コードがあるし、ZedSTOREもプランナ周辺や統計部分をかなり改変している。