pandazx's blog

データ分析など雑多な技術ブログ

CentOS7にPostgresql9とPostGISをインストール

今更な内容だが、作業ログとして残す。

前提

OS: Centos 7

インストール

sudo yum install epel-release
sudo yum install -y proj proj-devel proj-epsg
sudo yum --enablerepo=epel install gdal
sudo yum install postgis

# 順番が前後するが、以下でPostgresql Serverをインストール
sudo yum install postgresql-server

# DB初期化
sudo postgresql-setup initdb

# サーバ起動時の自動起動
systemctl enable postgresql

CentOS 7 なので、起動停止にはsystemctl を使う

sudo systemctl start postgresql
sudo systemctl status postgresql
sudo systemctl stop postgresql

参考にしたサイト:CentOS 7にPostgreSQL最新版をインストール - 働きたくないゆとりの備忘録

ログイン

次に、ログインできなかったので、以下を参考に対応。

peer認証の関係でpsqlログインできない時の対処法 - Qiita

まず、postgresユーザのパスワード設定

sudo su postgres -c 'psql --username=postgres'
ALTER USER postgres with encrypted password 'your_password';

次に、アクセス権の設定を変更

/var/lib/pgsql/data/pg_hba.conf の

host all all ::1/128 ident

host all all ::1/128 md5

に変更して、Postgresql を再起動

psql -U postgres -h localhost -W でログイン

他サーバからのログイン

デフォルトでは、localhost からしかログインできない。

/var/lib/pgsql/data/postgresql.conf の

listen_addresses = '*' ←に変更
port 5432 ←コメント解除

Postgresql を再起動

psql -U postgres -h xxx.xxx.xxx.xxx -W でログイン

PostGISの動作確認

create database test;
\connect test
create extension postgis;
select PostGIS_full_version();

これでバージョンが表示されればOK

参考:CentOSにPostGISをyumでインストール(CentOS7.2, PostgreSQL9.5, PostGIS2.2) - Qiita

pythonで並列処理

python2.7で実装した際のメモ。

実装イメージ

  • csvファイルの行ごとに重たい処理をするので、行ごとに並列処理したい
  • 行の先頭列にはIDがあり、IDをキーに並列処理の結果を受け取って、出力したい
  • csv上、IDには重複があるが、同一IDは2回処理したくない
  • 各プロセスで共通して参照するデータがある。このデータはIDをキーに参照
  • csvのどこまで処理が進んだか進捗を見たい

以下のサイトを参考にした。

メモ: multiprocessingを使うまで(Part 2) – Momentum

まずは、上記サイトのmultiprocess_with_instance_method.py をありがたくimportする。

from multiprocessing import Pool, Manager
import multiprocess_with_instance_method

以下のようにして並列処理できる

def process(i, line, list, common_result):
    # lineを元にした処理
    print "i=" + str(i) # 進捗を出力
    cols = line.rstrip().split(",")
    id = cols[0]
    if common_result.has_key(id) == False:
        # 同一IDは一回のみ処理
        common_result[id] = heavy_func(list[id])
    return cols[1]

def heavy_func(data):
    # 重たい処理
    return data

# 各プロセスの処理結果を代入する変数。各プロセスで共通参照される
common_result = Manager().dict()

# 各プロセスの中で参照するデータ
list = {"1":"a", "2":"b", "3":"c"}

#lines = open(csv_file, "r").readlines()
lines = []
lines.append("1,aaa")
lines.append("2,bbb")
lines.append("3,ccc")

p = Pool(3)
result = [p.apply_async(process, args=(i, line, list, common_result)) for i, line in enumerate(lines)]
p.close()
p.join()

# output
for id, val in common_result.items():
    print id + "," + val

# process()でreturnした結果をresultで受け取って出力してもよい
print [r.get(timeout=1) for r in result]

ちなみに、進捗を出力しても、python test.py > log & のように実行すると、バッファリングされてしまい、すぐにはファイルに出力されない。 この場合は python -u test.py > log & とすれば、すぐに出力される。

注意

並列処理するプロセスで参照するデータサイズが大きいと 並列処理のためのオーバーヘッドが大きくて、逆に遅くなるので注意。

KBレベルならいいが、100MBレベルだと厳しい。 その場合、参照データはDBにおいて、SQLでアクセスした方がよい。

Windows Server 2012R2にssh serverを構築

基本的には以下のブログの通り。

windowsに公式なsshdをインストールし、linuxからwindowsにssh接続 | Developers.IO

これについて補足する。

上記ブログに最新版はこちらと、ダウンロードページを紹介されるが、 OpenSSH-Win32.zipとOpenSSH-Win64.zipがあり、迷う。

ブログではWin32のやり方が書いてあるので、その通りにやればよい。

ファイアウォールの設定で22番ポートを解放するが、 これはコマンドではなく、GUIファイアウォールの詳細設定からでも可能。

Ruby: MessagePackのファイル読み書きでエラー

MessagePackしたファイルの読み込み時にエラーで、少しハマったのでメモ

test.rb:27:in `unpack': extra bytes follow after a deserialized object (MessagePack::MalformedFormatError)

こうじゃなくて

File.open(outpath, "w") do |fout|
  fout.puts(links.to_msgpack)
end

こう

File.open(outpath, "w") do |fout|
  fout.write(links.to_msgpack)
end

改行コードがね。。。

一般物体検出のFaster R-CNNについて

Faster R-CNNには本家Matlab版とPython版のプログラムが公開されている。

Faster R-CNNについては、上記リポジトリのREADME.mdを参照して欲しいが、 日本語のslideshareもある。

Python版しか実行確認していないが、以下の手順で実行できる。

前提:Ubuntu14.04, Anaconda2, CUDA7.5, cuDNN v4, Caffeはインストール済み

ライブラリをインストール

後はpy-faster-rcnnのREADME.mdに従えばOK。デモ画像に対する一般物体検出まで行える

コマンドだけ知りたい人は以下の方が参考になる。

ただし、make前に以下の設定が必要。

Makefile.config から以下をアンコメント

USE_CUDNN := 1
WITH_PYTHON_LAYER := 1

以下を環境に合わせて設定

ANACONDA_HOME := $(HOME)/anaconda2
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
                  $(ANACONDA_HOME)/include/python2.7 \
                  $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
PYTHON_LIB := $(ANACONDA_HOME)/lib

MATLABにToolboxをアドオン追加

MATLABをインストール後、アドオンを追加する方法がすぐにわからなかったのでメモ

まず、Toolboxを購入。評価版の場合は特になし。

MATLABインストーラを実行すると、最後の方にインストールするコンポーネントを 追加するページがある。MATLAB本体はインストール済みとなっている。

ここで、Toolboxにチェックしてインストール。

ちなみに、以下のブログに既に書いてあった。

上記以外に以下の方法もあるらしい

Ubuntu 14.04 にVNC serverを構築

なぜか、普通のやり方で構築すると、ログインした際に灰色の画面(gray screen)になってしまう現象に直面。 以下のサイトを参考に対応できた。

How To Setup VNC For Ubuntu 12 | DigitalOcean

最後のセキュアにするところは、ご自由に。

ちなみに、/etc/init.d/vncserver で起動するが、上記サイトでは決め打ちになっていたので、 USER, DISPLAYはserviceコマンド実行時にパラメータを渡すように修正した。

蛇足

操作を誤ったからか、試行錯誤している最中におかしなことをしていたか、 以下のUbuntu 14用のやり方も、ほぼ上記と同じだと思うのだが、以下ではうまく行かなかった。

How to Install and Configure VNC on Ubuntu 14.04 | DigitalOcean