2016年12月25日日曜日

docker-composeで既存のnetworkに接続する

docker-composeを利用してコンテナを起動した場合、通常だとdocker-compose.yml(プロジェクト)単位で 内部ネットワークが作成される。これを、例えば別のdocker-compose.ymlファイルから起動されたコンテナのnetworkの中でコンテナを作成するには、network設定をdocker-compose.yml内に記述する

既存のネットワークの一覧

$ docker network ls
コマンドを実行すると、以下のようにネットワークの一覧が表示される。例ではexisting_nw_defaultに接続するとする。
$ docker network ls
NETWORK ID          NAME                DRIVER
a36b706eb5a6        bridge              bridge              
7ee0cd187fbd        host                host                
39be267aeb70        existing_nw_default      bridge              
bb39f75ad969        none                null

既存のネットワークに接続するdocker-compose.ymlの例

デフォルトでexisting_nw_default内にコンテナを作成するには、docker-compose.yml内に以下のようなnetworkの記述を追加すれば良い。
networks:
  default:
    external:
      name: existing_nw_default
 参照:https://docs.docker.com/compose/networking/

2016年12月24日土曜日

Bloggerでシンタックスハイライトを利用する

code-prettifyを利用する方法。 https://github.com/google/code-prettify

(1)ブログ管理画面の"Template"から、テンプレートのHTMLを編集する。
haedタグの中に以下を記述する。

<script src='https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=sunburst'/>

(2)シンタックスハイライトを利用したい部分を、以下のタグで囲う。

<pre class="prettyprint">
(任意のコード)
</pre>

classに、追加で"lang-*"を指定すると対象言語を明示的に指定できる。lang-*の"*"の部分にはデフォルトで以下が利用できる
    "bsh", "c", "cc", "cpp", "cs", "csh", "cyc", "cv", "htm", "html",
    "java", "js", "m", "mxml", "perl", "pl", "pm", "py", "rb", "sh",
    "xhtml", "xml", "xsl".
ヘッダ行のrun_prettify.jsを呼び出すパラメタにskinを指定すると、シンタックスハイライトのスタイルを切り替えられる。上記の例ではsunburstというスタイルを利用している。 デフォルトで利用可能なスタイルの一覧は以下。 https://rawgit.com/google/code-prettify/master/styles/index.html その他にも呼び出し時のパラメタで挙動を変更することができ、詳しい設定は以下を参照。 https://github.com/google/code-prettify/blob/master/docs/getting_started.md

2016年12月18日日曜日

Raspbianでpyenv環境を構築する

Raspbian環境をアップグレードしたついでにpyenv/pyenv-virtualenv環境を構築しようとおもいました。その際、pyenvを使ったpythonバージョンのインストールでエラーが出たので、その構築メモです。

0.環境

記事執筆した時点で、 $ sudo aptitude safe-upgrade した状態です。
日本語環境を入れたりはしてるので、かならずしもデフォではないです。

$ uname -a
Linux raspberrypi 4.4.34+ #930 Wed Nov 23 15:12:30 GMT 2016 armv6l GNU/Linux


1.エラー

以下のようにreadlineとかbzip2とかいかにも必要そうなものがないとか怒られます。

$ pyenv install 2.7.12
Downloading Python-2.7.12.tar.xz...
-> https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz
Installing Python-2.7.12...

WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

Please consult to the Wiki page to fix the problem.
https://github.com/yyuu/pyenv/wiki/Common-build-problems


BUILD FAILED (Raspbian 8.0 using python-build 1.0.4-13-g1000c2f)

2.必要なパッケージ(インストール済のものを除いた)

下記の参照先のリンクに情報があったので、それを参考にインストール済のものは除きました。
RapPiは非力なので、余計なインストールプロセスは省きたかった。
$ sudo aptitude -y install libssl-dev libbz2-dev libreadline-dev libsqlite3-dev llvm libncurses5-dev libncursesw5-dev

3.参照

https://github.com/yyuu/pyenv/wiki/Common-build-problems



あるていど予想できた結果ですが、pyenv installするとたぶんzipとかがものすごいボトルネックで時間がかかるので、実用に耐えるのかは不明です。

Raspbian with PIXEL閑環境で日本語環境の構築

 Raspberry Piの情報を細かく追っているわけではないので、知らない間にバージョンアップしてPIXELというデスクトップ環境になっていました。正確には、深く考えずにsudo aptitude sage-upgradeして再起動したらいきなり変わっていてびびった。

ながらく初期インストールだけして放置していたRaspberry Pi初代(+ですらない!)を日本語かするときにPIXEL 以前の情報が多かったので、PIXEL環境で日本語入力ができるようになるまでのメモです。結論からいうと、すごく簡単になっているみたいです。

  1. 日本語フォントのインストール
    PIXELな環境からは初期で表示できるのかも?という情報もみたのですが、それをみたのがフォントをインストールした後でした...。まあ、減るもんでなしという感じでインストールしました。タカオフォントというのはIPAフォントの派生みたいです。

    $ sudo aptitude install fonts-takao 
  2. fcitx-mozc(インプットメソッド)のインストール
    界隈のブログ記事ではibus-anthyとかibus-mozcを入れてるケースが多かったけど、しらべるとibusは最近はあまりイケてなくてfcitxという系列が良いみたいなので、そちらを採用してみることにしました。なお、ibusとかfcitxというのがベースになるインプットメソッドで、変換エンジン(?)自体がAnthyとかmozcとか、という構成になるようです。なので選択肢としては、インプットメソッドとしてfcitxかibus、それぞれでの変換エンジンとしてanthyかmozcか、という考え方になるようです。このへんは正直よくわからん。

    $ sudo aptitude install fcitx-mozc
    上記で、メインメニューの「設定」のところに「fcitx設定」とか「mozc設定」とかの項目が追加されるので、そこで諸々を設定します。(ターミナル上でim-configを実行する必要があるかもしれない)
  3. 日本語ターミナル(不要っぽい)
    上記同様にjfbtermというのを入れないとターミナルで日本語が出ないよ、という記事が多いのですが、PIXEL環境では不要でした。標準のターミナルはLXTerminal 0.2.0というやつでした。 
あとはPIXEL以前の環境と同様、ロケールやタイムゾーンの設定、あとはフォントを上述のTAKAOフォントに変えてあげたりすればOKです。

2016年12月16日金曜日

Android Things on Raspberry pi3でディスプレイを反転させる

Android ThingsのRaspberry pi用OSイメージで
RasPi3を起動した際、Raspbianのときと同じように、
純正の7inch touchscreenの構成では画面を反転させないとUSBコネクタが
邪魔になってしまうという状況が発生しました。

Raspbianの場合なら、/boot/config.txtの中にlcd_rotate=2という記述を追記して際kどうすれば解消するのですが、それのAndroid Thingsでのやり方。stackoverflowに聞いたらすぐに回答してくれる人が現れました。すごい。ありがとう。

例えば、sdカードのデバイスが/dev/sdbだとした場合、ブートパーティションは/dev/sdb1になるようです。なので、母艦となるpcなりでこのパーティションを
マウントしてあげると、その中にconfig.txtというファイルがあるので、
この中にlcd_rotate=2という設定を追加してあげて再起動すればよろしい。
$ sudo mount /dev/sdb1 /mnt/disk
$ echo 'lcd_rotate=2' >> /mnt/disk/config.txt
私はmacを使っていてext4のファイルシステムをマウントするのにFUSE for macなどの
セットアップが必要そうだったんだけど、これが時間かかるのでたまたまvirtualboxに
設定してあったboot2dockerのOSイメージを起動して、これでマウントしてやっつけました。

教えてくれた人によるとこれはhackみたいなもんでオフィシャルな設定とか機能ではないから、アップデートのたびにやらないといけないよ、だから機能リクエストしたほうが良いよ、とのこと。とはいえ、いったんのworkaroundとしては十分です。

http://stackoverflow.com/questions/41165198/android-things-with-rasp3-7-inch-touchscreen/

[12/16追記]
その後
ということだったので試したら、以下のようにしてmacで直接マウントできました。
$ sudo mount -t msdos /dev/disk1s1 /mnt/sd 

2016年12月14日水曜日

pyenvとpyenv-virtualenvで任意のpython環境に切り替える(homebrew使用)

pyenvを使って任意のPythonバージョンを利用できるようにする。
さらに、pyenv-virtualenv(pyenvのプラグインということらしい)で、同一のPythonバージョン化でも任意のpython実行環境が管理できるようにする。これはpipとかでライブラリをインストールする場合に便利だろう。

homebrewを使ってインストールすることにする。


  1. pyenvのインストール
    $ brew install pyenv
  2. pyenv-virtualenvのインストール
    $ brew install pyenv-virtualenv
インストール自体は上記で終了。続いてPATH環境変数などを書き換える必要があるが、これは初期設定のスクリプトファイル(zshなら.zshrc)に以下の行を追記すれば良い
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
if which pyenv-virtualenv > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi
これでPATHなどの環境変数を書き換えて、実際にpythonコマンドなどでpyenvの設定が有効に動作するようになる。

具体的にはシステム全体、特定のディレクトリ配下、現在のシェル内のいずれかで任意のpython環境が利用できることになるので、pythonで複数のプロジェクトを管理するような場合には、必要な最小限だけのライブラリ環境が構築できてとても便利です。

2016年11月28日月曜日

USBのHDMIアダプタについての記事

USB接続のディスプレイアダプタは使ったことがなかったので、MacBook Proでの利用検討をきっかけにいろいろと調べています。

疑問だったのがUSB 3.0接続のマルチポートアダプタに多いのがHDMI 1.4対応で、USB 3.0の帯域幅が約5Gbpsなのに対してHDMI 1.4の帯域幅が10Gbps(4k)、普通に考えてUSB 3.1 (gen2)でも帯域幅足りないじゃないか!と思ってたんですが、とてもわかりやすい記事を見つけたのでリンク。

「USBディスプレイアダプタの特徴を考慮してパソコンとディスプレイをUSB経由で接続する」http://www.webmagazine.kakisiti.co.jp/?p=550

DisplayLinkという会社のパーツが使われることが多いそうで、帯域幅については(詳細はともかく)納得。でもこれだと遅延が少なからずありそうだし、動画など動きが激しいものでフレームが落ちることがあるというのも納得したので、これでFPSのゲームするとかは無理があるのかもしれず、外出時などの一時用途に割り切って考えた方が良いのかもしれない。

たぶん以下みたいなパターン のUSB-CコネクタでDisplayPortプロトコルを使ってると明記しているパターンのほうがレイテンシとかは有利なんだろうけど、これはどうやって見分ければいいのか...Thunderbolt3接続となってるのを選べば良いのか。

ということは、前の記事でいうとThunderbolt3接続のこれ が、USBアダプタタイプでないものなんだろうと思う。でも新型MacBook Proは既存のThunderbolt 3端末に非対応(http://iphone-mania.jp/news-143363/)という情報もあるようだしやっぱり目をこらして調べるしかないのかこれは。

2016年11月26日土曜日

MacBook Proと合わせて選ぶべきマルチポートアダプタ6選

先日発表されたMacBook Pro (2016)モデルの購入を検討しているのだけど、とりあえず目玉のTouch Barは実物を見てみて見送りが良い気がしてきたので、タッチバーなしモデルの方向で検討している。そうすると気になるのがUSB-Cポートが2つしか無い点で、できるかぎり効率的にUSB-Cポートを使いたい。ということでマルチポートのアダプタを物色している。

選定のコンセプトとしてはMacBook Pro (2016)のタッチバーなしモデルはThunderbolt 3ポートが2つあるとして、マウスなどの軽いっぽいインターフェースは一つのポートにまとめて、外部ストレージなどの帯域が必要なデバイス用に一つポートが開けられる状態にしたい。ということで:

・HDMI:必須
・USBタイプA複数:必須
・(できれば)有線LANポート:頻度は高くないと思うので、最悪USBポートからの孫アダプタでも良いと思う
・(できれば)SD/microSDカードリーダー:これも頻度は高くないので、最悪USBポートからの孫アダプタでも良いと思う。マイクロSDはSDカードのアダプタがあるので割とどうでもいい
・(できれば)充電用の入力ポート:上述の理由で一つは使わない状態で成立させたい
・1万円以下ぐらい
・持ち運びを考えて軽いのが良い。
たぶんホスト側の接続はUSB3.1が良い。(2016/11/29追記)ディスプレイ接続に限ればThunderbolt3(Displayport)接続のほうが良い。

USB 3.0が5Gbpsなのに対してUSB 3.1が10Gbps、Thunderbolt3に至っては40Gbpsの転送速度なので、マルチポートである性格上、根元が早いのは困ることはないはずである。逆にホスト側がUSB 3.0の場合、子機側がUSB 3.0接続であっても最大限パフォーマンスが生かせない可能性がある(はず)。でも元々がそこまで速度を必要としない機器はまとめてしまいたいという話なので、必須ではないかもしれない。

あと価格帯からいくとUSB 3.0か3.1接続のアダプタが妥当なんだと思う。Thunderbolt 3対応のはあるっぽいけど価格が高いし、MacBook Pro (2016)のThunderbolt 3は互換性が不安という情報も見たりするので、まだ様子見のほうが良いのかもしれない(Appleがdockみたいのを出してくれればいいと思うんだけど)。

USB Type-Cポートは規格がややこしくて正確に理解できているか怪しいけれど(ちなみにこの辺を参考にした 。http://www.itmedia.co.jp/pcuser/articles/1508/25/news068.html)、上記のような基準で候補の機器をリストアップして調べてみました。

2016年11月19日土曜日

2016年11月16日水曜日

ASUSのルーターがmacから見えないときのルーター設定

前回のポストでTimeMachineのASUSのRT-AC85Uでの設定方法について書いたときにFinderに正しくルーター名が表示されない件を書いたが、たぶんルーター側の設定方法で解決できた(っぽい)のでその方法を書く。ルーターのファームウェアのバージョンは3.0.0.4.380_5971で、MacはEl Capitanです。
  1. ASUSルーターの管理画面にログイン
  2. 左ペインの「ワイヤレス」をクリック
  3. 「プロ」のタブをクリック
  4. 各バンド(2.4GHzとか5GHzとか)で「IGMPスヌーピング」を「有効」に設定
  5. 「適用」をクリック
  6. いったんネットワークが切断され、設定が適用される
以上で、Finderにルーター名が表示されるようになるはず。無理な場合は相変わらず移動>サーバに接続...でIPアドレスを打てば良いはず。

ASUSのルーターでTimeMachineを利用する方法

ASUSのルーターRT-AC85UとWestern DigitalのWD Elements 2TBを購入して、TimeMachineバックアップを設定しようとしているメモ。

MacはEl Capitanな状態です。

  1. HDD(WD Elements)をmacに接続し、「HFS+(ジャーナリング)」でフォーマット
  2. HDDをルーター(RT-AC85U)に接続
  3. ルーターの管理画面からUSBアプリケーション>TimeMachineをONに設定する
  4. 本来Macのファインダーの「共有」にルーターの名称がでる、、はず
  5. 出なかったのでFinderの「移動>サーバに接続」から「afp://<ルーターのIPアドレス>を入力
  6. 「共有」の所にルーターが接続済みになって表示
  7. TimeMachine環境設定にルーター上のBackups.backupdbが表示される
本来、4のところで共有に表示されるはずなんだけど出なかったので、これは別の問題だと思う。
古いAirmac Expressを2.5GHz帯に繋いでAirPlayも設定しているが、スピーカーのリストには出るけれど音が流れない(再生側を2.5GHz帯に接続すると音が鳴る)とかもあるので、なにかの設定がおかしいんだと思うけれど、これは別途調査することにする。

<追記>
たぶん解決した。設定方法は以下。
http://blog.imho.jp/2016/11/asusmac.html

2016年11月10日木曜日

外部ディスクの修復をかける方法(Mac)

Mac(El Capitan)のTime Machine用の外部ディスクが不調になってしまったので、ディスク修復を試みました。

アプリケーション>ディスクユーティリティ>First Aid
をまずは試みたのですが途中で中断されてしまうので。fsckコマンドを試す。

外部ディスクにfsckをかけるには、以下のようにします。
$ sudo fsck_hfs -fy /dev/disk1s2
fsck_hfsはHFSファイルシステムに対する修復で、-fでジャーナル機能が有効になっているボリュームにも修復を強制するようです。ディスクによりdisk1s2の部分は変わりますが、これはディスクユーティリティの情報で確認できるのでそれに応じて変更すれば良いと思います。

参考:http://superuser.com/questions/503759/how-to-run-fsck-on-an-external-drive-with-os-x

2016年11月9日水曜日

肥大化したiTunesライブラリを劇的に容量削減する方法

macとiPhoneを使っていると、App Storeからダウンロードしたアプリがどんどん母艦のiTunesのライブラリに保存されていって、macのストレージを圧迫していることがあります。同期するときのアプリ選択も、数が増えすぎるとやりづらいです。

過去に一度だけダウンロードしたアプリや、ダウンロードしたけれどいまいちですぐに消してしまったアプリがずっとiTunesライブラリに残り続けているのは無駄なので、削除してしまうことをおすすめします。以下やりかた。
iTunesのバージョンは12.5.1.21でやってます。

  1. まず、iTunesを起動します。
  2. 左上の再生ボタンの下あたりにあるプルダウンから、「App」を選択。
  3. 「ライブラリ」のリストから「App」を選ぶと、右側にライブラリに保存されているアプリの一覧があります。何年も前にダウンロードしたアプリなんかが、ずらっとでているはず。
  4. 不要なアプリを選択して、右クリック。「削除」を選択
  5. 「選択したAppをライブラリから削除しても良いですか?」という旨のダイアログが出るので、「Appを削除」を選択。
  6. 「選択したAppをゴミ箱に移動しますか?」というダイアログが出るので、容赦なく「ゴミ箱に入れる」を選択。
  7. あとはFinderで通常どおり「ゴミ箱を空に」すればOKです。
最近ではアプリは一本数百MB以上あることもよくありますし、必要なものはApp Storeから随時ダウンロードすれば良いので、ローカルのipaは特に理由がない限り、マメに整理するのが良さそうですね。

2016年11月3日木曜日

MacBook Pro (Late 2016)のTouch Barの設計についての考察

先日発表されて間もなく発売されるMacBook Pro Late 2016のTouch Bar搭載モデルですが、Touch Barの部分はmacOSでなく別のwatchOSのバリエーションで稼働しているらしい、という情報がありました。
MacBook ProのTouch BarはwatchOS(の変種)で稼働?
http://www.itmedia.co.jp/news/articles/1610/31/news063.html
なぜそのような設計になっているんだろうと考えてながら、そういえばMacBookにBoot Campを使ってWindowsをインストールした場合ってどういう挙動になるんだろうと思っていたら、単に通常のファンクションキーとして表示されるという情報も見つけました。
新型「MacBook Pro」のTouch Bar、Boot Camp上のWindows利用時は通常のファンクションキーが表示される
http://taisy0.com/2016/10/29/75833.html
考えるに、仮にTouch BarがmacOSと統合された機能として稼働するように設計した場合、ハードウェア単独では機能できず、つまりWindows用のTouch BarドライバのようなものもAppleが設計していく必要がある。Touch Barを独立したOSを持つ独立のハードウェアとして設計し、macOSの状態とは関係なく、デフォルトの状態ではファンクションキーとして疎結合な状態で動作するようにしておけば、macOSがTouch Barの機能をオーバーライドした場合だけ任意の表示や挙動をさせることができるという設計になっていることに気づきました。

MacBook ProではWindowsだけでなくLinuxなどもインストールすることが可能なので、Appleや他のOSデベロッパが必ずTouch Barの機能メンテナンスをすることなく、それでいて(必要があれば)Touch Barの機能を最大限に利用することができる設計が、Touch Barを独立したOSとすることで実現でき、そのOSは小さいフットプリントを持つ必要があるので、watchOSの変種として開発することでそれ自体のメンテナンスコストも最小限に抑えることができる。というとても理にかなった設計であるということになるんだと思います。

2016年11月2日水曜日

Homebrewを使ったpyenvのセットアップ(El Captan+zsh)

Homebrewを使ったzsh+prezto環境でのpyenvの構築手順メモ。

1. pyenvのインストール
$ brew update
$ brew install pyenv

2. 環境変数の設定
.zshrcに以下の行を追加する。Preztoの場合はどこに独自設定を書けばいいんだろうと思ったんだけど、普通に.zshrcに書けばいいらしいからPreztoはあんまり関係なかった。

if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
3. python環境のインストール
デフォルトで使えるバージョンはsystemのみ。
追加できるバージョンは以下で確認できる。
$ pyenv install -l
で確認したあと、
$ pyenv install 2.7.12
みたいにして任意のバージョンをインストールする。 pyenv環境にインストールすみのバージョンは
$ pyenv versions
で確認できる。 任意のディレクトリで
$ pyenv local 2.7.12
のようにすると、そのディレクトリに.python-versionというファイルが作られ、これが反映されてそのディレクトリ内でpythonコマンドを実行した時だけそのバージョンのPythonで実行されるようになり、ディレクトリを抜けるとglobalなpythonのバージョンに自動で切り替わる。globalなバージョンを変更するときは
$ pyenv global 2.7.12
とすると、ローカルに.python-versionがないディレクトリで実行される(globalな)pythonのバージョンを設定できる。

pyenv installでエラーになるときの対応

macOS(正確にはEl Capitan)のpyenvで特定のバージョンのpythonをインストールしようとしたときにエラーになることがありました。曰く:

$ pyenv install 2.7.12                                                                                                               +[master]Downloading Python-2.7.12.tar.xz...-> https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xzInstalling Python-2.7.12...ERROR: The Python zlib extension was not compiled. Missing the zlib?
Please consult to the Wiki page to fix the problem.https://github.com/yyuu/pyenv/wiki/Common-build-problems

調べると、 zlibのヘッダが見つかってないのでCFLAGS環境変数を設定するか、xcode-select --install を実行してXCodeコマンドラインツールを再度設定するとのこと(OSをアップグレードした後とかは必要だそう)。

今回はxcode-selectのほうを試して正常にインストールできるようになりました。
$ xcode-select --install   
として出てくるダイアログ経由でXcodeのコマンドラインツールをインストールしたあと、
$ pyenv install 2.7.12                                                                                                               +[master]Downloading Python-2.7.12.tar.xz...-> https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xzInstalling Python-2.7.12...Installed Python-2.7.12 to /Users/Kurosawa_Hiroyuki/.pyenv/versions/2.7.12 

としてインストールが成功するようになりました。

2016年7月1日金曜日

macOSのdocker toolboxをproxy環境下で使うために必要だった設定

proxy環境下でdocker toolboxを使った場合に必要だった設定のメモ
具体的には2つ別の設定をする必要があったのでメモ。
良く考えればそうなんだけど、そもそもの構成を理解してなかったというのもある。



1.boot2docker内からproxy接続するための設定

以下のファイルを編集
$ sudo vi /var/lib/boot2docker/profile

export http_proxy=http://xxx.xxx.xxx.xxx:xxxx
...
みたいに書く。

その上で、
$ sudo /etc/init.d/docker restart

これでboot2docker内ではdockerコマンドが通るようになる
$ docker search hello-world
みたいな感じ

2.osx上のdockerコマンドがboot2dockerに接続するための設定
osx上のdockerコマンドは裏でデフォルト2376ポートでboot2dockerと通信することで
透過的なコマンドを実現しているようで(※)、これはproxyを介さないようにする必要がある。

proxy設定によっては不要なんだろうけれど、特定のポートしか許可してなかったりする場合にはこの設定が必要

具体的にはexport no_proxy=xxx.xxx.xxx.xxxのような感じで環境変数に設定する。
設定するIPアドレスは
$ docker-machine ls
のURLとか、
$ docker-machine env 環境名
のDOCKER_HOSTで出てくるIPアドレスが対象である。

<追記>
macOS上のipアドレスとVirtualbox上のipアドレスのマッピングは
VBoxManageコマンドで可能そう(まだ試してない)

https://skatsuta.github.io/2015/08/13/docker-machine-port-forwarding/

<さらに追記>
というかVirtualboxのGUIから普通にできたので通常はそれ使えばいいと思った。