体力,気力,ときどき知力

情報系大学院生 兼 HPC系ソフトウェアエンジニアのメモ書き.やったことを貼って後日にコピペ再現するために書いているので新規性・汎用性・芸術性は考えてません.数値計算,高精度演算,SIMD, vim, Linuxなど.

gcloud initでlocalhost:8085に繋がらないとか言われて10分くらい悩んだ話

レンタルサーバにgcloudのAPIを入れようと思って,あんまり読まずに↓の解説のコマンドだけをコピペして進めていた.

Linux 用のクイックスタート  |  Cloud SDK のドキュメント  |  Google Cloud

そしたらgcloud auth loginで出てきたコマンドをブラウザにコピペしたらlocalhost:8085に繋がらないとか言われる.

ハァ?なんだそれ.どこからlocalhost出てきたんやと思っていたが, 冷静によくよく見ると,設定した端末上でブラウザを開いて,localhostに対して認証が送られるという話だったようで, 当然のように繋がるはずはなかった.

よく読んだらちゃんと書いてあって,console-onlyを付けるという話だった.

curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-245.0.0-linux-x86_64.tar.gz
tar zxvf [ARCHIVE_FILE] google-cloud-sdk
./google-cloud-sdk/install.sh

gcloud init --console-only

これを付けると認証自体はブラウザで行わず,認証トークンの文字列だけ返ってくるようになるので, 別のマシンのブラウザからでも設定できる.

ちなみに gcloud authのほうでは,

gcloud auth login --no-launch-browser

という微妙に違うオプション名で苦しむ. おわり.

高精度演算(多倍長)をやりたいのでJuliaをはじめてみる,動機・導入・実行まで (on Fedora 29)

Motivation

いつもと全然違う,とある事の勉強をしようと思ったけど,C++で書くのやる気しないなーと思って,

ずっとやろうと思っていたScilabOctaveでやろうかと思って調べたら,Juliaが予想以上に私のやりたいことをやれそうだった.

Juliaって?

パッと調べて,記憶に残ってるのは,

  • JuliaはMITとかの人が作って,速くて書きやすいのが売りらしい.
  • JITなので初回実行時にコンパイルが走るらしい.
  • BLASLAPACKがバックエンドに使われてて数値計算やりやすいらしい
  • プログラムが書きやすい(構文が賢い)ようだ
  • マルチスレッドは簡単にかけそうだ.マルチプロセスは調べてない

で,私はどこに惹かれたか

別に多くの場合においてC++で困らないし,Pythonとか書いててもBLASとかLAPACK使うから結局Cのライブラリを呼ぶハメになるので, BLASが言語仕様に入ってても,別にBLASの関数とか大体使うのは覚えてるからいらねーや.と思っていたら,予想以上に欲しいものが言語的に採用されていた.

と,いうことで,高精度演算をやったときに,他の精度との精度比較するのに使いやすかったりしないかな?と思ってはじめることする.

気になっていること (別に調べて情報があるか/ないかをキチンと確認してない疑問)

初志を忘れてはいけないので,なぜ始めたのを記録しておく.

  • 動的型付けのように読める (ただし型を明示的に指定もできる)が,BigFloat型にバックエンドのBLAS / LAPACKは対応しているのか? ** BLAS / LAPACKは無理でも,特に型指定のないライブラリなら多倍長で実行してくれちゃったりするのか?(しかも速く!?)

  • マルチスレッドはどこまで便利か?速いか

  • プロファイラ周り.時間計測とかベンチマークの楽さ

  • Sparseの扱い(SparseをLAPACKに突っ込むと?とか)と,Sparse matrix formatの種類,スピード.

Install

Juliaの環境を構築するのは簡単. 環境はConohaのVPS上のFedora29

  • 落としてくる (現在のStableはjulia-1.1.0の模様)

Generic Linux Binaries for x86というのを落とせばいい Julia Downloads

  • tar xzvf ....で解答する

  • julia-1.1.0/binにPATHを通す

おわり.簡単だった.

なんか動かす

正しくPATHが遠てればjuliaコマンドを打つと対話画面が出てくるので

println("ごまちゃんかわいい")

とかやると,ゴマちゃんが可愛いことをJuliaが教えてくれる

今日はここまで

cronでIPアドレスの変更を見てDropboxに置くだけのスクリプト

自分用メモ。
毎回Dropboxに書き込むと、内容が同じでも同期されるのか?
不明だったのでtmpに書き込んでIP変更を判定してから、変更があったときだけDroboxのファイルに書き込みに行くようにした。

ifconfigするとlocalhostとか色々出てくるが、今回は172.*だけ取ってきたかったので、grepでそうしてる。
そのへんは適当に変えればいいとおもう

/usr/sbin/ifconfig | grep "inet 192" | awk '{print $2}' > ~/ip_watch/tmp
diff ~/ip_watch/tmp ~/ip_watch/ip_addr.txt

if [ $? -eq 0 ]; then
mv ~/ip_watch/tmp ~/ip_watch/ip_addr.txt
cp ~/ip_watch/ip_addr.txt ~/Dropbox/sc1_ip.txt
fi


クライアント側は後は適当に見るなりなんなり
sedかなんかで書き換えようかと思ったけど,今日はやめた

tmuxのセッション関係

プロジェクトごとにtmux上げてるので、暫く同じ仕事してて使わないとすぐわすれる。

セッションに名前をつける
tmux new -s my_session
現在のセッション名のリネーム
prefix + $
セッションの一覧取得
tmux ls
アタッチ
tmux attach -t セッション名

簡易的,コンパイル成功時のみプログラムをバックアップ

gitとか使ってbackupするのが普通だけど,トライアンドエラーをしていて,
何だか知らないけど動かなくなってゲシュタルト崩壊する.という謎の相談を受けた.

内心そんなのしらねーよ..と思いながら,まぁ適当なスクリプトを組んだので,
このまま貼り付けて使ってくれ>N君


DATE=`date +%m%d_%H%M_%S`
gcc hello.c && cp hello.c backup/hello_${DATE}.c


解説:
DATEって言う変数に日付を入れて,
コンパイルが成功したときだけ,backupっていうディレクトリの中に,
コード+日付のファイルをバックアップする

gnuplot 忘れがちなコマンドまとめ

  • 日本語が文字化けする

だいたいフォントの設定がおかしい.

ちなみにフォントの指定の仕方は,20ptでtimes new romanを使うなら,

set terminal postscript eps enhanced color font "/usr/share/fonts/msttcore/times.ttf,20"

のようにする.ディレクトリの場所は各々環境によって違うんだと思うけど,

でも,cygwinとかでは入ってるんだか入ってないんだかわからない.
Windowsのフォントのフォルダから探してきてもいいけど,面倒くさかったので,
適当に「明朝 フォント」などと検索して,ttfファイルを拾ってきて,
それを何処かにおいて指定するのが良いんじゃないかと思う.

  • 凡例をきれいにする.

基本的に,ここに書いてある3つは無条件にやっていいと思う.

凡例の場所は右上
set key right top

凡例の文字を左寄せにする.
set key Left

凡例のバーと文字を反転させる
set key reverse

  • EPSを出力したけど,Windowsで開くとなんか重たい.

gnuplotのためにimagemagic??とか入れてくといつの間にか開けるようになってるEPS
だけど,なんだか知らないけど重い.正直なところ起動したくない.

それに,そういうのが入ってないPCで仕事をしようと思うと開けなくて困る.

スクリプトの中にconvertコマンドを仕込んでおいて,
jpegかなにかで同時に出力しておけば良いんじゃね案.
(拡張子を自動で判断してくれるので,pngがよければfig.pngにすればいい)
convert -density 400x400 fig.eps fig.jpg