OmniAICreator/Qiita-1.07M huggingface dataset:
基礎からのVMware Cloud on AWSーその５

VMware Cloud on AWSの基礎を
おさらいするための記事を書いてます。

過去４回は以下の内容をお届けしました。

第１回　物理構成の理解
https://qiita.com/hiroito1118/items/48d8d66fab24acd16c1d

第２回　管理方法と初期デプロイの概要
https://qiita.com/hiroito1118/items/8ed96c156b8577ca4749

第３回　ユースケース
https://qiita.com/hiroito1118/items/2669fc0ef64d8e07eb08

第４回　調達方法
https://qiita.com/hiroito1118/items/3ebbf3ce7a555d2f39f6


今回はVMware Cloud on AWSを語る上では外せない、
ハイブリッドクラウド構成を支える
ネットワークサービス・製品について取り上げます。


# １．VMware Cloud on AWSを支えるネットワークサービス・製品概要
VMware Cloud on AWSでは、
VMwareとして大きく２つのネットワークサービス・製品が関わってきます。
（ここではAWSネイティブのものは割愛）

１）NSX
２）HCX

の２つです。
それぞれの関わり方について見ていきましょう。

##　１）NSX
オンプレミス環境から存在するネットワーク仮想化の製品ですね。
過去、VMware社が他社を買収して取り込んだ経緯があります。

VMware Cloud on AWSでも中核的な役割を果たしており、
VPC環境内に論理ネットワークを構成する上では、NSXが活躍しています。
取り上げられがちなL2延伸だけでなく、
NATやFW、VPNといったVMware Cloud on AWSで使われる
ネットワーク機能はNSXの機能です。

１点気を付けたいのが、従来オンプレミスで
展開されてきたNSXと異なるNSXバージョンで、
今後提供されていくということです。
（東京リージョン提供開始以降）

従来はVMware製品との統合が重視され、
ESXiに組み込まれたりvCenterで管理できるように組み込まれたりと、
どちらかといえば密結合にされる方向でした。
こちらの製品は「NSX-V」と呼ばれます。

対して、VMware Cloud on AWSでは、
特定のプラットフォームとの親和性ではなく、
様々な環境に対してネットワークのマネジメントを行う思想として、
疎結合なNSXに回帰する方向となりました。
こちらの製品は「NSX-T」と呼ばれています。
疎結合というだけあって、vCenterでの管理ではなくなっており、
VMware Cloud on AWSにおいては、
VMware Cloud コンソールで操作することになります。
そのほか、Vの方はEdgeクライアントに
管理セグメントとコンピュートセグメント間で
ルーティングする機能が提供されていないですが、
Tの方では提供されるなど細かいところで実装が違っています。

オンプレミスの方はどうなる戦略かわかりませんが、
VMware Cloud on AWSではNSX-Tが
今後基本になってきますので、
NSX-Tについて理解しておく必要があります。


##　２）HCX
HCXはHybrid Cloud eXtentionの略ですね。
こちらはハイブリッドクラウドに特化したサービスとして、
リリースされてきています。

（個人的見解ですが）
NSXは従来データセンター内の仮想ネットワークを
指向して作られているので、
WANを超すような仕掛けではほかに製品やサービスが
作られてもおかしくないですね。

本題に戻って、HCXはそもそもがWANを介して、
複数の環境を接続することを助けるような
サービスとなっています。
実際、これはVMware Cloud on AWSを利用する際に、
無償で提供されるサービスとなっており、
オンプレミスとVMware Cloudを
つなぐためのものと捉えて差し支えないでしょう。

NSXでも同様のことができますが、
L2延伸の機能を持っているだけでなく、
WAN越し通信を想定して通信の最適化を行ってくれます。
その為、HCXを介して通信を行う場合、
圧縮的な処理や一部のUDP転送など、
WANで効率的に転送ができる処理が組み込まれます。
その結果、HCXを活用してvMotionが速くなった、
というような記事が出ていたりするわけです。


# ２．NSXに関して押さえておきたいこと
NSXに関する話で、L2延伸でというような話は書きました。
これは基本的に「NSX-T Standalone Edge」を利用する
前提で記載しています。
NSXのVとTをわざわざ分けている話がここにはあります。
VとTでは実装がどうやら異なっているようなのです。

その為、仮にオンプレミス環境に、
従来のNSX(-V)を構築していたとしても、
VMware Cloud on AWS上の環境（NSX-T）とは接続できません。
Edge立ててください。
また、管理面も異なっており、連携もしないそうです。
（本記事執筆時点では）

なので、オンプレミス環境で
NSXを使っているかどうかはあまり関係ない、
というのが実際のところなのです。

# ３．HCXに関して押さえておきたいこと
一方こちらは、元々既存環境になかったものですから、
有無で悩まされることもありませんね。
こちらを利用する上での注意点としては、
HCX用の接続用の仮想マシンや、
WAN最適化処理を担う仮想マシンなど、
複数のマシンを構築しますので、
オンプレミス・クラウド上の双方でリソースがとられること、
管理セグメントからVMwareのHCX管理サービスに向けて、
インターネット経由の通信を張る必要があるということでしょうか。

管理セグメントはダークサイト、
という訳にはいかないので、注意が必要です。


# ４．NSXとHCXの共通性と違い
共通で言えば、
２つの異なるネットワークを接続するという点において、
この２つは並列して語ることができます。
具体的にはL2延伸やVPNです。
どちらにもL2延伸機能が搭載されており、
パケットをカプセル化してWANを通してくれます。

２つの環境をつなぐという意味では、
NSXもHCXもオンプレミスとVMware Cloud on AWS間で
異なるESXバージョンでも移行ができるように、
設計されています。
大抵の場合はVMware Cloud on AWS側の方が
上のバージョンですが、
オンプレミスのバージョンが低くても移行できるようになっています。
ただし、サポートされるバージョン範囲は異なるので、
よく確認してください。

なお、どちらもvMotionを実現する上で必要なものですが、
vMotionはvCenter間の連携（Hybrid Linked Modeなど）によって
実現されますので、この２つとは切り離して考えたいです。

違いとして、NSXにはNATなどのネットワークの
各種機能がありますが、HCXにはありません。
HCXはWAN最適化機能がありますから、
移行する上でのスピードが必要な場合は非常に役に立ちます。


今回は以上です。
次回は、AWSネイティブサービスとの接続の話です。
keras、tensorflowをCPU版からGPU版に変更する

#発端
kerasの学習が妙に遅い、mnistすら遅いので確認した所、tensorflowがCPU版になっていました
pip installを色々する内にやってしまったのでしょう

#原因
GPU版を入れている環境にCPU版を入れてしまったことが原因のようです
GPU版が同居するとCPU版が使われるっぽいですが、詳しくは見ていません
この原因を調べる事に価値は無さそうなので、直接解決します

#解決
再インストールです
cpuだけuninstallしてもうまくいきません、tensorflowが無いと言われます
gpuも再インストールします

    pip uninstall tensorflow
    pip uninstall tensorflow-gpu
    pip install tensorflow-gpu

テストコード

    from tensorflow.python.client import device_lib
    device_lib.list_local_devices()

結果（実際は20行ぐらいあります）

    2019-01-03 09:26:06.702413: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1432] Found device 0 with properties:
    name: GeForce GTX 1070 major: 6 minor: 1 memoryClockRate(GHz): 1.7085

かくにん！よかった

#補足
cpuになっている時の結果。

    [name: "/device:CPU:0"
    device_type: "CPU"
    memory_limit: 268435456
    locality {
    }
    incarnation: 665334277417354455
    ]
エンジニアのための、パフォーマンス維持や体調管理に役立つ書籍

# はじめに
　エンジニアにとってのパフォーマンス維持のために、体調管理は重要です（特に40代超えてくると）。睡眠、食事、運動、マインドフルネスに関する書籍のうち、オススメできる本を紹介します。

# 総合
## [ヘルシープログラマ ―プログラミングを楽しく続けるための健康Hack][1]
エンジニア、プログラマにとっては最も適切なアドバイスが網羅されている。1stチョイスとしてオススメ。
[1]: https://www.amazon.co.jp/gp/product/4873117283

## [脳を最適化する ブレインフィットネス完全ガイド][2]
網羅的に情報が整理されている。後は行動あるのみ。
[2]: https://www.amazon.co.jp/gp/product/4484151219

## [一流の人はなぜ風邪をひかないのか?――MBA医師が教える本当に正しい予防と対策33][3]
風邪をひきにくくするための実践的なアドバイス。インフルエンザの時期には気をつけたい。
[3]: https://www.amazon.co.jp/gp/product/4478102503

## [HEAD STRONG シリコンバレー式頭がよくなる全技術][4]
バターコーヒーで有名な著者の続編。合う人には合うかも。
[4]: https://www.amazon.co.jp/gp/product/4478101744

# 睡眠
## [45歳からは「眠り方」を変えなさい 闘うビジネスマンの脳と体を最高レベルにする方法][11]
若い頃は徹夜しても平気でも、40代になると睡眠不足はてきめんにパフォーマンスに影響します。
[11]: https://www.amazon.co.jp/gp/product/4866510943

## [スタンフォード式 最高の睡眠][12]
最初の90分重要。
[12]: https://www.amazon.co.jp/gp/product/4763136011


# 食事
## [世界一シンプルで科学的に証明された究極の食事][21]
食事については、この本がオススメ。エビデンスが明示され、現実的で続けやすいアドバイス。
[21]: https://www.amazon.co.jp/gp/product/4492046240

## [医師が実践する 超・食事術][22]
エビデンスを明示する書籍が増えてきましたが、そのうちの一冊。
[22]: https://www.amazon.co.jp/gp/product/4861138744


# 運動
## [脳を鍛えるには運動しかない][31]
運動するモチベーションになる一冊。
[31]: https://www.amazon.co.jp/gp/product/4140813539

# マインドフルネス
## [サーチ・インサイド・ユアセルフ ― 仕事と人生を飛躍させるグーグルのマインドフルネス実践法][41]
著者がもともとエンジニアなので、記述が理解しやすく、しっくりくると思う。
[41]: https://www.amazon.co.jp/gp/product/4862762271


# おわりに
　エンジニアとして、出来るだけパフォーマンスを維持しつつ、キャリアを継続できることを念頭にセレクトしてみました。
InstagramのソーシャルプラグインをRailsで

FacebookやTwitterのソーシャルプラグインは有名ですが、意外と日本語の情報がないのがInstagramじゃないでしょうか？Instagramのデベロッパーサイトにも書いておらず、Wordpressのプラグイン情報とかばかり。

しかし実は他のプラグイン同様簡単に貼り付けできます。
普通の設置方法と比較する形でRails-slimでの設定方法を記載します。

詳細はこちらに載っています。
https://www.jqueryscript.net/social-media/Instagram-Photos-Without-API-instagramFeed.html

### JQuery Instagramのプラグインをダウンロード
https://www.jqueryscript.net/download/Instagram-Photos-Without-API-instagramFeed.zip
を `vendor/assets/javascripts/` 配下に展開します。必要なのは `jquery.instagramFeed.js` です。

### config/initializers/assets.rb に以下の行を追加

```
Rails.application.config.assets.precompile += %w( jquery.instagramFeed.js )
```

### プラグインを貼りたい場所に以下のタグを貼ります

```:html
<div id="instagram-feed-demo" class="instagram_feed"></div>
```
Slimなら

```:slim
  .instagram_feed#instagram-feed-demo
```
となります。

### JSを読み込ませます
```:html
<script src="https://code.jquery.com/jquery-3.3.1.min.js" 
        integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" 
        crossorigin="anonymous"></script>
<script src="jquery.instagramFeed.js"></script>
```

Slimなら

```:slim
= javascript_include_tag "//code.jquery.com/jquery-3.3.1.min.js"
= javascript_include_tag "jquery.instagramFeed.js"
```
ですが、JQueryは2重に読み込むと不具合を引き起こすので他で使っていないかを確認してcode.jquery.com/jquery-3.3.1.min.jsの行は追加するかを決めてください。

### プラグインの動作設定のJQueryを書きます

上記のhtmlファイルに直接貼るなら

```:html
<script>
$(window).on('load', function(){
  $.instagramFeed({
    'username': 'instagram',
    'container': "#instagram-feed-demo",
    'display_profile': true,
    'display_biography': true,
    'items': 8,
    'items_per_row': 4,
    'margin': 0.5
  });
});
</script>
```
usernameはInstagramのユーザ名です。containerは2.のIDと合わせます。
display_profile:プロフィール表示非表示
display_biography:バイオの表示非表示
items:表示する画像数
items_per_row:1行の表示画像数
margin:表示している画像同士のマージン
独自のStyleを適用することも可能です。
'styling': false
をリストに追加して、cssに

```:css
.instagram_profile {
  /* CSS styles here */
}

.instagram_profile_image {
  /* CSS styles here */
}

.instagram_username {
  /* CSS styles here */
}

.instagram_biography {
  /* CSS styles here */
}

.instagram_gallery {
  /* CSS styles here */
}
```
でスタイルを入れます。

Slimなら

```:slim
  javascript:
    $(window).on('load', function(){ $.instagramFeed({ 'username': 'vegewel', 'container': "#instagram-feed", 'display_profile': true, 'display_biography': true, 'styling': true }); });
```
と言った書き方

こうして貼ったプラグインはこちらです。
![ベジタリアン・グルテンフリー・ヴィーガン対応レストラン検索：Vegewel.png](https://qiita-image-store.s3.amazonaws.com/0/1593/67a89350-737e-2617-fb12-394cb2c7d671.png)
VScodeでPHP CodeSnifferの設定をしたい時の手順

## はじめに
VScodeでPHP CodeSnifferの設定且つ自動保存したい時の手順を書いていきます。
※こちらはMac限定となります。

## 導入手順
### 1. VScodeに拡張機能を追加
#### php csをインストール
以下のURLにて拡張機能をインストール
https://marketplace.visualstudio.com/items?itemName=ikappas.phpcs
<img width="712" alt="拡張機能__phpcs_—_etscore-backend.png" src="https://qiita-image-store.s3.amazonaws.com/0/18721/51bd31e8-9992-ebf3-ad57-fc753198ed97.png">
※php cs fixerではないのでご注意を。インストールしている場合、誤作動を起こす可能性もあるのでアンインストールして下さい。

### 2.Macにphp-code-snifferをインストール
```bash
brew install php-code-sniffer
```
※インストールしないと読み込みエラーが発生する。

### 3.composerでphp_codesnifferをインストール
※composerをインストールしていない方はインストールして下さい。

```bash
composer require --dev squizlabs/php_codesniffer
# or globally
composer global require squizlabs/php_codesniffer
```

### 4.コーディング規約の設定
VScodeのworkspaceの設定を開き、プロジェクトに合わせて`phpcs.standard`を定義

#### PSR2にしたい場合
```
"phpcs.standard": "PSR2"
```

#### WordPressと同じコーディング規約を設定したい場合
```
"phpcs.standard": "WordPress"
```

#### オリジナルのコーディング規約を設定したい場合
```
"phpcs.standard": "/path/to/project/phpcs.xml"
```

#### 設定を無しにしたい場合
```
"phpcs.standard": null
```

#### 5.コマンドで確認したい場合
コマンドでも確認したい場合は以下を実行

```bash
./vendor/bin/phpcs .
# or
./vendor/bin/phpcs --standard=phpcs.xml .
```
Hugoにmermaidを組み込んでみた

[Hugoにmermaidを組み込んでみた](https://xn--v6q832hwdkvom.com/post/hugo%E3%81%ABmermaid%E3%82%92%E7%B5%84%E3%81%BF%E8%BE%BC%E3%82%93%E3%81%A7%E3%81%BF%E3%81%9F/)の抜粋版です

## What's mermaid ?
フローチャートやシーケンスダイヤグラムやガントチャートをサクサクと書くことのできるライブラリです   
![01.png](https://qiita-image-store.s3.amazonaws.com/0/89027/a1c3d833-bb0e-9ead-c0b3-0b4849365075.png)   
[公式サイト：mermaid](https://mermaidjs.github.io/)

## 設定メモ
### mermaidを取ってくる
`mermaid.js`を[https://unpkg.com/mermaid/](https://unpkg.com/mermaid/)から取ってきて、`themes/theme/static/asset`に`mermaid`フォルダを作成してコピーする   

### mermaidをよきに計らうショートコードを書く
`themes/theme/layouts/shortcodes`に

```
<div class="mermaid" align="{{ if .Get "align" }}{{ .Get "align" }}{{ else }}center{{ end }}">
    {{ safeHTML .Inner }}
</div>
```

を`mermaid.html`として書いておいた

### ページでmermaidが呼び出されるように書いておく
ページで呼び出されるscriptを`themes/theme/layouts/partials`の`header.html`か`footer.html`のscriptタグが書かれているところに追記しておく
個人的には`themes/theme/layouts/partials`の`scripts.html`にまとめるようにしているので、そこに`mermaid`も追記しておいた

```
<script src="{{"asset/mermaid/mermaid.js" | relURL}}"></script>
```

### きちんと動作するかテストしてみる
たとえば

```
{{<mermaid align="center">}}
  graph TD
  
  A[お正月] -->|お年玉をゲット| B(買い物に行くよ)
  B --> C{どれにしようかな}
  C -->|これかな| D[iTunes Card]
  C -->|これかな| E[iPhone XS Max]
  C -->|ま まさか| F[fa:fa-car The CLS Coupé]
{{< /mermaid >}}
```
な風に書いておくと

![02.png](https://qiita-image-store.s3.amazonaws.com/0/89027/e7743afe-e526-a1b8-912d-044ff0d36615.png)

こうなってくれます

素晴らしい！！
【個人開発】勉強方法と開発手法、そのスピード感について【勉強方法】

# 【個人開発】勉強方法と開発手法、そのスピード感について【勉強方法】
今年の年始に[今年の抱負メーカー](https://ambition.nozomi.bike)というアプリを開発しました。（宣伝）
[【個人開発】新年早々、今年の抱負をつぶやくWEBアプリをつくってみた](https://qiita.com/Nozomi-Hosaka/items/e293b60ea69daa21fc04)（記事）
実は主だった周知はしていませんが、他にもたくさんのアプリを開発しています。

同じようにこの業界にサラリーマンとして働き始め、独学を中心に曲がりながらやってこれました。

この中で、**自分でうまくいったと思う**開発手法・勉強方法とそのスピード感について（今回は特にこちら）記事にしたいと思います。

特に技術に関係していませんが、開発に関係すると思うので、大目に見てやってください。
では、綴っていきたいと思います。

また、この記事は完全に僕の主観です。
異論は当然認めます。

## 兵は拙速を尊ぶ
**何事も早い（速い）ほうが良い。**
ことわざにも早さを重視するものが多いことから、歴史的に見ても開発開始は早ければ早いほど良く、開発期間は短ければ短いほど良いと思います。
これはイメージが着きやすいですよね。リリースが早くなればユーザーの満足度も高くなりますし、不具合対応も早ければ早いほど鎮火がスムーズです。

### **その中でも特に勉強はスピードを重視せよ**
スピード＞正確性。これは僕の持論です。
昔のインターネット黎明期ならまだしも、現代のプログラミング界隈は

- **情報が多く**
- **移り変わりが早く**
- **透明度が高い**（公開しやすく、指摘されやすい）

です。
去年正しかったものが今年間違っていることはよくあることですね。
その中、僕が陥ったのは

- 情報が多すぎて**正解がわからない**
- 頑張って正解を調べた結果、**いつの間にか古くなってる**
- 結果、**それは違う**(古い)と指摘される
 
結果、**モチベ低下する**。
この解決策を考えた結果、**考えるのをやめました**
ひたすら目の前のしたいこと、作りたい自作アプリの開発をしまくりました。
すると気持ちのいいくらいに知識が入ってきます。

なんでだろう？これにいくつかの答えを出しました。

#### 失敗するまでが早い
これは一番最初に思いつきました。
知らないことを検索するより、やってみてハマったところを少し勉強して実装する。
**少し勉強しての少しがキモです**。ここでガッツリ勉強するとハマった（完成しない）ままです。なぜそうなるかというと情報が多すぎて、情報の取捨選択をしているうちに刻々と時間が過ぎていくからです。**ぶっちゃけなんとなくでいい**とすら思っています。結果100%とは言えないまでも、60%くらいの知識がそこで付きますね。

#### 単位あたりの勉強量が多くなる
**勉強量/時間が当然増えます。**
だって

- たくさん書いて
- たくさん失敗して
- たくさんやり直して

いますから。

#### 成果が出るのが早い
これは感じている人が多いのではないでしょうか。成果が出ないと**面白くない**です。
早いほど成果が出て、**楽しいですよ**。

#### スピードは歳とってからはつかない
スピードがないまま年をとると鈍くなってしまいます。ディスってるわけではありません。PC使えない世代、スマホ使えない世代のように新しい技術を噛み砕く力がなくなってしまいます。
逆に昔からスピード重視の方は、70歳プログラマーなど噛み砕くのが速いです。
この訓練だと思いましょう。

#### つまりここで何が言いたいかというと、
とにかく

- これであってるの？間違ってないの？指摘怖い・・・
- 最初からコードを美しく、完璧なものにしたい。

この考えを捨て、今すぐ勉強ないしはコーディングを始めてください。
リファクタリングという考えもあります。
完璧でないコードを書いてしまったら「**リファクタリングの勉強できるじゃん**」とポジティブにとらえてください。

早く始めないと勉強している間に歳をとってしまいます。

### **「正確性を軽視せよ。」という意味ではない**
ユーザーがいないアプリならまだしも、いるアプリでバグがあれば当然直しますし、そもそもバグを出すな。これは僕もそう思います。

僕が言いたいのは最初から正確性を追究するなということです。
**皆さんアジャイル好きじゃないですか。勉強方法もアジャイルにしましょう。**(もしかしてアジャイルももう古いですかね？)

## それ・・・ユーザーに関係ある？
次は開発の方のお話をしたいです。

実はこれ実話でありました。
リリースが迫っているのに明らかに間に合わない修正をしたいという話でした。
処理としてのバグはありませんが、ソース上では確かに読みにくいものでした。
説得してマイナーバージョンで対応しましたが、**完璧を求める過ぎるあまり自分しか見えていないエンジニア**結構いると思います。（ちょっと偉そうですかね？）

これは僕も陥ったことがありまして、あるレガシーコードを修正していたのですが、あまりにレガシーなのでイライラしていたんだと思います。
このときこう言いました。
>早く修正させてください！リスク（時間的な）を冒してでも対応するべきです！

デザインや処理系は確かに古いですが、問題なく使えてるシステムでした。
>それ、ユーザーに関係ある？修正するのは良いけど、リスクは取らないよ。

今考えるとまさに自分のことしか考えていませんでしたね。
完璧を求めすぎて、周りが見えなくなるというのはこういうこと。

逆バージョンも見たことがあります。
>ユーザーに頼まれてこの処理をこう変えたいんだけど・・・

といわれ、
>え、この処理をこう変えるとコードが汚くなるのでやりたくないです。

- コードの美しさ
- 処理系の完璧さ
- 使用言語

いろいろなこだわりがありますがユーザーがいる以上、できるだけ捨てられるようにしたほうが良いと思います。

### **ユーザー＝神様ではない**
でも、ユーザー＞コードですよね。

## まとめ
- 自分のエンジンの最高回転数を上げるために、多少荒くていいのでスピード重視で勉強する。
- ユーザーを相手にするときは、ユーザーを労って運転してあげる。

コーディングなんて割と適当で良いと思っています。
大事なのは**最後までコードのお世話をすることです**。

ちょっと挑戦的な記事でしたでしょうか？
去年いろいろあって、思うところがあり記事にしてみました。
また加筆修正すると思いますので、そのときはよしなに。
PHPでもコード整形ツール「Prettier」を使いたい時

## はじめに
PHPファイルでもPrettierを適用したい時の手順。
自動でフォーマット出来ます。

#### 参考記事
[Prettier公式 plugin-php
](https://github.com/prettier/plugin-php)

## 導入手順
### 1. Prettierのインストール
※プロジェクトに`package.json`を作りたく無い場合は`global`にしてください。
#### yarn

```bash
yarn add --dev prettier @prettier/plugin-php
# or globally
yarn global add prettier @prettier/plugin-php
```

#### npm

```bash
npm install --save-dev prettier @prettier/plugin-php
# or globally
npm install --global prettier @prettier/plugin-php
```

### 2.設定ファイルの用意
プロジェクトルートに `.prettierrc` ファイルを作成する。

```
singleQuote: true
trailingComma: all
```

### 3.使い方
#### Atomの場合
以下のプラグインを使用
https://github.com/prettier/prettier-atom

#### VScodeの場合
[Run on Save](https://marketplace.visualstudio.com/items?itemName=emeraldwalk.RunOnSave) という拡張機能をインストールする。
workspaceの設定にて以下を追記
※拡張子`.php`に対して適用するようにしている。

```
"emeraldwalk.runonsave": {
  "commands": [
    {
      "match": "\\.php$",
        "cmd": "prettier ${file} --write"
    }
  ]
}
```

#### PHPStormの場合
`Preferences`を開いて、EXternal Toolsにて設定。
PythonでSQLite

#PythonでSQLite
　pythonにはSQLiteというライブラリがあり，簡単にローカルでデータベースを作ることができます．今回はSQLiteの使い方を記述します．
　使用する環境はPython3.7，ライブラリはsqlite3とcontextlibです．早速コードを書いていきましょう．

##テーブルの作成
　sqliteを用いてテーブルの作成をします．次のようにコンソールに入力してください．

```python:create_table.py
import sqlite3
from contextlib import closing
dbname = 'database.db'

with closing(sqlite3.connect(dbname)) as connection:
    cursor = connection.cursor()
    sql = 'create table test (id int, name varchar(64), e-mail varchar(1024))'
    cursor.execute(sql)
    connection.commit()
    connection.close()
```

　データベースへの接続にはsqlite3.connect()メソッドを使用します．このとき，データベースが存在するならそのデータベースに接続し，存在しない場合にはデータベースを自動で生成します．
　SQLを実行するにはConnectionオブジェクトからCursorオブジェクトを作成します．Cursorオブジェクトに対してexecuteメソッドを実行することで，引数に与えるSQL文を実行することができます．今回はカラムがidとname,e-mailのtestテーブルを作成しました．
　データベースに対する変更を保存するにはconnection.commit()を使用します．最後にconnection.close()で接続を切ります．変更を保存せずに切断することがないように注意しましょう．

##レコードの挿入
 先ほど作成したテーブルにレコードを挿入してみましょう．次のようにコンソールに入力してください．

```python:insert.py
dbname = 'database.db'
with closing(sqlite3.connect(dbname)) as connection:
    cursor = connection.cursor()
    sql = 'insert into test (id, name, e-mail) values (?,?,?)'
    data = (10, 'kawamoto', 'test@gmail.com')
    cursor.execute(sql, data)
    connection.commit()
    connection.close()
```

　レコードを挿入する場合にはinsert文を実行します．カラムとそれに対応する値を指定することでレコードを挿入できます．SQL文に値をセットするにはセットしたい場所に?を記述し，executeメソッドの第2引数にセットする値をタプルで渡します．タプルのリストを渡せば，一度に複数のSQLを実行できます．
　データベースに変更を加えるため忘れずcommitしましょう．

##レコードの取得
　挿入したレコードを確認してみましょう．レコードの取得は次の文で行います．

```python:select.py
dbname = 'database.db'
with closing(sqlite3.connect(dbname)) as connection:
    cursor = connection.cursor()
    sql = 'select * from test where name = ? '
    data = ('kawamoto', )
    for row in cursor.execute(sql, data):
        print(row)
    connection.close()
```

　レコードを取得するにはselect文を使用します．selectの後ろで取得するカラムを，whereで条件を指定することができます．where文を省略すると，すべてのデータを取得することができます．
　SQLにセットする値が１つだけの場合には注意が必要です．引数はタプルで与えなければならないため，data = ('kawamoto')とするとエラーが発生します．無理やりタプルにするためにdata = ('kawamoto, ')とする必要があります．
　実行結果を表示するためにfor文で走査し，順に表示します．データはレコードごとにタプルで返って来ます．for文で走査するとタプルのリストのように扱うことができますが，あくまでCursorオブジェクトであることに注意が必要です．タプルのリストに直すにはリストを用意して順にappendする必要があります．

##レコードの削除
　最後にレコードの削除の方法を確認します．レコードの削除にはdelete文を使用します．

```python:select.py
dbname = 'database.db'
with closing(sqlite3.connect(dbname)) as connection:
    cursor = connection.cursor()
    sql = 'delete from test where name = ?'
    data = ('kawamoto', )
    cursor.execute(sql, data):
    connection.commit()
    connection.close()
```

　delete文もwhereで実行するレコードを指定できます．where指定を忘れるとすべてのデータを削除してしまうので注意が必要です．これもデータベースに変更を加えるため，実行後に忘れずcommitするようにしましょう．

##おわりに
　これでデータベースの基本操作を行うことができるようになりました．これだけできれば基本的に困ることはありません．次回はこれと[前回の内容](https://qiita.com/kawa-Kotaro/items/460977f050bf0e2828f2)を用いてAmazonの価格監視システムを構築します．
　ここまで読んでいただきありがとうございました．
LaTeXを初めて使ってみた

## 概要
初めてLaTeXを使って詰まったところを自分用にまとめてみた。

## Hello World!
レポートを書くときはjsreport,本を書くときはjsbook
 詳細→https://medemanabu.net/latex/documentclass/

環境によってjsarticleのところがujsarticle等になる。
jsarticleの方が余白が少ない。
 参考→https://qiita.com/SUZUKI_Masaya/items/e1ae2eb42626dc6d9155



```TeX:hello.tex
\documentclass[uplatex]{jsarticle}
\begin{document}
Hello World!
\end{document}
```

```:実行結果
Hello World!
```

## コメントアウト
%でコメントアウト

```TeX
%コメントアウトしています
```

## タイトル、名前等

```TeX:sample.tex
\documentclass[uplatex]{jsarticle}

% プリアンブル
\title{タイトル}
\author{山田 太郎 \and 山田 花子}
\date{2018/01/03}

\begin{document}
  % タイトルを出力
  \maketitle

  \section{節}
  文章
\end{document}
```

実行結果
<img width="502" alt="スクリーンショット 2019-01-03 4.47.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/156096/09f4a14f-4334-cd46-5827-c285a3fd5e76.png">


## 箇条書き

### 番号付き箇条書き

```TeX
\begin{itemize}
  \item item1
  \item item2
  \item item3
\end{itemize}
```

```text:実行結果
・item1
・item2
・item3
```

### 番号付き箇条書き
```TeX
\begin{enumerate}
  \item item1
  \item item2
  \item item3
\end{enumerate}
```

```:実行結果
1. item1
2. item2
3. item3
```
### 見出し付き箇条書き
```TeX
\begin{description}
  \item[日程] 2018年1月3日
  \item[場所] 札幌駅
  \item[料金] 3,000円
\end{description}
```

```:実行結果
日程  2018年1月3日
場所  札幌駅
料金  3,000円
```
## 箇条書きや見出し直後の改行
以下のように~\\\\を入力するだけ。
~がスペース, \\\\が改行を表している。

```TeX
\begin{description}
  \item[日程] ~\\2018年1月3日
  \item[場所] ~\\札幌駅
  \item[料金] ~\\3,000円
\end{description}
```

```:実行結果
日程
    2018年1月3日
集合場所
    札幌駅
参加費
    3,000円
```

## ソースコード
Wordではソースコードを見やすく載せる方法が限られていたので
この機能はLaTeXを使って初めて感動した。

```TeX:sample2.tex
\documentclass[uplatex]{jsarticle}
\usepackage{listings}%，ソースコードをLatexに挿入するためのパッケージ

%ソースコードの表示に関する設定
\lstset{
  basicstyle={\ttfamily},
  identifierstyle={\small},
  commentstyle={\smallitshape},
  keywordstyle={\small\bfseries},
  ndkeywordstyle={\small},
  stringstyle={\small\ttfamily},
  frame={tb},
  breaklines=true,
  columns=[l]{fullflexible},
  numbers=left,
  xrightmargin=0zw,
  xleftmargin=3zw,
  numberstyle={\scriptsize},
  stepnumber=1,
  numbersep=1zw,
  lineskip=-0.5ex
}

\begin{document}
HelloWorldのソースコードを，ソースコード\ref{hello}に示す。

%ここにソースコードを載せる
\begin{lstlisting}[caption=hello.c,label=hello]
#include <stdio.h>

int main() {
    printf("Hello World");
    return 0;
}
\end{lstlisting}
\end{document}
```

実行結果
<img width="490" alt="スクリーンショット 2019-01-03 4.08.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/156096/21378a87-dc57-3d59-24a3-730d7728bd5d.png">

他にも色々なソースコードの書き方がある。
https://www.biwako.shiga-u.ac.jp/sensei/kumazawa/tex/listings.html


## 参考文献
https://medemanabu.net/latex/documentclass/
http://www.latex-cmd.com/struct/list.html#itemize
https://qiita.com/ta_b0_/items/2619d5927492edbb5b03
http://www.latex-cmd.com/struct/title.html
https://www.biwako.shiga-u.ac.jp/sensei/kumazawa/tex/listings.html
https://postd.cc/begin-latex-in-minutes/
http://www.robotics.hiroshima-u.ac.jp/exp/tex/platex.html#tex
https://texwiki.texjp.org/?LaTeX%E5%85%A5%E9%96%80
Daily IOS チャレンジ Day3

とうとう三日目です。
今回はTableViewを使ってみようと思います。

step1
毎度おなじみのXcode立ち上げから
Create a new Xcode project
→Single View AppクリックしてNext
→Product Nameを入力してNext
→保存先のファイルを選択して、Create

Step2
main.storyboardをクリック
→画面下の大きさボタンで好みの大きさに調整
→ViewControllerにTableViewをドラッグ&ドロップ
→セーフエリアは残したままViewController画面いっぱいに枠を広げる
→ViewTableをクリック
→左タブのOutletsからdataSourseとdelegateをViewControllerにドラッグ&ドロップ
→TableViewにTableViewCellを追加
→配置したTableViewCellをクリック
→Show　the Attributes InspectorのIdentiferで名前をつける

　step3
次に細かい動作を描いてみる
ViewController.swiftをクリック
→初期設定のコードを書いていく

```swift:ViewController.swift
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

```

→cellの数とcellに表示する値を設定する

```swift:ViewController.swift
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return Words.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //cellを取得
        let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        //cellに表示する値を設定
        cell.textLabel!.text = Words[indexPath.row]
        return cell
    }
}

```

完成こんな感じです
![DailyChallenge3.gif](https://qiita-image-store.s3.amazonaws.com/0/260218/f13fb7cf-bfe1-c472-d232-79d6f67adf4e.gif)

ではまた次回！
[Windows]「ファイル名を指定して実行」から好きな名前でアプリケーションを呼び出す方法

# 「ファイル名を指定して実行」から好きな名前でアプリケーションを呼び出す方法

とっても簡単だけど、いつも忘れてしまってGoogle先生に聞いてしまうので、メモ。
基本的にWindowsのバージョンには依らないはず。

1. 対象のアプリケーションのショートカットを作成する
2. ショートカット名を好きな名前に変更する
3. 任意の名前のフォルダを作って、その中にショートカットを入れる
4. Windowsの環境変数の"Path"に、上記フォルダへのパスを追加する。

以上


###### 補足事項
- Windowsの環境変数は、「Win + R」の後に「control sysdm.cpl」を実行。詳細設定タブの下部にある。
※コントロールパネル＞システムで開いても一緒。

- 環境変数にPathを記載するときは、末尾の「;」(セミコロン)を忘れないこと

- 最初からPathの通っているフォルダに、ショートカットを置くのもアリ。


###### 参考ページ
> http://d.hatena.ne.jp/hiboma/20070311/1173592731
ReplayKitの-5807エラー

ReplayKitで録画しようとしたところ、エラーを吐いて録画できなかった。

```swift
Error Domain=com.apple.ReplayKit.RPRecordingErrorDomain Code=-5807 "Recording interrupted by multitasking and content resizing" UserInfo={NSLocalizedDescription=Recording interrupted by multitasking and content resizing}
```

再起動したら直った。
railsアプリをGitHub連携でherokuにデプロイ  


railsアプリをGitHub連携でherokuにデプロイした。さらにPiplineを使って、Review, Staging, Production の段階的なデプロイを実現した。  
  
行きづまったところとかやり方のメモ。    
  
# 1. railsアプリをGitHub連携でherokuにデプロイ    
herokuにデプロイする。  
  
> 参考：[【初心者向け】railsアプリをherokuを使って確実にデプロイする方法【決定版】](https://qiita.com/kazukimatsumoto/items/a0daa7281a3948701c39)    
  
### railsアプリ作成   
まずは、herokuにデプロイするためのrailsアプリを作る。

１．railsプロジェクト作成
２．config/routes.rbの設定
３．Gemfileの設定
４．config/database.ymlの設定
  
### Gemfileの設定  
上記４．Gemfileの設定について。

Gemfile中のsqlite3をコメントアウトする必要がある。これはherokuでsqlite3を使えないため。herokuではpostgreSQLが入ってるのでそれを使う。

Gemfileを変更したら `bundle install`   
  
### GitHubにpush → herokuにデプロイ  
作成したrailsアプリをgithubにpushする。

herokuにログインし、create new app.

[deploy]タブで[GitHub]選択し、該当のリポジトリ選択。deployする。（ここではmasterをデプロイするため、Automatic Deploys はDisableとしておく）

デプロイ成功したらアプリのページを確認。  
  
### デプロイに失敗した  
最初試したときデプロイに失敗した。上記Gemfileで sqlite3 → postgreSql に設定していなかったため。
参考URL通りに行ったらデプロイ成功した。  
  
### ページを開くとエラー  
デプロイは成功したが、ページを開くとエラーになった。ログを見たりググってみたりしたところ、どうやらmigrateしていなかったためだった。 

heroku側をmigrateするため、
heroku rake db:migrate -a appName
を試した。

しかし、timeout。 これの原因は未だによく分かっていない。

結局heroku側のコンソールで rake db:migrate を実行すると無事マイグレーションされた。  
  
# 2. herokuのPiplineを使って段階的にデプロイ  
試しにパイプライン使ってみた。review → staging → production とデプロイしていく感じ。  
  
> 参考：[Heroku Pipelineを使ってみる](https://qiita.com/yo-iida/items/f99566fe4617f848fa39)  
  
## 2.1. Pipelineを作成  
新しくPipelineを作成する。

production には master ブランチをデプロイ。これは上の項目でデプロイしたものを使う。

staging には develop ブランチをデプロイする。create new app してパイプラインに割り当てる。 Automatic Deploys はEnableとした。

review にはプルリクしたブランチが勝手にデプロイされるらしい。マージされた後には勝手になくなるようだ。

review には app.json にスクリプトを記述することで、デプロイ後にそれを実行してくれるらしい。ここでマイグレーションを勝手に実行してくれるようにしたかったがうまく行かなかった。デプロイ後に手動でマイグレーション行った。  
  
# 3. まとめ  
デプロイやパイプラインの使用はできた。
しかし、ターミナルからのマイグレーションやreview のスクリプト実行による自動マイグレーションはうまくいっていない。今後できるようにしたい。
atcoder ABC114 D問題

ABC114　C問題の解法をメモ
以前に階乗をべき乗で考えて約数を考える問題をやったことがあったがその考えを思い浮かべることができず全くできなかった。

https://atcoder.jp/contests/abc114/tasks/abc114_d

#考え方
問題は、N!の約数のうち、ちょうど75個の約数を持つ数の個数を求める問題である。まずN!の約数について考えてみる。N! = p<sub>1</sub><sup>q<sub>1</sub></sup> p<sub>2</sub><sup>q<sub>2</sub></sup>p<sub>3</sub><sup>q<sub>3</sub></sup>と表せるとすると、N!の約数は(q<sub>1</sub>+1)*(q<sub>2</sub>*+1)(q<sub>3</sub>+1)通りあることがわかる
(例) 4! = 24 = 2<sup>3</sup> * 3      ->1,2,3,4,6,8,12,24 -> (4 * 2)=8個 

これで、約数の列挙はできたので、この中からちょうど約数が75個の数をカウントしていく。先ほどと同じ考え方で考えると約数を75個持つというのは、75の約数が{1,3,5,25,75}であるので、(q<sub>i</sub>の中で、75以上の個数)+((q<sub>i</sub>の中で、25以上の個数)*(q<sub>i</sub>の中で、3以上の個数-1)) + ((q<sub>i</sub>の中で、15以上の個数) *(q<sub>i</sub>の中で、5以上の個数-1))+((q<sub>i</sub>の中で、5以上の個数)*(q<sub>i</sub>の中で、5以上の個数-1)/2*(q<sub>i</sub>の中で、3以上の個数-1))
となる。

 
ちなみに、N以下の素数調べは以下の通り

```java
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i= 2; i <= n;i++){					//素数調べ
			boolean flag = true;
			for(int j = 2;j*j < i;j++){
				if(i%j == 0){
					flag = false;
					break;
				}
			}
			if(flag){
				list.add(i);
			}
		}

```
Googleが公開しているBERT（自然言語処理AI）のファイル解説

この記事は、2018年末現在、自然言語処理AIにおける最先端のディープラーニングモデルであるBERTについて、提供元であるgoogle-researchの[githubレポジトリ](https://github.com/google-research/bert)で公開されているファイルの一覧を解説したものです。

**BERT自体について知りたい場合は、まず公式READMEの[翻訳記事](https://qiita.com/uedake722/items/927bf491a025f1a88b17)を読んでください（英語が苦でないなら直接公式のREADMEを読む方が勉強になってよいです）**

BERTは、種類の異なる様々な自然言語処理タスクで最高成績を叩きだした優れモノで、
しかも転移学習のベースにすれば少ない学習のみで個々の問題を従来より正確に解ける可能性がある「革命的」な技術だそうです。

# 公開されている内容
1. BERTモデルの構築・学習（オプティマイザー）・前処理（トークン化等）するライブラリ
2. BERTを転移学習に使用する実験用スクリプト
3. BERTを特徴表現抽出に使用する実験用スクリプト
4. 自分で用意したデータセットでBERTの事前学習を行うスクリプト
5. GoogleがWikipedia + BookCorpusを用いてBERT用に事前学習(100万更新ステップ)したチェックポイント

1~4は、github上で公開、すべてTensorFlow上で動くコード（TensorFlow 1.11.0で試験）です。5はgoogleのストレージ上で公開されています。

用途によって必要なファイルのみを使用すればOK。

- Googleが事前学習してくれたモデルを利用するなら
    - 最低限1,5があればOK。プラスして、自分で転移学習するコードを書く場合の参考に2を参考にする。
- BERTのモデルを一から学習（事前学習から）行いたい場合
    - 1,4を使用。

ライブラリ本体(1)は、高々1600行ぐらいなので、処理の内容をコードで追うのもそんなに時間かかりません。

# 公開ファイル一覧（[Github上]((https://github.com/google-research/bert))）と簡単な解説

|種類|行数|ファイル名と解説|
|:--|--:|:--|
|ドキュメント||**[`README.md`](https://github.com/google-research/bert/blob/master/README.md)**<br/>まずこれを読む。[翻訳記事](https://qiita.com/uedake722/items/927bf491a025f1a88b17)参照|
|||**[`multilingual.md`](https://github.com/google-research/bert/blob/master/multilingual.md)**<br />多言語版のREADME。[翻訳記事](https://qiita.com/uedake722/items/b7f4b75b4d77d9bd358b)参照|
|||**`CONTRIBUTING.md`**<br />読む必要なし（永久に互換性を維持するために大きなコード変更は行わないと明言）|
|ライブラリ||**`__init__.py`**<br />pythonにおけるおまじないなので無視|
||988|**`modeling.py`**<br />BERTモデル構築用ライブラリ|
||174|**`optimization.py`**<br />BERTモデルを学習する際に使用するライブラリ。事前学習及び転移学習で利用|
||399|**`tokenization.py`**<br />入力データをトークン化するライブラリ|
|スクリプト|981|**`run_classifier.py`**<br />転移学習の実験用スクリプト。CoLA,MRPC,MultiNLI,XNLIの4つのデータセット実行用|
||1263|**`run_squad.py`**<br />転移学習の実験用スクリプト。SQuADデータセット実行専用（SQuAD1.1とSQuAD2.0）|
||419|**`extract_features.py`**<br />入力文中の各単語の特徴表現ベクトルを取り出す実験用スクリプト||
||442|**`create_pretraining_data.py`**<br />自分で用意したデータセットでBERTの学習（事前学習）を行う場合に使用。入力文にマスクをかける等の前処理を行うスクリプト。BERTのキモである双方向Transformerの教師なし学習を行う為にデータに制約をかける処理|
||493|**`run_pretraining.py`**<br />自分で用意したデータセットでBERTの学習（事前学習）を行うスクリプト。create_pretraining_data.pyでデータを加工した後に実行する|
|テストコード|277|**`modeling_test.py`**<br />テストコードなので無視|
||48|**`optimization_test.py`**<br />テストコードなので無視|
||136|**`tokenization_test.py`**<br />テストコードなので無視|
|データ||**`sample_text.txt`**<br />BERTの学習（事前学習）を行うデータセットの小さなサンプル|

# 個別ファイルの解説
（随時公開予定）
【Unity】デモの「HelloVR」を起動する（Google VR for Unity）

<font color="Magenta">Google VR for Unityの「HelloVR」を起動してみた</font>


実際に動かした動画はこちら↓↓
https://twitter.com/nonnonkapibara/status/1080492586341609472
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Google VR for Unityの「HelloVR」を起動して、スマホで動かしてみました。<br>環境メモ<br>⭐️Mac OS Mojave バージョン10.14<br>⭐️Unity 2018.2.15f1<br>⭐️Xcode10.1<br>⭐️iPhone7(IOS 12.1)<a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://twitter.com/hashtag/unity3d?src=hash&amp;ref_src=twsrc%5Etfw">#unity3d</a>  <a href="https://twitter.com/hashtag/VR?src=hash&amp;ref_src=twsrc%5Etfw">#VR</a> <a href="https://t.co/aIopnJyb0L">pic.twitter.com/aIopnJyb0L</a></p>&mdash; non (@nonnonkapibara) <a href="https://twitter.com/nonnonkapibara/status/1080492586341609472?ref_src=twsrc%5Etfw">2019年1月2日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

環境メモ
⭐️Mac OS Mojave バージョン10.14
⭐️Unity 2018.2.15f1
⭐️Xcode10.1
⭐️iPhone7(IOS 12.1)

1.GVR SDK for Unity v1.180.0
「GoogleVRForUnity_1.180.0.unitypackage」をダウンロードする
https://github.com/googlevr/gvr-unity-sdk/releases
<img width="1072" alt="001.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/5ca818be-3719-1178-3fc6-20f969a8d1a9.png">


2.「GoogleVRForUnity_1.180.0.unitypackage」をインポートする
<img width="610" alt="スクリーンショット 2019-01-02 23.47.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/c48362f9-ad6d-0363-8396-b3834f29c5d7.png">

<img width="468" alt="スクリーンショット 2019-01-02 23.53.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/6a24ccb8-218e-60b6-5536-5b5e5073fe21.png">

3.「Assets」ー「GoogleVR」ー「Demos」ー「Scenes」から「HelloVR」を開く
<img width="853" alt="スクリーンショット 2019-01-03 0.22.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/0874f1b5-4936-7d70-9b75-a7bc62487f49.png">

４.VR用に出力する
<img width="432" alt="スクリーンショット 2019-01-03 0.22.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/949a2bd1-7787-27be-1d0b-9ecfc3d872ab.png">

完成！！！！！
![IMG_0185.jpg](https://qiita-image-store.s3.amazonaws.com/0/93155/9daf32e4-e5d5-9d2e-ca17-252343d91163.jpeg)








#<font color="Magenta"></font>
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">【Unity】やっとVR用のゲームができました！！<br>シーンの遷移も、スマホにVR用の出力もできました！！<br>やった！！<br>v(≧∇≦)v イェェ～イ♪<a href="https://twitter.com/hashtag/unity?src=hash&amp;ref_src=twsrc%5Etfw">#unity</a> <a href="https://twitter.com/hashtag/unity3d?src=hash&amp;ref_src=twsrc%5Etfw">#unity3d</a> <a href="https://twitter.com/hashtag/VR?src=hash&amp;ref_src=twsrc%5Etfw">#VR</a> <a href="https://t.co/AEsbXdrnhX">pic.twitter.com/AEsbXdrnhX</a></p>&mdash; non (@nonnonkapibara) <a href="https://twitter.com/nonnonkapibara/status/1076511052043448320?ref_src=twsrc%5Etfw">2018年12月22日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
機械学習の最適化手法云々メモ

備忘録的な感じのメモです．

##最適化
###目的
コスト関数$J(\boldsymbol{\theta})$の最小化
つまり
$$minimize{J(\boldsymbol{\theta})}$$

一般的には，モデルとテストセットの誤差を何らかの形で表現した関数のことをコスト関数と呼び，コスト関数を最小化することにより誤差の最小化を図っている．
ではコスト関数にはどのような形があるのか
###コスト関数
####１．2乗誤差
$$\frac{1}{2m}\sum_{i=1}^m{\left(h_\theta(x^{(i)})-y^{(i)}\right)}^2$$
####２．正則化したやつ
フィッティングでよく出てくる．オーバーフィッティングを防ぐためのペナルティ項を加える．
ロッソ正則化(L1ノルムを足したやつ)
$$\frac{1}{2m}\left[\sum_{i=1}^m{\left(h_\theta(x^{(i)})-y^{(i)}\right)}^2+\lambda\sum_{j=1}^n{|\theta_j|}\right]$$

リッジ回帰(L2ノルムを足したやつ)
$$\frac{1}{2m}\left[\sum_{i=1}^m{\left(h_\theta(x^{(i)})-y^{(i)}\right)}^2+\lambda\sum_{j=1}^n{\theta_j^2}\right]$$

---
今までが$J(\boldsymbol{\theta})$について．以降はコスト関数を計算して最小化していく行為(最初の式の$minimize$の箇所)についての説明となる．

###最適化手法
このサイト
https://postd.cc/optimizing-gradient-descent/
がものすごく詳しいので，勉強目的ならそちらのほうがオススメです

####バッチ勾配降下法
重みをどの方向に動かせばよいのか，$J(\boldsymbol{\theta})$の微分で決めようという方法です．
$$w:=w-\alpha\frac{\partial J(\boldsymbol{\theta})}{\partial w}$$
デメリットはデータセット全体を用いた更新則なので，膨大なデータセットへの適用を考えた時に計算量・時間が高くついてしまうこと．
データが一つ増えただけでも全体の計算をやり直すので，あまり好まれない．
が，下記の2手法よりは収束性が良い

####ミニバッチ法
上と同様の更新則．上のデータをちょこちょこ放り投げるバージョン(雑)
####確率的勾配降下法
上と同様の更新則．逐次勾配降下を行うアルゴリズム

####Momentum
CourseraのDeep Learningコースによると，
以下のように$dW,db$を計算する．
$$v_{dW}=\beta v_{dW}+(1-\beta)\frac{\partial J(\boldsymbol{\theta})}{dW}$$
$$v_{db}=\beta v_{db}+(1-\beta)\frac{\partial J(\boldsymbol{\theta})}{db}$$
$$W = W-\alpha v_{dW}$$
$$b = b -\alpha v_{db}$$
この時Hyperparametersは$\alphaと\beta$である．
アナロジー的には$v_{dW}とv_{db}$が速度項で$dW,db$が加速度項らしい．
$\beta$は$0.9$あたりを使うことが多いとのこと．

####RMSProp
Root Square Mean Propsの略です．
$$S_{dW}=\beta S_{dW}+(1-\beta)\left[\frac{\partial J(\boldsymbol{\theta})}{dW}\right]^2$$
$$S_{db}=\beta S_{db}+(1-\beta)\left[\frac{\partial J(\boldsymbol{\theta})}{db}\right]^2$$
$$W = W-\alpha \frac{\frac{\partial J(\boldsymbol{\theta})}{dW}}{\sqrt{S_{dW}}}$$
$$b = b-\alpha \frac{\frac{\partial J(\boldsymbol{\theta})}{db}}{\sqrt{S_{db}}}$$
Sが限りなく小さい時，$\epsilon=10^{-8}$を加えることがある．

####ADAM
Adaptive Momentum estimationの略．
MomentumとRMSPropを足したものと言われることが多い．
$$v_{dW}=\beta_1 v_{dW}+(1-\beta_1)\frac{\partial J(\boldsymbol{\theta})}{dW}, v_{db}=\beta_1 v_{db}+(1-\beta_1)\frac{\partial J(\boldsymbol{\theta})}{db}$$

$$S_{dW}=\beta_2 S_{dW}+(1-\beta_2)\left[\frac{\partial J(\boldsymbol{\theta})}{dW}\right]^2 ,S_{db}=\beta_2 S_{db}+(1-\beta_2)\left[\frac{\partial J(\boldsymbol{\theta})}{db}\right]^2$$

$$v_{dW}^{corrected}=v_{dW}/(1-\beta_1^t), v_{db}^{corrected}=v_{db}/(1-\beta_1^t)$$

$$S_{dW}^{corrected}=S_{dW}/(1-\beta_2^t), S_{db}^{corrected}=S_{db}/(1-\beta_2^t)$$

$$W = W-\alpha \frac{v_{dW}^{corrected}}{\sqrt{S_{dW}^{corrected}}+\epsilon}$$
$$b = b-\alpha \frac{v_{db}^{corrected}}{\sqrt{S_{db}^{corrected}}+\epsilon}$$
Nextcloud18.0.4をUbuntuにインストールしてもっとお手軽に体験してみる

# はじめに
先日、[Nextcloud15.0.0をCentOS7にインストールしてお手軽に体験してみる](https://qiita.com/S_Katz/items/9402ae8e104b8ac5702b) の記事で、CentOS7に、2020/4/25現在の最新版であるNextcloud18.0.4のインストール方法をご紹介いたしましたが、Ubuntuであれば、公式のsnapパッケージを利用することによりもっとお手軽にNextcloudを体験できますので、手順を展開してみます。
\# Ubuntuは普段ほとんど触る機会がないので知識がかなり薄いです。ツッコミ大歓迎です。

# 今回構築する環境
## 構成イメージ
こんな感じで、いたってシンプルです。まずはインターネットに出ない環境で試してみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/316764/a207a0ba-5d9b-54af-e42c-0c5c10dd3871.png)

## 利用するOS、ミドルウェア
### サーバOS(Ubuntu)
今回はUbuntu16を利用します。VirtualBoxやVagrantなどで準備いただいても問題ありません。
ここで展開している手順の環境は以下のとおりです。

```
$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

$ uname -a
Linux ip-xxx-xxx-xxx-xxx 4.15.0-1054-aws #56-Ubuntu SMP Thu Nov 7 16:15:59 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
```
# 構築手順
①システムを最新状態にアップデートします。

```
$ sudo apt update
$ sudo apt upgrade
```
②Nextcloud18のsnapパッケージ(2020年4月24日現在の最新版である18.0.4版)をインストールします。

```
$ sudo snap install nextcloud
```
※snapパッケージの最新の安定版以外のバージョンを利用したい場合は、[Install Nextcloud for Linux using the Snap Store | Snapcraft](https://snapcraft.io/nextcloud) にアクセスすることで該当のバージョンをのShell記述方法を取得できます。

③インストール作業はこれで完了です。ブラウザで http://(サーバのIPアドレス)/ にアクセスします。下のような画面が出ればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/1a223236-8595-4c4e-6f0d-9558b25781e4.png)
④ユーザー名、パスワードを決めて入力します。さらに「推奨アプリをインストール」のチェックを外しておきます。終わったら「セットアップを完了します」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/d6c97df7-402c-e753-ee6c-2583bc79312e.png)
⑤こんな画面が出ればNextcloudが動作しています。おめでとうございます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/74f1327f-5fbc-ed0e-3e49-906722d4a066.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316764/d690f543-c067-a815-e762-ace53e950336.png)
# あとがき
先日記事にしたCentOS7へのインストール手順に比べたらかなりシンプルですが、Ubuntuで動作させる環境があればより手軽にNextcloudを体験できます。
パッケージングされているのでトリッキーなカスタマイズは難しいかもしれませんが、NextcloudのCLIである`occ`なんかも使えますので、いろいろ試したい方にはおすすめです。

# 更新履歴
* 2019/1/3: 初版
* 2020/4/25: Ubuntu18.04LTS + Nextcloud 18.0.4 の環境に即した修正。
atcoder ABC114 C問題

ABC114　C問題の解法をメモ
方針は合っていたが、数の列挙ができなかった。
https://atcoder.jp/contests/abc115/tasks/abc115_c

#考え方
明らかにNまでの全ての整数に対し、七五三数かどうか判別するのはTLEになるので、別の方法を考える。ここで、七五三数の定義を確認すると3,5,7からのみ構成され、なおかつ3,5,7が全て最低でも一つは含まれている数である。このことから3,5,7のみで構成される数の個数は最大で3の9乗である(Nが9桁の時)。よって3,5,7のみで構成される数を列挙し、それらに対し、3,5,7を全て最低でも一つずつ含んでいるかを判別することで、七五三数をカウントすれば良い。ちなみに計算量は(3のN乗 * 9)だと考えられる(自信ないです)
 
ちなみに、3,5,7で構成される数の列挙は再帰的に書くと次のようになる

```java

static void dfs(long x){

		if(x > n){
			return;
		}
		if(check(x)){
			ans++;
		}		
		dfs(10*x + 3);
		dfs(10*x + 5);
		dfs(10*x + 7);
	}

static boolean check(long x){
		String mozi = String.valueOf(x);
		if(mozi.contains("3") && mozi.contains("5" )&& mozi.contains("7")){
			return true;
		}else{
			return false;
			 
		}
	}

```
Colaboratory環境への機械学習用データ展開

#概要
Colaboratoryをガンガン利用して機械学習を行うため、インスタンスに学習データをすばやく展開する方法を探してみました。

#基本戦略
zip展開にramdisk(tmpfs)を利用する。


#事前準備
Google Driveを使用するので、Googleアカウントを準備し、学習データをアップロードしてください。

ここではGoogle Drive上に以下のように"data"ディレクトリを作成し、zip圧縮された複数の学習用イメージデータをアップロードしました。

```
/data/train_images_1.zip
/data/train_images_2.zip
/data/train_images_3.zip
/data/train_images_4.zip
```

#データ展開
Colaboratoryを起動し、以下を実行してください。
※tmpfsのサイズは学習データのサイズに応じ適宜変更のこと

``` python
import glob
import os
from google.colab import drive

drive.mount('/content/drive')
!mkdir -p ramdisk
!mount -t tmpfs -o size=5g /dev/shm ramdisk
my_drive = 'drive/My Drive/'
zipped_files = ['data']

for zipped_file in zipped_files:
  !mkdir -p $zipped_file
  for file in [os.path.basename(filename) for filename in glob.glob(my_drive+zipped_file+'*.zip')]:
    print('Deploying '+file+'...')
    !cp -n "$my_drive"$file ramdisk
    !unzip -u ramdisk/$file -d ramdisk  1> /dev/null
    !rm ramdisk/$zipped_file*.zip
    !mv ramdisk/$zipped_file/* $zipped_file
```
オフライン環境構築 bower編 

[オフライン環境構築 目次へ](https://qiita.com/kannkyo/items/1e5f8362ed591ebda33d)

# 概要

オフラインでbowerを使いたい人のための手順。

# 手順

## ダウンロード

オンライン環境で`bower install`する。

## キャッシュ確認

インストール時にbowerが作るキャッシュとそのフォルダを確認する。

```shell
bower cache list
```

## キャッシュ移動

キャッシュフォルダをオフライン環境に移動する。

## キャッシュからインストール

bower をオフラインモードで起動して、キャッシュからインストールする。

```shell
bower install <package> --offline
```

# おまけ

キャッシュを削除したいときは以下のコマンドを実行する。

```shell
bower cache clean
```

# 参考文献

- [Using local cache](https://bower.io/docs/api/#using-local-cache)
Gitのステージングエリアについて理解する[Git]

#**はじめに**
初学者の方にプログラミングを教えていた中で、ステージングエリアが曖昧な方が多かったので、とても簡単にステージングエリアとは何かを理解できるようまとめてみました。

#**ステージングエリアとは**
ステージングエリアとはGitレポジトリにコミットするファイルを置いておくためのエリアです。
ステージングエリアがあることによって、いきなりセーブされずに、セーブするファイル（フォルダ）群を選択することができます。

#**流れで確認するステージングエリア**
##**初期操作**
まず最初にローカルでGitレポジトリを作成し、リモートと同期させるとします。

```
$ mkdir git-app
$ cd git-app/
$ git init
$ git add README.md
$ git commit -m "first commit"
$ git remote add origin https://github.com/takuyanin/git-app.git
$ git push -u origin master
```
こちらの流れが曖昧な方は下記記事にまとめてますのでよければご参考ください。
[GitHubとgitの関わり[初学者向け] + gitでGithubと連携する](https://qiita.com/takuyanin/items/419caed8b01d3ac41409)

##**ファイルを追加・編集**
以降、`git`コマンドの機能の挙動を確認する際、二つ以上ファイルを作成しておくとわかりやすいので、`READYOU.md`ファイルも下記コマンドで作成しておきます（存在していないファイルは自動で作成されます）。

```
$ echo "hello first" >> README.md
$ echo "another first" >> READYOU.md
```

##**ステージングエリアに追加**
今回は全てのファイル（`README.md`と`READYOU.md`）をステージングエリアに追加します。

```
$ git add .
```

##**ステージしたファイルを取り消し**

```
$ git reset README.md
```

上記ではファイルを指定していますが、`git reset`コマンドの後にファイルを指定しないと全てのステージングエリアにあるファイルが取り消されます。

##**ステージングエリアにあるファイルの確認**
```
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   READYOU.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   README.md
```
`README.md`ファイルがステージングエリアから取り消されていることが確認できます。

#**おわりに**
とても簡単にステージングエリアについてまとめました。
とりあえずは、追加・削除について理解しておけば大丈夫でしょう。

この記事があ役に立ったという方は、いいね、お願いします(^^)
GitHubのREADME.mdにGifを貼り付けたい

自分のやったことを忘れないための記録記事です。
合ってるとか間違ってるとか特に考えてないです。早さ重視です。


#１、録画した動画をGif化
https://www.aiseesoft.jp/video-to-gif/
ここでgifに変換するソフトをダウンロードします。
私が使いやすいと感じただけで別にgifを作成するソフトウェアを持っているなら何でもいいです。


#２、Gifの容量を圧縮
https://ezgif.com/
ここで「GIF Optimizer」を選択し、動画を選択して容量を減らすような処理をする。
GitHubの関係で5MB以下でないと表示されない。また、画面サイズも小さくないといけない。とりあえず600以下なら大丈夫だと把握済み。

#３、追加したいリポジトリのwikiにて
GitHubのGifを追加したいリポジトリにてwikiを選択し、wikiを作成する。してあれば問題ない。
その右下にクローンするURLがあるのでそれを利用してGifをコミットする。

#４、README.mdを修正
README.mdにて
```README.md
「![Gif](https://raw.github.com/wiki/ユーザー名/リポジトリ/GIF名.gif)」
```
を記述する。

それでプレビューにて反映されていれば完成。
Git学習コースⅠの内容振り返り（Progate）

Gitは共同開発をスムーズに行うためのツールです。
今回はProgateの学習コース Git Ⅰの内容をまとめていきたいと思います。


###Ⅰ.共同開発をしてみよう

コードを変更→共有準備→共有という流れで共同開発を行います。

####1.Gitの実行

```
$git init
``` 
環境構築後、ターミナルでGitを実行します。


####2.共有ファイルの選択

```
$git add index.php
```
git add ファイル名で共有するファイルを選択します。

####3.選択したファイルを記録

```
git commit -m "Create index.html"
```

git commit -m "コミットメッセージ"
コミットメッセージには変更した内容を書くことが基本です。

####4.リモートを登録

```
$git remote add origin https://...
```
git remote add リモート名　リモートのURL
リモート名はoriginとすることが多いようです。


####5.リモートにファイルをアップロード

```
$git push origin master
```
git push リモート名　master

####6.リモートのファイルをダウンロード

```
$git pull origin master
```

##Ⅱ.Gitを使いこなそう

####1.変更したファイルの把握

```
$git status
```
実行すると変更があったファイルが赤色で表示されます。

####2.変更内容の把握

```
$git diff
```
実行すると変更前のコードが赤色で表示され、変更・追加されたコードが緑色で表示されます。
変更内容で良い場合は、$git add を実行しましょう。

####3.addしたファイルの確認

```
$git status
```
実行するとaddされたファイルが緑色、まだaddされてないファイルが赤色で表示されます。

####4.コミット履歴の表示

```
$git log
```
自分や他人のコミットを確認することができます。新しいものほど上に表示されます。

```
$git log -p
```
コミットの変更内容を確認します。抜けるときはQを押します。


ここまでご覧いただきありがとうございました。
atcoder ABC115 C問題

ABC115　C問題の解法をメモ
普通にソートすればいい簡単な問題だった。
https://atcoder.jp/contests/abc115/tasks/abc115_c

#考え方
たくさんの木の中からK本選んで、その中から最大の木の高さと最小の高さの差がもっとも小さくなるようにする問題。木の本数が6桁まであるので、全通り試していたら余裕でTLEになってしまう。また、見るからにO(N)で解ける感がすごい。ここでK本の中から最大の木と最小の木の差をとることを考えるとソートして小さい順にK本とり、それをforでn本目まで回しansを更新すれば、解答が得られると気づく
```java

int ans = 1000000000;
for(int i = 0;i + k - 1 < n;i++){
  int kari = h[i + k - 1] - h[i];       //ソートされているので最大と最小は明らか
  ans = Math.min(ans, kari);
}
```
2019年の書き初め。Proxyを使って2019を🐗🐗🐗🐗に書き換える

あけましておめでとうございます。
書き初めがてら`Proxy`を使って、配列の値が`2019`のものだけ`🐗🐗🐗🐗`に書き換える、実に他愛もないコードを書いてみました。

MDN - Proxy
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy

```js
const rewriteToBoar = {
  set(obj, prop, value) {
    if (value === "2019") {
      obj[prop] = "🐗🐗🐗🐗";
      return true;
    } else {
      obj[prop] = value;
      return true;
    }
  }
};

const years = new Proxy([], rewriteToBoar);
years.push("2017");
years.push("2018");
years.push("2019");
years.push("2020");
console.log(years); // => [ '2017', '2018', '🐗🐗🐗🐗', '2020' ]
```

今年もよろしくお願いします。
Pystanがうまくインストールできないときに見てほしいもの

#Pystanがうまくインストールできていない！！
いろいろなサイトを見ながらPystanをインストールしたつもりなのに、importできない！！という方は下記をご参照ください。

visal studio で「C++によるdesktop開発」を選んでちゃんとダウンロードもしたのに、いざ`import pystan`を叩くと下記のようにエラーが出てしまった方向けです。
<img src="https://docs.google.com/drawings/d/e/2PACX-1vSrrIi6rkElVCNJKFPkk20ODxcNmzMNN7BZj5yOuZcf5GI7SGrD2qzRU73e0W5p9Tg-faY8B5uumJh3/pub?w=463&amp;h=221">
Anaconda Navigatorにて、「Environments」を選択し、
Not installに変更して、Pystanを検索してください！
Pystanが検索に引っかかるかと思います。（画像はすでにインストール後なので、Pystanが出てきません。すみません）
<img src="https://docs.google.com/drawings/d/e/2PACX-1vSHDDno8HKe-4PBRGH6c4wdNEQGoHPl_q7qi_uWAxCQub0R97_ETivHfFYYv30zc_cHThu3liVuUxgG/pub?w=927&amp;h=467">
あとは、おわかりかと思いますが、チェックボックスにチェックして、右下の「apply」をクリック！
<img src="https://docs.google.com/drawings/d/e/2PACX-1vS-n4GJ2PhrAr5nxE7L_ryWXtP7sZSmPzm3GAJcYEN7Kp74-5-GlUvrif7vomLWQordbLr9glTglZIs/pub?w=960&amp;h=720">
これを行った後に、再び`import pystan`を試すと、このように無事インストールされます！
<img src="https://docs.google.com/drawings/d/e/2PACX-1vQgY1s7bXAukIhCuK5f0z-ADzI9Fbyq8E5Mmxvw_hU_-CrrE_07gDVnB4_J4_FHgm7BtRzSZoZMwO7P/pub?w=960&amp;h=720">
Pythonスクリプトの1行目の意味

# Pythonスクリプトの1行目の意味

Pythonスクリプトの1行目、

```python
#!/usr/bin/env python3
```

これが、今までおまじないになっていたので、調べてみました。



## シバン

この1行目はシバン（shebang）といい、UNIXでスクリプトを実行する際の、インタプリタを指定します。
インタプリタとは、スクリプトを解釈するためのプログラムです。

```bash
#![インタプリタのパス] [インタプリタの引数]
```

という書式で指定します。
指定することで、インタプリタに、インタプリタの引数と実行したスクリプトファイルのパスが渡ります。

なお、この指定は、スクリプトファイルに実行権限を付与し、直接実行した時しか有効になりません。
（ `python spam.py` ではインタプリタを指定し、実行されています）

Pythonのシバンの場合、インタプリタのパスが `/usr/bin/env` となっています。
Pythonのインタプリタのパスを直接指定しているわけではありません。

`/usr/bin/env` とは一体何者なのでしょうか。


## /usr/bin/env

`/usr/bin/env` とは、envコマンドを実行した時に実行されるファイルです。
このファイルパスをインタプリタのパスとして指定することで、envコマンドが実行されています。

envコマンドの書式は以下の通りです。

```bash
env [オプション] [環境変数=値 ....] [コマンド]
```

`env [コマンド]` は、現在の環境変数でコマンドを実行します。
`env python3` で、環境変数PATHのディレクトリ下に存在するpython3ファイルを実行します。

envコマンドを経由することで、インタプリタのパスが変更された場合でもPATHさえ通っていれば、そのインタプリタを使うことができます。

例えば、python3が/usr/bin下に存在し、カレントディレクトリにあるspam.pyを直接実行した場合、以下のコマンドが実行されたのと同等になります。

```bash
$ /usr/bin/python3 ./spam.py
```


## そもそもシバンってどこで解釈されてるの？

`execve()` というシステムコールで解釈されているようです。

「ようです」というのは、まだきちんと理解できていないから…。
すみません。
Linux OSの仕組みもいずれ勉強したいです。


## おまけ

シバンにインタプリタの引数を指定することで色々遊べます。
※ただし、シバンが複数引数を受け付けるかはOS依存のようです。
（参考URL：https://cpplover.blogspot.com/2013/08/shebang.html）

#### デバッガ実行

   ```python
   #!/usr/bin/env python3 -m pdb
   ```

   スクリプトを直接実行した場合、デバッガ実行になります。

#### インタプリタ以外のコマンド

   ```bash
   #!/bin/echo "spam, ham, eggs"
   ```

   実行結果：

   ```bash
   $ ./spam.py
   "spam, ham, eggs" ./spam.py
   ```

   インタプリタとは全く関係のないコマンドを指定することもできます。
   ただしスクリプトは解釈されません。
   悪用もできますが、やめましょう。

---

以上、お粗末さまでした。
テキストメッシュプロ

テキストメッシュプロで日本語を入れる方法
https://qiita.com/squall22446688/items/0af50b957aca8a4b3881
ノトサンズの場合


あとは、代入の仕方で間違った記述の記事に惑わされましたが、


 public TextMeshProUGUI sayDanceName;
 sayDanceName.text = danceNames[0];

みたいにのuGUIのように、.textに値代入すれば上書きできます。

（いったいどんなコンテンツ作ってるのか気になるような変数名ｗ）
2019年駆け出しエンジニアが振り返らず走れるように計画する

エンジニアになって3ヶ月（プログラミングに触れてから１年ちょっと）経過して、そろそろ入門書ではなくて、ミドル層になるにはどうしたらよいかという観点にシフトしたい。未経験からジュニア層になるには、入門記事がいっぱいあるので特に何も考えずにそれやってればいい感があるのですが、ジュニア層からミドル層になるには何をしたらいいのか悩ましくて、最近それを考えるコストが増えているので、手を動かすことに集中できるようにするのが目的です。
あとプログラミングを始めてからアウトプットのためのインプットばかりだったので、一度しっかりと基礎を固めたい目的があります。

期間
6ヶ月（1年だと長いので）

#### 応用情報取得する
**なぜやるのか**
ネットでは情報系の資格いらないっていうのが盛り上がってたり、自分も資格とか意味なくない？って言ってた人間なのですが、いらんポリシーは曲げて応用情報取の勉強しようと思います。
もともと文系で情報系の基礎知識がないところに勝手に引け目を感じることがあるのでその解消です。あとマーケットから見たときに文系でもある程度基礎があるってわかりやすく証明できるものが欲しい。
基本情報はなんか持ってる人多いので、せっかくならちょっとジャンプして応用にチャレンジしたい。半年後受かってなかったら基本情報にシフトします。。。

####Webサービスつくる x2 
**なぜやるのか**
もともとWebサービス作りたくてプログラミング始めたので続けていきたい。去年は勉強しながら２つリリースしたので、今年は半年で2つリリースしたい。去年はあったらいいかもで作っていたので、しっかりと自分の切実な課題を解決できるものにしばる。あとサーバーはAWS使う。

#### 能動的な情報収集を英語しばりにする
**なぜやるのか**
自分の強みを考えたときに、一つ外資系で英語使いながら働いてた経験があると思うので、それをキープするために検索は英語で。あと日本語だけで情報取っていると周りと情報が同じになりがちなので情報のソースを変えるように意識する。

#### OSSにコントリビュートする
これは年始早々に達成。ゆるく継続していく
https://qiita.com/isotai/items/a2ce6e12547e15808b6e

#### 勉強会で登壇する
**なぜやるのか**
意識高めエンジニアへの登竜門にOSSのコミットと、勉強会でのLTがあると思う（偏見）のでこのLTの方もクリアしたい。まずは勉強会に参加するところから始める。　

#### デザインパターンのメジャーどころ学習する
**なぜやるのか**
ロジックの部分は言語変わっても変わらないっていうし、学習効果たかそうなのでやる。8コくらいできたらいいかな。Qiitaにまとめる。

#### [オブジェクト指向設計実践ガイド　～Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方](https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E8%A8%AD%E8%A8%88%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%EF%BD%9ERuby%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B-%E9%80%B2%E5%8C%96%E3%81%97%E3%81%A4%E3%81%A5%E3%81%91%E3%82%8B%E6%9F%94%E8%BB%9F%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E8%82%B2%E3%81%A6%E6%96%B9-Sandi-Metz-ebook/dp/B01L8SEVYI)  読んでQiitaにまとめる
**なぜやるのか**
一回チャレンジしたのだけど自転車の例えが分かり辛くていらいらして読むのやめてしまったので再チャレンジ。オブジェクト指向はちゃんと理解したい。

####[達人に学ぶ SQL徹底指南書](https://www.amazon.co.jp/%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6-SQL%E5%BE%B9%E5%BA%95%E6%8C%87%E5%8D%97%E6%9B%B8-%E3%83%9F%E3%83%83%E3%82%AF-ebook/dp/B00DIM6330) 読んでQiitaにまとめる
**なぜやるのか**
きれいにクエリをかけるようになりたい。

#### NPOとかでエンジニアとして貢献する
**なぜやるのか**
情報収集してチャンスがあればやりたい。NPOじゃなくてもいいんだけど世の中の生きづらさみたいなのを解消する活動にエンジニアとして貢献したい。

#### Vue入門する
**なぜやるのか**
最低限のフロントの技術を知っておきたい


ちゃんと睡眠時間はとって、無理せずゆるく頑張る:golf: