Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
18
Help us understand the problem. What is going on with this article?
@yamadasuzaku

宇宙の研究を初める人向けのソフトウェア講習

はじめに

宇宙を志す人向けのソフトウェアの基礎について、在宅でも出来るように簡単に紹介したい。ソフトウェアは授業で少しやりました、くらいの学生を想定してます.(2020.4.9. とりあえずの初版).

google Colab, tex, overleaf, beamer, 発表スライドの作り方、などは下記を参照ください。

基礎知識編

ソフトウェアとは何か?なぜ大事なのか。

ソフトウェアとは端的にはコンピュターの世界の言語で、言語とは、「自分の考えを相手に伝える」「相手の考えを理解する」ために必要なツールともいえます。つまりは、「コミュニケーションツール」なのです。誰と誰を繋ぐものか?というと、その対象がハードウェアとCPUであったり、ハードウェアと人間、であったり、その対象は今では「モノ」と「人」を繋ぐ上でも重要な存在です。それが宇宙の研究?とどう関わるかというと、宇宙の綺麗な画像や、世界で初めて目にするようなデータと「会話」するためのツールとして、ソフトウェアが不可欠になっています。

今では、宇宙の研究において、ソフトウェアは一つの"実験装置"や"実験技術"と認識されています。例えば、実際、NASAにはソフトウェアの専門家の部隊が存在しますし、実験装置を開発している研究所にはソフトウェアの専門家がいます。最先端の観測装置と上手に"意思疎通"し、膨大なデータと"対話"するためのツールがソフトウェア言語で、英語と同じくらい重要な"外国語"という認識で、ソフトウェアの「単語」「文法」「作文」の力を若いうちに修行しておくとよいです。

ソフトウェア言語

批判を恐れずに最低限は何か?いえば、今は python でしょう。ただし、言語には英語やフランス語以外にもたくさんあるように、コンピュータの言語にも色々あって良し悪しありますので、何かある言語だけ知っていれば万事OKということはないです。そこで、まずはコンピューター言語の種類を概観してみましょう。

CUIコマンド

CUIは、Character User Interface (CUI) の略です。windows であれば、コマンドプロンプトでの操作、Mac や linux であればターミナルでの操作に対応します。それぞれ初見という人は下記の記事をまずは一読ください。

若い人だと、なぜ低レベルなコマンドを打たないとダメなのか?と思ったかもしれません。ソフトウェアの世界では、低レベルな操作(CUI)は、高レベルな操作(GUI)よりも古くてダメということはないのです。特に、宇宙の観測装置やデータを解析する上では、低レベルから高レベルまで層状になったソフトウェアを巧みに操れることが大切です。操作の自動化や保守運用も簡単で安全にできないといけません。その根底をなすのはコマンドラインでのツールで、これを早めに知っておかないと時間を無駄に費やしてしまいます。

そのうち、パターン処理言語の3つをまず知っておきましょう。「awk」「sed」「grep」です。「awk」は、文字列の分割や選択、演算ができます。「sed」は文字の置換です。「grep」は文字の検索ができます。unix のコマンドなので、linuxとmacはデフォルトで所定の動作をしますが、windowsは素直にはいきませんので、無理にコマンドプロンプトでやる必要はないです(windowsにlinuxベースの入れる方が楽かも)。最近はwindowsに、Windows Subsystem for Linux (WSL)があるので、これでlinux環境も簡単に構築できます。WSL (Windows Subsystem for Linux)の基本メモを参照ください。3つのコマンドについては、

を一読ください。でも、これだけだとまだ有り難みが分かりませんね。
具体例を出すと、1万天体の銀河カタログの書かれたテキストファイルが(gal.txt)があったとします。そこに、NGCカタログがどのくらいあるかは、「grep NGC gal.txt」で検索できます。"NGC"という文字を"N"と短くしたい場合は、「sed "s/NGC/N/g" gal.txt」で可能です。10行目が以降だけ取得したい場合は、「awk 'NR>10{print $0} gal.txt'」で可能です。このようにデータの前処理を手軽にやるのに便利です。

もうひとつ挙げると、rsync というコマンドです。これは、ファイルの同期やコピーをするために使います。時々刻々と増えていくデータをコピーする場合、すでにコピーしたデータをもう一度コピーするのは避けて、変更分だけコピーしたいでしょう。rsyncはそのような差分を計算し、差分だけを圧縮してコピーする優れたコマンドツールで、宇宙の研究で扱う巨大なデータの転送や実験では今でもよく使われています。初めての人は、

あたりを一読ください。

低級なスクリプト言語

CUIのコマンドは便利であるが、それを組み合わせるともっといろんなことができる。例えば、「1時間に一回ファイルをコピーして、ファイルの中のデータを加工して、別のファイルに書き出す」、という一連の処理をしたい場合があるとしよう。そのような一連の処理の流れのことをバッチ処理といいます。これを簡単にやってくれるのが、「シェルスクリプト」というものです。web上に山のように説明があるので、初見の人は、

に目を通してください。これを操れるだけで研究人生が大きく変わるといっても過言ではないと思います。

「1時間に一回〇〇の処理をする」を実現するには、cron が簡単です。

を参考にしてください。また、最近では、python の schedule を使うことも多いです。

あたりをご参考に。windowsでももちろんバッチ処理は可能で、

など、コマンドを列記したものを自動実行する、という観点ではlinuxやmacと同じ機能があります。ただし、宇宙で大規模なデータ処理などはlinuxのシェルがほとんどだとは思います。

高級なスクリプト言語

さて、スクリプト言語とはインタプリータ言語(プログラムを 1 行ずつ機械語に翻訳して実行)するものです。"高級"とはここではオブジェクト指向を意味することにします。
宇宙天文では、python か ruby が主流だと思いますが、ここでは python を王様扱いします。

python の使い方は後述しますので、ここでは一般論だけ紹介します。インタプリータ言語は逐次解釈するので、実行速度は次に紹介するコンパイラ言語に比べると桁で遅いです。ただし、宇宙天文のように、ベクトルや行列演算などの単純な処理をする場合は、その部分だけC言語やfortranで書かれたプログラムを読み出すことができます。numpy という python の数値計算ライブラリの多くは過去のレガシーな高速モジュールを使うことで、python だけど早い処理の実現に成功しています。少し専門的になりますが、これは、binding という技術のおかげで、python は C/C++言語とお話することができるのです。

python の思想として、誰が書いても同じようになる、というのがあります。これは過去のperlやC言語などは、同じ処理を全く違う書き方ができるような自由な世界でしたが、その一方で、読みにくさやチーム開発の難しさがありました。python はルールが厳しいこともありますが、その分、個人差が抑制されて,誰でも読みやすい言語になっています。

例えば,C言語で,sin(x)の差分 sin(i+1)-sin(i) を計算するコードはこのようになります.

#include <stdio.h>
#include <math.h>
#define f(x) sin(x)
int main() {
    double x1,x2,dy;
  for (int i=0; i<100; i++) {
    x1 = i;
    x2 = i+1;
    dy = f(x2) - f(x1);
    printf("x, f'(x) = %f %f \n", x1,dy);
  }
}

これを python で書くと,

#!/usr/bin/env python 
import numpy as np
x = np.arange(101)
y = np.sin(x)
dy = y[1:] - y[:-1]
print("x1, dy =", x[:-1], dy)

のように for ループなしで書けます.python の方は,カギカッコを使って計算してますね.これは"スライス"と呼ばれるもので,配列の要素に簡単にアクセスできる仕組みのことで,詳細は【Python】スライス操作についてまとめを参照ください.

宇宙天文では、ベクトルや行列の演算が多いのですが、python では C/C++言語よりもその演算を圧倒的にシンプルに記述することができます。C/C++言語では for ループを多用しますが、python では 「for ループ を使わない」方が python っぽいと言われるくらい、ループしなくても配列の演算やアクセスがしやすいです。最近では、機械学習のためのツールもpythonをベースとしたものが多いです。今から初める若い人はpythonからスタートするので大間違いはないでしょう。

コンパイラ言語

コンパイラ言語は、一度、全体をコンパイルといって、プログラムが最適に動くように機械語に翻訳して、実行ファイルが生成されて、それを動かすタイプものです。C/C++はコンパイラ言語です。とにかくスピードが必要な場所では、今でもC/C++言語を使います。例えば、FPGAとCPUのクライエントとサーバーのプログラムは普通はC++で書かれます。高エネルギー分野の人は rootを使いますので、C++も勉強しておきましょう。モンテカルロシミュレーションの代表格であるgeant4を使う人もC++は必携になります。

ソフトウェアを扱う前の基礎知識

環境変数

環境変数とは、OSが設定値を保存し、ユーザーや実行されるプログラムから設定・参照できるようにしたものです。例えば、

  • パス(path)を設定する「PATH」
  • 現在の利用者のホームディレクトリのパスを表す「HOME」
  • 利用者の使う言語(日本語、英語など)を設定する「LANG」
  • カレントディレクトリを表す「PWD」
  • デフォルトのシェルのパスを指定する「SHELL」

などがあります。研究室に入ると、「PATH を通した?」という言葉をよく耳にします。その意味は、

を参照ください。あるプログラムがどこにあるのか、PATHに書かれた順番に探していきます。

CPU、GPU、FPGA、組み込みOSとは?

宇宙天文を研究する上で、ソフトウェアとハードウェアは切り離せない。基礎として、ソフトウェアが動く土台を知っておこう。

  • CPU : CPUは命令を逐次実行する装置です。命令列さえあればOSがなくても動きます。組み込みのCPUでは、OSを搭載せずに動作確認することが多いです。普段使うパソコンにはOS(windows、mac, linuxなど)が搭載されていますね。OSはソフトウェアの塊であり、ハードウェアとのインターフェースを担うものです。例えば、キーボードを叩く、音楽を聴く、USBでファイルをやりとりする、などの基礎的な機能をOSというソフトウェアが担当しています。
  • GPU : GPUは最近流行りの機械学習を支えているものです。これはCPUと違って、定型的な計算を並列処理するのが得意なものです。CPUが数個のコアなのにたいして、GPUの CUDA core というの1万コアなど数が桁違いで、その並列性の高さから機械学習が飛躍的に進みました。ただし、並列化できない計算には向かないです。
  • FPGA : FPGA は Field Programmable Gate Array の略で、「書き換え可能な論理回路が多数配列されたもの」 になります。従来はASICと呼ばれる書き換え不可能なモノを使ってましたが、高価な上に書き換え不能なのが難点でした。FPGAは書き換えが可能な上に廉価で手に入るため、最近の宇宙天文の実験装置では不可欠なパートになっています。VHDL、Verilog というソフトウェアで記述しますが、最近ではC言語でも設計可能な方法が広まっています。FPGAでCPUを作ることもできます。microblazeというCPUは有名な一つです。
  • 組み込みOS : 組込みOS/システムとは(エンベデッドシステムともいいます)、デジタル機器や家電製品などに組み込まれ、特定の機能を実行するコンピュータシステムのことです。宇宙天文の場合は、高度なリアルタイム性や特化した機能が求められる場合に使います。例えば、人工衛星にmacやwindowsを搭載することもできますが、汎用性が高すぎて無駄が多く使われません。最近では、Xilinx Zynq UltraScale+ MPSoC の宇宙での実用化 が進められています。

このように、宇宙天文で扱うソフトウェアといっても、それが走る舞台がCPUなのか、GPUなのか、あるいはFPGAを記述する言語や、組み込みOSを搭載したCPU向けのソフトウェアなのか、など多岐にわたります。ハードウェアとソフトウェアは別々に設計することもありますが、最近ではハードウェアとソフトウェアの機能をお互いに考慮しながら設計する協調設計(コデザイン、co-design)と言う設計手法が大切になりますので、若い人はぜひ知っておいてください。

エディタについて

ソフトウェアを書くためのエディタは、紙とペンのようなもので、結構大事です。

他にもたくさんありますが、自分で使いやすいエディタを見つけましょう。

doxygen の使い方

ソースコードが読みにくい時などは、doxygenというので、html化して、ブラウザでコードをみると便利です。ソースコードからdoxygenでhtml化ができます。

html化して、iPadなどに入れて、移動中にコードを確認するなど、長いコードをよまないと、という時には便利です。

python の設定と使い方

pythonのインストール方法

宇宙天文系であれば、anaconda で python をインストールするのをお勧めします。astropy や matplotlib, ipython などが一式入ります。2020年3月でpythonの2系が正式に止まったので、python3系を使いましょう。ただし、古いpython2系を使う可能性がある人は、pyenv で anaconda python を入れる事をお勧めします。pyenv はディレクトリごとにpythonのバージョンを切り替えられるため、バージョンの異なるモジュールが混在する人にはお勧めします。

matplotlib を使ったプロット

ここ数年で、MATLABの python 版が爆発的に使われていて、matplotlib をお勧めします。インストールは、anaconda を入れれば自動で入ります。

例えば、fft も python で簡単にできます。例えば、

を参照ください。スピードは、fortran のバイナリでFFT部を実行しているのでC++等と比較してもほどんと変わりません。

今や、実験、観測、宇宙論など、多くの人が matplotlib で図を書いてますので、習得しておくと良いでしょう。

など、日本語の解説記事が山ほどあるのも初めてのひとには優しいです。

宇宙の綺麗な絵を見ながら検索する方法

宇宙は綺麗な絵が一つの魅力でしょう。それを見ながら過去にどういう観測データがあるのかなど、調べられると面白いですよね。現時点では、

  • ESAsky ヨーロッパの宇宙機関(ESA)のツール。
  • DARTS/JUDO2 日本の宇宙機関(JAXA/ISAS)のツール。

がよくできてると思います。この辺りは急激に技術が進歩しているので、新しく良いものがどんどん出てくると思います。リンクを押すのが面倒な人向けに2つの絵を紹介します。

qiita_esasky_judo2.png

さて、これをどう研究に使うのか?という例として、XMM-Newton衛星を使って説明してます。

天体を探す、データを探す、というのは簡単なようで、観測ごとに個性があって丁寧に見る必要があります。他にもありますが、便利ツールを上手に使いこなしましょう。

python を使った宇宙のカタログ研究

今では、astroquery を使って、様々な宇宙のカタログについて python から統一的にアクセスすることができます。そのやり方や例をいくつか紹介しています。

天体解析関係

NASA関係のソフトウェア

  • ds9 イメージ解析専用のソフトウェア。波長によらず、イメージ解析では王道のツール。最近はダウンロードするだけで使える。

  • NASA の heasoft のページから、必要なソフトをダウンロードする。(宇宙天文向け)

hesoftを動作するにはソースコードをダウンロードしてコンパイルする方法と、バイナリで済ませる方法がある。バイナリでまずは試して、パスを通すだけで動くはずで、もし動かなければ、ソースコードからコンパイルしてみてください。

"パスを通す"というのは、下記の記述を .bashrc などの設定ファイルに
書き込むことです。例えば、私は2つのマシン環境が手元にあるので、
その2例を示しておきます。

export HEADAS=/usr/local/astroh/software/HEASOFT/Hitomi_Release_03_rc1/x86_64-debian-linux-gnu-libc2.19-18+
source $HEADAS/headas-init.sh
## For suzaku analysis 
export CALDB=/usr/local/xray/caldb
export CALDBCONFIG=$CALDB/software/tools/caldb.config
export CALDBALIAS=$CALDB/software/tools/alias_config.fits

要するに、$HEADAS を設定し、headas-init.sh がどこにあるかを設定する。

衛星関係のツールは、CALDB という衛星の設定データが必要なので、
CALDBをダウンロードして、パスを設定します。

データ形式

宇宙の研究を始めると、FITS (フィッツと読む) が何度も出てくると思うが、これは、天文業界の標準的なファイル形式のこと。

ヘッダー部分の基礎情報は非圧縮のテキストファイルで、データは圧縮されたバイナリファイルで構成される。バイナリファイルについては、テキストファイルとバイナリファイルとはを参照ください。

天文以外では、HDF5がpythonと相性のよいファイルで、使われることも多い。fitsファイルは宇宙天文向けにガチガチに仕様が固められたファイルであり、天文以外で使うことはまずない。fits ファイルを見るには、fvという heasoft のコマンドラインツールや、astropy を使う。

統計学

榎戸氏(理研)の 榎戸輝揚の公開資料リポジトリ に色々とあります。その中の一つ、

を一読しましょう。

電子的にメモをとる必要性

宇宙天体解析をやる場合、大量にログを取る必要あります。ファイル名の数もそうだし、プログラムを走らせたときの引数やメッセージなどの情報です。これは大切な実験データで、記録を取る必要あります。また自分のためにもなります。あとで自分が何をしたのか、プログラムが動いてたけど実はエラーを吐いてたなど、未来の自分の為になる時が必ずきます。手で記録をとれる情報量ではないので、電子的にログをとりましょう。最近は、evernoteやbearなど、いろんなツールがありますのでお好みに合わせて。(注: 紙の実験ノートが不要、という意味ではないです。)

論文執筆、文献検索、英語学習方法

検索方法

研究の世界に入ったら、「英語で検索」する習慣をつけましょう。日本でも十分に情報が手に入る場合はそれでもよいですが、少し専門的になると英語圏の方が情報量が圧倒的に多いので、英語で調べる癖をつけましょう。

論文執筆関係

早いうちに、texを習得しましょう。tex も一つの言語です。最近は、brew で一発で tex がインストールされるので、これが使える人はこれが一番楽です。

最近は、overleafを使うことも増えている。オンラインで共同で編集する場合はこれが一番よい。

最近では、beamer というので、tex でスライドもノートも作れるようになってます。beamer って何?という人は、

を参照ください。

文献検索方法

ads が王道。ここで検索に引っかからない宇宙の論文はほぼないはず。一つの論文を検索したら、その論文を refer している論文や、citation している論文など、孫引きすることで、芋ずる式に文献が増える。今の時代、一生かかっても読めないほど論文があるので、取捨選択と強弱をつけて論文を読む訓練を若いうちからしておこう。

もう一つ有名なのは、 arxiv です。ここには、世界中の論文が最速で集まります。ただし、論文が受理される前に公開されるものもありますので、後々に棄却された論文も含まれる点には注意してください。あとは、受理された論文でも、100%正しいわけではないです。科学は試行と検証の積み重ねが必要で、よいジャーナルの論文でも後で間違とわかることも頻繁にあります。

今は情報の洪水の時代で、適当な情報は簡単に手に入るけども、本当に欲しい情報や真偽を見極めるのが難しくなってます。逆に言うと、真に必要な情報を素早く収集し、真偽を見極める力がある人が、研究に限らず社会から必要とされる人材でもあります。宇宙物理や天文学の研究をすることは、そのような力を楽しく身につけられる最高の舞台でもあります。

科学英語の勉強

オススメは、 grammarly です。これは何故ダメなのか、を教えてくれるので、反復する事でエラーが減っていきます。先生から文法間違いを指摘される数はほぼゼロになるはずです。

科学論文の書き方

いろんな流派はありますが、初めての人は、牧島先生の資料を参考にしてください。

一般的には分野によって、書き方や流派は違うので、論文を投稿するジャーナルに応じて、スタイルは合わせて書きましょう。論文で一番大切なのは、新しい事を1つでよいので、それを核にして伝えることだと思います。"新しい"といっても、世界中の人があっと驚くことでなくても大丈夫です。どんな小さな一歩でも、まだ誰も到達できてない一歩であれば、貴重な科学的な営みです。論文化を意識することで目標がハッキリと見えてきますので、常に論文化を意識して研究する習慣をつけましょう。

パソコン操作、設定

ディスプレイの写し方

手元のPCとプロジェクターの画面を同じにしたい場合は、
ミラーリングをONにする。変えたい場合は、ミラーリングをオフする。
http://tokyo.secret.jp/macs/macbook-mirroring-option.html

パソコンの画面をディスプレイに移すには、アナログとデジタルの2種類がある。最近は、HDMIケーブル(デジタル)が主流です。HDMIケーブルは映像と音声の2種類を伝送できるので、パソコンの音声出力がHDMIになっていると、マイクから「音が出ない」という事がありえるので注意してください。

ノートパソコンを壊さないコツ

  • トラックパットの深押しでクリックを解除

トラックパッドの深押しでクリックにすると機械的な磨耗が発生する。macユーザーの場合は、システム環境設定==>トラックパッド==>タップでクリック 一本指でクリックにチェックをつける。これでソフトタッチでクリックできるようになる。(もっと気にするなら、外付けキーボード、マウス、トラックパッドを使えば良いが、それならノートPCでなくてもよいか。。)

  • 電源を長期間ONしたままにしない。

電源の寿命の観点からは、こまめに電源をON/OFFするか、少なくするか、どちらがよいかは諸説あります。ただし、明らかに遅いという場合は、死んだアプリがメモリを解放してないだけで、無駄にエネルギーを消費している場合も多いので、個人的には1週間に一回くらいは電源をオフしておいてください。

インストールツールについて (macユーザー向け)

macには、fink, macport, homebrew の 3 種類がありますが、今からPCのセットアップという人は、間違いなく、homebrew を使うことをオススメします。 他の2つは今ではサポートが不十分というのが理由です。

homebrew でなきゃダメなことはないですが、気をつけて欲しいのは、一つだけ使うことです。混在すると、片方を動かしたときに、設定ファイルを書き換えてしまったりすることがあり、ハマることが多いです。

パスワードの検索方法 (macユーザー向け)

macユーザーの人はパスワードを覚えなくても、あるいはパスワードを書いたテキストファイルを自分で管理しなくても、OSの機能としてパスワードを管理する keychain というツールがあります。
スポットライト(右上の虫眼鏡マーク)で、keychain と打つ。
http://www.danshihack.com/2014/01/05/junp/mactips_keychain.html
(アプリケーション --> ユーティリティ --> keychain でもよいですが、スポットライトの方が早い。)

スクリーンショット (macユーザー向け)

macOSのバージョンに依存しますので、オフィシャルな説明で自分のOSの解説を参照してください。

上級者向けのツール

  • xraylib X線の光電吸収の断面積や、蛍光X線発生率(fluorescence yield)なども簡単にだせる優れもの。
  • uproot root を python から簡単に使える便利なツール。

ショートカットの設定

いくつか,代表的なショートカットは使えるように練習しておこう.

zsh の 使い方(おまけ)

zshの何がよい点であるか、簡単に紹介する。bash, tcsh に比べて新しいので、良いことは多い。そもそも「シェルって何?」と言う人は、shell を一読ください。

  • ファイルの検索が一瞬

例えば、どこに保存したか思い出せないけど、拡張子は cc というファイルを探す場合は、

> ls **/*cc とすると、

カレントディレクトリ以下の *cc ファイルを探してくれます。

  • コマンドごとの履歴検索が可能、オプションがすぐに思い出せる。

たとえば、rsync の後にどんなオプションをつけたか思い出せないとき、

> rsync

まで打って、ctl + p とすると、rsync + ○○ と打ったヒストリを教えてくれます。

その他、http://blog.blueblack.net/item_204 などを参照してください。

簡単に初期設定をしたい人は、.zshrc の中に、

HISTFILE=$HOME/.zsh-history # used for storing commands
HISTSIZE=100000
SAVEHIST=100000
setopt extended_history # add time stump for the history
function history-all { history -E 1 } # output all history when putting history-all

autoload -U compinit
compinit

autoload colors
colors
PROMPT="%{${fg[cyan]}%}[%n] %(!.#.$) %{${reset_color}%}"
#PROMPT="%{${fg[cyan]}%}[%n@%m] %(!.#.$) %{${reset_color}%}"
PROMPT2="%{${fg[cyan]}%}%_> %{${reset_color}%}"
SPROMPT="%{${fg[red]}%}correct: %R -> %r [nyae]? %{${reset_color}%}"
RPROMPT="%{${fg[cyan]}%}[%~]%{${reset_color}%}"

#setopt list_types
setopt auto_list
setopt autopushd
setopt pushd_ignore_dups
setopt auto_menu

# get history with ctl+p copied from Yuasa
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^P" history-beginning-search-backward-end
bindkey "^N" history-beginning-search-forward-end
setopt list_packed
zstyle ':completion:*:default' menu select=1

と入れると、いろんな機能が使えます。

18
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
yamadasuzaku
宇宙物理、X線観測、超伝導検出器など.
RikkyoU
立教大学のAI/IT愛好家による教育研究コンテンツの発信.

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
18
Help us understand the problem. What is going on with this article?