飽きるまでやります。

私の私による私のためのメモ。内容に一切の責任を負えません。

毎日論文のAbstractが送られてくるやつ

概要

色々な場所で話に聞く最新論文のアブストが毎日勝手に届くやつを今更作りました.

arxivAPIで論文を取ってきて機械翻訳してwebhookでIFTTTに投げてIFTTTを経由してLINEとSlackに通知するみたいな仕組みです.送信済み論文リストを毎回ファイルに読み書きして管理します.

IFTTTあたりはおおむねこの記事を参考にしました.

github.com

変更点

arxivPythonAPIで論文を取ってくる部分を作る→通知方法をぐぐって参考記事にたどり着く,という流れだったので論文取得部分はちょっと違うと思います.他にLINEだと長すぎると(?)テキストが省略されてしまうみたいな問題点があって直せないというか原因が分からないのでLINEとSlackに通知が行くようにしました.

定期実行

1日に一回自動で実行して毎日勝手に送られてくるみたいな仕組みを目的にしているのでなんらかの手段で定期実行させる必要があります.一番簡単なのは24時間付けっ放しのPCで動かすことで,研究室のマシンで動かそうかと3回くらい考えました.

とりあえずherokuを考えましたがファイルの書き出しができず(しばらく経つと消される),データベースを使えば解決されるようですが面倒でやめました.代わりにAWS LambdaとS3で動かすことにしました.

Lambdaで定期実行

この記事を参考にしました.

Lambdaで実行した関数からS3にアクセスしてpickleファイルの読み書きをする必要があり,そのために権限をうまいことやっていく必要があります.公式の通りにやれば良いです.

おわりに

AWSにちょっと詳しくなれました.

参考に倣って日本語訳を付けましたが正直翻訳の精度が良くないので英語読んだ方が分かりやすいみたいな感じでした.

参考

PythonでarXiv APIを使って論文情報取得、PDFダウンロード | note.nkmk.me
自動でArxivから論文を取得して、日本語に直してLineに投稿すれば、受動的に最新情報が収集できるかも!? - Qiita
【AWS】lambdaファンクションを定期的に実行する - Qiita
Lambda 実行ロールのアクセス権を Amazon S3 バケットへ付与する S3のアクセスコントロールまとめ - Qiita

外部院進の話

外部院進とは? 普通の院進との違いは? 学歴ロンダって?
この記事は琉大 Advent Calendar 2019 - Adventarの11日目の記事なので調べてみました!

概要

10日目id:anatofuz くんでした.内定1つ目おめでとうございます!

本日は外部大学院進学の話を書きます.ぼくは区分はy15で現在修士1年です.

はじめに

琉大Advent Calenderなので琉大生で埋まることが喜ばしいと考えて公開後暫く眺めていましたが,院生や卒業生で大半が埋まり若者のインターネット離れを感じ,主催のアナグラくんも自分の老害化を感じるなど言っていたので老害化を促進しようとぼくも参加することにしました.

大学院進学

大学院は同じ研究室に所属したまま同じ大学の大学院に進学するのが一般的かと思われます.実際y15の外部院進はぼく一人でした(多分).

大学院に進学する理由というのは複数考えられて,もっと研究がしたい(すばらしいですね),就活で有利になりたい,モラトリアム期間を延長したい(すばらしいですね),教授になりたい(すばらしいですね)等が挙げられます.

就活で有利になりたいという部分は諸説あると思っていて,R&D職を目指すとかAI開発者を目指すとかだと有利になるのかなと思います1.就活エアプですが.この辺は7日目の記事に明るいですがこの記事を読んでいる人はみんな読んでいますね.

一方でSEになりたい,SIerになりたい,プログラマになりたい,エンジニアになりたくない等であれば,もっと研究がしたい場合やモラトリアム期間を延長したい場合を除いて大学院に進学しなければならないということはないと思います.こっち方面の進路はまだぼくがスコープに入れていないのでこちら方面の就職×院進の話が聞きたい場合は他の先輩を尋ねてください.噂ではngt研にはメイド服が似合う可愛いM1がいるとかいないとか…!?

学部と同様に大学院にも講義はありますが,講義には期待しない方がいいと思います.サンプル数22ですがどちらも虚無講義3はあるようだし,虚無講義でないものは,興味がないものか自分の方が詳しいのどっちかになると思います.レベルが高い大学院でどうなのかは知りません.

外部院進

外部院進の話をする前にngym先生の面子を潰すわけにはいかないので書いておかなければなりませんが,ngym先生にはたいへんよくして頂きました.外部院進の時も多分快く送り出して頂いたし,計算機環境もあれ欲しいと言えばあれ買ってくれる太っ腹さでした.丁度昨日あたりに仮配属が決まったらしいので,B2以下の人も是非ngym研を志望して研究成果を出してngym研に予算を降らせましょう.ボスとの確執とかそういうものは一切ぼくの院進には関係ありません.

同期の面子も潰すわけにはいかないので書いておかなければなりませんが,たいへん良い同期に恵まれたと思います.人間関係の軋轢とかそういうものは一切ぼくの院進には関係ありません.

各方面の面子を立てたところで,外部院進を考えてもいいんじゃないかなという人としては

  • 県外出身
  • 親が許してくれる県内出身
  • 就職は沖縄県外でしたい
  • 研究室に博士以上がいない

あたりかと思います.

特に博士以上がいない環境というのは,研究したくて院進する人にはつらいとこかなーと思います.同期同士で研鑽を重ねたり研究室でトップを取るのも良いですが,教授より気軽4でかつ自分より遥かに強い人5がいる環境というのはありがたいものです.iiのどこの研究室に博士がいるとかはよく知りませんが.6

博士↑は多分思ってる以上に強い.

次に沖縄県外で就職したい人もおすすめです.交通費は出るとしても就活で頻繁に東京行きつつ講義受けつつ研究の進捗を出しつつバイトしつつゲームする生活は結構消耗すると思います7

しかしながら金が占めるウェイトは重いので,研究めっちゃしたいが金銭的な問題で県外に出ることが難しいという人はOISTを考えると良いと思います.日本さいつよらしいです.もっと金銭的に無理という人は一旦就職してから論文を出して博士を狙っている人がいるらしいので先輩に聞いてみましょう.

外部院進のやり方

基本的に

  • TOEIC8を早めに9受ける
  • 行きたい研究室を調べる
    • 博士↑の数
    • 研究分野
    • テーマの決め方
    • 特に海外の学会参加実績
    • ゼミの頻度
    • 雰囲気
  • 希望先研究室のボスとコンタクトを取る
    • 面談もできると◯
  • 試験勉強をする
    • 過去問を入手しましょう
  • 寝坊せずに受験する
  • 合格する
  • 書類を出す

という流れになると思います.

学歴ロンダって?

マネーロンダリングを元にする学歴を誤魔化すという意味のネットスラングらしいです.外部院進のことですね!
ところで人間は自分自身の劣等感がある部分について他者を攻撃するらしいですね.

友達100人できるかな

琉球大は沖縄という土地がそうさせるのかは定かではないですが結構友達作りやすい環境で,その意識で他大学院行くとギャップを感じるかもしれません(サンプル数3くらいなので他所のことは何も語れませんが).

コミュ力または一人で生きていけるメンタルが必要になるかもしれません.
ぼくは焼肉でもカラオケでも行きたいと思った時に一人で行けます,友達はいません.

特に理由はないですが一人でおいしく食べたラーメンの写真を載せたいと思います.

f:id:sdr816:20191211213001j:plain

f:id:sdr816:20191211212843j:plain

f:id:sdr816:20191211213114j:plain

f:id:sdr816:20191211213413j:plain

f:id:sdr816:20191211213602j:plain

f:id:sdr816:20191211213656j:plain

最後に

いかがでしたか? 外部院進の話をさせて頂きました! 本記事で多少なりともラーメンを食べたくなって頂ければ幸いです!

明日はパダワンさんです.


  1. 働いてる人紹介みたいなとこ覗くと東大博士卒が沢山いるので怖い

  2. ぼくが行ったところと琉大

  3. 大学院にまで行って教養科目みたいなものを受けさせられる仕組みを誰か解説してほしい

  4. 琉大iiは気軽な教授が多いような気がするけど

  5. そこらの博士より俺は強いぜという人には特に言うことはないです

  6. ngym研にはいます(ダイマ)

  7. TLを熱心に眺めている人は察していると思いますが

  8. TOEFLは高いぞ!

  9. 琉大院にはTOEICに間に合わなくて3万円のTOEFLで出願に滑り込んだ男がいるらしい

DockerでYOLO v3

概要

Dockerでkeras-yolo3をGPUで動かしました.

github

github.com

Dockerfile

FROM nvidia/cuda:9.0-cudnn7-devel

# apt
RUN apt update
RUN apt install -y bzip2 wget git imagemagick

# install Anaconda3
RUN wget -q https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
RUN touch .bashrc
RUN bash Anaconda3-5.0.1-Linux-x86_64.sh -b
ENV PATH $PATH:/root/anaconda3/bin

# pip install
RUN pip install tensorflow-gpu==1.12.0 keras pillow matplotlib

# git clone keras-yolo3
RUN git clone https://github.com/qqwweee/keras-yolo3.git
WORKDIR /keras-yolo3

# download weights
RUN wget -q https://pjreddie.com/media/files/yolov3.weights
RUN python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

# mount dir(外から画像を置く)
RUN mkdir input_img

CMD ["python", "yolo_video.py", "--image"]

インストール

imagemagic

今回はこれにハマりました.yoloはPILで画像を表示していて,PILはimagemagicで画像を表示しているようです.

Anaconda3

apt install python3-pipでは面倒そうな問題が起こったのでAnacondaを入れました.容量問題がありますが今回は気にしないことにします.

tensorflow-gpu

CUDA9.0に対応しているtensorflow-gpu1.12.0を入れています.

keras-yolo3

githubからcloneしたのち,ディレクトリに移動します.

weights

githubの手順通りにweightsをダウンロードしてkeras用にコンバートします.

mount

keras-yolo3/の下に試したい画像を置くためのディレクトリを作っておきます.お試しなので適当です.

CMD

yolo_video.pyを実行すればyoloが動きますが,--imageオプションで画像モードにしています.お試しなので適当です.

docker run

docker run -it --rm \
-v ~/path/to/input_img/:/keras-yolo3/input_img \
keras_yolo3

でrunするとimageモードに入って入力画像のパスが要求されるのでinput_imgに画像を置いて指定すれば物体検出をしてくれます.

しかしながらX Window System的なあれで結果画像は表示されません.

dockerでGUI

qiita.com

お試しなればこそ結果画像を表示させたいので↑を参考にさせて頂きました.

imagemagicはここで必要になります.あとは参考の

X11アプリケーションのDockerコンテナを起動する

のオプション通りです.

docker run -it --rm 
-v ~/path/to/input_img/:/keras-yolo3/input_img 
-v $HOME/.Xauthority:/root/.Xauthority 
-e DISPLAY=$DISPLAY 
--net host 
keras_yolo3

結果

f:id:sdr816:20190620165044p:plain 親の顔より見た画像

DockerでMNIST

概要

nvidia-docker2 + Anaconda3で環境を作ってkerasでmnistしました.

環境

ubuntu16.04.5
TITAN V

前準備

dockerとnvidia-docker2をインストールします.
デフォルトランタイムをnvidiaにします.

Dockerfile

FROM nvidia/cuda:9.0-cudnn7-devel

# apt
RUN apt update
RUN apt install -y bzip2 wget git

# install Anaconda3
RUN wget -q https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
RUN touch .bashrc
RUN bash Anaconda3-5.0.1-Linux-x86_64.sh -b
ENV PATH $PATH:/root/anaconda3/bin

# conda install
RUN pip install tensorflow-gpu==1.12.0
RUN pip install keras

# install mnist_sample
RUN wget https://raw.githubusercontent.com/fchollet/keras/master/examples/mnist_cnn.py

CMD ["python", "/mnist_cnn.py"]

proxy問題

proxy環境下で作業を行なっていたのでありとあらゆるところでproxyが邪魔をしてきました.
docker pullaptwgetpip,果てはMNISTのデータダウンロードまで,地獄すぎる…

docker hubから持ってくる際のproxy設定

qiita.com

/etc/systemd/system/docker.service.d/http-proxy.confにプロキシの設定を書きました.
/etc/systemd/system/docker.service.d/docker.confdnsの設定を書きました.

Dockerfileの中で通信する際のproxy設定

qiita.com

--build-argで外から渡す or ~/.docker/config.jsonに書くのが良いようです.
config.jsonに書きました.

aptは小文字のproxy環境変数を見てpipは大文字のproxy環境変数を見るっぽいんですがhttp_proxyにもHTTP_PROXYにも反映してくれるようです.すごい!

CUDA,tensorflow,ドライバあたりの依存関係

いつもの…
ここここを見てなんとかしました.

nvidia/cuda

hub.docker.com リンクからグラボ,ドライバにあった物を使います.

Anaconda3

rf00.hatenablog.com

ubuntu16.04でapt install python3-pipするとpipが古くてpip installできないみたいなエラーが発生しました.
そのほかkerasやらtensorflowやらの兼ね合いもありそうでvanilla pythonを入れるのがしんどそうだったのでAnaconda3を入れることにしました.
2019.6現在python3.7は安定板tensorflow-gpu1.13.1のサポート外で動かないのでAnaconda3でpython3.6の物をインストールしました.

pyenvでAnacondaをインストールするような記事もありましたがDockerでpyenv使うのもなーと思ったのでインストーラから入れました.
インストールの際bash -bにしないとyes or noを入力しろと言われて進まないんですが-b入れたらなぜ動くのかが分かりません.

pip install

tensorflow-gpu1.13.1はCUDA9.0に対応していないため12.0をインストールしています.
CUDA10.0にしろという話ですがグラフィックドライバのアップデートには良い思い出がないので避けました.
conda installだと依存関係を勝手に解決してくれるせいで衝突が起きたのか動かなくなったのでpipにしました.

buildとrun

docker build -t mnist .

でビルドして

docker run --rm -it mnist

で実行できました.

雑感

ただでさえdockerの知識もOSの知識もないのにproxyが絡んできてつらかった…

TITAN V + オンボード出力なしPCにubuntu16.04を入れる

概要

オンボード出力がなくて(グラボ出力のみ)TITAN Vが刺さっているPCにubuntu16.04を入れました.

ubuntuにはnouveauという汎用グラフィックドライバが入っていて,これのおかげでドライバを入れなくてもグラボ出力ができるらしいです.
しかしながらTITAN Vのような新し目のグラボだと対応していないらしく,OSをクリーンインストールした直後では起動しても何も映らないという現象が起こりました.

こういう場合通常はオンボード出力で起動してnvidiaドライバをインストールすると思いますが,オンボード出力がMBに無くて困ったという感じです.

多分原因は上記だと思いますがもしかしたらまた違う理由だったのかもしれません.

対応

起動

OSインストールに使ったLiveCD(USB)を使ってインストールなしでubuntuを起動します.

マウント

USBの中に入ったubuntuを起動しているので,HDDにインストールされているOSをマウントします. ディスク構成としては

  • sda1 /
  • sda2 swap
  • sda3 /boot
  • sdb1 /home

という感じです.

参考

qiita.com

大変参考になりました.

作業

$ sudo su -
# mount /dev/sda1 /mnt
# mount /dev/sda3 /mnt/boot
# mount /dev/sdb1 /mnt/home
# for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
# chroot /mnt

OS何もわからないので参考そのままにマウントしてます,forあたり.
/homeのマウントはいらないような気がします.

proxyとvimの設定

必要があったのでやりました.

nouveau無効

参考

qiita.com

おおむね参考通りにやりました.

作業

# vi /etc/modprobe.d/blacklist-nouveau.conf

中身も同様です.

blacklist nouveau
options nouveau modeset=0

記憶が定かではないですが再読み込みはしてないような,再起動はしていません.

graphics-driversリポジトリを追加

# apt search "nvidia-[0-9]"

を実行して入れたいドライバがなかったらリポジトリの追加をします.

# add-apt-repository ppa:graphics-drivers/ppa
# apt update

ドライバのインストール

もう一度searchするとドライバが増えていると思うので,必要な物をインストールします.
ubuntu16.04でTITAN Vは390が必要らしいです.

# apt install nvidia-390

nvidia-smiが通ると思うので作業は終わりです.

終わりに

こんな限定的な状況で環境構築するのはもう体験したくないんじゃ

フラクタルのシダ

概要

ja.wikipedia.org

en.wikipedia.org

フラクタルのシダをPythonでやってみました.Barnsleyのシダともいうらしいです.
Wikiの式をそのまま写しただけです.

結果

f:id:sdr816:20190530112303p:plain

雑な解説

 x _ {n+1} = 0
 y _ {n+1} = 0.16y _ n
1%で選択され青色の部分に相当します.

 x _ {n+1} = 0.2x _ n - 0.26y _ n
 y _ {n+1} = 0.23x _ n + 0.22y _ n + 1.6
7%で選択され赤色の部分に相当します.

 x _ {n+1} = -0.15x _ n + 0.28y _ n
 y _ {n+1} = 0.26x _ n + 0.24y _ n + 0.44
7%で選択され緑色の部分に相当します.

 x _ {n+1} = 0.85x _ n + 0.04y _ n
 y _ {n+1} = -0.04x _ n + 0.85y _ n + 1.6
85%で選択され黒色の部分に相当します.1つ前の点を縮小しちょっと傾けて見た目的に1段上にコピーします.

青色の点の一番下の点からスタートします.次にだいたい黒が選ばれると思うので,1段上の茎に相当する1点に描画します.次もだいたい黒が選ばれると思うので,更に1段上の茎に相当する1点を描画します.85%を引き続ければ一番先端の部分まで描画されます.

どこかで黒ではなく青または赤を引いた場合,座標変換され相応の場所が描画されます.つまり描画点のどこの座標にいても変換式で赤の部分に来るようになっています,はえーすっごい.

青または赤を描画したのちだいたい黒が選ばれると思うので,今度は1段上の葉に相当する1点を描画します.85%を引き続ければ縮小されながらどんどん上の段の葉が描画されます.

数式の詳細な解説は数学が得意な人がどこかでしてくれていると思います.

PyCon Kyushu in Okinawa 2019に参加した話

概要

PyCon Kyushu in Okinawa 2019に参加しました.

お前誰よ

この項を入れることでPython界隈知ってる感が出るそうです.
東京の某大学院の修士1年生で,昨年度まで沖縄にいて実行委員長と友人であったり面識がある人が登壇者であったりしたため参加しました. 交通費支援ありがとうございます.

2018年のPyConJPでは沖縄→東京の交通費を出して頂き,今回も交通費を出して頂いたのでコミュニティに少しでも恩を返そうという動機で当日スタッフで参加しました.

当日スタッフ

開場1.5時間ほど前に実行委員と当日スタッフの間で面通しがあり,全てのスタッフにタイムスケジュールと役割分担が振られていたので確認等が行われました.開場時間迄はメイン会場の整備やサブ会場1階にあった企業ブースの準備等が行われました.

開場時間あたりからは個々に割り当てられた役割をこなしていきました.当日スタッフはこの時間は受付または誘導が多かった印象です(当日スタッフに会場となった琉球大学の学生が多かった,というのもある).私も誘導係をしましたが配置場所の問題か特に道がわからないという人もおらず基本的に挨拶BOTをしていました.

キーノート開始時間からは全スタッフメイン会場におり聞いいていい時間だったので,キーノートの大城信晃さんの良い話を聞けました.

キーノート終了後はトーク会場に移動となり,ここでも私は誘導係でした.日本で3番目に広い敷地の琉球大学とは言え前の人についていけばいい感で迷子になる人はいなかったようです.導線があまり良くなく企業ブースを余り人が通らない事態になってしまったようで,辛い感じでした.一応誘導のポスターは貼りましたが例えば学生が先導していたら企業ブースを通らないでトーク会場に行けるルートが一般的でそちらを通りそうなので,やむなしという感じもありました.

トークセッションでは当日スタッフは受付やセッションレポート,タイムキーパー等各々役割を振られていました.私は弁当配布係だったので弁当を運んだり飲み物を運んだりランチタイムが始まったら配ったりといったことをしていました.そういう訳で午前トークは聞くことができませんでした.スタッフで参加した以上ここはしょうがないですね.私だけという訳ではなく,できるだけ平等に聞けるよう考慮はしてもらえます.

午後セッションでは2トーク分セッションレポート係が振られていたため,聞きつつメモしつつ,という感じでした.午後残り2トークは役割なしだったのでこの時間もトークを聞けました.

クロージング後は懇親会までの間再び誘導係が割り振られ,懇親会後の片付けを以って当日スタッフの仕事は終わりました.

所感

キーノートは,会場柄学生も何割かおり大変エモい話だったのではないでしょうか.人との繋がり,わかる,という感じでした.
トークに関しては,私もコードは綺麗に書いて欲しいし綺麗じゃないと落ち着かない人間だけどツールは使ってなかったなー,分析系はあんま使わないと思うけど大学で使ってみるかー だとか
hotoさんのトークはやっぱ面白いなー(話し方聞かせ方がうまい) だとか
自分のアイデアを形にできる人ってすごいなーハッカソンかー誰か一緒に出てくれ!! だとか
コミュニティの話わかる… だとか
どのトークも聞けて良かったです.

懇親会

何も成してないので懇親会はやっぱり辛かったです.
辛くならないようにしないとな,という感じでした.

おわりに

少しでも当日スタッフ興味あるなーという人の参考になれば幸いです.
交通費支援にたいへん感謝します. 個人的に友達や沖縄にいる間バイトさせてもらっていた会社の方々にも会えて良かったです.