BayesCardセットアップの注意点

BayesCardというベイジアンネットをベースとしたCardinality Estimationを行うシステムを試してる。

github.com

pythonのモジュール

使用にあたり、pythonのモジュールでちょっとハマったので備忘録として書いておく。numpyのバージョンに注意*1

それとspflowのインストールを忘れずに。

pip3 uninstall numpy
pip3 install numpy==1.19.2
pip3 install networkx
pip3 install numba
pip3 install pgmpy
pip3 install pomegranate==0.13.2
pip3 install sqlparse
pip3 install tables
pip3 install spflow
IMDBデータ

これもIMDBデータを使う。READMEにあるように、 http://homepages.cwi.nl/~boncz/job/imdb.tgz  をダウンロードし、 imdb-benchmarkというディレクトリ に展開しておく。

imdb-benchmarkはBayesCardと同じディレクトリ に作成する。

$ git clone https://github.com/wuziniu/BayesCard.git
$ mkdir imdb-benchmark 
$ cd imdb-benchmark
$ tar xvfz imdb.tgz

*1:pomegranateのバージョン依存性解決のため。

DeepDBセットアップの注意点

DeepDBという機械学習でCardinality Estimationを行うシステムを試している。

github.com

ハマった点をいくつか。

PyYAMLのバージョン

requirements.txtやrequirements_python3.7.txtなどで指定されているPyYAMLのバージョンは3.12 だが、これは古すぎるのでうまく環境設定できない。 なので6.0など最新バージョンに書き換える必要がある。

IMDBデータ

これもIMDBデータを使う。READMEにあるように、http://homepages.cwi.nl/~boncz/job/imdb.tgz をダウンロードし、 imdb-benchmarkというディレクトリ に展開しておく。

imdb-benchmarkはdeepdb-publicと同じディレクトリ に作成する。

$ git clone https://github.com/DataManagementLab/deepdb-public.git
$ mkdir imdb-benchmark 
$ cd imdb-benchmark
$ tar xvfz imdb.tgz
$ cd ../deepdb-public

PostgreSQLのセットアップ

imdb データベースの作成

Bao同様、imdbというデータベースを作成する必要がある。

簡単に作成するには、Bao セットアップの注意点 - interdb’s blog を参照。

接続情報の変更

デフォルトではロールもパスワードも"postgres"固定なので、適宜 ensemble_compilation/physical_db.py を変更する。

Bao セットアップの注意点

Baoという、機械学習ベースのクエリオプティマイザを試している。

github.com

丁寧なドキュメントもあるのだが、軽くハマった点がいくつかあるので、回避方法を書いておく。

rmarcus.info

ポスグレのバージョン

PostgreSQL 12.x。それ以外はダメっぽい。

Issue in installing Bao extension · Issue #1 · learnedsystems/BaoForPostgreSQL · GitHub

Pythonのバージョン

3.8以上。それ以下の場合、構文エラー*1がでるので自分で書き直す必要がある。

Python Syntax Error · Issue #2 · learnedsystems/BaoForPostgreSQL · GitHub

データベースとロール

imdbというデータベースとロールが必要。

CREATE DATABASE imdb;
CREATE ROLE imdb;
ALTER ROLE imdb WITH LOGIN;
ALTER ROLE imdb SUPERUSER;

imdb データ

imdbのデータをダウンロードしてpg_restoreでデータベースimdbに入れておく。 dataverse.harvard.edu

$ pg_restore -d imdb -F c imdb_pg11

*1:":="を使っている。

滞在ビザの更新 2022

来年2022のための滞在ビザの更新をしてきた。

昨年、というか今年分の更新についてはこちら。 interdb.hatenablog.com

基本的には同じ手続きだけども、更新時期になると役所が書類を送ってくるので、原則的には取りにいく必要はなかった*1

次に、記述部分。会社の項目は全部記入する必要があるらしい。なんで昨年はスタンプだけで通ったのか不思議。 メールアドレスや電話番号も必須と言われた。もしかして係員の気分なのかもしれないが、あいにくそれを試す機会はない。

*1:ただし、受け取り時期に旅行などで不在の場合は、更新の3ヶ月前から直接取りにいくこともできるということであった。

Python仮想環境構築の備忘録

参考 : https://www.tensorflow.org/install/pip?hl=ja

MADEというディレクトリ 以下にpythonの仮想環境(ここでは"made"という名前にする)を作って作業するための手順。

$ mkdir MADE
$ cd MADE
$ python3 -m venv --system-site-packages ./made

次に以下を実行。

$ source ./made/bin/activate
(made)$ pip install --upgrade pip

プロンプトが"(made)$"と変わったら、それは仮想環境ができてそこに入れた証拠。 なので、必要なパッケージをインストール。

(made)$ pip install ...... # 必要なパッケージs

仮想環境からでるには、以下を実行。

(made)$ deactivate
$

小旅行

今年は春から天候が悪く、晴天が続かない日々が続いていたので、数日以上晴天が続く日を狙って直前に休みを入れた。

当初は自転車でスイス中部を走る予定(Luzern->Interlaken->Bern->basel)だったが、初日夜に体調を崩してしまい、結局自転車はLuzernからInterlakenとMontreuxからLausanneまでの計110Km程度(地図中の赤線)。残りは列車移動。

f:id:interdb:20211013020811p:plain

ZurichからLuzernは以前自転車で走ったので今回はLuzernからInterlakenまで走るのが最初の目的。 何故ならLuzernからMontreuxのアルプス山脈北側を走る路線はゴールデンパスと言われるほどスイスの中でも綺麗な景色が続く土地だから。 実際昨年LuzernからZurichまで走った時も息を飲むほど綺麗な風景が続いて驚いたので、今回も期待して走ったのだが、こちらの心が汚れてしまったのか、以前ほどの感動も驚きもなかった。見慣れた風景という感じ。

f:id:interdb:20211008144625j:plain
ルンゲルナー湖を見下ろす峠の登坂中。雲の中からF/A-18の音が絶え間なく聞こえる
f:id:interdb:20211008133309j:plain

しかも、戦闘機訓練が昼過ぎから夕方まで続いており、F/A-18ホーネットの爆音続きでゲンナリしてしまった。

f:id:interdb:20211013022718p:plain
インターラーケン手前のマイリンケン空軍基地に着陸するF/A-18 ホーネット

Interlakenでは体調の関係で自転車乗りを諦め、急遽ユングフラウ鉄道で山頂へ。ヨーロッパ最高地点の駅。

www.myswitzerland.com

観光地観光地してるところは避けようと思っていたが、体調の関係で行ってみたらこれが大正解。料金はバカ高いが行く価値はある。めずらしく快晴だったこともよかった。

f:id:interdb:20211010111747j:plain
ユングフラウ

下りは1区間歩いた。 f:id:interdb:20211010121712j:plain f:id:interdb:20211010122148j:plain

f:id:interdb:20211010124528j:plain
アイガーとメンヒ(たぶん)

翌日、Bernまで走るつもりが、ふと思いついてMontreuxのQueen Stdio Experienceを調べたら、開いていることが分かったので急遽行き先をMontreuxに変更。 春ごろ調べたときはコロナで閉まっていたのだけれど、今はワクチンパスポートがあれば入場できるようになっていた。

www.montreuxriviera.com

InterlakenからMontreuxへはいくつかの路線があるが、一番短時間で行けるのは南下して西に向かう路線だった。多分観光スポットも少なく、普通なら絶対に乗らないであろう路線。 ドイツ語圏からイタリア語圏、フランス語圏と経由するので、街の景色もなんとなく違う。列車内のアナウンスも案内板もドイツ語からフランス語に唐突に変わる。

そしてMontreux。なんかフランスっぽい。ドイツ語圏の都市のきっちりした清潔さがなく、雑然としていてラテン風の、いかにも西ヨーロッパな感じ。

で、湖畔のフレディーの銅像

f:id:interdb:20211011101925j:plain

カジノと併設されているマウンテンスタジオ。

f:id:interdb:20211011102714j:plain

中に小部屋2つ程度の小規模な展示場がある。

f:id:interdb:20211011103502j:plain
Jazz関係の資料
f:id:interdb:20211011103646j:plain
初期のひらひら衣装
f:id:interdb:20211011103728j:plain
OneVisionのイントロなどで使われたDX-7
f:id:interdb:20211011103743j:plain
GuildのRedSpecialコピーモデル、友達が持ってたので一時借りていたことがある
f:id:interdb:20211011103750j:plain
ドラムとフェンダーベース

リアルタイム(発売時)でQueenのアルバムを買ったのはJazzが最初で、そのJazzはこのマウンテンスタジオで録音されている。

en.wikipedia.org

以降、ラストアルバムまでこのスタジオが使われた*1

個人的にはQueenに思い入れが強すぎるので、この展示物の数にはかなりガッカリ。でも、これをメインに旅行したらもしかして後悔したかもしれないけれど、今回のように突発的に立ち寄ったのならば、旅行のオマケとしてはよかったかなと納得することにした。

Lausanneまで、レマン湖湖畔を走る。

f:id:interdb:20211011113704j:plainf:id:interdb:20211011121431j:plain

思ったよりも風が冷たい。で、Lausanne。湖畔の都市というと平地をイメージしてしまっていたが、とんでもない。山が迫っていて、湖面から100mくらい上に駅がある。で、そこまでの道はあたりまえだがすべて急な登り坂。

体調も戻ってきていたので、Lausanne周辺を走ろうとか、ジュネーブまでいっちゃおうかなと余裕ぶっこいていたけど、駅まで登ったところで体力の限界を感じ、黙ってZurichまで戻ることに。

というわけで、期せずして結果的にスイスほぼ一周してしまった。

アルプスはさすがに驚愕すべき凄さであったが、それ以外の風景は2年も住んでいると見慣れてしまった。正直、北海道の道東のほうが綺麗だし広大*2

そろそろ他所の国にも旅行に行きたいが、年齢的に無理できない身体になっていて、食事や移動など体に負担がかかるとすぐ体調不良になる。とはいえ、行ける時に行っておかないと、またいつ疫病やらなにやらで動けなくなるかもしれないし。ギリギリの選択が続く。

*1:そもそもjazzの時にイギリスを出て録音したのは節税対策。節税対策でこのスタジオも購入した。なので、このマウンテンスタジオと他国のスタジオを複数使ってどこにも税金を払わないという方式が取られていた。

*2:スイスは国土も狭いし山地ばかりなので、湖以外に広い平地が視界に入らず、気分的に閉塞感がある。

Git の備忘録 (4)

以下のような状況で、差分をメインブランチに反映するお手軽な方法。

  1. 開発中のブランチ(ここではREL_14)をベースに、別ブランチ(ここではdev)でさらに面倒な変更(図中ではオレンジのコミット)を加えている。
  2. devブランチは、ときどきREL_14のコミットをcherry-pickしている。

f:id:interdb:20210911205056p:plain

開発ブランチの開発が終わった段階で、devブランチの差分を上書きするには、以下の手順を実行する。

1. 開発ブランチ(REL_14)でgit diffを実行し、パッチファイルを作成する。
$ git diff REL_14 dev > diff.patch
2. 作成したパッチを適用する。
$ git apply -p1 ./diff.patch
3. 差分をコミットする。

devブランチで追加したファイル群をgit addでインデックスに追加するのを忘れないように。

$ git commit
4. パッチファイルを削除する。
$ rm diff.patch