OmniAICreator/Qiita-1.07M huggingface dataset:
業務で使うGalaxy

# はじめに

技術の細かいことを書いても他と差別化できなそうなので、
まあ、ある程度ゆるい感じで書くのをお許しください。
（Qiitaっぽくない気もしますが）

# 簡単な自己紹介

初めまして。tsuyomatsuと申します。
最近はコードを書くのも稀になって、ひたすら会社むけの説明資料ばかり作っております（堕落）。
バリバリにコードを書いていた頃は、機械学習とかテキストマイニングが主戦場で、フルスクラッチの受託開発をやっていました。
空前のディープラーニングブームをよそに転職し、今は生命情報系の受託解析をやっている会社におります。

# DRY解析を学ぶ

さて、こういう業界に来た以上、まずは解析の勉強しなきゃ、ということで、まずはこのあたりを読んだ上で、手を動かしてみました。
- [Dr. Bonoの生命科学データ解析](https://www.amazon.co.jp/dp/4895929019)
- [次世代シークエンサーDRY解析教本](https://www.amazon.co.jp/dp/4780909201/)

書かれてある通りにやってみれば、実際にちゃんと動くというのは偉大です。
実際に解析のツールをインストールしたりしていて思ったのは、

- 解析のための環境を準備するのは結構大変
- 組織としての最適な・効率的なあり方はどうなのか

うちの会社の解析者は、生命情報系（薬学、獣医学とか）のバックグラウンドをもつ研究者がメインなのですが、
システム系のリテラシーがすごく高い訳ではありません。
そのために私のような技術者もいて、彼らをサポートすることになるのですが、
技術者が管理しやすく、解析者が使いやすい仕組みってないかな？と思いました。

# Galaxyとの出会い
そんなところ@suecharo 氏が「Galaxy参考になりますよ！」と教えてくれたので、
Galaxyのコミュニティにお邪魔したりして、知見を蓄えていきました。
その後、会社にもGalaxyのサーバを立てて、実案件でも活用しています。

# Galaxyのセットアップについて

実サーバにインストールするにせよ、Dockerで動かすのが良いと思います。詳細は、
[バイオインフォマティクス解析環境のGalaxyをMacのDockerで動かしてみる](https://qiita.com/youyuh48/items/0745d8dad978bd819f94)の記事が参考になります。

Docker使わず実サーバに入れたこともありましたが、
正直思い出したくないレベルで色々とあったので、ここでは割愛します。。。

# Galaxy導入後
## 解析環境はこうなった
３台の物理サーバが動いています（2019年1月現在）。

- 解析用メインサーバ（OS：Ubuntu 16.04 LTS）
- 解析用サブサーバ（OS：Ubuntu 16.04 LTS）
- Galaxyサーバ（OS：Ubuntu 14.04 LTS）

「手っ取り早くコマンド叩きたい」ってことはどうしてもあるので、
解析用のサーバが２台、Galaxyのサーバと別にあります。
OSは出来るだけ新しい安定しているバージョンに（でも18はまだ早いだろ）、
と思いつつ、GalaxyのDockerでは14が推奨されており、で結局こういうことに。
16.04だと動かない解析ツールとかもあって、その都度頑張って対応しています。
どのOSにしても簡単に動かないツールは必ずあるのですが。。。

## 導入して良かったこと
何より分かりやすいですよね。例えばインターンの子に手順を教えるとすると、
実際のコマンドを叩くのだとなかなか覚えてくれないようです。GUIは偉大。
あと、クオリティチェックとか画像まで手っ取り早く出てくれますし、
「俺はもうGalaxyしか使わない」って解析者もいます。

## 困っていること
- データのバックアップ
過去の受託案件のデータも（問い合わせあったりするので）ある程度保存しなきゃいけません。
また、障害が起こるリスクとかもあるので適宜バックアップを取りたい。
が、解析結果のファイルを保存するのが結構厄介だったりします。
（Galaxyの内部IDとファイルが紐づいているようで、単にファイルを保存するだけだと後でなんのファイルか全く分からなくなってしまいます）
そうなると、「全体でバックアップ、削除」みたいなのが難しく、
結局個人がこまめに消していかないと溜まっていく一方なんですよね。。。
大抵ファイルサイズがかなりデカイので、運用で神経を使います。

- ジョブ管理
多人数での使用になるので、それがスムーズになればいいなと。。。
きちんと作っていけば出来るのかもしれませんが、例えば適切なジョブ管理とか。
（優先したい処理の割り込みなど）

# 結論
実際に業務に使ってみて、色々と見えてきました。
「解析の仕組みをどう構築するか」ということを考える上で、良いたたき台になっています。

# 蛇足
結局最後は「解析業務のあり方」自体をどう設計するか？ということになると思うんです。
単一環境に複数のツールを入れる場合は、どうしても依存性が問題になりそうで、
（Pythonを複数バージョン入れたりとか）
じゃあ個別の処理を小さい単位でコンテナで動かせばいいやん、と思ったりします。
となるとクラウド的なアプローチでジョブ管理、リソース振り分けも柔軟になるはずですが、
解析結果のデータ量が大きすぎるんで、無茶苦茶金かかりそう。
再現性保証されてるから、別途やりゃいいんでしょうが。。。

とか、先人たちが歩んできた道にすっぱりとハマってしまったのでありました。
（車輪の再発明的な辛さを感じる）
宇宙人が地球に来て初めてこのLambdaを使ったら、きっと地球のLambdaはレベル高いな、と思うだろう。それがQuickDeploy

# [コピーメカ](https://qiita.com/YumaInaura/items/0d8427bfe2d7be476d0d)が気になったので使ってみたら、釣りくさくなってしまった。

<img width="771" alt="Screen Shot 2019-01-13 at 15.18.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/94861/573434e5-ccdd-1844-8c11-9bd0150c9b20.png">

※余談: コマンドラインでコピーメカをサクッと使うスクリプトを作ろうとしてみた

```:今回コピーメカで実行したやつ
curl -X POST http://www.copymecha.com/index.php  -d "x=Lambda&a=使う&y=QuickDeploy&mode=next1" -H "Content-Type: application/x-www-form-urlencoded" | iconv -f Shift_JIS -t UTF8
```

# 本題: AWS Lambda(サーバレス)わかってますよ感の手軽な演出
## 対象:「サーバレスの例としてAWS Lambdaをさくっと動かせたらいいな」、っていう方向け

## 前提: 
AWS CLI, jqコマンドがインストールされており、AWS S3バケットが作成されている。

[AWSアカウントID確認](https://console.aws.amazon.com/billing/home?#/account)



Bucket作成&バケット名確認(https://s3.console.aws.amazon.com/s3/home?region=us-east-1)

```bucketの一覧表示
aws s3api list-buckets
```

```bucketのlocation確認
aws s3api get-bucket-location --bucket <バケット名>
```

## 使い方

```
git clone https://github.com/iaoiui/QuickDeployForAWSLambda.git
```

AWSアカウントIDや、使用するバケット名、バケットのRegion、作成するLambda Functionの名前、Lambda funtionの実行時のパスをconfig.envファイルとして作成する。
config.env.templateに雛形があるので、さくっと作れる。

```:config.env
AccountID="YOUR AWS ACCOUNT ID"
BucketName="AWS S3 BUCKET NAME"
Region="REGION WHICH BUCKET IS IN"
FunctionName="LAMBDA FUNCTION NAME"
LambdaEndpointPath="LAMBDA FUNCTION PATH"
```

lambdaを読んだ時に返すJSONファイルをapi-response.jsonとして作成する。
もともとサンプルのものが置かれているのでここは任意

```api-response.json
{
  "data": [
    { "id": 1, "name": "hogehoge"},
    { "id": 2, "name": "fugafuga"}
  ]
}
```

あとはdeploy.shを実行すると、nodejsで書かれたLambda functionがデプロイされる

```
sh deploy.sh


Try following command to confirm lambda fuction working correctly
curl https://${REST_API_ID}.execute-api.${REGION}.amazonaws.com/prod/${endpoint} -H 'accept: application/json' -s | jq .
```

コンソールに表示されたcurlを実行すると、lambda functionが呼ばれapi_response.jsonで定義したjsonが取得できる。


# まとめ
nodejsを用いたlambdaのモックを作成する場合に、手軽に使えるツールを作成した。
lambdaを手軽にハンズオンしたい場合などの、心的負担を軽減できた(気がする)
機械学習論文読みメモ_152

[Path Aggregation Network for Instance Segmentation](https://arxiv.org/abs/1803.01534)
ネットワーク内における情報伝達構造を考える事は重要である。
本論で提案するPANetではそうした情報伝達を推進させるような
構造を持つproposal based instance segmentationのフレームワークを
提案する。
特に、feature pyramidを用いたマルチスケールの特徴表現の強化に
重点を置いてき、各層間をつなげる事で情報伝達をしやすく設計した。

[Unsupervised Representation Learning by Predicting Image Rotations](https://arxiv.org/abs/1803.07728)
deepnetの学習は多くのラベル付きデータに依存するためスケールしにくい。
そのため教師なし学習による学習が重要になっている。
本論ではそうした画像に対する教師なし学習として回転した画像を用いて、
その回転を予測するタスクを提案する。
一見単純なタスクではあるがこれは有用な教師信号としてモデルが画像の
セマンティックスを学習する事に役立つ。

[Modeling Camera Effects to Improve Deep Vision for Real and Synthetic Data](https://arxiv.org/abs/1803.07721)
従来研究は人工画像生成や実画像のaugmentationなどにより学習データの多様性や量を担保
させようとしてきた。
しかし、センサーハードウエアの多様性について研究している例は少ない。
不幸なことに、センサーの多様性はvision taskにおいてその学習モデルの汎化性能を
落としてしまう。
本論ではそうした問題に対して、物理ベースのaugmentation pipelineを提案し、
それによりセンサーの多様性を担保する。
Alexaスキル開発ではまったポイント

### Alexaスキル開発時の困りごと

ことわざスキル作成時に、Alexaに大量にことわざをしゃべらせていたのですが、
そこで起こったのが、
「思い通りにしゃべってくれない」ということ

### 例）
仏の顔も三度まで　⇒　（ふつ）のかおもさんどまで
帯に短し　⇒　おびに（たん）し
親しき　⇒　（おや）しき
ピリリと辛い　⇒　ぴりりと（つら）い

### どう対応？
ひらがなに変換する。
ただし、ひらがなにした場合、連続して発話してしまったり、
イントネーションが変化する場合もあるので、気を付ける必要がある。


# まとめ
VUI開発のテストにおいては、必ず発話して確認してみることが必要。
Ubuntu で apache2のDocument rootを変更する方法

## この記事の目的
個人的にGCE上UbuntuでWordpressを使ってサイトを立ち上げた際に実施した、</br>
Document Rootを変更作業の備忘録。

## 開発環境
- Ubuntu 18.10
- Apache 2.4.34

## 設定手順
#### 1. apache2.cnf を編集し、コンテンツのディレクトリを変更する。
自分の場合は、/etc/apache2/apache2.cnf を編集する。
今回は、/var/www/html/wordpress フォルダにあるコンテンツを表示してほしいので、下記の様に"/html/wordpress"をに追加する。

```Apache
$ sudo vim /etc/apache2/apache2.conf 
~
170 <Directory /var/www"ここから"/html/wordpress"ここまで追加">
171         Options Indexes FollowSymLinks
172         AllowOverride All
173         Require all granted
174 </Directory>
175 
~
```

#### 2. 000-default.conf を編集し、1の変更を反映する。
000-default.confは/etc/apache2/sites-available ディレクトリにあり、</br>
virtual hostの設定が書いてあるファイル。
下記の様に、変更する。

```Apache
$ sudo vim /etc/apache2/sites-available/000-default.conf
~

 10 
 11         ServerAdmin webmaster@localhost
 12         DocumentRoot /var/www"ここから"/html/wordpress"ここまで追加"
 13 
~

```

#### 3. Apache2を再起動する。
変更を反映させるため、Apache2を再起動します。

```
$ sudo service apache2 restart
```


## 終わりに
これで、Document Rootが変更できました。
## 参考記事
[こちら](https://qiita.com/shita_fontaine/items/40a086265f0cf07d10e0)
Pythonではじめる機械学習　レポート

オライリージャパンより出版されている
「Pythonではじめる機械学習」
Andreas C.Muller, Sarah Guido　著
中田　秀基　訳
を読んだので備忘録としてまとめておきます。

[1章　はじめに](https://qiita.com/0Scher/private/b4802a5d0981793fc50f)

[2章　教師あり学習](https://qiita.com/0Scher/private/d540e13d45a1a642040f)

[3章　教師なし学習と前処理](https://qiita.com/0Scher/private/b53dfcc8a12e17cd9a54)

[4章　データの表現と特徴量エンジニアリング](https://qiita.com/0Scher/private/b3224938cc2eb9bb65ab)

[5章　モデルの評価と改良](https://qiita.com/0Scher/private/a1d2a817517d8890a800)

[6章　アルゴリズムチェーンとパイプライン](https://qiita.com/0Scher/private/e5269ecb62fb7a8ce7fd)

[7章　テキストデータの処理](https://qiita.com/0Scher/private/f1cc5eebe5fd75f88b3c)

[8章　おわりに](https://qiita.com/0Scher/private/b998c2a29627fb874130)
Pythonではじめる機械学習　レポート⑧

#8章　おわりに
##8.1 機械学習問題へのアプローチ
　ビジネスゴールを実現するためのシステムを作る前に、
成功する基準をどう設定するか、成功した場合にどのような影響があるかを考える。

例えば、不正トランザクションの検出を目標とすると、
・不正検出が実際に出来ているかどうかをどうやって測定するのか？
・アルゴリズムを評価するためのデータはあるか？
・成功したとして、ビジネスにどの程度影響するか？
この例では、会社が月に1万円しか節約できないなら、止めた方がいい。
月に数百万節約できるなら、やる価値はある。

##8.2 プロトタイプから運用システムへ
　今あるアプリケーションに簡単にPythonで組み込めるわけではないため、
データ解析チームは素早くアイデアを検証できるPythonやR言語を使用し、
運用チームはGo,Scala,C++,Javaなどを用いる。

　データ解析にはサービスを構築する言語とは異なる性質が要求されるため、
別の言語を使うことにはきちんとした意味がある。

　よく使う方法としては、解析チームが見つけた解決方法を、
より大きいフレームワークで高性能向け言語で再実装する方法である。
また、運用システムに機械学習を提供するには簡潔性が重要である。

##8.3 ここからどこへ行くのか
###8.3.1 名誉を得る
　もし手近に練習できるデータや課題が揃わなければ、
Kaggleなどの機械学習コンペに参加するとよい。
Pythonではじめる機械学習　レポート⑦

#7章　テキストデータの処理
　テキストデータの長さはまちまちなので、今までの数値特徴量とは扱い方が違うため、
前処理の仕方も違ってくる。

##7.1 映画レビューの感情分析
　以下のようなデータセットがあるとする。

・映画のレビュー(テキスト形式)
・「肯定的」もしくは「否定的」(ラベル)

　レビューのテキストから、「肯定的」か「否定的」かを判別すると、
2クラス分類として処理できる。そうするために、
テキストデータを数値形式に変換する必要がある。

##7.2 BoW(Bag of Words)によるテキスト表現
　Bowは最もシンプルで効率が良く、広く使われているデータの表現方法である。
文章中にその単語が何回出てきたか、という点にのみ着目する。
以下の3ステップで処理する。

1.トークン分割(Tokenization)
文章を単語に分割する。

2.ボキャブラリ構築(Vocabulary building)
すべての文書に現れる、すべての単語に番号を付ける。

3.エンコード
それぞれの文書に対して、単語が出てくる数をカウントする。

##7.3 tf-idf(term frequency-inverse document frequency)を用いたスケール変換
　tf-idfとは、特徴量がどのくらい情報を持っているかに応じて、特徴量のスケールを変換する方法のうちの１つである。
特定の文書にのみ頻出し、ほかの文書にあまり現れない単語は、その文書の内容を示す
という考え方に基づいている。
　以下は、文書dにおける、単語wのtf-idfスコアである。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/1e11818f-4b13-61d3-5e38-8ee920739411.png)
N：訓練セット中の文書の数
Nw：訓練セット中の文書のうち、wがある文書の数
tf：文書d中にwが現れる回数

　上記の式を使うことによって、
文書の長さがベクトル表現に影響しなくなる。
(ベクトルの長さがすべて1になるようにスケール変換するため)

##7.4 1単語よりも大きい単位のBoW(n-グラム)
　BoWの問題は、単語の順番が完全に失われることである。
そこで、単語を1つ1つに区切るのではなく、
2つもしくは3つ連続するように区切る。
2つのトークンを**バイグラム(bigram)**、3つのトークンを**トリグラム(trigram)**、
n個のトークンを**n-グラム(n-gram)**という。
　ほとんどの場合は１つのトークンである**ユニグラム(unigram)**で十分である。
5-グラムぐらいまでは性能が向上する可能性があるものの、
特徴量の数が増え、ユニークな特徴量も増えるので過剰適合しやすくなる。

##7.5 トピックモデリング(topic modeling)と文書クラスタリング
　トピックモデリングは、テキストデータによく用いられる技術で、
それぞれの文書に対して１つ以上の**トピック(topic)**を割り当てる
教師なし学習である。
　割り当てるトピックが1つの場合、クラスタリングとなる。
トピックが2つ以上の場合、成分分析となる。
トピックモデリングはこの成分分析に属し、
**LDA(Latent Dirichlet Allocation)**という成分分析手法のことである。

###7.6.1 LDA
　機械学習での「トピック」とは、日常会話のトピックとは意味が違う。

・機械学習のトピック
→文章によく出る単語に過ぎず、意味があるかないかは不明

・会話のトピック
→政治、スポーツ、金融など

##7.7 まとめと展望
　SPAM検出、感情分析などのクラス分類では、BoWが有効である。
RailsでBCryptのパスワードをDBに直接insert or updateしたかった。。。

# 何も考えずにパスワードをinsertしてログインすると

`BCrypt::Errors::InvalidHash`

こんなエラーに怒られる。

## 暗号化

こやつは`BCrypt`
で暗号化されたものをご所望だ！！

[BCrypt ハッシュ値 計算](http://www.tekboy.net/bcrypt-calculator)

このサイトで暗号化して

## 暗号化したものを保存

```mysql
update table_name set password='暗号化したパスワード';
```
Java検定2級に合格したのでメモ残しとく

#自己紹介
・プログラミング未経験、機械音痴、勉強嫌い
・なのにIT会社に入社（今年で2年目のぺーぺー）
・お先真っ暗

そんな状態でもなんとかJava検定2級には合格できたので忘れないうちにやってたことをメモっておく。


#とりあえずやったこと
1．Java参考書を２周した
といってもしっかりは読み込んでないです。
勉強がマジで嫌いなのでそもそもちゃんと参考書を読めた試しがない・・・
しっかり全文読める人はホントに尊敬してます。
じゃあどうしたか。

＜＜サラッと読んで、即次のページにいく。これの繰り返し。＞＞

もちろんサラッとなので理解してないところも多い。
けど『よくわからんが一応読んだわ』って思えるようになります。
そうすると『一応読んだ』ことになるので先に進んでも許される感じになります。
この『一応読んだ』を続けていったことによって読みたくなかった参考書も最後まで読むことができました。

それでもやっぱりサラッとしか読んでないので、2周目に入ります。
ここで大切なのが『読まなくていいと思ったところは読まない』などのマイルールを設けること。
一から同じ参考書を読み直すのとか苦行でしかないので、自分の中でマイルールを設けてから2周目に入ると割と読めるようになります。

で、2周目もサラッと読む。とにかく読み込まない。
わからないところはしょうがない精神をもつ。（今後わかるようになるかもしれないし）


2．同期との過去問題集作成
参考書を読むことも大切なんですが、正直今回私が合格できた一番の理由はコレです。
いままで他人を巻き込んで勉強をするということをしたことがなかったので気づけなかったが、かなりイイことがわかった。

＜＜仲間と協力しているのだから怠けていられない＞＞

と思うことが非常に多くなりました。
過去問題集を一人の同期が購入してくれていたのでそれを同期数人と手分けしてコピーして問題集を人数分作成することをしていたのですが、まずその時点で仲間と協力してやり遂げようとしている感を強く感じました。
そして、『あ、これは私だけの問題じゃなくなってきたぞ』と思うようになりました。
そっからがすごかった。

＜＜過去問をすべて解くことができた。＞＞

大学受験の時ですら過去問すべて解かなかったのに・・・
自分でも驚きました。仲間の力ってすごいんですね。
過去問も最初のうちはぜんぜん得点できず、やっぱ勉強無理や～て思ってたんですが何年分もやっていくうちにどんな問題が出題される傾向にあるのか、どうやって解けば正解を出せるかが感覚でわかってくるようになり最後の年度では8割ぐらい得点できるようになっていました。


#結局のところ
私が今回合格できたのは

・参考書を読む
・過去問を解く

という、当たり前だろそんなことと言われてしまうような理由でした。

今後も資格試験を受けていくので今回気付けたことをまた活かしたいな～と思う。
vue-cli3事始めで読んだものの備忘録

フロントエンドでvueを使って簡単なペラページを作ることになったのですが、

* typescriptを使うように指示を受けている
* webstorm使えるけど、ほぼ未設定

という状態で右往左往したので、読んだものを備忘録でまとめます。

# やったこと

* typescriptでvueの雛形を作る
* vueの雛形を元に、typescriptでの記法を学ぶ   
...のは厳しかったので、日本語のリファレンスを読んで勉強
* IDE(webstorm)で、開発に困らない程度の設定する
    * lint は、 TsLint
    * formatter は、 prettier
    * コード保存時に、 prettierが自動でかかるように修正
* configを別ファイルに切り出す

# 動作環境

```
$ npm -v
6.4.1
$ node -v
v10.14.1
 vue --version
3.2.1
```


# 1. typescriptでvueの雛形を作る
非常に参考になりました。
https://qiita.com/nunulk/items/7e20d6741637c3416dcd


# 2. 日本語のリファレンスを読んで勉強
非常に参考になりました。
https://qiita.com/nrslib/items/be90cc19fa3122266fd7

ただ、 slotについては忘れてたこともあり、おおう？って感じでしたので、下記で勉強。
https://www.hypertextcandy.com/vuejs-components-introduction-slots

typescriptは最初らへんだけ、ここを読みました
http://js.studio-kingdom.com/


## 3. IDE(webstorm)で、開発に困らない程度の設定する
### lint は、 tslint
後述するpritterの設定と競合する箇所があり、多少設定変更をした。

### formatter は、 pritter
公式のドキュメント通り、npmでpritterをインストールした
https://pleiades.io/help/webstorm/prettier.html


### コード保存時に、 prettierが自動でかかるように修正


prettierを保存のたびに手動で流すのが嫌だったので、webstormで設定。
https://qiita.com/kouchi67/items/6d3b5cf66f57c4ff6600

prettierの設定は、公式サイトの設定例がフォーマット例もあってわかりやすい。
https://prettier.io/docs/en/options.html#jsx-brackets

## configを別ファイルに切り出す
DBの接続先等を外部ファイルにする。
https://cli.vuejs.org/guide/mode-and-env.html#example-staging-mode

## dev-server の設定変更
`npm run serve` したときのサーバの設定変更をしたかったら、ここを参考にすると良い。

https://cli.vuejs.org/config/#devserver
https://webpack.js.org/configuration/dev-server/

ちなみに、 port を起動するだけなら、以下のファイルをルート直下におけば良い。

```vue.config.js
module.exports = {
  devServer: {
    port: 9000
  },
}
```

# 蛇足
## json-serverでmockサーバをつくる
サーバ周りがサクッと作りたいなーと思ったとき用。
vue-injection で、所定のパラメータを付与して起動した際にinject対象のサービスを切り替える実装がおっくぅなときに使えそうだと思った。


## element-uiを使うとき

```
npm install -s element-ui
```

その後、`main.ts`に以下の追記

```
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.config.productionTip = false
Vue.use(ElementUI)
```

## webstormのショートカット
https://qiita.com/yoppe/items/f7cbeb825c071691d3f2
Alexa ASK CLI コマンドで デプロイ先の AWS Lambdaリージョンを指定する方法

# 1. はじめに
Alexaスキルを、コマンドラインツール（[ASK CLI](https://www.npmjs.com/package/ask-cli)）を用いて開発する際、2018年12月まではデプロイ先のAWS Lambdaリージョンがデフォルトで「バージニアリージョン」となっており、「東京リージョン」にデプロイ出来ないことが多くの開発者の悩みのたねとなっていました。
この度、2019年1月のASK CLIバージョンアップ（v1.5.3以降）から、ask deployコマンド実行時のAWS Lambdaリージョンのデプロイ先を指定することができましたので、設定方法をお伝えします。

## 1-1. この記事を読んでできること
- **ASK CLIコマンド（ask deployコマンド）でのデプロイ先のAWS Lambdaリージョンを指定できるようになる。**

## 1-2. 前提条件
- [AWS CLI](https://docs.aws.amazon.com/ja_jp/streams/latest/dev/kinesis-tutorial-cli-installation.html)コマンドがセットアップされていること。
- [ASK CLI](https://developer.amazon.com/ja/docs/smapi/quick-start-alexa-skills-kit-command-line-interface.html)コマンドがセットアップされていること。
- ASK CLIコマンドを利用したAlexaスキル開発（ask new、ask deploy）を理解していること。

## 1-3. 注意事項
- 既にデプロイ済みのAlexaスキルの場合は適用されません。
- 新規にAlexaスキルを作成（ask new）し、初回のデプロイ時（ask deploy）に指定したAWS Lambdaリージョンにデプロイされます。

- 今回の手順では、ask newコマンドの直後にask deployを実行すると、Alexaスキルが英語（en-US）、AWS Lambdaが「東京リージョン」にデプロイされます。Alexaスキルを日本語（ja-JP）としてデプロイしたい場合は、ask deployコマンド実行の前に、以下のQiita記事をご参考のうえ、Alexaスキルの日本語化をおこなってください。
- [skill.jsonの修正（日本語化）](https://qiita.com/zono_0/items/8b7e084319be39f7baa6#3-skilljson%E3%81%AE%E4%BF%AE%E6%AD%A3%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%8C%96)
- [ja-JP.jsonの作成（日本語化）](https://qiita.com/zono_0/items/8b7e084319be39f7baa6#5-ja-jpjson%E3%81%AE%E4%BD%9C%E6%88%90%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%8C%96)

# 2. 設定方法
- aws cliの設定ファイルを編集し、デプロイ先のリージョンを設定する。
- ファイルは、~/.aws/config (Linux, macOS, or Unix の場合) または C:\Users\USERNAME\.aws\config (Windows の場合) にあります。

```shell:Ubuntuコマンドライン
#askコマンドのバージョン確認
$ ask --version
1.5.4

#askコマンドのバージョンアップ（バージョンが1.5.2以前の場合のみ実行）
$ sudo npm update -g ask-cli

#設定ファイルのあるディレクトリ移動
$ cd ~/.aws

#設定ファイルを編集＆保存する
#regionの設定値によりデプロイ先リージョンを設定
$ vi config
[default]
region=ap-northeast-1
output=json

```

# 3. ASK CLIでデプロイ

```shell:Ubuntuコマンドライン
#コマンドによるAlexaスキルの作成
$ ask new
? Please select the runtime Node.js V8
? List of templates you can choose Hello World
? Please type in your skill name:  skill-sample-nodejs-hello-world
Skill "skill-sample-nodejs-hello-world" has been created based on the chosen template

#作成したAlexaスキルフォルダ（任意）に移動
$ cd skill-sample-nodejs-hello-world

#Alexaスキルを英語（en-US）ではなく日本語（ja-JP）としてデプロイしたい場合は、
#このタイミングでAlexaスキルの日本語化を済ませてください。

#コマンドによるAlexaスキルのデプロイ
#（configファイルに設定したリージョン（region）にデプロイされます）
$ ask deploy
```

# 4. おわりに
いかがだったでしょうか？ご参考になりましたでしょうか？
もしかしたら間違ってるよ、とかありましたら、コメント頂けると幸いです。

2019/01/13 TAKAHIRO NISHIZONO
VBA_If文を1行で記述

#1.概要
If文を一行で記載する場合のサンプル

#2.ソースコード

```vb

Sub IFを1行で書く()
    
    If True Then Debug.Print "OK1" 'EndIfは書かない

'    If True Then: Debug.Print "NG1": End If 'Endifはエラー
    
    If True Then: Debug.Print "OK2" 'ここはコロン付けてもOK
    If True Then: Debug.Print "OK3": Debug.Print "OK4" '2文並べてもOK
    
    '2つ並べても入れ子にならない
    If False Then Debug.Print "OK5(Falseなので実行されない)"
    If True Then Debug.Print "OK6(入れ子にならないので実行される)"
    
    'ElseIfもOKだが、1行目は2行に分ける、End Ifは必要
    If False Then
        Debug.Print "OK7(Falseなので実行されない)"
    ElseIf True Then Debug.Print "OK8(ElseIfもOK)"
    End If 'End Ifは必要
    
    '1行でIFを複数並べるのも可(読みにくいのでしないが)
    If False Then: If True Then Debug.Print "OK9(親がFalseなので実行されない)"

End Sub


```

#3.出力結果

```
OK1
OK2
OK3
OK4
OK6(入れ子にならないので実行される)
OK8(ElseIfもOK)
```


#4.出典
http://d.hatena.ne.jp/maeyan/20130824/1377275298
Rails5系以上でInvalidAuthenticityTokenエラー

# 環境
- サーバーRails5
- フロントをReact/Angular
- Railsのdeviseのsign_outリクエストをX-CSRF-Tokenのヘッダーを付けて実行したときに発生

# エラー

```
Started DELETE "/api/v1/users/sign_out" for 127.0.0.1 at 2018-11-29 11:26:51 +0900
Processing by Users::SessionsController#destroy as JSON
  Parameters: {"session"=>{}}
  User Load (2.2ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
  ↳ /Users/xxx/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
HTTP Origin header (http://localhost:3001) didn't match request.base_url (http://localhost:3000)
```

# 解決方法
- 開発環境なら config/environments/development.rbなんかに`config.action_controller.forgery_protection_origin_check = false`の設定を追加
- 本番環境であればnginxのリバースプロキシなどをごにょごにょ

# エラー原因

- Rails5系ではデフォルトで `config.action_controller.forgery_protection_origin_check = true` になっている
- その場合、X-CSRF-Tokenヘッダーを付けたリクエストを送ると以下のチェックが走る

```rb:actionpack/lib/action_controller/metal/request_forgery_protection.rb#L398

      # Checks if the request originated from the same origin by looking at the
      # Origin header.
      def valid_request_origin?
        if forgery_protection_origin_check
          # We accept blank origin headers because some user agents don't send it.
          request.origin.nil? || request.origin == request.base_url
        else
          true
        end
      end
```
- [rails/actionpack/lib/action_controller/metal/request_forgery_protection.rb](https://github.com/rails/rails/blob/v5.0.0.1/actionpack/lib/action_controller/metal/request_forgery_protection.rb#L398)
- このチェックではportが異なっていても例外となる
- そのためSPAのようにブラウザのポートとAPIのポートが異なるようなSPAの開発環境でおこりがち


# その他参考
- [Request origin does not match request base_url #22965](https://github.com/rails/rails/issues/22965#issuecomment-172941401)
- [RailsのPOSTでCSRF TokenがVerifyできないときに確認したいこと](https://qiita.com/yu_suke1994/items/39fa64ef96aa2a67dc2a)
Google UI Automator のメインクラスを紹介する

# 目的
* 本文はGoogle Ui Automatorのクラスについて紹介して、具体的な使い方を説明しない




# Google UI Automatorとは
* Googleが開発しているAndroid向け自動UIテストフレームワークです。
* Espressoと違いは、自分のアプリをテストできてその他のアプリもテストできる
* Ui Automator Viewを使ってアプリのresource id、textなど要素情報を取得できる
* Android ChromeもUIテストできて、twitterやFBのログインテストに対してとても助かる


# リンク
* [android.support.test.uiautomator](https://developer.android.com/reference/android/support/test/uiautomator/package-summary)


# メインクラス
* UiDevice
* Configurator
* --
* By
* BySelector
* UiObject2
* Until
* --
* UiObject
* UiCollection
* UiScrollable
* UiSelector

# 詳細説明
## [UiDevice](https://developer.android.com/reference/android/support/test/uiautomator/UiDevice)
### 目的
* テスト中にデバイスのステータス情報を取得できる

### 主なメソッド
* device.pressHome()
 * home键
* device.pressBack()
 * back键
* device.swipe(200,0,200, 300,180)
 * 下にスワィプして通知欄を表示する


## [Configurator](https://developer.android.com/reference/android/support/test/uiautomator/Configurator)
### 目的
* 各動作の遅延とタイムアウトの値を設定する


### 主なメソッド
* setActionAcknowledgmentTimeout(long timeout)
 * 動作タイムアウト、例えば、クリック、ボタンを押す、本文入力
 * デフォルトは3s
* setKeyInjectionDelay(long delay)
 * キーボード入力の遅延設定
 * デフォルトは0s
* setScrollAcknowledgmentTimeout(long timeout)
 * スクロール動作タイムアウト設定
 * デフォルトは200ms
* setWaitForIdleTimeout(long timeout)
 * デフォルトは10s
* setWaitForSelectorTimeout(long timeout)
 * デフォルトは10s


## [UiObject](https://developer.android.com/reference/android/support/test/uiautomator/UiObject) vs [UiObject2](https://developer.android.com/reference/android/support/test/uiautomator/UiObject2)


### 目的
* アクションを実行する

### 区別
##### どうなものか
* UiObject
 * ビューの表現である。再利用できる
 * 例えば、ダイアログ表示ボタンのUiObjectインスタンスで新しいダイアログを開けて閉じて、同じボタンのUiObjectインスタンスで再利用して操作できる
* UiObject2
 * 要素の表現であ流。再利用できない
 * 上記の同じ例で、開けたダイアログを閉じた後に、以前作ったUiObject2インスタンスを再利用できなくて、新いUiObject2インスタンスの作成が必要

##### Objectを探す
* UiObject
 * 以下の方法で探したいOjbectが表示されるかどうかことを確認できる

```kotlin

var ob = UiDevice.findObject(UiSelector)
if (ob.waitForExists(timeout)){
  ob.click()
}
```

* UiObject2

```kotlin

UiDevice.wait(Until.findObject(SearchCondition, timeout) 
```

##### スクロール
* UiObject
 * UiObjectのサブクラス: UiScrollableでいろいろな画面を操作できる
 * 画面に存在していない要素は、scrollIntoViewメソッドで簡単に画面に移動できる

* UiObject2
 * UiObject2.swipe(Direction, percentage)
 * UiObject2.scroll(Direction, percentage)
 * 上記の二つのメソッドで、numberpickerやscrollviewなど画面を操作できる



## BySelector vs. UiSelector
### 目的
* 検索条件設定用クラス
* UiSelector
 * UiObject用のオブジェクト検索条件
 * 例： UiDevice.findObject(UiSelector)
* BySelector
 * UiObject2用のオブジェクト検索条件
 * 例： UiDevice.findObject(BySelector)

## By vs. BySelector
* BySelectorのユーティリティクラス
* 使うことが簡単
OSXでgitkを使う


OSX(macOS)でgitkを起動しようとすると以下のメッセージが出て起動できない。

```
Error in startup script: 
    while executing
"exec osascript -e [format {
        tell application "System Events"
            set frontmost of processes whose unix id is %d to true
        end te..."
    invoked from within
"if {[tk windowingsystem] eq "aqua"} {
    exec osascript -e [format {
        tell application "System Events"
            set frontmost of processes ..."
    (file "/usr/local/bin/gitk" line 12212
```

当該execをcatchで囲うとよいらしい。

```
index a14d7a16b2..f13d1807bb 100755
--- a/gitk-git/gitk
+++ b/gitk-git/gitk
@@ -12210,11 +12210,13 @@ if {[catch {package require Tk 8.4} err]} {
 
 # on OSX bring the current Wish process window to front
 if {[tk windowingsystem] eq "aqua"} {
-    exec osascript -e [format {
-        tell application "System Events"
-            set frontmost of processes whose unix id is %d to true
-        end tell
-    } [pid] ]
+    catch {
+	exec osascript -e [format {
+	    tell application "System Events"
+		set frontmost of processes whose unix id is %d to true
+	    end tell
+	} [pid] ]
+    }
 }
 
 # Unset GIT_TRACE var if set
```

以下をコピペで適用できます。

```
# on OSX bring the current Wish process window to front
if {[tk windowingsystem] eq "aqua"} {
    catch {
        exec osascript -e [format {
            tell application "System Events"
                set frontmost of processes whose unix id is %d to true
            end tell
        } [pid] ]
    }
}
```

cf: https://public-inbox.org/git/20180724065120.7664-1-sunshine@sunshineco.com/
paizaの問題をSwiftで挑戦するときの標準入出力

[値取得・出力サンプルコード](https://paiza.jp/guide/samplecode)の中にSwiftの例がない。
Swiftで標準入出力もらうことがほとんどないので、最初結構戸惑った。
（なんでサンプルないんだ？）
# 標準入力（単行）
```Swift:デフォルト
let input_line=readLine()!
print("XXXXXX")
```
paizaのデフォルトで表示されるのがこれ。
readLine()で入力値を受け取れる。
!付きなのは、標準入力使うと、通常Optional<String>型でラップされて返ってくるので、
強制アンラップをかけており、input_lineの型はString型になっている。
（標準入力は、nilが入ってくる可能性がある）
！をあんまりつけたくない気持ちはあるのだが、paizaがこれでいいと言ってくれるならば、これで行こう。

入力値が単行の場合、複数のデータが一行で入っていて、
それを分割するところから処理をはじめるケースが多い。

また、Dランクあたりは、2つの数値が文字列で来て、
数値型に変換して、何かしら計算して返せ、みたいなお題が多いように見えた。

標準入力受けるだけならデフォルトの一行なんだけど、
実際は下記くらいのことはだいたいやるんじゃないか。

```Swift:サンプル（単行）
//aとbふたつの数値をなんかしろ、みたいな課題
//このときの入力データは「8 15」みたいな形式

import Foundation

let input_line: String = readLine()!
let split: [String] = input_line.components(separatedBy: " ") //ブランクで区切られている場合

let a = Int(split[0])! 
//String -> Intの型変換はnilが返る可能性があるので、ラップされたOptional<Int>型が返るので強制アンラップ
let b = Int(split[1])!
```
この辺の基本的な型変換とかできますか、というのがDランクで問われてることなのかな？

# 標準入力（複数行）
で、ここから僕がハマったポイントなんだけど、
複数行あると、readLine()は複数回行う必要がある。
EOFまでまとめて受け取れないかな〜と思ったが、そんな方法はないようだ。

[Apple公式](https://developer.apple.com/documentation/swift/1641199-readline)

```swift:readLine
func readLine(strippingNewline: Bool = default) -> String?
```

strippingNewlineなる引数があるが、
これはどうも改行文字（\n）を戻り値に含めるか、含めない（stripするか）かの指定っぽい。

２，３行だったら、決め打ちでreadLineを2,3回すればいいと思う。
それ以上になると、配列つくって、ループ文で受け取って、とやるしかない。

```swift:サンプル（複数行）
/*
25
5
10
みたいな入力を受け取りたい
*/
var input_lines = [String]()
let row = 3  //3行
for i in 0..<row {
    input_lines.append(readLine()!)
}
print(input_lines) // ["25", "5", "10"]
```
Int型への変換とかは単行のときと同様。

# 標準出力
pritn()で出せば終わり。

問題文の最後に「最後は改行し、余計な文字、空行を含んではいけません」とあるので、
\nを最後につけなきゃいけないのかと思ったのだけど、
どうやらpirnt関数は最後勝手に改行するらしく、これは不要。
Kaggle Kernel ”Time series Basics : Exploring traditional TS” 日本語訳メモ

#はじめに
Kaggleの「[Predict Future Sales](https://www.kaggle.com/c/competitive-data-science-predict-future-sales)」コンペに手を付けるに当たって、時系列データ初心者の自分が参考にしているKernelである「[Time Series Basics](https://www.kaggle.com/jagangupta/time-series-basics-exploring-traditional-ts)」の訳を自分のメモがてら記事として残していくことにしました。グラフは省略、ひとまず基礎理論を解説している2章まで。
Jagan氏に感謝を。

平文は訳文
*斜体はメモ*

#時系列データの基礎:
(Basics of TS)
様々な伝統的な時系列データモデルの様々な基礎的概念の調査と
それらの背景にあるいくらかの基礎的な直感について

#目標:
(Objective)
このカーネルは多種多様な時系列データの概念のリポジトリとして初学者に提供するために作られている
熟練者にとっても新鮮さを与えるような有益なものであれば良いと願う

#コンペティションデータの概観:
(Competition and data overview)
このプレイグラウンドのコンペティションでは, ロシアのソフトウェア会社1cCompanyの次月の総売上を製品ごと・店ごとに予想するチャレンジを与えられている

###1cCompanyは何をしている？
このプログラムの1Cエンタープライズ8システムは日々の企業活動の自動化を目指している: 様々な会社の財務や経営のビジネスタスク、例えば、経営の会計、取引の会計、HRマネージメント、CRM、SRM、MRP、MRP、などである。

**Data**: 店舗商品の組み合わせについて日々の売り上げのデータが与えられているが、タスクは月ごとの単位で売上を予測することだ


#Single series:
(Single series)
このプログラムの目標を達成するには、店舗と商品の組み合わせそれぞれについて次月の売り上げを予測することが必要だ
それぞれの店舗と商品の売り上げの時間推移は時系列データ自身だ。
全ての組み合わせに挑戦する前にまず、ある一つの系列データを予測すためにはどうすれば良いか理解しておこう
会社全体の月ごとの総売上の予測について取り上げておいた
では初めに、月ごとの総売上を計算し、データをプロットしてみよう


**ざっと見てみると**: 明確に季節性過程と減少トレンド過程があることがわかる.


簡単な分解を使って、トレンド、季節性、残差を確認してみよう

加法モデルを想定してるため、次のように書ける

>yt=St+Tt+Et

ytはt期間におけるデータ、Stはt期間における季節性過程、Ttはt期間におけるトレンドサイクル過程、そしてEtはt期間における残り（もしくはイレギュラーまたは誤差）であり、乗算モデルに似ている

>yt=St x Tt x Et

#定常性とは:
(Stationarity)
データが定常性であるとはどういった意味だろうか？

１．連続データの平均値が時間関数的であってはならない。下図の赤いグラフは時間が経つごとに増加しているため、定常性ではない
２．連続データが一貫して変化していない場合、時間関数的であってはならない。この性質は同分散性という名称で知られている。下図の赤いグラフは、時間が経つごとにバラバラに変化していることに注目してほしい。
３．最後に、i番目とi+m番目の区間の共分散は、時間関数的であってはならない。次のグラフにおいて、時間が増加するごとに波の幅がどんどん近くなっていることに気づくだろう。したがって、共分散は赤い方の連続データとは一致していない。
（グラフはKernel参照）


定常性とはデータ系列の時間普遍性のことだ。例えば、時系列データの二点間が互いに関係していることである。それは互いのデータが、どれだけ離れていても、方向が前後していてもだ。

時系列データが定常過程であれば、簡単にモデル化できる。統計的モデルは、時系列データが定常性であることを想定、前提条件としている。

定常性であるかどうかを確認するテストとして利用されるものには複数ある。
ADF( Augmented Dicky Fuller Test)
KPSS
PP (Phillips-Perron test)
もっとも普遍的なADFを用いてみよう

De-trend
データ系列を前月データの差分データに変換する（numpy.diffでできるのかな？）

De-Seansonalizetion
データ系列を前年のデータの差分データに変換する

*〜ほか省略〜*

#AR, MA and ARMA models:
(AR, MA and ARMA models)
TL: DR モデルの比較説明:

MA - 系列データの次の値が前の値の平均値であるような関数
AR - 次の値の誤差（平均）がn前の値における誤差であるような関数
ARMA - 両方の混合

*上段左は自己相関、上段右は偏自己相関を示している
statsmodels.sta.api.acf/pacf
下段２つはいずれもデータが正規分布に従っているかどうか確認している。
statsmodels.api.qqplot(...lines='s')
spicy.stat.probplot*

*〜ほか省略〜*

##さて、だんだん記憶が曖昧になってきて見通しが悪いので、気の利いた要約を下表にまとめておこう
(Now things get a little hazy. Its not very clear/straight-forward.)

| ACF(自己相関)の形状 | 必要なモデル |
|:------------------|:-----------------|
| 指数的に、次第に0に減衰する | ARモデル、偏自己相関を使って ARモデルのorderを特定するようにプロットする | |
| ポジティブとネガティブを交互に繰り返し, ゼロのARモデルに減衰する. | 偏自己相関を使って、orderを識別するようにプロットする | |
| ひとつかそれ以上の波形があり, 残りはほぼゼロ | MAモデル、プロットがゼロになるところを持って、orderを識別する | |
| いくつかのずれの後にゼロに向かって減衰する | ARMAモデル | |
| 全てゼロ、もしくはほぼゼロ | データがほとんどランダム | |
| 高い値が一定の周期で続く | 季節的自己回帰項を含んでいる | |
| ゼロに減衰しない | 定常性がない | |


#次は

LSTMを用いているKernelを読みたい
Zincキーボード組み立てで参考にしたサイト

## 背景
- 初自作キーボード
- 電子工作は少し経験あり

## 基本的な部分

### Boothのページ
たまにみてた（組立時に特別参考にしたことはないけど）
https://25keys.booth.pm/items/1076720

### Zincの公式ページ
基本的にこのビルドガイドをもとに作ったが、大まかな段取りしか書いていないので、初心者はいろいろ他のサイトを参考にする必要があると思う。
http://www.sho-k.co.uk/tech/735.html

## 組み立て周り

### 自作キーボードキット Zinc を組んだ
製作工程の写真を多数上げてくれていて助かった
https://hdbx.hateblo.jp/entry/zinc#%E5%AE%8C%E6%88%90

## 書き込み周り

### QMK公式
QMK ToolboxのDependenciesを揃えたんだけど、本来ならDocsにあるコマンドを使ったほうが良かったと思う。
Toolboxの方はavc-gccのバージョン指定がないから最新の8.2を取ってきてしまうんだけど、それだと下の書き込み時にWorkaroundを使う必要が出てくるから。
https://github.com/qmk/qmk_toolbox
https://beta.docs.qmk.fm/detailed-guides/getting_started_build_tools

### mac でavr-gccのinstallに失敗する(qmk_firmware関連の作業)
avr-gccのinstallがうまくいかなかった時この人を参考にbrew-install avr-gcv@7をやったらXCodeのInstallみたいなサジェスチョンが出てきてそれに従ったらうまくInstallできるようになった(ちょっと詳細を忘れてしまった)
https://qiita.com/tos-miyake/items/164cad6a1a33e4e30bdb

### avrdude flashing error on AVR GCC 8.2.0
avr-gcc 8.2にある不具合でFlashする際にaddress out of rangeのエラーになってしまう。ダウングレードするか、ここに書いてあるWork Aroundを使う。
デフォルトのキーマップを最初入れたときはqmk-toolboxを使ってキーマップデータも書き込みも行った。ただ自分でキーマップをカスタマイズしたくなったらこっちの問題は解決する必要がある。
https://github.com/qmk/qmk_firmware/issues/3657

### キーマップ周り
組み立て終わって、接続もうまく行ったあと、レイヤーの概念やキーマップがわからず焦った
そもそもさっきまでやってたのがキーマップの書き込みだということさえちゃんと理解していなかった
調べても全然でなくて、結局GithubのZincのところにDefaultのレイアウトがあった。
後にこれをベースにキーマップをカスタマイズした。
https://github.com/qmk/qmk_firmware/blob/master/keyboards/zinc/keymaps/default/readme_jp.md

## おまけ
この記事は今回作ったZincで四苦八苦しながら書いた。
【Python・R】docker containerのメモリ上限を解放する


## はじめに

※今回の内容はPython,Rに特有の内容ではありません

docker環境下でRやpythonを使っていると、すこし大きめのファイルを扱う場面で以下のmessageに遭遇することがあります。

`R memory error`
> Error: cannot allocate vector of size ... Gb

`python memory error`
 > MemoryError

今回の記事では、上記を解決する手段を書いてみます。

## 環境

- Pattern1, docker for mac
    - 仮想ホスト, HyperKit

<img src="https://qiita-image-store.s3.amazonaws.com/0/143058/8d0e9be9-ed91-d623-e025-23a816feea7c.png" width=50%>



- Pattern2, docker toolbox
    - 仮想ホスト, VirtualBox

- Pattern3, docker for windows
    - 仮想ホスト, Hyper-V


### Pattern1. docker for macの場合

#### 1. コンテナを載せている仮想ホストのメモリ上限を解放

- docker > Preferences > Disk から、必要なメモリを指定

<img width="495" alt="スクリーンショット 2019-01-13 14.13.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/143058/3c10a286-bbbc-cd5b-5036-2571ffef5e80.png">



#### 2. `docker run`の`-m`オプションで必要なサイズを指定

```sh:sample.sh
docker run -m 10000m --name sample rocker/hadleyverse
```

`※仮想ホストのメモリ上限以上のサイズを割り当てることができないので注意です`


### Pattern2. docker toolbox with VirtualBox の場合

#### 1. VMのメモリ上限を解放

- VirtualBox > 設定 > システム から、必要なメモリを指定

<img width="495" src="https://qiita-image-store.s3.amazonaws.com/0/143058/cc19115b-e5ca-ea00-56db-86b03697ee03.png">

#### 2. `docker run`の`-m`オプションで必要なサイズを指定

- Pattern1と一緒です



### Pattern3. docker for windows with Hyper-Vの場合


#### 1. VMのメモリ上限を解放

- docker > Settings > Advanced から、必要なメモリを指定

<img width=30% src="https://qiita-image-store.s3.amazonaws.com/0/143058/a86095c1-994e-a98d-dc58-2754a0b9acd4.png">


#### 2. `docker run`の`-m`オプションで必要なサイズを指定

- Pattern1と一緒です


## おわりに

- どのくらいメモリを割り当てる必要があるかなどは、`docker stats`でコンテナの状況を確認すると把握できます

```sh:sample
docker stats
```

<img width="1065" src="https://qiita-image-store.s3.amazonaws.com/0/143058/924fd1e3-48b2-570e-7550-33a9488dbbbb.png">

雑な備忘録ですが、どなたかのお役に立てれば幸いです。

## References

[How to assign more memory to docker container](https://stackoverflow.com/questions/44533319/how-to-assign-more-memory-to-docker-container)
formulaを書くときに第三者のtapにあるformulaをdependencyにする


# 自分の他のformulaに依存したformulaを書きたい

自作のformulaをいくつも書いていると、そのformulaに依存したものを他に描きたくなることがあるのでメモ

source: https://stackoverflow.com/questions/41976211/homebrew-formula-use-dependency-from-a-custom-tap


  - `depends_on "<ユーザー名>/<formulaのレポジトリ名>/<formula名>"`
  - `depends_on "http://www.somewhere.com/some_formula.rb"`

  レポジトリ名は`homebrew-`の部分を抜かして(`homebrew-foo`なら`foo`のみ)書くようです

## 原文

```
Yes, you can.

For example, assume you want to install a formula baz in Github repo foo/homebrew-bar as dependency, write like this.

depend_on "foo/bar/baz"
(FYI foo is Github user name, homebrew-bar is a Github repo by foo)

This will tap foo/homebrew-bar automatically, install baz.

Even if the dependency formula is not on Github, you can specify full URL for the formula.
(Though I haven't examined fully)

depends_on "http://www.somewhere.com/some_formula.rb"
```
今更あけましておめでとうございます2019！ スティーブ・ジョブズの言葉や人生最後の日について考える超ポエム

今更あけましておめでとうございます2019！ スティーブ・ジョブズの言葉や人生最後の日について考える超ポエム

死ぬことについて考えてみる。1日1回は自分がもう35歳であることを考えて、うたた寝の中で、なんだかすごく恐ろしくなったりするぞ。ある意味甘美な感覚なのだけれども。

さてなぜ自分の死について考えることがエンジニアリングに役立つのか。ちょっと思い出してみてほしい。かのスティーブジョブスは毎日自分の死について毎日考えていたと言うぞ。例えばウェブ開発者の多くはApple製品を、そしてスティーブ・ジョブズを信奉しているかもしれないが、彼のように毎日が人生最後の日だと、肉体的感覚でそう感じることができているだろうか。

閑話休題。死ぬことを超越すると言う事はどういうことだろうか。それは死ぬことを感じつつも、死ぬことを恐れずに、受け入れると言うことだ。こういうとかなり抽象的な表現になってしまうなぁ。

アプリケーションが死ぬと言う事はどういうことだろう。それはこの世界から行動が消え去って、たった1人の利用者もいなくなる時だろうか。

サービスが死ぬ時と言うのはどういうことだろう。それは世界人類の全てがサービスの利用を止めて、記憶から消え去った時なのだろうか。

しかしそこにアプリケーションやサービスが存在したと言う事は、何らかの影響を人間に対して与えたと言うことであり、その影響力の話はたとえどんな小さなものであったとしても、確実にこの世界に波紋を投げかけ、影響を及ぼしたはずだ。その影響の波紋は、決して完全に消し去ることはできない。

たとえ僕らがどんなに素晴らしいエンジニアになろうとも、どんなに素晴らしいサービスアプリケーションを作り上げようとも、サービスもアプリケーションもエンジニアも全て形あるものはいつかは崩れ、消滅するものであろう。

逆に、僕らが作っているサービスやアプリケーションが、どんなに小さく、矮小なものであったとしても、この世界に御神の影響も及ぼさないと言う事はありえないのである。

つまり人間が死ぬと言う事、人が死ぬと言う事、エンジニアである自分が死ぬと言う事について考える事は、いずれ死ぬ人間が使う所のものであるアプリケーションについての死を考えることでもあるんではないだろうか。

ちなみにこの話は全く理論的な話ではない。筋道が全く立っていないのがわかるだろうが、まだ人間が死ぬと言うことと、サービスやアプリケーションにも終わりがあると言うことと、自分が35歳と言う年齢で人生がもう半分終わっていることなどなど、まだ人生やアプリケーションやサービスを統合的な理解でまとめることが、この脳みそにはできないでいる。2019年である。

あけましておめでとうございます。僕らは今年、どんな人生を生き、どんなふうにエンジニアリングと遊び、どのように世界と戯れ、自分が生きると言うことと死ぬということを感じることができるだろうか。


---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues









<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
機械学習論文読みメモ_151

[The Lottery Ticket Hypothesis: Training Pruned Neural Networks](https://arxiv.org/abs/1803.03635)
network pruningの成果が示唆する事として、学習に用いるネットワークは学習する対象よりもより
大きな構造を持っているという事である。
本論では新たな仮説を持ってこの事の説明を試みる。
これを本論ではlottery ticket hypothesisと呼ぶ。
この仮説は、成功する学習はネットワークの小さな部分集合における運のよい
ランダム初期値に依存するというものである。
つまりネットワークが大きいほど、そうした運のよい初期値を持つ部分集合を持つ確率が
高くなり、学習が成功する確率が高くなるという事となる。
本論ではこれを実験で示すことに成功した。
実験ではまず大きさの小さいweightsを枝刈りする事によりそうした運のよい部分集合を
探索する。
そして同じ初期値が与えられている限り、その部分集合のみを用いても学習が上手くいく事を示した。
一方で、初期値をランダムに与えなおした場合に、学習が上手くいかなくなる事も示した。
この事実はつまり、学習に成功する大きなネットワークは中で、特定の初期値を持つ小さな部分集合
を持つ事を示唆する。

[Averaging Weights Leads to Wider Optima and Better Generalization](https://arxiv.org/abs/1803.05407)
SGDを利用したdeepnetの学習は一般に更新率の減衰を行いながら進める。
本論ではcyclicalまたconstantな更新率のSGDの各更新ステップのweightsを
平均化したものを用いる事がより汎化性能の高い学習結果が得られる事を示す。
この手法はより多くの最適点を見つける事が可能で、
従来手法のfast geometric ensembling手法を単一モデルに適用した場合の結果の
近似とみなすことができる。
fast geometric ensemblingは損失関数上で複数モードが存在するような学習においてアンサンブル手法
を用いる事でそのモード同士を単純な曲線でつながった構造に変化させて学習する手法である。

[Not All Samples Are Created Equal: Deep Learning with Importance Sampling](Not All Samples Are Created Equal: Deep Learning with Importance Sampling)
deepnetの学習は多くの時間をおそらくは無視可能なサンプルへの処理に費やされている。
本論ではこの問題へ対処するために、より情報量が高いサンプルへ集中するための
importance sampling手法を提案する。
そしてこれによりSGDの分散を小さくする。
そのために本論ではまずサンプル事の勾配ノルムに対する上界を求めた。
次にimportance samplingを用いる事でどれだけ勾配分散を減らす事が出来るか
予測する関数を導出した。
これらを用いる事で学習を高速化が可能になる。
東京公共交通オープンデータチャレンジ　あと三日

#概要

東京公共交通オープンデータチャレンジの、バスapi叩いて見た。
できた。

#説明文

http://jsrun.it/ohisama1/q8mi

![](http://jsdo-static-contents.s3.amazonaws.com/images/capture/q/8/m/q8mi.jpg?t=1547183918)


#アプリ

http://jsrun.it/ohisama1/yRMZ

![](http://jsdo-static-contents.s3.amazonaws.com/images/capture/y/R/M/yRMZ.jpg?t=1547342962)

以上。
ログイン不要でコード共有できる日本産サービス Harigami 張り紙 を使ってみる Twitter  @sti320a 


# [Harigami](https://harigami.net/)


https://harigami.net/

# 特徴

プライベートモードがある

言語が選べる

![image](https://user-images.githubusercontent.com/13635059/51081821-834f4e00-173c-11e9-9d30-107c63301897.png)

# 提出！

![image](https://user-images.githubusercontent.com/13635059/51081823-8c401f80-173c-11e9-909b-89c17ccb2952.png)

# 例

https://harigami.net/contents?id=878b6e04-414c-40c2-99a5-745b74b49d3d

# おすすめのコードとかある

![image](https://user-images.githubusercontent.com/13635059/51081825-b396ec80-173c-11e9-9b11-3694175a2c4a.png)

# コードにコメントできる

![image](https://user-images.githubusercontent.com/13635059/51081827-c3163580-173c-11e9-8b21-5fe12f20cb26.png)

# Twitter

[Tomoaki Sugiyama (@sti320a) | Twitter](https://twitter.com/sti320a)

---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues









<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
iPhone音声入力で分かりやすい日本語で喋れるようになりそう。Apple製品とスティーブ・ジョブズに感謝したくなった日。



# iPhone音声入力を始めてから、音声で聞き取りやすい表現を

するように気をつけるようになった。

このことで、本当に音声的にわかりやすい表現を気つけて、気をつけることができるようになった…。(ただこのセンテンスみたいに、バックスペースで元には戻れないので、二重現してしまうこととかもたまにあるぜ。)

# 閑話休題、ひ、と、ほのお

で、ひとつ前の話に戻るけれども、例えばファイヤーを表す言葉として、炎と言う音でしゃべること。「ひ」ではたくさんの意味があって無理だ。

音として聞き取りやすい言葉は、文章にしてもおそらく読みやすさにつながるものであると思う。

それに、日ごろからリアルで口で人と話すときに、聞き取りやすいわかりやすい言葉でしゃべる訓練にもなって、これは最高の日本語の練習場ではないかと思っている。

# オレオレ的夢の未来が近づいている、デジタルユートピア！

今後iPhoneの性能がまたさらに進歩して、もっと誤字脱字が削減されていたなら、もう本当に喋っているだけでそれがコンテンツになるような、自己表現になるような素晴らしい僕が夢見た世界がやってくるかもしれないな。

(実際にはremoteを通じて音声解析していると思われるので、そちらの進歩を)

# 生きるだけでアウトプットになる、コンテンツになるのでは？

だって僕はただただ日常生活を生きているだけで、ただただ喋っているだけで、それがアウトプットになりコンテンツになる世界よ、YouTube動画を撮りながら考えていた。それがiPhoneの音声入力で実現できそうだなんて、夢にも思っていなかった。

灯台もと暗しというか、本当に素晴らしい世界がこんなところに隠れていたなんて信じられないな。

# エンジニア的な話には、向かないところも

ただエンジニアリングの話をしようとすると、それは日本語の入力ではなかなか拾ってくれない欠点もあるので、あくまでも日本語的な文章を書くのに適しているみたい。これはすべてのサービスやデバイスに言えることだが、やはり現実的制約の中で機能と言うのは作られているので、まぁ仕方ないことではあるな。

なにはなくともiPhoneでの音声入力はライフチェンジングというか、本当に人生を改装なレベルで素晴らしいので、フリック入力が不器用すぎて使えない僕は、今初めてスティーブジョブスに心からの感謝を抱いたような気がするぜ。

# Thanks to

スティーブジョブズならびアップル製品開発者並びに販売者ならびに関係者全ての方々、人生が変わるレベルでこのデバイスに感謝している1ユーザがいることをここに告白して文章の締めといたします。

# やばい誤字脱字に注意‥

![image](https://user-images.githubusercontent.com/13635059/51081771-066fa480-173b-11e9-8135-85249f73260c.png)

---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues










<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
iPhone の音声入力やばすぎ！喋るだけでQiitaやブログでアウトプットしたり、Twitterで対話ができる、夢のエンジニア生活が実現しそうかもしれない。



![Uploading image.png…]()

と言いつつ、この記事自体は主にキーボード入力で書いた。

# 良いこと

-  特に手先が不器用なエンジニアにはちょうどよい、ちなみに俺はキーボードを打つのよりも、音で喋ることに総合的な低コストさを感じている
- Twitterで他のエンジニアと話す時、音声入力でテキストを入力すると、本当に対話しているような感覚がある
- ソクラテスやイエス・キリストやブッダみたいに、自分で文章を起こさずに、語るだけで人とメッセージングができることが素晴らしい

# ネック

- エンジニアの専門用語とか語りづらい、日本語入力だと docker とか書きづらい
- サービス名とか変換してくれない、Qiitaとか音で言っても聞き取ってくれない

# Youtube動画 Skype とか、ネットラジオとか、ビデオサービスじゃだめなの？

- 音は形に残りにくいし参照しにくい、動画も見るのにコストがかかる
- 「自分が昔あんなことを語ったっけ」と思ってGoogle検索しても、語ったテキストは今の技術では検索できない、Youtubeの自動文字起こし機能も精度が悪くて使えなかった
- 音で超低コストを感じながら、街中でもどこでも音声で文字入力をして、さらにそれをMacBookで軽く編集したりするのが最強だと思った

# 大事なのは、低コスト感を感じるということ、摩擦係数を極限にゼロに近づけること

音声入力したテキストをちょっとMacBookで編集しようとしたら、トピックが広がって、のってきて、今はキーボード入力に果てしないスムーズさを感じるので、キーボードで記事を書いた。

常に、その時のシチュエーションごとに、より最短経路で低コスト感を感じる表現方法をつかっていけば良い。


---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues









<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
SQLServer(T-SQL)でulid

# はじめに
ulid (Universally Unique Lexicographically Sortable Identifier) というものがあるらしく、T-SQLで生成するストアドプロシージャを書いてみました。
https://github.com/ulid/spec
https://qiita.com/kai_kou/items/b4ac2d316920e08ac75a

# ulid とは
Timestamp：48bit整数、UNIX時間(ミリ秒)
Randomness：80bit乱数
をBase32 Encodingしたものらしい。

# 検証環境
Microsoft SQL Server 2016 (RTM-GDR) (KB4019088) - 13.0.1742.0 (X64) 
	Jul  5 2017 23:41:17 
	Copyright (c) Microsoft Corporation
	Developer Edition (64-bit) on Windows 10 Pro 6.3 <X64> (Build 17134: ) (Hypervisor)

# T-SQL
```SQL
USE TestDB;
GO

IF OBJECT_ID('dbo.get_ulid', 'P') IS NOT NULL DROP PROCEDURE dbo.get_ulid;  
GO  

CREATE PROCEDURE dbo.get_ulid
@result VARCHAR(26) OUTPUT
AS
BEGIN
  SET NOCOUNT ON;
  DECLARE @characters VARCHAR(32) = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
  DECLARE @timestamp BIGINT = DATEDIFF_BIG(ms,'1970/1/1',SYSUTCDATETIME());
  DECLARE @randomness INT = FLOOR((RAND(CONVERT(INT, CONVERT(VARBINARY, NEWID()))) * 32));
  DECLARE @remainder INT
  DECLARE @quotient BIGINT = @timestamp
  DECLARE @count INT = 0;
  --DECLARE @result VARCHAR(26) = '';
  SET @result = ''

  WHILE @quotient > 0
  BEGIN
    SET @remainder = @quotient %32
    SET @quotient = @quotient / 32
    SET @result = SUBSTRING(@characters, @remainder + 1, 1) + @result
  END
  SET @result = RIGHT('0000000000' + @result, 10)

  WHILE @count < 16
  BEGIN
    SET @randomness = FLOOR((RAND(CONVERT(INT, CONVERT(VARBINARY, NEWID()))) * 32));
    SET @result = @result + SUBSTRING(@characters, @randomness + 1, 1);
    SET @count = @count + 1;
  END
  --PRINT @result
  --SELECT @result AS 'ulid'
  RETURN 0
END
GO
```

# 実行結果
```SQL
DECLARE @ulid VARCHAR(26);
EXECUTE dbo.get_ulid @ulid OUTPUT
PRINT @ulid
```
```
01D12R8RKKRCTGY9DCDX5ZXBT6
```

# おわりに
きちんと実装を読んで作ったわけでは無いので、正確さは保証できかねます。。。
JavaでWindows Notification APIを呼ぶ

# 普通にjava.awt.SystemTrayを呼ぶだけでよい。
```Notification.java
public void notification() {
        SystemTray tray = SystemTray.getSystemTray();

        Image image = Toolkit.getDefaultToolkit().createImage(
        		getClass().getResource("適当な画像.png"));

        TrayIcon trayIcon = new TrayIcon(image, "Tray Demo");
        trayIcon.setImageAutoSize(true);
        trayIcon.setToolTip("System tray icon demo");
        tray.add(trayIcon);
        trayIcon.setImageAutoSize(true);
        trayIcon.displayMessage("Hello, World",
                "notification demo", MessageType.INFO);

}
```
![notification.png](https://qiita-image-store.s3.amazonaws.com/0/87538/c7f36eb1-2b08-6758-31ea-94b875328dc6.png)

一番下に表示されているのは、AppIdでTrayIconクラスではその操作APIが提供されていないようだ。
QiitaやTwitterなどでエンジニアと話すときは、ちょっと格好つけて、なんでも専門用語で喋ってみると良いかもね？「円集合」とかさ。

QiitaやTwitterなどでエンジニアと話すときは、ちょっと格好つけて、なんでも専門用語で喋ってみると良いかもね？「円集合」とかさ。

[【Unity】未経験で3Dアクションゲーを作った際のメモ - Qiita](https://qiita.com/hfuruya/items/35ae04b1906acb1f5957#comment-10f5a43a20ceb9a671cd)

![image](https://user-images.githubusercontent.com/13635059/51081653-484b1b80-1738-11e9-9afa-33f7b2639a3c.png)

# 円集合とか言ってみる。

![image](https://user-images.githubusercontent.com/13635059/51081666-73356f80-1738-11e9-80b0-43879d21e8e2.png)

# なぜ？

- エンジニアの脳に対して、摩擦係数の低いメッセージングをすることができる、たぶん、
- ターゲットに対して理解できる共通言語で語るのが、コミュニケーションにおける最大のTIPSである、たぶん、
- 格好つけることで、クールなシナジー的ななにかをアレしてコレできる的な。たぶん。

# いったん学習コストを支払うと、コミュニケーションコストが爆下がり

- 「円集合」という表現はその後、生涯使うことができる、永続性が非常に高い
- 圧縮度が高く、メッセージの伝達レベルも高く、ZIPファイルのように低コストで相手に送信することができる
- キーワードを脳に刻み込むことで、エンジニアリングのいたるところに円集合を見つけ出すことができるかもしれない、言葉はエンジニアリングの味方なり

---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues











<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
iPhoneの音声入力はMacBookよりはるかに優れているのが判明！ 入力確定したかに見えても、あとから文章解析と補正修正してくれる。

iPhoneの音声入力はMacBookよりはるかに優れているのが判明！ 入力確定したかに見えても、あとから文章解析と補正修正してくれる。

![image](https://user-images.githubusercontent.com/13635059/51081638-e38fc100-1737-11e9-9093-9870b5f13903.png)

![image](https://user-images.githubusercontent.com/13635059/51081639-e68ab180-1737-11e9-8a87-d5ef55573aa3.png)

iPhoneの音声入力はMacブックよりずっと優れている感じがするな

わりと早口でしゃべってもどんどん拾ってくれるのと、ちょっとコツさえ覚えれば、どんどんしゃべっていくことができるし。

今スクリーンショットを少しずつとりながら音声入力で喋っているけれど、微妙に、もう入力済みのはずの前半部分が変動していってるのかお分かりになるだろうか。

これはiPhoneというか、実際にはリモート越しなんだろうけど、そいつが音声入力の文章全体を判断して、揺れを修正してくれているみたいだ。

ただ一旦音声入力モードが一区切りしてしまうと、全体のこの補正はされなくなって、文章が確定してしまうのだけれど、それに追いつくようなスピードでしゃべればいいかな。まぁどちらにしても驚くほど優れたものであることに違いは無いぜ。

# Mac

これがMacBookだと、このような流動的な文章の補正や、いろいろなことを全然やってくれなくて、バージョンが5個ぐらい遅れてるような印象を受けた。だからMacBookよりiPhoneで音声入力したほうがずっといい。

MacBookの場合は、1つの文章が完全に入力確定してからようやく画面に反映されるようで、入力がフリーズしてしまったような印象を受ける。ユーザからはフリーズしたようにしか見えない。

なぜ同じアップル製品でここまで音声入力の性能に違いがあるのだろうか。よくはわからないが、とりあえずiPhoneに向かってひたすら喋るだけで文章が本当にスムーズに入力できることがわかったと言うのは大いなる収穫だ。

---

https://twitter.com/yumainaura

https://github.com/YumaInaura/YumaInaura/issues









<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Raspbian Stretch Lite インストール

Macでraspbian-stretch-liteをmicroSDカードにインストールし、ラズパイ3にセットした際の手順メモ。

https://www.raspberrypi.org/downloads/raspbian/
より2018-11-13-raspbian-stretch-lite.zipをダウンロードし解凍する。

インストールファイル（2018-11-13-raspbian-stretch-lite.img）がdownloadsの下にあるのでカレントディレクトリをそこに合わせる。

```
$ CD downloads
```

フォーマット済みmicroSDカード(16G)をMacに挿入して、内容を確認。

```
$ diskutil list
/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.7 GB    disk3
   1:                  Apple_HFS 名称未設定              15.7 GB    disk3s1
```

アンマウントして、直ぐにインストール。

```
$ sudo diskutil unmountDisk /dev/disk3
Unmount of all volumes on disk3 was successful

$ sudo dd bs=1m if=2018-11-13-raspbian-stretch-lite.img of=/dev/disk3
```
ターミナルに変化が無い、しばらくしてからmicroSDカード取り外すとそのタイミングで以下の表示が現れた。

```
1780+0 records in
1780+0 records out
1866465280 bytes transferred in 95.301150 secs (19584919 bytes/sec)
```
microSDカードをMacに再度挿入。

```
$ diskutil list
/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.7 GB    disk3
   1:             Windows_FAT_32 boot                    46.0 MB    disk3s1
   2:                      Linux                         1.8 GB     disk3s2
```
ルーターに有線LAN接続したラズパイにmicroSDカードを入れて電源入れると、緑のランプが点滅。LanScanでチェックしたところ、ラズパイのIPアドレスが検出された。さらにUSBキーボードを繋いだラズパイとディスプレイ代わりのTVをHDMIケーブルで接続し、起動・ログイン成功までを確認。
![IMG_2143.jpg](https://qiita-image-store.s3.amazonaws.com/0/311614/ca1b3eec-4e47-389f-65d5-1129d6248d09.jpeg)
機械学習論文読みメモ_150

[A Walk with SGD](https://arxiv.org/abs/1802.08770)
over-parameterizedなdeepnetに対してSGDによる学習がなぜ効果的か調べる
研究が最近では注目を浴びてきている。
本論ではそうしたSGDの挙動について研究する。
そのために、SGDによる連続した更新ステップにより
描かれる損失局面の軌跡を分析した。
またその軌跡を様々な指標を用いて解析した。
結果として、ミニバッチを用いた場合のノイズ共分散の特殊な構造のおかげで、
SGDが途中ではばまれる事なく損失面を下っていくことが出来ている事が判明した。
特に実験において、SGDは損失面の谷を跳ねながら下っていくことが観測できる。
このような跳ねる挙動がSGDにおいて長い距離を横切ることを可能にする。
また学習率を大きくすると大きく跳ねる事になり、小さなバッチサイズは
ノイズが入る事によって探索が可能になる。
跳ねる大きさがある事で、谷底の障害に阻まれる事なく、遠い距離を探索できるようになる

[An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling](An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling)
sequenceモデリングを行う際、RNNが使われるのが一般的である。
しかし最近の結果においてCNNを用いる事でより良い結果が得られる事も
分かってきている。
そこで新たなsequenceモデリングを行う際に、RNNかCNNのどちらを用いるのが
良いのかの一般的な指針について研究する。
本研究では、広い範囲のsequenceタスクに用いられるベンチマークデータを利用した。
結果、単純なCNNを用いる事でLSTMをはじめとする一般的なRNNモデルより高い性能を
得る事が出来る事を示した。

[WNGrad: Learn the Learning Rate in Gradient Descent](https://arxiv.org/abs/1803.02865)
SGDにおける学習率の適切な調整方法は重要であるがまだ見つかってはおらず、
結局は人手による探索が必要になる。
損失関数の凸性やsmoothnessが既知である場合には、最適なパラメータを予測できるが
実際は非凸かつsmoothnessも未知である。
従来研究ではdeep learningにおいて、batch normalizationを用いる事で勾配のLipschitz constantに
対してロバストな最適化が可能になり、学習率を高く設定しても問題がなくなった。
こうしたbatch normalizationの特性にインスパイアされ、本論では一般的な非線形な
学習率の更新手法を提案する。
この手法は初期値に高い学習率を設定し、学習カーブの観測に基づきながら、
適応的に学習率を修正させていくことができる。
提案手法は学習率の設定において勾配のLipschitz constantに対してロバストで、
準最適な収束レートを実現できる。
またこの提案手法が非凸非連続な損失関数に対しても適用可能な事を数値的に
示す。