トップ 追記

役に立たない情報


2024年02月22日 [SQUID] SQUIDでblastをビルドしてみよう

_ [SQUID] blastってなんやねん

久しぶりに更新したと思ったらみんな大好きncbi blastの話だよ! ncbi blastってバイオインフォ界隈では超有名な相同性検索ソフトウェアスイートなんだ.とりあえずDNA配列とかアミノ酸配列が判明したらデータベースと突き合わせたいじゃん? タンパク質構造予測で名を馳せているAlphaHold2もまずは同様のアルゴリズムで候補を絞るんだ.

んで決して遅くはない(むしろ高速)んだけど,より速いに越したことはないblastをSQUIDでビルドして動かしてみようぜって話なんだ.とりあえずSQUIDのアカウントとかは持っている前提で話を進めるよ!ちなみにSQUIDのOSはRHEL8.6互換だと思ってもらえればいい.

まず準備としてSQLiteのソースファイルがいるので,それのdev版をyumとかrpmで入れられたらいいんだけど,共用計算機は自前で必要なものは揃える必要がある.だからSQLiteのビルドからだよ!

_ [SQLite] SQLiteをソースからビルド

とりあえずSQUIDの場合,ワークディレクトリに実行ファイル,ライブラリファイルをおいておいた方が速いので,ワークディレクトリで作業してね!

% wget https://www.sqlite.org/2023/sqlite-autoconf-3440200.tar.gz
% tar zxvf sqlite-autoconf-3440200.tar.gz
% cd sqlite-autoconf-3440200
% ./configure
% make

_ [blast] ncbi blastをソースからビルド

ncbi blastのLATESTはURLがコロコロ変わるからみんなも気をつけてね!2024年現在では以下のURLだったよ.

https://ftp.ncbi.nih.gov/blast/executables/blast+/LATEST/

%  wget https://ftp.ncbi.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.15.0+-src.tar.gz
% tar ncbi-blast-2.15.0+-src.tar.gz
% cd ncbi-blast-2.15.0+-src/c++
% ./configure --without-debug --with-mt --without-sybase --without-fastcgi --without-sssdb --without-sss --without-geo --without-sp --without-orbacus --without-boost --with-sqlite3=/sqfs/work/Gxxxxx/vxxxxx/sqlite-autoconf-3440200 --includedir=/sqfs/work/Gxxxxx/vxxxxx/sqlite-autoconf-3440200
% make

GxxxxxやvxxxxxはSQUIDアカウントのグループ名とアカウント名だよ.SQLiteを指定する必要があるから,この指定は大事だよ! じゃあね!


2022年01月31日 [CentOS7][python] apacheでFlaskをWSGIで動かしてみよう

_ [CentOS7][python] WSGIってなんやねん

今回はみんな大好きPythonでのWebアプリケーションサーバを作ろうって話だよ!

なんとなくmicroserviceとかを立ち上げようっかなーとか,一体どこに需要があるかどうか全くわからない情報だよ! まずWSGI (Web Server Gateway Interface) ってのは,Pythonアプリ<-WSGI->Webサーバという感じで,Webサーバ(今回の場合,apache)とPythonアプリをつなげるインターフェースモジュールっす. Flaskって軽量Webアプリケーションサーバとして超有名で,某巨大動画配信サービスもFlaskベースのmicroserviceで成立してるってよ!

じゃあ早速インストールしていこうと思うけど,ひとまず安定しているCentOS 7!での話だよ!ちゃんと後からUbutu 20.04とかでもやるから安心して!

_ httpd-develとpython-devel, gccをインストール

WSGIモジュールは,pip3でインストールするときにバイナリをビルドするため,またリンカとしてhttpdやpythonを参照するので,先にこれらをインストールしておく必要がある.

% yum update
% yum upgrade
% yum install httpd-devel python3-devel gcc

_ Flaskおよびmod_wsgi

% pip3 install --upgrade pip
% pip3 install flask
% pip3 install mod_wsgi

yumでCentOS7のmod_wsgiパッケージがあるが,あれはインストールしてはいけない.あれはPython 2.x系用のモジュールなので,今流行のPython3.x系(例えばGoogle Speech Recognitionなど)を使うようなmicroserviceの場合はダメ(当然). もしyumでmod_wsgiがインストールしてあるなら

# yum remove mod_wsgi

としておく.

_ apacheでのWSGI設定ファイル

基本的には/etc/httpd/conf.d/wsgi.confとして設定ファイルを作成する.ユーザ名やグループはWSGIを動かすアカウントユーザ名なので,user=apache, group=apacheとしておく またflaskアプリを置く場所は /var/www/html/myapp/ として,以下のようにwsgi.confファイルを編集する

#wsgi.conf
LoadModule wsgi_module /usr/local/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

<VirtualHost *:80>
serverName XXX.XXX.XXX.XXX

WSGIDaemonProcess myapp user=apache group=apache threads=5
WSGIScriptAlias / /var/www/html/myapp/flask.wsgi

<Directory /var/www/html/myapp/>

WSGIProcessGroup myapp
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On

Require all granted

</Directory>
</VirtualHost>

_ FlaskアプリとFlask設定ファイル

設定ファイルとして,wsgi.confで記述したflask.wsgiファイルを用意する.このファイルはPythonファイルであり,実際WSGIが呼び出すこととなる.更にこのflask.wsgiがFlaskアプリファイルを呼び出す.なのでFlaskアプリのpythonファイルに追記すると1ファイルで完結するが,ローカルのFlaskで開発しているファイルをそのまま指定することで,apacheに対応できるので,こういうワンクッションあるような形式で呼び出すことを採用している.

/var/www/html/myapp/flask.wsgi

# coding: utf-8
import sys

sys.path.insert(0, '/var/www/html/myapp/')

from myapp import app as application

/var/www/html/myapp/myapp.py

#-*- coding: utf-8-*-
import sys
sys.path.append('/usr/local/lib64/python3.6/site-packages/')
sys.path.append('/usr/local/lib/python3.6/site-packages/')

from flask import Flask, request, redirect, url_for, render_template, g
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, World!'

if __name__ == "__main__":
    app.run()

その後

% systemctl restart httpd

で,Webサーバをリスタート.これで動くぜ!apache+Flask


2021年10月26日 [mac][python] PyAudioをインストールした時の話

_ [mac][python] PyAudioをインストールしようとしたらエラーがたくさん出る

最近流行ってるじゃん?機械学習だAIだディープニューラルネットワークだフェデレーテッドラーニングだ,と.で,なんでかよくわからないけど流れで音声解析することになってmacで環境作ろうとしたら,ふむなるほどとりあえずPyAudioをインストールしてみっか,ってなったらエラーがうわーってでてくる. 具体的にはこんな感じ.

% pip install pyaudio
Collecting pyaudio
  Using cached PyAudio-0.2.11.tar.gz (37 kB)
Building wheels for collected packages: pyaudio
  Building wheel for pyaudio (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /Users/kido/anaconda3/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/pv/yknnpbz533vfgwpd1ygkdjk80000gn/T/pip-install-rr2nf4mo/pyaudio/setup.py'"'"'; __file__='"'"'/private/var/folders/pv/yknnpbz533vfgwpd1ygkdjk80000gn/T/pip-install-rr2nf4mo/pyaudio/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /private/var/folders/pv/yknnpbz533vfgwpd1ygkdjk80000gn/T/pip-wheel-83vkx2lv
       cwd: /private/var/folders/pv/yknnpbz533vfgwpd1ygkdjk80000gn/T/pip-install-rr2nf4mo/pyaudio/
  Complete output (16 lines):
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.macosx-10.9-x86_64-3.8
  copying src/pyaudio.py -> build/lib.macosx-10.9-x86_64-3.8
  running build_ext
  building '_portaudio' extension
  creating build/temp.macosx-10.9-x86_64-3.8
  creating build/temp.macosx-10.9-x86_64-3.8/src
  gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/kido/anaconda3/include -arch x86_64 -I/Users/kido/anaconda3/include -arch x86_64 -DMACOSX=1 -I/Users/kido/anaconda3/include/python3.8 -c src/_portaudiomodule.c -o build/temp.macosx-10.9-x86_64-3.8/src/_portaudiomodule.o
  src/_portaudiomodule.c:29:10: fatal error: 'portaudio.h' file not found
  #include "portaudio.h"
           ^~~~~~~~~~~~~
  1 error generated.
  error: command 'gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for pyaudio
  Running setup.py clean for pyaudio
Failed to build pyaudio
Installing collected packages: pyaudio
    Running setup.py install for pyaudio ... error
    ERROR: Command errored out with exit status 1:
    command: /Users/kido/anaconda3/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/pv/yknnpbz533vfgwpd1ygkdjk80000gn/T/pip-install-rr2nf4mo/pyaudio/setup.py'"'"'; __file__='"'"'/private/var/folders/pv/yknnpbz533vfgwpd1ygkdjk80000gn/T/pip-install-rr2nf4mo/pyaudio/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/pv/yknnpbz533vfgwpd1ygkdjk80000gn/T/pip-record-q9fjahjy/install-record.txt --single-version-externally-managed --compile --install-headers /Users/kido/anaconda3/include/python3.8/pyaudio
         cwd: /private/var/folders/pv/yknnpbz533vfgwpd1ygkdjk80000gn/T/pip-install-rr2nf4mo/pyaudio/
    Complete output (16 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.macosx-10.9-x86_64-3.8
    copying src/pyaudio.py -> build/lib.macosx-10.9-x86_64-3.8
    running build_ext
    building '_portaudio' extension
    creating build/temp.macosx-10.9-x86_64-3.8
    creating build/temp.macosx-10.9-x86_64-3.8/src
    gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/kido/anaconda3/include -arch x86_64 -I/Users/kido/anaconda3/include -arch x86_64 -DMACOSX=1 -I/Users/kido/anaconda3/include/python3.8 -c src/_portaudiomodule.c -o build/temp.macosx-10.9-x86_64-3.8/src/_portaudiomodule.o
    src/_portaudiomodule.c:29:10: fatal error: 'portaudio.h' file not found
    #include "portaudio.h"
             ^~~~~~~~~~~~~
    1 error generated.
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /Users/kido/anaconda3/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/pv/yknnpbz533vfgwpd1ygkdjk80000gn/T/pip-install-rr2nf4mo/pyaudio/setup.py'"'"'; __file__='"'"'/private/var/folders/pv/yknnpbz533vfgwpd1ygkdjk80000gn/T/pip-install-rr2nf4mo/pyaudio/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/pv/yknnpbz533vfgwpd1ygkdjk80000gn/T/pip-record-q9fjahjy/install-record.txt --single-version-externally-managed --compile --install-headers /Users/kido/anaconda3/include/python3.8/pyaudio Check the logs for full command output.
%

まあようするにportaudioをインストールしろよってのと,portaudio.hが見つかってねえこのぼんくらっていうエラーメッセージなのね. そうですかportaudioを入れればいいのね?

% brew install portaudio

ってするとあっさりportaudioは入る.だから

% pip install pyaudio

って続けて打つとまた同じエラー..

とりあえずportaudioがインストールしたportaudio.hを見つけて,そのリンク先ライブラリも指定するかってなって

% sudo env LDFLAGS="-L/opt/homebrew/Cellar/portaudio/19.7.0/lib" CFLAGS="-I/opt/homebrew/Cellar/portaudio/19.7.0/include" pip install pyaudio
WARNING: The directory '/Users/kido/Library/Caches/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting pyaudio
  Downloading PyAudio-0.2.11.tar.gz (37 kB)
Building wheels for collected packages: pyaudio
  Building wheel for pyaudio (setup.py) ... done
  Created wheel for pyaudio: filename=PyAudio-0.2.11-cp38-cp38-macosx_10_9_x86_64.whl size=23395 sha256=036d69d59371d4c0de2b7f8b99958ab5f59e382be1df098287330ed5779f28a2
  Stored in directory: /private/tmp/pip-ephem-wheel-cache-lc1upr5l/wheels/cf/be/f6/06f4d9fb96713a3ba58a480dd5739b3bf66ff0430de58a38c1
Successfully built pyaudio
Installing collected packages: pyaudio
Successfully installed pyaudio-0.2.11
%

とするとちゃんとインストールできたよ!じゃあね!


2021年09月21日 [mac] ssh経由でX Windowを表示するだけの話 / Rをjupyter notebookで使う話

_ [mac] ssh経由でX Windowを表示できたはずなのに...

ssh ホスト名 -X

ってするとリモートのX Windowを表示できたじゃん?でも気づいたらmacでは表示できなくなってた.あれー?ということで/etc/ssh/ssh_configに以下を追記するよ

XAuthLocation /usr/X11/bin/xauth

で,macのXQuartzに飛ばしてくれるよ!じゃあね!

_ [R応用] みんな大好きjupyter notebookでRを使えるようにするよ

Rをターミナルで立ち上げるじゃん?

install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest'))
devtools::install_github('IRkernel/IRkernel')
IRkernel::installspec()

ってすると,IR kernelがインストールされてjupyter notebookの実行環境にRが追加されちゃうよ.みんなも試してみてね!R4.xでも確認したよ!


2021年09月14日 [OpenCV][ubuntu] Jawmotion Web Application

_ [OpenCV] 試しにリリース

Jawmotion Web Applicationを整理してみた. とりあえず,setupとinstallationは書いてみたんだけど,まあ雑です.

OpenFace自体,更新が2016年に止まっているような遺産っぽいプロジェクトなんだけど,Githubの方は地味に更新している.なので試しにUbuntu 20.04でbuildしてみたら動いた. だから,僕らのJawmotionもUbuntu 20.04で動くので,お試しリリースしてみた.

Githubの方ではあんまり書いてないんだけど顎関節の動きをキャプチャするアプリなんだよね.でも精度が上がらないからほぼお蔵入り状態なんだ. 顎に1cmくらいのシールをつけて顎を動かすと,キャプチャしてくれるんだ.そんなアプリが何に役に立つのかは内緒なんだけど,興味あるんなら試してみて!じゃあね!

_ [OpenCV][ubuntu] OpenFace 2.2.0のインストール

先にも書いたけど,OpenFaceって終わったプロジェクト感を出してて,もう使えないのかな?って思うんだけど,それは気の所為で実はほんのり活動している. それは一部のcontributorによるものだけど,それはそれですごくありがたい.おかげでUbuntu 20.04 LTSで動く. でもちょっとあれなので,OpenFace 2.2.0のインストール方法を書き留めておく.まずgithubからcloneしてインストールスクリプトを動かしていくよ!

git clone https://github.com/TadasBaltrusaitis/OpenFace.git
cd OpenFace
./install.sh
...
-- Configuring done
CMake Error: install(EXPORT "OpenCVModules" ...) includes target "opencv_core" which requires target "tbb" that is not in any export set.
CMake Error in CMakeLists.txt:
  export called with target "opencv_core" which requires target "tbb" that is
  not in any export set.

てな感じでinstall.shを動かすとOpenCV 4.1.0をダウンロードしてcmakeしようとするんだ.そこでtbbが見つからないぜ!っていうCMake Erroがでて終了しちゃう.あーやっぱ終わったプロジェクトってあれだなーって思うのはちょっと待ってほしい.実はちゃんとMakefileができているんだ.

cd opencv-4.1.0/build
make -j4

ってやってほしい.opencv 4.1.0のmakeは僕の環境では死ぬほど時間がかかったけどちゃんとできる. 後は,install.shができなかったことをやるだけなんだ.まずはdlibをbuildしていくよ!

wget http://dlib.net/files/dlib-19.13.tar.bz2
tar xf dlib-19.13.tar.bz2
mkdir -p dlib-19.13/build
cd dlib-19.13/build
cmake ..
cmake --build . --config Release
sudo make install
sudo ldconfig

最後にOpenFace本体だ.

cd ../..
mkdir -p build
cd build
cmake -D CMAKE_CXX_COMPILER=g++-8 -D CMAKE_C_COMPILER=gcc-8 -D CMAKE_BUILD_TYPE=RELEASE ..
make

んで最後に顔モデルをhttps://github.com/TadasBaltrusaitis/OpenFace/wiki/Model-downloadからダウンロードしてOpenFace/build/bin/model/patch_expertsに置くとFaceLandmarkVidとかのアプリがちゃんと動くようになる.

どうやらmacOSでもbuildできるっぽいから,また試してみるよ!じゃあね!


2021年09月11日 [子供の数学] 最近の中学生ってこんなん解いてるの?

_ [子供の数学] 12個の玉

子供と遊んでいると,ある問題に出くわした.初見,簡単じゃね?って思ってたら,思いの外,難しかった.というか,え?あれ?ってなった.なので備忘録的に残しておく.

んで,問題.

12個の玉がある.うちひとつだけ重さが違うものが存在する.天秤を3回だけつかい,そのひとつを特定せよ.またその際,他の玉と重いのか軽いのかも特定せよ.

てな感じ.まあよくありそうな問題.

じゃあ解決編いくよー.

4つずつ、3つのグループに分ける。それぞれA,B,Cとする。また、重量の違う玉をxとする。
AとBを天秤にかける。(1回目)
|
+-傾いた場合
| ABの8つの玉のうちにxが混じっていることが解る。でかつ重い可能性がある玉が4つ、軽い可能性がある玉が4つとなる。
| その8つの玉を次のようにグループ分けする。
|   重軽軽・・・D
|   重軽軽・・・E
|   重重・・・・F
| で、次にDとEを天秤にかける(2回目)
| |
| +-Dに傾いた場合
| | Dの重い玉、もしくはEの2つの軽い玉のいずれかにxがあると特定できる。つまり3つに特定できる。
| | でEにあった2つの軽い玉を天秤にかける(3回目)
| | +-傾いた場合
| | | 軽かった方が、x
| | +-つりあった場合
| |   天秤にかけなかった、重い玉がx
| |
| +-Eに傾いた場合
| | Eの重い玉、もしくはDの2つの軽い玉のいずれかに、以下同文。
| |
| +-つりあった場合
|   Fの2つのいずれかがxであると特定できる。よって、Fの2つを天秤にかける(3回目)
|     傾いた方が、x
|
+-1回目の天秤でつりあった場合
  Cの4つの玉にxが混じっていることが解る。またABはすべて同じ重さということが解る。
  Cのうち3つを選択し、またAのうち3つを選択し天秤にかける(2回目)
  |
  +-元Cに傾いた場合
  | 天秤にかけた元Cの3つが重いことが解る。
  | 3つのうち2つを天秤にかける。(3回目)
  | +-傾いた場合、
  | | 2つのうち重い方がx
  | +-つりあった場合
  |  残りの1つがx
  |
  +-元Aが傾いた場合
  | 天秤にかけた元Cの3つが軽いことが解る。
  | 上記と同様に、以下同文。
  |
  +-つりあった場合
    天秤にかけなかった1にxが特定される。
    で、同じ重さの玉と、xを天秤にかけてると(3回目)xが軽いか重いが解る。

なにこれ,こんな場合分けしなきゃいけないの!? じゃあね!


2021年09月07日 [Web] VisCloud

_ [Web] レスポンシブデザイン

たぶん誰一人として見てないであろうVisCloudのホームページを更新して,レスポンシブデザインを適用してみた.スマホやタブレットからでも見れるんだけど左端に置いてるメニューが邪魔で,画面小さい端末ではメニューを隠れるようにしてみた. 久しぶりにCSSとか触って気が狂いそうに.

それとついでこの日記(tdiary5.x)もレスポンシブっぽくしてみた. S-blueのテーマを使っているのですが,画面が小さいと左のメニューは邪魔なので,それを消してみるデザインにCSSを付け加えてみた.

.sidebar {
    display: block;
}
div.main {
    margin-left: 20%;
}
body {
    margin-right: 8%;
    margin-left: 8%;
}
pre {
    font-family: Consolas, Menlo, 'Liberation Mono', Courier, monospace;
    font-size: 0.95em;
    letter-spacing: 0.03em;
    overflow: auto;
}
@media screen and (max-width: 1000px){
    .sidebar {
        display: none;
    }
    div.main {
        margin-left: 0%;
    }
    body {
        margin-right: 0px;
        margin-left: 0px;
    }
    img.photo {
        width: 100%;
    }
}

画像の説明


2021年08月10日 [tDiary]ubuntu 20.04へtDiaryのインストール

_ [ubuntu] ubuntu 20.04でtDiary5.1.6をインストールしてみる.

tDiaryってね,一昔前に流行ったweb日記,ブログツールなのね.例えばレンタルサーバなどで提供されているツールだったりするの.それがね,rubyで動いてるんですよ奥さん. rubyっていうと1.8系,2.0系とバージョンが変わるたびにライブラリとかの使い方とかが変わっちゃって下位互換性を無視してくれた提供をしてくれることで有名なんだけど色々と大変です.さらに「えっ!?今どきtDiary?」みたいな感じで,最新に近いOSで動かすとかtipsがあんまりないんだよね. ということでubuntu 20.04 LTSにインストールしてみるよ!rootでよろしく!

apt install libapache2-mod-ruby
apt install ruby-bundler
apt install ruby-dev
apt install rbenv
tar zxvf tdiary-v5.1.6.tar.gz
cd tdiary-v5.1.6
bundle install

で,次はrubyのパッケージを

gem install date -v '3.1.1' --source 'https://rubygems.org/'
gem install time -v '0.1.0' --source 'https://rubygems.org/'
gem install net-ftp -v '0.1.2' --source 'https://rubygems.org/'
gem install mini_portile2 -v '2.5.2' --source 'https://rubygems.org/'
gem install racc -v '1.5.2' --source 'https://rubygems.org/'
gem install nokogiri -v '1.11.6' --source 'https://rubygems.org/'
gem install rack -v '2.2.3' --source 'https://rubygems.org/'
gem install rack-test -v '1.1.0' --source 'https://rubygems.org/'
gem install regexp_parser -v '2.1.1' --source 'https://rubygems.org/'
gem install xpath -v '3.2.0' --source 'https://rubygems.org/'
gem install capybara -v '3.35.3' --source 'https://rubygems.org/'
gem install childprocess -v '3.0.0' --source 'https://rubygems.org/'
gem install json -v '2.5.1' --source 'https://rubygems.org/'
gem install docile -v '1.4.0' --source 'https://rubygems.org/'
gem install simplecov -v '0.10.2' --source 'https://rubygems.org/'
gem install simplecov-html -v '0.10.2' --source 'https://rubygems.org/'
gem install simplecov -v '0.16.1' --source 'https://rubygems.org/'
gem install sync -v '0.5.0' --source 'https://rubygems.org/'
gem install tins -v '1.29.1' --source 'https://rubygems.org/'
gem install term-ansicolor -v '1.7.1' --source 'https://rubygems.org/'
gem install thor -v '1.1.0' --source 'https://rubygems.org/'
gem install coveralls -v '0.8.23' --source 'https://rubygems.org/'
gem install debase-ruby_core_source -v '0.10.12' --source 'https://rubygems.org/'
gem install debase -v '0.2.4.1' --source 'https://rubygems.org/'
gem install diff -v '1.4.4' --source 'https://rubygems.org/'
gem install diff-lcs -v '1.4.4' --source 'https://rubygems.org/'
gem install faraday-em_http -v '1.0.0' --source 'https://rubygems.org/'
gem install faraday-em_synchrony -v '1.0.0' --source 'https://rubygems.org/'
gem install faraday-excon -v '1.1.0' --source 'https://rubygems.org/'
gem install faraday-net_http -v '1.0.1' --source 'https://rubygems.org/'
gem install faraday-net_http_persistent -v '1.1.0' --source 'https://rubygems.org/'
gem install multipart-post -v '2.1.1' --source 'https://rubygems.org/'
gem install ruby2_keywords -v '0.0.4' --source 'https://rubygems.org/'
gem install faraday -v '1.4.2' --source 'https://rubygems.org/'
gem install fastimage -v '2.2.3' --source 'https://rubygems.org/'
gem install jasmine -v '2.99.2' --source 'https://rubygems.org/'
gem install jasmine-core -v '2.99.2' --source 'https://rubygems.org/'
gem install phantomjs -v '2.1.1.0' --source 'https://rubygems.org/'
gem install jasmine -v '2.99.0' --source 'https://rubygems.org/'
gem install launchy -v '2.5.0' --source 'https://rubygems.org/'
gem install mime-types-data -v '3.2021.0225' --source 'https://rubygems.org/'
gem install mime-types -v '3.3.1' --source 'https://rubygems.org/'
gem install sawyer -v '0.8.2' --source 'https://rubygems.org/'
gem install octokit -v '4.21.0' --source 'https://rubygems.org/'
gem install pit -v '0.0.7' --source 'https://rubygems.org/'
gem install power_assert -v '2.0.0' --source 'https://rubygems.org/'
gem install racksh -v '1.0.0' --source 'https://rubygems.org/'
gem install redcarpet -v '3.5.1' --source 'https://rubygems.org/'
gem install rexml -v '3.2.5' --source 'https://rubygems.org/'
gem install rspec-support -v '3.10.2' --source 'https://rubygems.org/'
gem install rspec-core -v '3.10.1' --source 'https://rubygems.org/'
gem install rspec-expectations -v '3.10.1' --source 'https://rubygems.org/'
gem install rspec-mocks -v '3.10.2' --source 'https://rubygems.org/'
gem install rspec -v '3.10.0' --source 'https://rubygems.org/'
gem install ruby-debug-ide -v '0.7.2' --source 'https://rubygems.org/'
gem install rubyzip -v '2.3.0' --source 'https://rubygems.org/'
gem install selenium-webdriver -v '3.142.7' --source 'https://rubygems.org/'
gem install sequel -v '5.44.0' --source 'https://rubygems.org/'
gem install sqlite3 -v '1.4.2' --source 'https://rubygems.org/'
gem install test-unit -v '3.4.1' --source 'https://rubygems.org/'
gem install webrick -v '1.7.0' --source 'https://rubygems.org/'

こんだけのパッケージを追加でインストールしなければいけないんだよね.大変だね!


2020年10月13日 [OSX] macOSのDockerでUbuntuを動かしてX Windowの画面に出す

_ [Docker] macOSのDockerでubuntu 18.04を動かす

Dockerで便利だよね.軽いし.でもDockerって直感的じゃないんだよね.起動コマンドもdocker runとかdocker startとか違いとか,docker attachとdocker execの違いとか,イメージとかコンテナとかの関係性も初見殺しっぽいし.イメージを取得/作成するにしてDockerfileを用意する場合とレポジトリから取得する場合もあるし. んで,今回はレポジトリからdockerコマンドで取得する方法をざっくり書いていくね.あとDocker for macはインストールしたものとして,話をずんずん進めていくよ.

まずコンテナの素であるDockerイメージがどれだけあるか確認するコマンド,docker imagesからだ.

nigawa:~ kido$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
xeyes               latest              13060792b6cd        19 hours ago        9.95MB
alpine              latest              a24bb4013296        4 months ago        5.57MB
nigawa:~ kido$

IMAGE IDはDockerイメージを特定するIDで,これを元にコンテナを作らなきゃいけないのね.コンテナが仮想OSのインスタンスね. で,ubuntu 18.04のイメージをレポジトリから持ってくるコマンドがこちら.

nigawa:~ kido$ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
171857c49d0f: Pull complete
419640447d26: Pull complete
61e52f862619: Pull complete
Digest: sha256:646942475da61b4ce9cc5b3fadb42642ea90e5d0de46111458e100ff2c7031e6
Status: Downloaded newer image for ubuntu:18.04
nigawa:~ kido$
nigawa:~ kido$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
xeyes               latest              13060792b6cd        19 hours ago        9.95MB
ubuntu              18.04               56def654ec22        2 weeks ago         63.2MB
alpine              latest              a24bb4013296        4 months ago        5.57MB
nigawa:~ kido$

これでイメージは取得できた. で,普通に

docker run --name test_ubuntu1804 -itd ubuntu:18.04 /bin/bash

ってすると,test_ubuntu1804っていうCONTAINER NAMEのコンテナが作成,起動しちゃうんだけど,今回はX Windowアプリを画面に出したいのね.だからちょっと変える.

_ [Docker] DockerコンテナからのX Windowアプリの表示を許す

macOSはX WindowがXQuartz というX11の実装を用意している.これを起動しておく必要がある.んで,XQuartzの環境設定からセキュリティyを

  • 接続を認証(Authenticate connections
  • ネットワーク・クライアントからの接続を許可(Allow connections from network clients

のチェックを入れておくのだ.これで事前準備オッケー.

で,Dockerのイメージ作成からやりなおし.

docker run -it -d --name test_ubuntu1804 -e DISPLAY=$(hostname):0 -v ~/.Xauthority:/root/.Xauthority ubuntu:18.04

これでDISPLAYでXサーバのホスト名(localhostでも127.0.0.1でもオッケー)を指定し,macOSの.Xauthorityをubuntuの/root/.Xauthorityとしてマウントするの.そうするとX Windowアプリが表示されるようになるぜ.その前に,ubuntuのパッケージ郡を更新しておいてね.

nigawa:~ kido$ docker exec -it test_ubuntu1804 /bin/bash
root@ecef00f1fad9:/# apt-get -y update
...
root@ecef00f1fad9:/# apt-get -y upgrade
...
root@ecef00f1fad9:/# apt install x11-apps
...
root@ecef00f1fad9:/# xeyes

これでDocker ubuntuのX Windowアプリが動く環境をmacOSで作れたぜ! もしX Windowアプリが表示されないときはDockerを再起動すればいいよ!じゃあね!

xeyes


2020年10月07日 [R応用] OCTOPUSのOpenMPIでRを動かそう

_ [R応用] OCTOPUSにRをインストールしよう

Rってメモリインテンシブですっごいパフォーマンスに問題があるんだけど,みんな使いたいよね?これからのデータサイエンス的な解析作業増えてくるけど,もちろんデータも増えてくるし,もうみんなご苦労さまですよね.で,AWSとかGoogle Cloudとかsakuraとかクラウドサービスに頼る手もあるんだけど,実は大学の大型計算機センターの計算機って実は安いんだぜ?ということで弊センターのクラスタ型汎用スパコン,OCTOPUSを使ったらいいと思うんだ.大容量メモリノード(6T)もあるしね.でも押しなべてセンターの計算機ってだいたい古典的な計算アプリが高速に動くように設計されているし,そもそも運用がライトウェイト言語向けじゃないのね.一応動くけどサブセット,みたいな. で,実はOCTOPUSにもRはインストールされているものの,MPI対応版じゃないので,自前でコンパイルしちゃいましょう. 現時点で最新版のR-4.0.2を以下の手順でインストールしてみよう.OCTOPUSアカウントは自前で取得してくれよな!ちなみにOCTOPUSは

  • RHEL 7.6
  • GCC 4.8.5
  • OpenMPI 3.0.0rc6

ってな環境です. あ,ビルドの前に~/.R/Makevarsを以下のようにしておいてね!大事だよ!

$ vi ~/.R/Makevars
CC=mpicc
CXX=mpic++
FC=mpif90
CFLAGS=-O3 -fopenmp -std=c11 -L/usr/mpi/gcc/openmpi/lib64
CXXFLAGS=-O3 -fopenmp -L/usr/mpi/gcc/openmpi/lib64
FFLAGS=-O3 -fopenmp -L/usr/mpi/gcc/openmpi/lib64

じゃあ,Rをビルドしていこう.

$ wget https://cran.r-project.org/src/base/R-4/R-4.0.2.tar.gz
$ tar zxvf R-4.0.2.tar.gz
$ cd R-4.0.2
$ BASE=/octfs/apl/HPC-X/hpcx-v2.2.0-gcc-MLNX_OFED_LINUX-4.2-1.2.0.0-redhat7.3-x86_64
$ source $BASE/hpcx-init.sh
$ hpcx_load
$ export CC=mpicc
$ export CXX=mpic++
$ export FC=mpif90
$ export CFLAGS="-O3 -fopenmp -std=c11 -L/usr/mpi/gcc/openmpi/lib64"
$ export CXXFLAGS="-O3 -fopenmp -L/usr/mpi/gcc/openmpi/lib64"
$ export FFLAGS="-O3 -fopenmp -L/usr/mpi/gcc/openmpi/lib64"
$ export LD_LIBRARY_PATH=/usr/mpi/gcc/openmpi/lib64:$LD_LIBRARY_PATH
$ configure
...
$ make

ってすればOpenMPI対応版のRがビルドできるよ!

_ [R応用] Rmpiをインストールしよう

RmpiはRからMPIを使うためのパッケージなんだけど,最新の(0.6.9)をインストールして使おうとすると,core dumpしまくって大変なんだ.なのでバージョンを固定してインストールするよ.バージョンは0.6.6だ!

$ cd R-4.0.2
$ wget https://cran.r-project.org/src/contrib/Archive/Rmpi/Rmpi_0.6-6.tar.gz
$ ./bin/R CMD INSTALL ../Rmpi_0.6-6.tar.gz --configure-args="--with-mpi=/usr/mpi/gcc/openmpi --with-Rmpi-type=OPENMPI"

これで完了. みんなもOCTOPUSのRmpiでレッツ並列R!