Muji Blog

いろんなトピックを備忘録的に発信していきます。トピック例:{画像処理、信号処理、心理学}

【Julia】画像を表示することなく保存したい

JuliaのPlotパッケージでは,様々なプロットを作成することができます。
標準で,画像を表示するようになっているのですが,リモート環境などxを飛ばせてない環境で,表示も必要無いときは,表示することなく保存できたほうが不要なエラーメッセージの表示を避けることができて都合がいいです。

というわけで,その方法を調べました。

以下の記事を参考にしました。

hydrocoast.jp


要は,

ENV["GKSwstype"]="nul"

または

ENV["GKSwstype"]=100

とすれば良く,実際エラーメッセージを回避できました。

記事紹介:A Daily Diary Study on Sleep Quality and Procrastination at Work: The Moderating Role of Trait Self-Control

一言でいうと

self-controlが低い人は,睡眠の満足度の低さに応じて仕事を先延ばししやすくなるよ。

内容

仕事の先延ばし(work procrastination)とは

  • 回避行動の一種であり,タスク遂行に関するネガティブ感情を調整する働きがある
  • well-beingやパフォーマンスの低下につながる

self-controlとは

自分の内なる反応を無効にしたり、変えたりする能力、および望ましくない行動傾向(衝動など)を中断し、それに基づいて行動することを控える能力

多くの実験で,self-controlが低い人は,将来の大きな報酬よりも目先の小さな報酬を優先して取る傾向があることがわかっている。
先延ばしについても同様で,将来の大きな罰よりも目先の小さな罰を優先して回避する。
つまり,後のことは後で考えるとして,とにかく目先のことをなんとかしたい人が多い。

設定された仮説

1.夜間の睡眠の満足度の低さと翌日の仕事の先延ばしが関係する。
 ※本文では"Quality"と書いていますが,実際に測っているのは満足度なのでそうしてます。
2.self-controlが高い場合には,1.の関係が弱くなる

方法

71名を対象とした質問紙調査。
self-control特性を先に測定の上,日常的に仕事の先延ばしと昨夜の睡眠の満足度を測定。

結果

仮説通り,

  • 夜間の睡眠の満足度と翌日の仕事の先延ばしに相関がみられた。
  • self-controlが高い場合には,睡眠の満足度の低下に応じた仕事の先延ばしの増加はみられなかった。

所感

心理支援を行っている中でも,先に睡眠の問題に取り組んで,良くなった頃に色々と活動の幅が広がっている事例が多い気がする。
この経験と照らし合わせると,行動活性化の効果を高めるためにも,睡眠の問題を改善しておくことが大事かもしれない。

引用した論文

www.frontiersin.org

Google Cloud Platform (GCP)で解析環境/開発環境を構築する(2日目)

前回まで

GCPの登録をして,新しいVMインスタンスを立ち上げるところまで行きました。
ここに,今ローカルで使用している開発環境(Docker)と解析ツール(+データ)をどうにかしてGCPに入れたいなと考えていました。

2日目の作業

データを入れる

1日目の記事のあと,Githubを介せばいいことに気づきました。

おなじみ,aptを使って,以下のように実行すれば問題なく入ります。

sudo apt install -y git

あとは欲しいツールを git clone すれば入ります。

ごめんなさい。ひとまずここまでできれば作業はできるので,これ以降の進捗ないです。
ただ,あとはGUIでも作業できるように,せめて画像を簡単に見れるようにXを飛ばせればと考えています。
またできたら報告します。
あと,ディスクを追加したり,GPUを使ったりするなど,今後いろいろと付け加えるようなことも必要になってくると思うので,そういったことも随時報告できればと思います。

しばらく使ってみての所感

とりあえず使うだけなら,1日数時間の作業で数十円しか飛んでかないです。
もっとがっつり計算させたらもっとかかるかもしれませんが,私の今の使い方だとあまりコストはかからなさそうです。
ただ,やっぱり数十円でも飛んで行かれると嫌な感じもするので,やっぱりローカルである程度動作確認したものをGCPでテストする使い方がよさそうな気がしてきました。

では,今回は以上です。

Google Cloud Platform (GCP)で解析環境/開発環境を構築する(1日目)

背景

一言で言うと,自宅PCと大学PCとでそれぞれ環境を構築して解析するのがめんどい。

ということで,クラウド上に解析環境/開発環境(以降,”環境”と書きます)を構築して,どこからでも環境にアクセスして作業できるようにしたくて調べたところ,GCPが手頃なことがわかりました。

GCPの手頃だと思うポイント

  1. Googleアカウントでログイン可能
  2. 従量課金制で使用しないときは一切お金かからない
  3. 毎月固定の使用量上限以内であれば無料

他のVPNサービス等見てみると,毎月固定で数千円〜数万円かかるので,これらにはさすがにぺーぺーの研究者には手を付けられない。

というわけでGCPを使って環境を構築することにしました。

※あとから分かったのですが,GCPにはすでにdockerが入っているので,GCPの中にdockerコンテナを立ててしまえば多分やりたい放題なので,そういった魂胆もあって進めています。

目標

ローカルで動作確認済みの解析ツール(dockerfile付き)をGCP仮想マシン上で実行する。

ローカル側環境

Mac Book Pro (2020, Apple M1)
mac OS BigSur 11.2.1

GCPの登録〜仮想マシンの立ち上げまで

以下のページを参考にしました。
qiita.com

GCPに登録してVMインスタンスを作成するとブラウザ上でssh接続してコンソールが立ち上がります。

上記のページの中で特に,以下のコマンドでポートを変更する作業はセキュリティ上とても大事なので,こちらでもメモします。

sudo sed -i -e "s/#Port 22/Port 変更したいポート番号/g" /etc/ssh/sshd_config

その後,GCP内でファイアウォールルールを追加し,変更したポートをtcpに追加します。

sudoコマンドが使えるので権限で困る作業もなさそうです。
(なお,sudoコマンドを使った際にパスワードは求められません。)

問題点

GCPを使う上でgcloudが使えると何かと便利なのですが,現状(2/24)ではIntelチップ用のソフトしか配布されてないようです。
cloud.google.com

今後

ローカルからGCPのどこかに解析ツールをアップロードしてVMインスタンスから見れるようにする。

M1チップ macにrとpythonのdocker環境を構築する

M1チップのMacBookProを購入したので,ぼちぼち解析環境を構築しています。
その中で,WSLでは通った設定がMBPでは通らなかったので記録します。
なぐり書きなので,また修正入ると思います。

Dockerfile (2021.02.19現在)

FROM ubuntu:20.04

# set timezone
RUN apt-get update \
    && apt-get install tzdata \
    && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN date

# install packages
RUN ["/bin/bash", "-c", "\
    apt-get update \
    && apt-get install -y \
    vim curl libcurl4-openssl-dev libxml2-dev\
    build-essential \
    git curl llvm sqlite3 libssl-dev libbz2-dev \
    libreadline-dev libsqlite3-dev libncurses5-dev \
    libncursesw5-dev python-tk python3-tk tk-dev aria2 \
    lsb-release locales \
    libv8-dev  gdebi-core \
    gnupg ca-certificates \
    "]

#language
RUN locale-gen ja_JP.UTF-8  
ENV LANG ja_JP.UTF-8  
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8

RUN ["/bin/bash", "-c", "apt-get install -y software-properties-common"]
RUN ["/bin/bash", "-c", "apt-get install -y ansible"]
# install r
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
#RUN add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/'
RUN add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/'

RUN ["/bin/bash", "-c", "\
    apt-get update && apt-get upgrade -y \
    && apt-get install -y r-base \
    "]
#RUN Rscript --version
CMD ["/bin/bash", "-c"]

問題は以下の部分

#RUN add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/'
RUN add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/'

本当はRの4.0を入れたかったのだが,MBPだと入らず,下記のページと同じエラーを吐く。
stackoverflow.com

問題のr-base-coreは,上記のようにレポジトリを追加しても3.6.2版が入ってしまい,R4.0の依存環境を満たせない。
そこでインストールするRのバージョンを3.6して実行すると問題なく環境を構築できた。

原因は不明。
しばらくは3.6で進めるとしようかな。

追記

結局原因はわからず,r-baseイメージをベースに以下のDockerfileでコンテナを作成することでR4.0を使うことはできました。

FROM r-base:latest

# set timezone
RUN apt-get update \
    && apt-get install tzdata \
    && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN date

# install packages
RUN ["/bin/bash", "-c", "\
    apt-get update \
    && apt-get install -y --allow-downgrades \
    libcurl4=7.74.0-1 \
    vim curl libcurl4-openssl-dev libxml2-dev\
    build-essential \
    git llvm sqlite3 libssl-dev libbz2-dev \
    libreadline-dev libsqlite3-dev libncurses5-dev \
    libncursesw5-dev python-tk python3-tk tk-dev aria2 \
    lsb-release locales libffi-dev libxml2-dev \
    libv8-dev \
    "]

# language
RUN locale-gen ja_JP.UTF-8  
ENV LANG ja_JP.UTF-8  
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8

# LINE and COLUMNS
ARG cols=$(tput cols)
ARG lines=$(tput lines)
ENV COLUMNS=$cols
ENV LINES=$lines

RUN ["/bin/bash", "-c", "apt-get install -y software-properties-common"]
RUN apt-add-repository ppa:ansible/ansible -y

RUN ["/bin/bash", "-c", "Rscript --version"]
RUN ["/bin/bash", "-c", "localedef -f UTF-8 -i ja_JP ja_JP"]
CMD ["/bin/bash", "-c"]

RとPythonのDocker作業環境の構築

# 前提

WSL2でdocker環境を構築していること

(構築方法は以下で紹介)

コマンドプロンプトを管理者権限で開いて、WSL上で操作していること

[WSLでdockerの環境構築](https://qiita.com/SeijMura/items/a61f3d8d693d7c9f4efb)

# Dockerfile

以下のコードを、ローカルの作業ディレクトリ内に"Dockerfile"という名前で配置してください。

FROM ubuntu:18.04

# set timezone
RUN apt-get update \
    && apt-get install tzdata \
    && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN date

# install packages
RUN ["/bin/bash", "-c", "\
    apt-get update \
    && apt-get install -y \
    vim \
    build-essential \
    git curl llvm sqlite3 libssl-dev libbz2-dev \
    libreadline-dev libsqlite3-dev libncurses5-dev \
    libncursesw5-dev python-tk python3-tk tk-dev aria2 \
    lsb-release \
    python3.8 python3-pip \
    "]

# install pip package
RUN pip3 install pip --upgrade
RUN pip3 install pipenv
RUN python3 --version

RUN ["/bin/bash", "-c", "apt-get install -y software-properties-common"]
RUN apt-add-repository ppa:ansible/ansible -y
# install r
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
#RUN add-apt-repository 'deb https://cran.rstudio.com/bin/linux/ubuntu $(lsb_release -cs)-cran35/'
RUN add-apt-repository 'deb https://cran.rstudio.com/bin/linux/ubuntu bionic-cran35/'
RUN ["/bin/bash", "-c", "\
    apt-get update \
    && apt-get install -y r-base \
    "]
RUN Rscript --version
CMD ["/bin/bash", "-c"]

# ビルドと実行

Dockerfileがあるディレクトリ内に、以下のシェルスクリプトを配置します。

#!/bin/bash

step1="" # build
step2=do # run

CONTAINER=好きなコンテナ名
TAG=好きなタグ名
NAME=${CONTAINER}:${TAG}

if [ $step1 ]; then
    sudo docker build -t $NAME .
fi

if [ $step2 ] ; then
    sudo docker run -itv `pwd`:/mnt/work $NAME /bin/bash
fi

step1=doとするとビルドを実行し、
step2=doとするとコンテナを起動します。

CONTAINERに好きなコンテナ名を、TAGに好きなタグ名を指定してください。

以下のコマンドでシェルを実行できます。(シェルスクリプトhoge.shとします)

chmod u+x hoge.sh
./hoge.sh

WSLでdockerの環境構築

はじめに

dockerをwslから動かそうと試み、丸一日溶けたので記録しておきます。

また、わざと"WSL"と書きましたが、前提条件は以下です。

  • Windows OS ビルド 19041以上
  • WSL2であること
  • 管理者権限でコマンドプロンプトを立ち上げていること
  • docker のバージョンが17.12.1であること
  • docker hub にアカウント登録していること

上記の通り、実際はWSL2でないといけないようです。
ですが、WSLで1日頑張り時間を費やしてしまいましたし、ほかにもWSLで頑張ってググり、困っている方がいるかと思うので、わざとタイトルはこうしました。

ちなみに、WSL1でも最後のhello-worldまでは成功します。
そのあと、apt-getを使ってパッケージを入れようとすると全く動かなくなります。

step1: windowsのアップデート

以下のページからアップデートできます。
www.microsoft.com

step2: WSL2への変更

以下の記事を参考に進めました。
dev.classmethod.jp
ちなみに、私はすでにWSLでUbuntuが入っていたため、新しくUbuntuをインストールすることなく以下を実行して、すでにあるUbuntuをWSL2で動作させるようにしました。

wsl --set-version Ubuntu 1

step3: dockerのインストール

wslを立ち上げ、以下を実行します。

sudo apt install docker.io=17.12.1-0ubuntu1

さらに、ユーザーのグループにdockerをセカンダリグループとして追加します。

sudo usermod -aG docker $USER

docker daemonの起動

以下を実行します。

sudo cgroupfs-mount && sudo service docker start

以下のコマンドで、起動していることを確認しましょう

sudo service docker status

以下のように表示されていればOKです。

*docker running

以下を実行して、うまく起動しているかを確認しましょう。

sudo docker run hello-world

以下のように表示されていればOKです。

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/