OmniAICreator/Qiita-1.07M huggingface dataset:
Rubyでアプリケーション作る(ループ処理〜)

# ループ処理
プログラムを終了せず同じ処理をずっと繰り返すループ処理を行う方法はwhile文の条件式をtrueにしておくことでできる。
これでwhileが繰り返すための条件は常に真となり、永遠にwhile内の処理が繰り返されることになる。

```
while true do
  # プログラムは終了せず繰り返し処理が行われる
  ## 処理
end
```
# exitメソッド
exitメソッドはプログラムの処理を強制的に終了させるメソッドであり、実行中のプログラムを強制終了するコマンド「control + c」と同じ役割を持つメソッド

```
while true do
  exit # ここでプログラムが終わる
  puts "Hello World" # これは呼ばれない
end
```
# メニュー画面をexitするまでループさせる
「メニューの表示」 > 「ユーザーの入力」 > 「入力によって条件分岐させた処理」

```ruby:reviewApp.rb
    # ~ 省略 ~
def end_program
  exit
end

def exception
  puts "入力された値は無効な値です"
end

while true do
  # メニューの表示
  puts "レビュー数:0"
  puts "[0]レビューを書く"
  puts "[1]レビューを読む"
  puts "[2]アプリを終了する"
  input = gets.to_i
  
  if input == 0 then
    post_review       # post_reviewメソッドの呼び出し
  elsif input == 1 then
    read_reviews      # read_reviewsメソッドの呼び出し
  elsif input == 2 then
    end_program       # end_programメソッドの呼び出し 
  else
    exception         # exceptionメソッドの呼び出し
  end
end
```
ターミナルより2を入力すれば end_programメソッドが呼び出されexitメソッドが実行される。
よってループは解除される。
Callbackに失敗したメッセージをSigfox APIで取得する方法

Sigfoxを使ったアプリケーション運用において、SigfoxクラウドまではIoTデバイスからのメッセージが到達しているものの、Callbackに失敗して、ご自身のアプリケーションサーバまでメッセージが届かなかったというケースがあるかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/f507ef82-c5b0-5051-c24e-fc5ce7cbaad1.png)

そのような場合に、Device Messageのリストを取得するAPI`/devices/{id}/messages`を使って、Callbackに成功しているメッセージも含めて取得することも可能ですが、処理の複雑性も考えるとおすすめできません。
そのような場合におすすめなのは、DeviceTypesのAPIにある"Retrieve a list of callback errors"です。

#/device-types/{id}/callbacks-not-delivered
このAPIは、Callbackに失敗したメッセージのみを取得するものです。
{id}には該当デバイスが属するDeviceType IDを入れ、since,beforeパラメータによる取得時刻の範囲指定や、offsetパラメータの指定が可能です。

#動作確認
下記GETリクエストを、Basic認証付きで送ります。
`https://api.sigfox.com/v2/device-types/{id}/callbacks-not-delivered`
成功すると、200応答とともに下記ようなのJSONメッセージを取得できます。

```response.json
{
    "data": [
        {
            "deviceId": "1234AB",
            "deviceTypeId": "5c187c222564327e8xxxxxxx",
            "snr": 22.19,
            "time": 1568980330000,
            "date": "2019-09-20 20:52:10",
            "data": "0b7527bf052bffa9000403f5",
            "status": 404,
            "message": "Not Found",
            "callback": {
                "url": "https://foo.com/api/dataadvanceda",
                "headers": {
                },
                "method": "POST",
                "contentType": "application/json",
                "body": {
                    "device": "1234AB",
                    "time": 1568980330,
                    "data": "0b7527bf052bffa9000403f5",
                    "seqNumber": 110,
                    "lqi": "3",
                    "devicetype_id": "5c187c222564327e8xxxxxxx",
                    "group_id": "566ea3e09336a8059xxxxxxx"
                }
            },
            "parameters": {}
        }
    ],
    "paging": {}
}
```
`data->callback->body`を参照することにより、デバイスID、受信時刻、ペイロード他をAPIで取得することができます。
アプリケーションサーバ内のデータインテグリティを意識される方は是非お試しください。

[Sigfox Japan KCCS](https://qiita.com/organizations/sigfox)
HTML5 Shivとは

##1. HTML5 Shivとは
IE8以下やFirefox3系などの一部の古いブラウザでは、__section__や__header__といったHTML5の新しい要素タイプに対してCSSのスタイリングが行えない。

この問題を解決するのが「__HTML5 Shiv__」というJavaScriptのライブラリ。ダウンロードした__HTML5 Shiv__のjsファイルを読み込むと、IE8以下やFirefox3系などの一部の古いブラウザでもHTML5の要素タイプを利用できるようになる。


##2.　どうやって使うのか
HTML5 Shivは単体で利用することも可能だが（[html5shiv / GitHub](https://github.com/aFarkas/html5shiv)）、Modernizr（[Modernizr公式サイト](https://modernizr.com/)）の一部としてダウンロードすることもできる。

例えば、Modernizr（[Modernizr公式サイト](https://modernizr.com/)）の`modernizr.custom.min.js`内に、HTML5 Shivのコードが含まれている。
AtCoder上の構文解析問題リスト

# はじめに
AtCoderのジャッジ環境上の構文解析問題をまとめました。少しでも構文解析パートが要りそうなものであれば入れています。
出題が新しい順に並べています。手動走査なので漏れがあったら教えてください。

# 本編

- [東京工業大学プログラミングコンテスト2019 <br>**L - 多項式の零点の個数**](https://atcoder.jp/contests/ttpc2019/tasks/ttpc2019_l)
- [codeFlyer （bitFlyer Programming Contest）<br>**E - 数式とクエリ**](https://atcoder.jp/contests/bitflyer2018-final-open/tasks/bitflyer2018_final_e)
- [Maximum-Cup 2018 <br>**G - Sparrow's trick**](https://atcoder.jp/contests/maximum-cup-2018/tasks/maximum_cup_2018_g)
- [COLOCON -Colopl programming contest 2018- Final <br>**B - 異世界数式**](https://atcoder.jp/contests/colopl2018-final-open/tasks/colopl2018_final_b)
- [JAG Practice Contest for ACM-ICPC Asia Regional 2017 <br>**B - Tournament Chart**](https://atcoder.jp/contests/jag2017autumn/tasks/jag2017autumn_b)
- [Japan Alumni Group Summer Camp 2017 Day 1 <br>**E - ベクトル式**](https://atcoder.jp/contests/jag2017summer-day1/tasks/jag2017summer_day1_e)
- [Kyoto University Programming Contest 2016 <br>**F - 早解き / Speed Solving**](https://atcoder.jp/contests/kupc2016/tasks/kupc2016_f)
- [JAG Practice Contest for ACM-ICPC Asia Regional 2016 <br>**J - Compressed Formula**](https://atcoder.jp/contests/jag2016autumn/tasks/icpc2016autumn_j)
- [JAG Practice Contest for ACM-ICPC Asia Regional 2015 <br>**E - Shifting a Matrix**]
(https://atcoder.jp/contests/jag2015autumn/tasks/icpc2015autumn_e)
- [京都大学プログラミングコンテスト2015 <br>**F - 逆ポーランド記法**](https://atcoder.jp/contests/kupc2015/tasks/kupc2015_f)
- [東京工業大学プログラミングコンテスト2015 <br>**P - Dancing stars on regular expression!**](https://atcoder.jp/contests/ttpc2015/tasks/ttpc2015_p)
- [Japan Alumni Group Summer Camp 2015 Day 2 <br>**E - 坑道数式**](https://atcoder.jp/contests/jag2015summer-day2/tasks/icpc2015summer_day2_e)
- [Japan Alumni Group Summer Camp 2014 Day 4 <br>**E - AI**](https://atcoder.jp/contests/jag2014summer-day4/tasks/icpc2014summer_day4_e)
- [JAG Practice Contest for ACM-ICPC Asia Regional 2014 <br>**H - Points and Lines**](https://atcoder.jp/contests/jag2014autumn/tasks/icpc2014autumn_h)
- [JAG Practice Contest for ACM-ICPC Asia Regional 2013 <br>**F - Shipura**](https://atcoder.jp/contests/jag2013autumn/tasks/icpc2013autumn_f)
- [Japan Alumni Group Summer Camp 2013 Day 3 <br>**G - Unordered Operators**](https://atcoder.jp/contests/jag2013summer-day3/tasks/icpc2013summer_day3_g)
- [天下一プログラマーコンテスト2013予選A <br>**D - 天下一展開**](https://atcoder.jp/contests/tenka1-2013-quala/tasks/tenka1_2013_qualA_d)
- [Autumn Fest 2012 <br>**G - Bit Map**](https://atcoder.jp/contests/autumn_fest/tasks/autumn_fest_07)
- [hasi's botsuneta programming contest <br>**C - 1=0.999...**](https://atcoder.jp/contests/hbpc2012/tasks/hbpc_3)

# おわりに
洗い出してみたら思ったより多かった。Ratedで構文解析出ないかなぁ……（ﾁﾗｯﾁﾗｯ
【Swift5】実案件でやったiOS13対応

# iOS13のリリース
本日iOS13がリリースされましたね、、

毎年毎年、この時期はヒヤヒヤで、、

そんなわけで、実案件で対応した内容を共有させていただきます。

## 【対応1】 なんちゃってダークモード対応
iOS13からダークモードが導入されましたが、いくつかの画面でダークモードにすると背景が真っ黒になる現象が発生しました、、

結構ピンチと思いましたが、、暫定的な裏技があるとのことでしたので、、↓↓こちらを`info.plist`に記載すれば取り敢えずはライトモード縛りにできるとのこと

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/c48326c2-89bd-4f93-8b25-01f6dc013e0c.png)

## 【対応2】 presentViewControllerのデフォルト表示が変更

なんか画面上部に隙間ができて、後ろのViewが見えるようになってしまいました。


スワイプで画面を閉じることもできて、、戻らせたくないのに、、


っていう件の対応はこちらでした↓

```Swift:
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        segue.destination.modalPresentationStyle = .fullScreen
    }
```
【Swift】親のView, ViewControllerを取得する

# 親のViewやViewControllerを取得する方法

私はUIViewの拡張クラスを作成しています。

```Swift:UIView+.swift
import UIKit

extension UIView {
    func parentViewController() -> UIViewController? {
        var parentResponder: UIResponder? = self
        while true {
            guard let nextResponder = parentResponder?.next else { return nil }
            if let viewController = nextResponder as? UIViewController {
                return viewController
            }
            parentResponder = nextResponder
        }
    }
    
    func parentView<T: UIView>(type: T.Type) -> T? {
        var parentResponder: UIResponder? = self
        while true {
            guard let nextResponder = parentResponder?.next else { return nil }
            if let view = nextResponder as? T {
                return view
            }
            parentResponder = nextResponder
        }
    }
}
```

## 使い方

```Swift:
if let parentVC = self.parentViewController() as? 〇〇ViewController ｛

}
```
【エラー対処】npmでpermission deniedと表示される


# はじめに

Node.jsで普段どおりnpm installしようとしたところどうやらインストールできないパッケージがありました。
webpackなどはインストールできますが、特定のパッケージのみインストールできないようです。

（普段からCmd+Kで履歴を消してしまうくせがあるため、エラーメッセージが消えてしまいました。
すいません。）

# 対策法

どうやらnpmの権限が、現使用ユーザに与えられていないようです。
よって、npmの権限を強くしました。（ちょっとやりすぎな気がしますが･･･）
この方法で解決できたということはsudoなどをinstallコマンドにつければ解決できたのかもしれません･･･

```bash
sudo chown -R $(whoami) ~/.npm
```

以上のコマンドは現在使用しているユーザの権限を変更します。

chownは指定したユーザの、指定したディレクトリ・ファイルの権限を変更するコマンドです。
-Rはroot権限をもたせるというオプションです。

bashでは$(whoami)をすると自分のアカウント名が帰ってきます。
僕の場合だとganariyaというアカウントを使用しているため、whoamiというコマンドを打つと当然ganariyaと出力されます。
そして、権限を変更したいディレクトリは、ユーザのホームディレクトリにある.npmディレクトリのため、これらの権限を変更しています。


# 最後に

おそらくですが、これはあまり良くないため（npmに権限を与え過ぎなため）
後で時間のできたときに、より良いエラー対処をまとめようと思います。
ImageMagickを使って色弱シミュレートを複数画像に適用してみた

以前、「[色弱シミュレーター機能の使えるアプリを探してみた](8c4e8feb4312e38945f4)」で色弱シミュレーターできるアプリを探したことがあったのですが、ふと複数の画像をまとめてできないかな？と思ったので試してみました。

## 環境
環境は以下のとおりです。

- Lubuntu 16.04
- ImageMagick 6.8.9-9 Q16

## どうやって？
http://www.inf.ufrgs.br/~oliveira/pubs_files/CVD_Simulation/CVD_Simulation.html で値が公開されているので、その値を ImageMagick の -color-matrix オプションに指定すれば変換することができます。

複数ファイルへの適用は、ImageMagick の `mogrify` コマンドを使います。

## まずはひとつのファイル
使えば P型で 1.0 の場合なら以下のようなコマンドで変換できます。  0.152286 から 1.051998 までの 9 つの数字は、ホームページからコピペしたものとなります。

```bash:P型1.0の場合
convert sample.png -quality 100 -colorspace RGB -color-matrix '
0.152286 	1.052583 	-0.204868
0.114503 	0.786281 	0.099216
-0.003882 	-0.048116 	1.051998
' sample-p.png
```

```bash:D型1.0の場合
convert sample.png -quality 100 -colorspace RGB -color-matrix '
0.367322 	0.860646 	-0.227968
0.280085 	0.672501 	0.047413
-0.011820 	0.042940 	0.968881
' sample-d.png
```

```bash:T型1.0の場合
convert sample.png -quality 100 -colorspace RGB -color-matrix '
1.255528 	-0.076749 	-0.178779
-0.078411 	0.930809 	0.147602
0.004733 	0.691367 	0.303900
' sample-t.png
```

ちなみにファイルがひとつの場合、以下のようにすれば結果を保存することなく表示だけできます。

```bash:P型1.0の場合（表示のみ）
convert sample.png -quality 100 -colorspace RGB -color-matrix '
0.152286 	1.052583 	-0.204868
0.114503 	0.786281 	0.099216
-0.003882 	-0.048116 	1.051998
' png:- | display png:-
```


## つづけて複数のファイル

まとめて変換したい場合は、 `mogrify` コマンドが使えます。以下はフォルダ内の全 PNG ファイルを変換して out-p、out-d、out-t フォルダに保存する例です。

```bash:P型1.0の場合(一括変換)
mkdir out-p
mogrify -path out-p -quality 100 -colorspace RGB -color-matrix '
0.152286 	1.052583 	-0.204868
0.114503 	0.786281 	0.099216
-0.003882 	-0.048116 	1.051998
' *.png
```

```bash:D型1.0の場合(一括変換)
mkdir out-d
mogrify -path out-d -quality 100 -colorspace RGB -color-matrix '
0.367322 	0.860646 	-0.227968
0.280085 	0.672501 	0.047413
-0.011820 	0.042940 	0.968881
' *.png
```

```bash:T型1.0の場合(一括変換)
mkdir out-t
mogrify -path out-t -quality 100 -colorspace RGB -color-matrix '
1.255528 	-0.076749 	-0.178779
-0.078411 	0.930809 	0.147602
0.004733 	0.691367 	0.303900
' *.png
```

## 結果を並べて確認
`montage` コマンド を使うと複数の画像ファイルを並べてまとめたものをひとつのファイルにすることができます。以下は out-p フォルダ内の全 PNG ファイルを 4x4 に並べたファイルを、 out-p.png のファイル名で作成します。16 枚 （4x4=16) を超えている場合は、 out-p-0.png, out-p-1.png のようなファイル名になります。

```bash:まとめる
montage -tile 4x4 -quality 100 -geometry +1+1 out-p/*.png out-p.png
```

-resize パラメーターを使えば縮小してまとめて並べることもできます。

```bash:縮小してまとめる
montage -resize 25% -tile 4x4 -quality 100 -geometry +1+1 out-p/*.png out-p.png
```

結果を保存せずに表示だけ

```bash:結果を保存せずに表示だけ
montage -resize 25% -tile 4x4 -quality 100 -geometry +1+1 out-p/*.png png:- | display png:-
```
Pentaho Data Integration データ抽出高速化


接続タイプ：Oracle
アクセス：Native(JDBC)

上記の場合、以下のパラメータで調整。よく度忘れするのでメモ。
``defaultRowPrefetch``

自分の環境では、以下の通り改善。
3.5分で約2000万件のデータをCSV出力。
デフォルト(指定なし) = 3000r/s
2,0000設定時 = 7,0000r/s


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23140/e5ac1229-a653-bc56-21c3-b1c424217dbf.png)
【OCI】oracle cloud -アカウントの登録編-

# Oracle Cloudとは
ORACLE社が提供しているクラウドサービス
Oracle Cloud Infrastructure（OCI）

第二世代として生まれ変わったoracle cloudは
5月に東京リージョンが開設されました。

Oracle OpenWorld 2019では、
“無期限”無料利用枠「Oracle Cloud Free Tier」が発表されました。
無料利用枠の仮想マシンなど無期限で使うことができるため話題になっています。

## おススメできるポイント
料金が安い
AWSに比べてはるかに安い
働いている会社でもOCIに移転したが、サーバ代金が半額ほどになった。

仮想マシンで比べると
【OCI】
VM.Standard.E2.1(2論理CPU8GBメモリ)
月額2,678円ほど
【AWS】
t3.large(2論理CPU8GBメモリ)
月額8,893円ほど

さらにボリュームやネットワーク転送料も安い。

# アカウントの作成

下記リンクへアクセスします。
https://www.oracle.com/jp/cloud/free/

Start for freeをクリック
![account_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/ae15c127-ed77-9351-35af-c8340a76fee9.png)

利用するメールアドレスを入力
![account_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/13de7560-12d3-b55d-f746-8cf438e200cb.png)

- 会社利用の場合はCompany Use、個人利用の場合はPersonal Use
- Cloud Account Nameは他の方が利用している名前は使えない
- Home RegionはJapan East(tokyo)にしておけば東京リージョンがデフォルトで使える(他リージョンも後から使えます)
![account_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/9278f70f-eeac-c6d4-f4bb-136dfb7e3124.png)


個人情報を入力
![account_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/4a82b5c5-b935-6f5c-2067-1f8738d80a95.png)

パスワードを決める
![account_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/f236053a-3126-ed3d-861e-dcc04b182297.png)

クレジットカードの登録に入る
![account_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/7aaa4d6e-7cce-2bfa-6a41-ca4d6b1f199a.png)

クレジットカード情報を入力
![account_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/789d455d-9e9d-fa2a-b8f0-19019c4fb2b0.png)

チェックをいれてComplere Sign-Up
![account_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/1087d90d-3166-8bdc-7888-5ef25e7bd333.png)

以上で完了
あとは気長にメールを待ちましょう
※すぐにメールが来ないことがあります。翌日だったり翌々日だったり
自分の場合2通メールが届きました。
どちらかのメールのSign In to Oracle Cloudをクリック
![account_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/fdfc057d-f97a-f740-efd1-f59740b3b81d.png)
![account_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/e384a38a-3f93-be49-ed33-59b9b9477608.png)

登録する時に決めたメールアドレスとパスワードでログイン
![account_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/184fd193-34bb-f4fb-9188-0fe53463dfb7.png)



30日間は全てのサービスを約３万円分まで利用できます。
30日経過後は有料サービスは使えなくなり請求されることは無いので安心して使えます。
無料利用枠は30日間経過後も継続して使えるので無料利用枠のみ使いたい方は何も気にすることなく使い続けれます。

※有料アカウントにアップグレードしたい場合は30日間にアップグレードを行う必要があります。
忘れずにトライアル期間中にアップグレードを行いましょう
![account_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111276/653f21c0-1a67-a1ae-3cad-dfcdd3883e45.png)
heroku本番環境でoauthのログイン機能を使えるようにする

#はじめに
facebookログインとgoogleログインを実装したもののherokuにデプロイするとうまくいかなかった

#解決方法
```
 $ heroku config:set GOOGLE_CLIENT_ID='コピペする'
 $ heroku config:set GOOGLE_CLIENT_SECRET='コピペする'
 $ heroku run rails db:migrate
```
facebookも同じ方法で、うまく動きました
セキュリティ的には大丈夫なのかな？という不明点はありますが。。。![Vietnam_slang.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384804/dce62067-1971-6ad9-32f8-d3eb33d643d0.png)
SNSシェアボタンで上手くいかない時の色々な対処方法

#SNSボタンの動作がおかしい！

ウェブサイトに必ずと言っていいほど追加するSNSボタン。
だけど意外とトラブルが多く、対処法を知らないと焦ってしまいます。
この記事では、トラブルの原因を探る方法とその対処法をいくつかまとめます。

##case.1 - OGP画像が出ない＆新しい画像に切替わらない

まず「デバッカー」を試してみてみましょう。
デバッカーをすることで、metaタグの記述エラーや画像が表示されない原因など大抵の事がわかります。

▽分かる事
1. OGP画像がサーバーにアップロードされてるか？
2. metaタグの記述方法が正しいか？
3. FacebookはアプリIDが間違ってないか？

#### デバッカーを試す

URLを入れるだけで、OGPの見え方をチェック出来ちゃいます。
デバッカーはエラーを見つけるだけではなくキャッシュを最新に更新する事もできますので、OGP画像を変更した時は必ずデバッガーで確認しキャッシュクリアする癖をつけるといいと思います。

【[Facebookデバッカー](https://developers.facebook.com/tools/debug/sharing/)】
![f7e23bbc60f1f556c10968324e9cbf15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15932/cbe7ab5b-cfb7-485b-bad0-de7098a39015.png)

【[Twitterデバッカー](https://twitter.com/login?redirect_after_login=https%3A%2F%2Fcards-dev.twitter.com%2Fvalidator)】
![Twittercardvalidator.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15932/0012a5e9-3ca7-558b-5610-9bda158f0eda.png)


###Cache Bustingでキャッシュをコントロールする

更新したCSS・JS・画像のパスにGETパラメータ(クエリ文字列)を追加してみる。
「?」の後に任意の文字列を付与するとブラウザは異なるURLだと認識し、
ブラウザはキャッシュを読まずに、更新されたファイルを新たに読みに行きます。

```
https://xxxxxx.jp/poster.jpg?v=4
```

追加できる文字列は下記のようなものでも可です。

更新日時/現在日時 (例：src=”style.css?date=201901301000″)
バージョン (例：src=”style.css?ver=1.0.1″)
ランダムな数値 など


#### それでも解決しない場合

ソースコード側に何かしらのエラーは無いか疑ってみよう。

【[W3C Markup Validation Service](https://validator.w3.org/)】
World Wide Web Consortium (W3C) によって作られた、HTML文書がHTMLやXHTML標準へ準拠しているかどうかを検証するためのサービス
![a6fdf9c6ffec84b21a44417bccf7ab51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15932/86461371-e56b-03ad-75e4-fa977f0f9d03.png)


##case.2 - テストサイトでボタンが表示されない

htascessでパスワードつけたテストサイトだと、
何故かボタンが表示されたりされなかったりする事良くあります。
多分CSS側でボタンの幅と高さを指定したら表示されるはず。


##case.3 - 今まで表示出来てたのにボタンが消えてしまった

記述方法が変更になってるかもしれません。
FacebookやTwitterはころころ仕様を変えるのでアップデート情報をチェックしよう。
それでも無ければSNS側のサーバーが原因で一時的に見えなくなっているだけな事も多いので少し時間を置いて待ってみよう。
Modernizr（モダナイザー）とは

##1. Modernizr（モダナイザー）とは
JavaScriptやCSSを書いていると「新しい機能が使えるブラウザではそれを使い、そうでない場合は別の手段で代替する」というように、処理を分岐させたい場合がある。

Modernizr（モダナイザー）とは、そういった「機能検出」のためのJavaScriptライブラリ。

このライブラリを使用すると、各ブラウザが特定の機能をサポートしているかどうかを判定し、その結果によって条件を分岐させることができる。


##2. どうやって使うのか

Modernizr（モダナイザー）のソースコードは、[Modernizr公式サイト](https://modernizr.com/)から必要な機能に絞ってダウンロードできる。


###2-1. JavaScriptの場合
例えば、JavaScriptのタッチイベントが使えるか否かを知りたい場合は、公式ダウンロードページで「Touch Events」の項目にチェックを入れてファイルをダウンロードし、読み込む。

これだけの手順で、必要な機能検出が行えるようになる。

▼JavaScriptでは、Modernizr.touchというプロパティを利用して処理を分岐できる。

```js:Modernizrを使用したスタイルの分岐例
if(Modernizr.touch) {
	// タッチイベントが利用できる場合の処理
} else {
	// タッチイベントが利用できない場合の処理
}
```


###2-2. CSSの場合
▼CSSの場合、タッチイベントをサポートしているブラウザであれば「touch」、そうでない場合は「no-touch」というクラスがhtml要素に追加されるので、これをもとにスタイルを分岐できる。

```css:Modernizrを使用したスタイルの分岐例
.thumb {
	/*デフォルトのスタイル*/
}

.no-touch .thumb {
	/*タッチイベントが利用できない場合のスタイル*/
}
```

##3. JavaScriptが無効になっている場合を考慮する
せっかくJavaScriptやjQueryで、フェードイン、フェードアウトなどの動きを実装しても、ブラウザのJavaScriptが無効になっていると何も表示されない。

この問題を解決する方法として、Modernizr（モダナイザー）を使用した方法を考える。
（Modernizr = __ブラウザのJavaScriptが有効かどうか__を判定するもの。）


###3-1. no-jsの指定
```html:main.html(no-jsの指定部分)
<!DOCTYPE html>
<html class="no-js" lang="ja">
<head>
<!-- 省略 -->
```
Modernizrには「html要素にno-jsというクラスがあった場合、このクラスを削除し、代わりにjsというクラスを追加する」機能がある。

=> __html要素にjsクラスがあればJavaScriptが有効、no-jsクラスがあれば無効。__

###3-2. JavaScriptの有効・無効による処理の切り分け

```css:main.css(JavaScriptの有効・無効による処理の切り分け部分)
/*デフォルト（JavaScript 有効時）*/
.slideshow img {
	display: none;
	/*省略*/
}

/*JavaScript 無効時*/
.no-js .slideshow img:first-child {
	display: inline;
}
```
1. まず、JavaScriptが有効である前提でスタイルを書く。
=> JavaScriptが有効ならスライドがフェードインする。

2. 次に、JavaScriptが無効の場合のスタイルを追加する。
=> JavaScriptが無効なら最初のスライドがそのまま表示されることになる。
Please use LAMMPSRUN.set() への対処法

#はじめに

Atomic Simulation Environment (ASE)のバージョンを更新したら，
'''
srun.py:190: UserWarning: You are using an old syntax to set 'parameters'.
Please use LAMMPSRUN.set().
  warnings.warn(self.legacy_warn_string.format("parameters"))
'''
という警告が出たので，調査しました．


#原因

[ASEのlammpsrunのソースコード](https://wiki.fysik.dtu.dk/ase/_modules/ase/calculators/lammpsrun.html)を読むと，legacy_parametersという変数が見つかる．
legacy...と思いながら対応する箇所を探すと，

```python
        if "parameters" in kwargs:
            old_parameters = kwargs["parameters"]
            if isinstance(old_parameters, dict):
                warnings.warn(self.legacy_warn_string.format("parameters"))
                del kwargs["parameters"]
        else:
            old_parameters = None
        
        Calculator.__init__(self, label=label, **kwargs)
        
        if old_parameters and isinstance(old_parameters, dict):
            self.set(**old_parameters)
```

というコードが見つかる．
つまり，LAMMPSを呼び出す際に

```python
LAMMPS(parameters=params)
```
等としていたのが問題で，

```python
calculators = LAMMPS(parameters=params)
calculators.set(**params)
```

等としてあげれば，警告が表示されなくなります．
2回partialしたときにviewにローカル変数を渡す方法

#はじめに
2段階でpartialされているコードに触れる機会があった

#2回partialされているコードでローカル変数を渡す
@usersというインスタンス変数がある

```index.html.slim
=render partial: 'admin/users/list', locals: { users: @users }
```
```_list.html.slim
=render partial: 'admin/users/member', locals: { users: users }
```
index.htmlのlocalsでは@usersをusersというローカル変数へ
_list.htmlではusersというローカル変数をさらにローカル変数としています。


#partial先でローカル変数を使う
index.htmlでユーザー一覧を表示したいとき

```_member.html.slim
 tbody
    - users.each do |user|
      tr
        td= user.user_name
        td= user.user_email
```
usersの部分は普段なら@usersですが、usersで表示できます
ロウソク足・出来高チャート、移動平均線を作図する

# 開発環境
- python==3.7.9
- pandas==1.1.4
- matplotlib==3.3.3
- numpy==1.19.2

# 概説
こちらの[サイト](https://kabuoji3.com/stock/)から株価のデータをダウンロードしました。
今回はソフトバンクを使用しました。使用期間は、1998年~2019年です。

```
- prg
    - main.py
- Graph
    - 9984_1998.png
    ・・
    ・・
    - 9984_2018.png
- csv
    - 9984_1998.csv
　　　　　　　　・・
    ・・
    - 9984_2018.csv
```

# ソースコード

```python:main.py
import pandas as pd
import matplotlib.pyplot as plt
from mpl_finance import candlestick2_ohlc,volume_overlay
import numpy as np

def SMA(signal):#移動平均線
    k = 0
    SMA = []
    for rp in range(signal):
        SMA.append(0)
    while True:
        sma = []
        for r in range(signal):
            s = df.loc[k+r,4]
            sma.append(s)
        sma5 = sum(sma)/len(sma)
        k += 1
        if k == len(df)-(signal-1):
            break
        SMA.append(sma5)
    return SMA

f = 1998
for f in range(1998,2020,1):
    df = pd.read_csv('../csv/9984_'+str(f)+'.csv',header=None)
    df['SMA5'] = SMA(5)
    df['SMA25'] = SMA(25)
    df['SMA75'] = SMA(75)
    df = df.replace(0, np.nan)
    
    plt.rcParams['figure.figsize'] = 30,7
    fig = plt.figure(figsize=(18, 9))
    ax = plt.subplot(1, 1, 1)
    candlestick2_ohlc(ax, df[1],df[2],df[3],df[4],width=0.9,colorup="b",colordown="r")
    plt.tick_params(labelbottom = False,bottom = False)
    plt.title('SoftBank_'+str(f)+'_Chart')
    plt.plot(df['SMA5'],label = 'SMA5',color = 'dodgerblue')
    plt.plot(df['SMA25'],label = 'SMA25',color = 'brown')
    plt.plot(df['SMA75'],label = 'SMA75',color = 'darkgreen')
    ax.set_xlim([0, df.shape[0]]) 
    ax.set_ylabel("Price")
    bottom,top = ax.get_ylim()
    ax.set_ylim(bottom-(top-bottom)/4,top)
    ax2 = ax.twinx()
    volume_overlay(ax2,df[1], df[6], df[5], width=1, colorup="g", colordown="g")
    ax2.set_xlim([0, df.shape[0]])
    ax2.set_ylim([0,df[5].max()*4])
    ax2.set_ylabel("Volume")
    plt.tight_layout()
    plt.savefig('..//Graph//9984_'+str(f)+'.png')
    plt.close()

```
画像は、以下のような感じになります。
# 出力結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407666/b23a18f8-4d24-0ac8-47f7-13f43b4874f1.png)
Normalize.cssとは

##1. Normalize.cssとは

ブラウザごとのCSSのデフォルトのスタイルの違いを吸収するための、CSSライブラリ。

以前までよく使用されていた「CSSリセット（全てのデフォルトスタイルの無効化）」とは異なり、これは調整の必要なバグや実装差異を「__平準化__」するというポリシーで作成されているそう。

現在、多くのプロジェクトで採用されている。


###2. Normalize.cssの使用方法
使用方法は、提供サイトからダウンロードして読み込むだけで、各機能を自身のWebページに取り入れることができます。

[Normalize.css / 公式GitHub](https://necolas.github.io/normalize.css/)
#bitbucket の 「このプル リクエストに注目」 ( Watch Pull Request ) の一覧は Dashboard > PullRequest > Watching のフィルタにあり

# レポジトリを問わずにウォッチ中のPR一覧を確認できるっぽい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/4e8c0fcb-293b-fb2e-430e-712552c2cf9e.png)

https://bitbucket.org/dashboard/pullrequests?section=watching



# 設定の深いところでも管理できる

![image](https://user-images.githubusercontent.com/13635059/65312031-a59f4280-dbcc-11e9-8d11-577b9e6eeecd.png)


# Original by Github issue

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
seedデータの入力方法【bcrypt gem追加時】

#はじめに
seeds.rbでseedデータを投入したいけど
gem bcryptを追加しててモデルに`has_secure_password`書いてるなーってとき

#入力方法
```seeds.rb
User.create
(user_name: 'テストユーザー', 
user_email: 'test@test123', 
password: 'password', 
password_confirmation: 'password', 
created_at: "2019-07-11 02:33:34", 
updated_at: "2019-07-11 02:33:34")
```

カラムでは`password_digest`ですが、`seeds.rb`に書くときは

```
password: 'password', 
password_confirmation: 'password', 
```

この二つを指定することで無事パスワードが入力され、ハッシュ化もできました。
同一テーブル内でのリレーションの書き方

<h1>やること</h1>
同じテーブル内でのリレーション？なるものを実装したので備忘録

<h1>環境</h1>
- Laravel5.8
- Docker
- MySQL 8.0

<h1>内部リレーションとは</h1>
あるテーブルのあるカラムの親となるカラムが同じテーブルに存在する時のこと。
例としてTwitterのようなアプリで女子高生たちが会話していると考えます。


バカ:今からスゴイこと言ってイイ？
　　↪️オタ:いいから早く言え
　　↪️バカ:諦めたらそこで試合終了じゃね？
　　↪️ロボ:すごいと思う。すでに試合終了してるのにそのセリフに感動できるあたり。


↪️はリプだと考えてください。

この情報を管理するためにはusersテーブルとcommentsテーブルが必要です。そこでそれぞれを以下のように設計します。

usersテーブル

| id   | name |
|:-----|-----:|
| 1    | バカ | 
| 2    | オタ|
|3     |ロボ

commentsテーブル

| id   | user_id| comment                  | parent_id|
|:-----|---------:|:-----------------------:|:-------------:|
| 1    |     1    | 今からスゴイこと言ってイイ？    |null|
|2     |    2     |いいから早く言え             |1|
|3     |   1      |  諦めたらそこで試合終了じゃね？|1|
|4     |3         |すごいと思う。すでに試合終了してるのにそのセリフに感動できるあたり。|1|

<b>どのコメントにコメントをしたのか</b>を表すのが`parent_id` です。

リレーションはこんな感じで書きます。

```Comment.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    protected $guarded = ['id'];

     public function parentComment()
    {
        return $this->hasOne(Comment::class, 'id', 'parent_id');
    }
}
```

`parentComment()`は子カラムの親カラムを探す、というメソッドになっていて、第一引数に参照するモデル(テーブル)、第二引数には外部キー、第三引数には子カラムのリレーションキーを書きます。

これでどのコメントにコメントしたかをリレーションで表現できるようになります！

<h1>最後に</h1>
以前記事にしたClosureTableをEagerloadしたいときに、もし１つ上の親だけを取ってくるならこの方法で呼び出しできるようになります。
[ClosureTableを使って〇〇年のアニメを季節ごとに1テーブルで管理する](https://qiita.com/maip0902/items/6e359ac7271137680ecf)
今回の場合、EagerLoadするなら

```
Comment::with('comment.parentComment')->get()
```

でとることができます！

(with使っても複数リレーションするとクエリが亀になってしまうけど。。。)
[随時更新予定]ユースケース別Bigqueryの権限付与パターン

## これなに
BQの権限付与で毎回どれつければいいんだっけ？となるのでこの機会にまとめてみることにした。
(ドキュメント読んでもよくわからないし。。。)
※以下は全て手作業で確認してるので、もしかしたら漏れがあるかもしれません。ご容赦ください


## case1: 特定のデータセットだけ閲覧・検索させたい
これが一番よくあるパターンだと思う。
特にBQはテーブル単位で権限が付与できないので共有用のデータセットを作ってそこに見せたいテーブルのviewを作るということがあるが、**viewテーブルの場合のみ承認済みビューを登録するという一手間が発生するので注意**


### 設定方法

１. IAMで `BigQuery ジョブユーザー` を付与

<img src="https://gyazo.com/406aa258470891df20a8a11342c61120.png" width=30%>

２. 共有データセットで `BigQuery データ閲覧者`を付与
<img src="https://gyazo.com/af4944343e03b2b70acd88c4b2f233d0.png" width=70%>
<img src="https://gyazo.com/5920db8882f186f473d866876e189be2.png" width=50%>


**※(viewテーブルを許容したい時のみ必要) 作成したviewを承認済みviewに登録する**
viewの元テーブルが格納されてるデータセットを押下し `共有データセット` → `承認済みのビュー` を選択し、viewを保存したデータセットとviewテーブルを選択。
<img src="https://gyazo.com/135fefac21177713ec164e7e828b4a25.png" width=50%>




### こうなる
- できること
    - 指定したデータセット配下テーブルのスキーマとプレビューの閲覧
    - 指定したデータセット配下テーブルへのselect文の発行
- できないこと
    - 指定したデータセット以外へのアクセス
    - テーブルのスキーマの編集
    - SQLの結果をBQテーブルとして指定したデータセット配下へ保存(viewもNG)
    - insert,update,delete文の発行


## case2: プロジェクト配下全てのテーブルを閲覧・検索させたい
BQ適当に見ていいけどデータの変更だけは間違ってもさせたくない時。
以下のできないことにも書いてるがSQLの結果をBQテーブルに保存ができないので、例えば
大容量のデータを一旦テーブルに書き出してからGCSにあげて落とすみたいなことは当然できない。

### 設定方法
・IAMで以下の権限をを付与
　　・`BigQuery ジョブユーザー`
　　・`BigQuery データ閲覧者`
### こうなる
- できること
    - プロジェクト配下のテーブルのスキーマとプレビューの閲覧
    - プロジェクト配下のテーブルへのselect文の発行
- できないこと
    - テーブルのスキーマの編集
    - SQLの結果をBQテーブルとしてへ保存(viewもNG)
    - insert,update,delete文の発行
VST3 ホストを作ろう　〜目次〜

* [VST3ホストを作ろう（１） 〜はじめに〜](https://qiita.com/hotwatermorning/items/30d34556b3ad7f065110)
* [VST3ホストを作ろう（２） 〜サンプルホストについて〜](https://qiita.com/hotwatermorning/items/a9f14fb1b25d4cb4a4f0)
* [VST3ホストを作ろう（３） 〜VST3 SDK 入門〜](https://qiita.com/hotwatermorning/items/adf71e8a5b1a701ca585)
* [VST3ホストを作ろう（４） 〜VST3 SDK のドキュメントについて〜](https://qiita.com/hotwatermorning/items/1015406ca955f11bf43d)
* [VST3ホストを作ろう（５） 〜VST3 SDK のライセンスについて〜](https://qiita.com/hotwatermorning/items/76fe2efd147d8bf78c95)
* [VST3ホストを作ろう（６） 〜VST3 プラグインのファイル構造について〜](https://qiita.com/hotwatermorning/items/e97089c12f5c4c542226)
* [VST3ホストを作ろう（７） 〜VST3 プラグインのインストールディレクトリについて〜](https://qiita.com/hotwatermorning/items/6a50a5f7ba73f49dd624)
* [VST3ホストを作ろう（８） 〜モジュールとプラグインの構造について〜](https://qiita.com/hotwatermorning/items/86c255aa874705c56453)
* [VST3ホストを作ろう（９） 〜VST-MA の概要〜](https://qiita.com/hotwatermorning/items/efe9be3934c6863b2a3b)
* [VST3ホストを作ろう（１０） 〜インターフェースとコンポーネントのクラス定義〜](https://qiita.com/hotwatermorning/items/17beecebaf833ed7407d)
* [VST3ホストを作ろう（１１） 〜VST-MA の作法〜](https://qiita.com/hotwatermorning/items/7eaba9a544a361e17d42)
* (To be continued)
新卒1年目でも分かる！　DDDに効率的に入門する方法をまとめてみた

# 概要
新プロダクトの開発において、ドメイン駆動設計（DDD: Domain Driven Design）の採用が決まり、その管理を主に担当することになりました。その過程で0からどのように学んでいくと効率的かについて考えたことをまとめます。

# 効能
 - DDDを始める際に効率的に学習することができます。
 - 具体的に手順をイメージしながらDDDに取り組むことができます。 

# 手順
###1. PDFを読む [Domain Driven Design（ドメイン駆動設計） Quickly 日本語版](https://www.infoq.com/jp/minibooks/domain-driven-design-quickly/)
- 下で紹介しているエヴァンスの本の要約したようなもので読みやすいです。

###2. 参考になるサイトを参照してイメージを膨らませる
- 具体的にどのようにモデリングしていけばいいのかのイメージを膨らませるために、レイヤーアーキテクチャーについて詳しいものや具体例の分かりやすいサイトを参考にします。

[新卒にも伝わるドメイン駆動設計のアーキテクチャ説明[DDD]](https://little-hands.hatenablog.com/entry/2018/12/10/ddd-architecture)
[[DDD]ドメイン駆動 + オニオンアーキテクチャ概略](https://qiita.com/little_hand_s/items/2040fba15d90b93fc124)
[ドメイン駆動で開発する ラフスケッチから実装まで](https://www.slideshare.net/masuda220/ss-67985065)

###3. ドメインモデルを構築する
- 上記のサイトなどを参考にドメインモデルをコンテキストごとに作成します。

###4. ユビキタス言語をモデルから抽出する
![スクリーンショット 2019-09-20 19.05.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146971/91e691fc-4012-f2e7-0529-1ab7f526f840.png)

- ドメインモデルで登場した言語をスプレッドシートなどに、日本語・英語（実装の際に必要）・意味・代替案などの項目を列挙していきます。
- ユビキタス言語をまとめた表はモデルの変更や、サービスの精査に伴って単語の定義を変更した場合に、更新していきます。
 
###5. ドメインモデルをコードに落とし込む・改善を続ける
- ここはまだ経験中です！

# まとめ
新卒1年目の自分でもDDDを理解して実践していけるような手法をご紹介しました。方法を身につけた上でしっかりと経験を積んでいければと思います。


  


**(疑問がある場合、より詳細に知りたい場合)**
適宜有名なDDDの本を読む『[エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)] (https://www.amazon.co.jp/%E3%82%A8%E3%83%AA%E3%83%83%E3%82%AF%E3%83%BB%E3%82%A8%E3%83%B4%E3%82%A1%E3%83%B3%E3%82%B9%E3%81%AE%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88-Architects%E2%80%99Archive-%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA%E3%81%AE%E5%AE%9F%E8%B7%B5-%E3%82%A8%E3%83%AA%E3%83%83%E3%82%AF%E3%83%BB%E3%82%A8%E3%83%B4%E3%82%A1%E3%83%B3%E3%82%B9/dp/4798121967/ref=pd_lpo_sbs_14_img_0?_encoding=UTF8&psc=1&refRID=XZVC28N9T6BCRZ3WS0TY)』、『[実践ドメイン駆動設計 (Object Oriented SELECTION)](https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88-Object-Oriented-SELECTION-%E3%83%B4%E3%82%A1%E3%83%BC%E3%83%B3%E3%83%BB%E3%83%B4%E3%82%A1%E3%83%BC%E3%83%8E%E3%83%B3/dp/479813161X/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88&qid=1568972152&s=books&sr=1-2)』
(※私は最初にエヴァンスの本を読んだのですが、なかなかとっつきずらく読み進めるのに時間がかかったため、上記の手順をおすすめします。ぜひご感想をお聞かせください。)

# 工夫点
- エヴァンスの本が難解なため、辞書的・補助的な役割で活用するという方法を提案しています。
- ドメインモデルを作成する際に具体的なイメージが湧かないとやりづらいため、具体例の多いサイトを紹介しています。
- ユビキタス言語の管理についてはチームで共有のスプレッドシートを用いて変更や追加の際にコメントをつけてもらってやっていますが、最適かはまだ分かりません。
Rectifying Classifier Chains for Multi-Label Classification

## 0. 論文
Rectifying Classifier Chains for Multi-Label Classification
https://arxiv.org/abs/1906.02915

## 1. どんなもの？

## 2. 先行研究と比べてどこがすごい？

## 3. 技術や手法のキモはどこ？

## 4. どうやって有効だと検証した？
データ
対戦相手：
評価指標：


## 5. 議論はある？

## 6. 次に読むべき論文は？

## 7. メモ

### abstract
Classifier chainsが提案されました．
トレーニングとテストで使用される特徴空間の不一致を分析します．
2つの修正を提案した．

### 1. Introduction
過去数年間、マルチラベル分類（MLC）が機械学習コミュニティで注目を集めている．
ラベル間の統計的依存関係をモデル化して活用しないと最適な予測パフォーマンスを達成できないという考えがある．
ラベルに関連性がある場合，同時に予測する必要がある．
ラベルの依存性を捉えるための方法は2種類に分類できる．
(1) サブセットのサイズ
(2) ラベル依存のタイプ
CCは、通常、アンサンブルフレームワークで使用される場合に特に優れたパフォーマンスを発揮する．

研究目的は，CCの学習プロセスをより深く理解すること．

分類器は、前のラベルの真の値を含む「クリーン」なトレーニングデータで学習されますが、真のラベルを含む「ノイズの多い」テストデータに適用されますおそらく不正確な予測に置き換えられます。明らかに、このタイプのノイズは、チェーン内の各分類器のパフォーマンスに影響を与える可能性があります

### 2. Related Work


### 3. Multi-Label Classification

### 4. Classifier Chains
MLCの問題に取り組むための最も簡単なアプローチは、バイナリ関連性（BR）学習．

### 5. Attribute Noise in Classifier Chains
CCの学習プロセスは、教師あり学習の主要な前提を違反している．
つまり、トレーニングデータとテストデータの分布が同じという前提に違反している．
言うまでもなく，$y_j$と$\hat{y_j}$は同じ分布に従うとは限らない．

問題点
ラベル$y_1,...,y_{j-1}$を追加属性として使用する分類器の観点から属性ノイズの問題とみなすことができる．
→具体的に，「綺麗なトレーニングデータとノイズの多いテストデータ」の問題
この問題は[[27]](https://link.springer.com/article/10.1007/s10462-004-0751-8)の4つの問題のうちの1つであるといえる．

この問題に答えることは次の4つの要因から困難．
(1) チェーンの長さ・・・チェーンの分類子の数が多いほど属性ノイズの潜在的なレベルは多くなる．
(2) チェーンの順序・・・チェーンの最初に単純なラベルを配置して，後半でより硬いラベルを配置すると有利
(3) binary classifierｓの精度・・・あとで確認．
(4) ラベル間の依存関係・・・ラベルの依存関係がない場合、CCは（BRと比較して）獲得できない．

上記の問題を説明するための2つの実験研究を紹介します。
これまでの議論とこれらの実験に基づいて、CCの2つの修正を次のセクションで紹介する．

#### 5.1 First Experiment
直観は、テスト段階の属性ノイズがチェーン全体にエラーの伝播を引き起こし、それによってチェーン内の位置に応じて分類器のパフォーマンスに影響を与える．
具体的には、チェーンの最初の分類子は、最後の分類子よりも体系的に優れたパフォーマンスを期待している．

<img width="723" alt="スクリーンショット 2019-09-22 0.55.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206657/8412a2c1-ce91-b75d-64aa-62c63dd55962.png">
チェーンを組むことで精度が悪くなっている．

#### 5.2 Second Experiment
2番目の実験は，ラベル依存性の影響を分析するためにsynthetic setupを使用する．

### 6. Nested Stacking

#### 6.1 Stacking versus Nested Stacking
StackingのアイデアはGodboleとSharawagiに使用されている[[12]](https://link.springer.com/chapter/10.1007/978-3-540-24775-3_5)
#### 6.2 Out-of-Sample versus Within-Sample Training
#### 6.3 A First Experiment
#### 6.4 Subset Correction
### 7. Nested Stacking versus Classifier Chains
このセクションでは、NSとCCをサブセット補正ありとサブセット補正なしで比較する
ロジスティック回帰を基本学習機として用いる．
目標は、結果にバイアスをかける可能性のある他の要因の影響を受けずに、CCとNSの動作を研究することです。
CCの主な目標は条件付きラベルの依存関係を検出すること

統計的有意性を確立するために、ペアのt検定を使用

サブセットの修正はサブセット0/1の損失に対して最も有益であり、ハミング損失に対してはあまり有益ではない

### 8. Conclusion
この論文では，マルチラベル分類のための分類子チェーンメソッドを批判的に検討した．

結果は、エラー伝播の問題は非常に重要であり、CCのパフォーマンスを大きく損なう可能性があることを示している．

future work
* 我々の主張を裏付ける有意義な理論的結果によってこの研究を補完すること
* CCの確率的変形にどの程度適用されるかを調査すること
* サブセット修正のアプローチの調査
Ruby 2.7 で private メソッドが self. 付きで呼び出せるようになる

[ブログ記事](http://secret-garden.hatenablog.com/entry/2019/09/20/190034)からの転載です。

Ruby 2.7 で private メソッドが `self.` 付きで呼び出せるようになる予定です。

* [Feature #16123: Allow calling a private method with `self.` - Ruby master - Ruby Issue Tracking System](https://bugs.ruby-lang.org/issues/16123)
* [Feature #11297: Allow private method of self to be called - Ruby master - Ruby Issue Tracking System](https://bugs.ruby-lang.org/issues/11297)
* [[Feature #16123] calling private methods with `self.` by nobu · Pull Request #2474 · ruby/ruby · GitHub](https://github.com/ruby/ruby/pull/2474)


### Ruby 2.6

```ruby
class X
  def hoge
    # Error
    # private method `value' called for #<X:0x0000561963d99e78 @value=42> (NoMethodError)
    self.value
  end

  private

  def value
    42
  end
end
```

### Ruby 2.7

```ruby
class X
  def hoge
    # OK
    self.value
  end

  private

  def value
    42
  end
end
```

もちろん `self.` 以外のレシーバで呼び出した場合は依然としてエラーになります。

```ruby
class X
  private

  def value
    42
  end
end

# Error
# private method `value' called for #<X:0x0000561963d99e78 @value=42> (NoMethodError)
p X.new.value
```

個人的にはそこまで必須ではないんですが、変数名と同じ名前の private メソッドを呼びたい場合に便利かなあって感じですかねえ。
あとは `self.value = 42` ってかけるのに `self.value` ってかけないのはなんか統一感がない気はしていたのでそういう意味ではいいんじゃないですかねー。
2019-09-20 Microsoft Edge > PDFファイルが真っ白になる > サポートされてない?

```txt:動作環境
Windows 10 Pro (64bit) バージョン v1903
Microsoft Edge 44.18362.329.0 
```

### やろうとしていたこと

PDF v1.7の文書を自分で作成する。
それをEdge, Chrome, Firefox, Acrobat Readerなどで閲覧する。

Edgeだけ真っ白になる。
Edge以外は正常に表示される。

### 参考1

- [詳細PDF入門 ー 実装して学ぼう！PDFファイルの構造とその書き方読み方](https://itchyny.hatenablog.com/entry/2015/09/16/100000)
    - by itchynyさん
    - 情報感謝です

こちらにある`hello-out.pdf`のオブジェクト5番目をhello-graphics.pdfの内容に書き換えました。

### 参考2

- [Microsoft Edgeが対応しているPDF規格について](https://answers.microsoft.com/ja-jp/edge/forum/all/microsoft/fbfd37f3-0a48-43ca-863b-e5a671c84b70)

こちらにある回答のリンク先のPDF資料を見ると、サポートされていない機能がいくつも見られます。

上記で実施したPDFもサポートされていないためか、真っ白になるようです。
Kubernetes 1.16: SIG-Auth の変更内容

## はじめに

このページではKubernetes v1.16におけるSIG-Authに関連する取り組みをまとめています。

:pencil: がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。

## Deprecations and Removals (廃止および削除）

- kube-apiserver
  - `--basic-auth-file` フラグとそのモードが廃止予定となり、将来削除されます。また、このモードの本番環境での利用は非推奨です。([#81152](https://github.com/kubernetes/kubernetes/pull/81152), [@tedyu](https://github.com/tedyu))
    - :pencil: https://kubernetes.io/docs/reference/access-authn-authz/authentication/#static-password-file 


## Notable Features(注目機能)
#### Misc

- Azure Cloud ProviderでAADとADFSの両方がサポートされるようになりました。([#80841](https://github.com/kubernetes/kubernetes/pull/80841), [@rjaini](https://github.com/rjaini))
  - :pencil: ADFSのサポートが追加されたようです。

## その他の注目機能 (Other notable changes)

- ServiceAccountトークンのヘッダ部にkidパラメータが含まれるようになりました。 ([#78502](https://github.com/kubernetes/kubernetes/pull/78502), [@ahmedtd](https://github.com/ahmedtd))
  - :pencil: `kid`により鍵がローテーションされている場合、そのJWT(SAトークン)に署名した鍵ペアを見つけるのが用意になります。

- ServiceAccountトークン内に`nbf (not before)` claim が含まれている場合には現在時刻がnbfの値よりも経過していることを確認します。 ([#81413](https://github.com/kubernetes/kubernetes/pull/81413), [@anderseknert](https://github.com/anderseknert))
  - :pencil: `nbf`についてはこちら https://openid-foundation-japan.github.io/draft-ietf-oauth-json-web-token-11.ja.html#nbfDef
goのDynamoDBラッパーライブラリ、dynamoはDAXでも使える?

表題が全てなので、コードだけのせます

``` go
import (
	"github.com/aws/aws-dax-go/dax"
	"github.com/guregu/dynamo"
)

func main() {
	cfg := dax.DefaultConfig()
	daxClient, err := dax.New(cfg)
	if err != nil {
		return nil, err
	}

	dynamo.NewFromIface(daxClient)
}
```

(cfgには本来エンドポイントなど指定する必要がありますが、コンパイルが通ることを示したいだけなので無視してください)

dynamoにはNewFromIfaceというコンストラクタ関数があり、dynamodbiface.DynamoDBAPIインターフェイスを引数にとります。
dax.Newで返るDAX構造体のポインタはこのインターフェイスを満たしているために、コンパイルが通るという話です。

表題が?で終わっているのは、まだ実際にDAXに向けて叩いてないから。(大丈夫だったら表題修正します)

誰かやってる人いるだろうと思ったけど、見つからなかったので共有。

## PS

ローカルで動くDAXが欲しい
SESからwebエンジニアに転向して感じたこと

# はじめに
SESからweb業界に移って２年が経ちました。
ちょうどいい機会なので、SESから移ってきて僕が感じたことをつらつら書いていこうと思います。
先に断っておくと、僕がSIerとして働いていた現場は金融系のかなりお堅い現場だったので、全てのSESの方が当てはまるような内容ではないと思います。

## 圧倒的ゆるさ
何と言ってもまずはこれ。
エンジニアとは名ばかりのExcelサラリーマンだった僕は圧倒的カルチャーショックを受けました。
音楽聞いたり動画見ながら仕事をしたり、時には仕事中にゲームをしてたり・・とかなり最初は衝撃を受けましたが、
よく捉えれば自分のペースで仕事ができてるってことなので、まぁきっとベストパフォーマンスは出ているんでしょう。多分。


## 開発速度の早さ
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">日本のSIer半端ないって！あいつら半端ないって！<br>ウォーターフォールで1年後2年後の予定を日単位で決めるもん！<br>そんなん出来ひんやん普通！<br>そんなん出来る？<br>言っといてや要件定義変えるんやったら！</p>&mdash; 御坂@webエンジニア (@infr_0329) <a href="https://twitter.com/infr_0329/status/1010096534820536320?ref_src=twsrc%5Etfw">June 22, 2018</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
ウォーターフォール開発の宿命といいますか、とにかく開発速度が遅いです。
サーバーを構築するのに余裕で半年とかかけちゃいます。
今はボタンぽちーでCIが全部やってくれるからその差は歴然ですよね。うさぎとミジンコです。
やって思いますが、ウォーターフォールといえどアジャイルとそんなに品質は変わんないです。

## 技術に対する考え方
それはもうレガシーな現場でした。
モダンな技術なんて全くないです。僕が現場にいた４年間で一番のビックモダンイベントはRHEL6→7へのverupだけでした()モダンでもなんでも無いですが。
これは金融システムの特性上仕方ないことなのですが、「モダンな技術を取り入れるよりレガシーな技術をより磨いて安定稼働させていく」という思想だからです。
あまりにじっくりコトコト煮込みすぎて成熟したレガシー環境の中に僕はいたので、web業界に来たときはまるで別世界に来た感覚でした。


## 技術へのハードル
ある日こんなことがありました。

僕松 < 「こんな技術を取り入れてみたいんやけど」
上司松 < 「まずは提案資料を書いて。それにアレとアレを書いてそれからqあwせdrftgyふじこlp・・・をパワポにまとめて」

／(^o^)＼

僕は諦めました。
ただでさえ残業だらけで忙しいのにそんなところに時間をかけたくないわけです。

この辺のハードルの高さの意識が根付いてるせいで、今も何かを勉強する時に手より先に頭が動いてしまいます。これが結構致命的で、本当に治したい癖でもあります。
気になったなら絶対先に手を動かしたほうがいいです。


## コミュニケーションの壁
SES時代のコミュニケーション手段はメールonlyでした。
どんなちょっとの会話でも「○○さん　お疲れ様です、○○です。」と枕詞に置かなければ行けなかったので気軽にメールが飛ばせるような雰囲気ではなかったです。
今はSlackを使用してコミュニケーションを取ってますが、Chatのいいところは何と言っても気軽にコミュニケーションが取れることだと思ってます。
隣が席どうしなのにChatで会話したり、最初は理解できなかったですが今ではそれもまた心地がいいなんて思っちゃってる自分がいます。


## まとめ
SESもいい部分はもちろんあるとは思いますが、自分はWebの方が性に合ってるなーって思いました。
何より技術に向かってる時の楽しさが段違いです。SIerの頃はほとんどの時間Excelと向き合ってましたから。
Github Actionsで他リポジトリをCloneする

# 概要
- 複数のリポジトリでGithub Actions内の処理を共通化をしたい
- 他リポジトリで管理してクローンすればいいんじゃね？
- 一工夫必要なのでその方法です

# 完成品
```yaml
name: CloneTest

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v1
    - name: Clone another repository
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: |
        git clone https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/tkada/UnityEquirectRenderer
```


この例ではpublicリポジトリですが、アクセス権さえあればprivateリポジトリでもクローンできます

publicリポジトリしかクローン出来ないようです・・・

# 解説
最初は単純に
`git clone https://github.com/tkada/UnityEquirectRenderer.git`
とやったのですが、拒否られてしまいました

アクセストークンでクローンできるらしいので
`git clone https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/tkada/UnityEquirectRenderer`
としてみましたがこれでもダメでした。

実は、`GITHUB_TOKEN`の環境変数を使う際はその前に設定をしておく必要があります。

> GITHUB_TOKENシークレット
GITHUB_TOKENシークレットは、ワークフロー を含むリポジトリにスコープされたGitHub Appインストールトークンです GitHubは、デフォルトでGITHUB_TOKENシークレットを自動的に作成しますが、アクションでそれを使用するには、ワークフローファイルに追加する必要があります。 GITHUB_TOKENシークレットを使用すると、認証されたGitHub APIコールを、アクションに代わって実行することができます。
> ワークフローファイルで、GITHUB_TOKENシークレットにアクセスする必要があるアクションごとに環境変数を作成してください。
https://help.github.com/ja/articles/virtual-environments-for-github-actions#environment-variables

`GITHUB_TOKEN`の環境変数を使う前に

```yaml
env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
という記述が必要となります。

# 参考
- [githubからアクセストークンでcloneする](https://qiita.com/reflet/items/b7ed9979828819b2b42c)
- [トークンを使ってgithubからcloneする](https://qiita.com/reflet/items/8c916056aad76db37592)
[Python3] matplotlibで折れ線グラフで縦軸(ｙ軸)を3つ以上書く方法

横軸は同じだけどスケールの異なるデータを3つ以上描きたい時ってたくさんあると思います。
この記事では***y軸が3つの折れ線グラフを描きます。***

図で言うと上の図を下のようにします。
![3axis_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361362/4fcc2d50-c4b5-a8ec-5c40-7c0d0db85a8f.png)
![3axis_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361362/00f1cd3c-6573-a5d7-b0ea-7e8b19844c7c.png)


データはこれを使います。

```
index	A	　　B	　　　C
0	　　2	　　2000　　4000000
1	　　3	　　1000　　3000000
2	　　6	　　700	　4200000
3	　　12　　300	　3600000
4	　　5	　　500	　2500000
5	　　3	　　1400　　4200000
6	　　5	　　800	　4000000
7	　　6	　　300	　1800000
8	　　8	　　500	　4000000
```
↑indexを横軸にして、A, B, Cの折れ線グラフを書くなら縦軸のスケールを変えたほうがいいですよね。

<dr>
そんなわけでやっていきましょう。
いろいろimport

```
import pandas as pd 
import matplotlib as mpl
import matplotlib.pyplot as plt
```

<dr>
・キャンバスを定義します。

```
fig=plt.figure() 
fig.subplots_adjust(bottom=0.2)
fig.subplots_adjust(right=0.85)
fig.subplots_adjust(left=0.15)
```

<dr>
・x軸は全部共通にします。
　ax2, ax3のｘ軸をax1と共通にするおまじないです。

```
ax1=fig.add_subplot(1,1,1)
ax2=ax1.twinx()
ax3=ax1.twinx()
``` 
<dr>
・x軸の名前とか凡例の名前とかをつけます.


```
ax1.set_xlabel('index',fontsize=18)
ax1.set_ylabel('A',fontsize=18 ,color='red')
ax2.set_ylabel('B',fontsize=18 ,color='green')
ax3.set_ylabel('C',fontsize=18 ,color='blue') 
```

<dr>
**・これが大事です。これをつけることで図の右側に重ならないように3つめの軸を書くことができます。2行目の1.2を変えると場所を調整できます。**

```
rspine = ax3.spines['right']
rspine.set_position(('axes', 1.2))
```
<dr>
・グラフを書いて終わりです。

```
ax1.plot(df['A'],color='red',label="A")
ax2.plot(df['B'],color='green',label="B") 
ax3.plot(df['C'],color='blue',label="C") 

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
h3, l3 = ax3.get_legend_handles_labels()
ax1.legend(h1 + h2 +h3, l1 + l2 +l3 ,loc='upper right')
```

上記に示したデータを使えばこのような図ができるはずです。
![3axis_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361362/57945e58-c39b-c582-f943-5ec002612892.png)


参考
https://matplotlib.org/3.1.1/gallery/ticks_and_spines/spine_placement_demo.html
ダークモード対応で便利なやつ

コードからダークモードに対応する色を指定するのが記述量多くて大変だったので、まさに convenience な extension を書きました

※ 以下 `if #available(iOS 13, *)` な分岐は省いて書きます

## 前提

[iOS 13からのダークモード対応のコツ](https://qiita.com/gonsee/items/c04b73787730c0e831df) などで
`class func dynamicColor(light: UIColor, dark: UIColor) -> UIColor`
と定義しているのを真似していたのですが、今後 UIColor を使うときは、ほぼ dynamicProvider 使うかなーと思って init に寄せました

```swift
extension UIColor {
    convenience init(light: UIColor, dark: UIColor) {
        self.init {
            if $0.userInterfaceStyle == .dark {
                return dark
            } else {
                return light
            }
        }
    }
}
```

`let color = UIColor.dynamicColor(...)` って書くか
`let color = UIColor(...)` って書くかの違いなので好みの問題かなと

## グレースケール

```swift
extension UIColor {
    convenience init(dynamicWhite white: CGFloat, alpha: CGFloat) {
        self.init(
            light: UIColor(white: white, alpha: alpha),
            dark: UIColor(white: 1 - white, alpha: alpha)
        )
    }
}
```

とすることで

```swift
let color = UIColor(light: UIColor(white: 0.8, alpha: 1), dark: UIColor(white: 0.2, alpha: 0.1))
```

と指定していた箇所が

```swift
let color = UIColor(dynamicWhite: 0.8, alpha: 1))
```

となります

## HSB

```swift
extension UIColor {
    convenience init(hue: CGFloat, saturation: CGFloat, dynamicBrightness brightness: CGFloat, alpha: CGFloat) {
        self.init(
            light: UIColor(hue: hue, saturation: saturation, brightness: brightness, alpha: alpha),
            dark: UIColor(hue: hue, saturation: saturation, brightness: 1 - brightness, alpha: alpha)
        )
    }
}
```

とすることで

```swift
let color = UIColor(
    light: UIColor(hue: 0, saturation: 0.8, brightness: 0.9, alpha: 1),
    dark: UIColor(hue: 0, saturation: 0.8, brightness: 0.1, alpha: 1)
)
```

と指定していた箇所が

```swift
let color = UIColor(hue: 0, saturation: 0.8, dynamicBrightness: 0.9, alpha: 1))
```

となります

## disclaimer

ちゃんと色を定義している場合には使えるケースは限られるかもしれませんが、サクッと確認してみるには便利！
【SwiftUI】モディファイアを宣言する順序と結果

# この投稿は何？
SwiftUIビューは、__モディファイア__と呼ばれる仕組みを使ってビューの外観や振る舞いを指定します。例えは、テキストに対して「フォントを大きくする」とか「左揃えにする」という指定のことです。
これらの装飾を指定をする順序は、その結果に影響します。
モディファイアの基本的な動作について、忘備録として残しておきます。

### 環境
macOS10.15 Catalina beta8
Xcode11 GM Seed2

# Textビューの余白と背景カラー
余白を拡張したテキストビューの背景をグリーンに指定します。使用するモディファイアは以下の２つです。

- 余白のサイズを指定する `padding()` モディファイア
- 背景カラーを指定する `background()` モディファイア

Textビュー場合、余白を調整するとフレームのサイズ自体が変化します。
また、背景カラーを指定すると、テキスト背後のフレーム内全体のカラーが変化します。

### background() → padding()
````Swift:        
Text("SwiftUI")                
    .background(Color.green)
    .padding(.all, 20)
````

下の画像は「背景カラーを指定してから、余白サイズを拡張」した結果です。
![スクリーンショット 2019-09-20 12.58.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70476/e3099b20-4def-c416-3e32-10523b7168b1.png)

青枠フレームを見ると、余白が調整されて大きくなっていますが、Textビューの背景は中心部分しかグリーンになっていません。


### padding() → background()

````Swift:        
Text("SwiftUI")                
    .padding(.all, 20)
    .background(Color.green)
````

こちらの画像は、「余白を拡張してから、背景カラーを指定」した結果です。
![スクリーンショット 2019-09-20 12.58.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70476/7b04436f-008b-e264-7884-cea43870a592.png)

青枠フレームに収まっているTextビュー全体の背景がグリーンになっています。

## ソースコード

````Swift:
struct ContentView: View {
    var body: some View {
        VStack {
            Text("SwiftUI")
                .background(Color.green)
                .padding(.all, 20)

            Text("SwiftUI")
                .padding(.all, 20)
                .background(Color.green)
        }
        .foregroundColor(.white)
        .font(.title)
    }
}
````

# モディファイアの仕組み
SwiftUIでビューを構築するとき、覚えておきたいことは...
__それぞれのモディファイアは、１つのビューを返す__ です。
モディファイアは、ビューのプロパティを単純に変更していくわけではありません。
UnityのLWRP環境でNature系のマテリアルが真っピンクな状態を解決する方法

#はじめに
こんにちは、ZeniZeniです。
最近LWRP環境を触っているんですが、既存のアセットをLWRPでも使えるようにするには場合によって結構手間がかかります。
基本的にはアセットをインポートした後、```Edit>Render Pipeline>Upgrade ○○ Materials to LightweightRP Materials```ボタンを押すことで、ある程度自動でマテリアルが使用しているshaderをLWRPで使えるshaderに変更してくれます。
しかしこの自動変更が対応してあるshaderは限られて、対応表がこちらの[サイト](https://github.com/Unity-Technologies/ScriptableRenderPipeline/wiki/Lightweight-Render-Pipeline)に載っています。

こちらを見てもらえばわかる通り、UnityのStandardAssetsに入っている木や草などの自然系のアセットに使われているNature系のshaderが対応していません。そのため、Gaiaなどの自然系のアセットではマテリアル自動変更をしても木々は真っピンクのままです。
![bandicam 2019-09-20 17-34-05-222.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281560/3c76cf7c-43be-4206-0b61-f65e70586106.jpeg)

Unityの質問サイトを覗くと、この真っピンクに苦しめられている人が結構いて、最終的に対処方法はshadergraphで自作しろというあんまりな終わり方だったので、もう少し調べると、そのNature系のshaderを提供しているSpeedtree社のサイトにLWRPに関する[説明記事](https://store.speedtree.com/the-state-of-the-speedtree-unity-hdrp-pipeline/)がありました。
これを読むと、現状HDRP/LWRP対応のshaderは開発中であり、提供はまだ先であるが、一応の対処方法があるということが書いてありました。

#対処法
対処方法は非常に簡単で、真っピンクになってあるmaterialのshaderを一度Nature/SpeedTreeからStandardに変更してから、```Edit>Render Pipeline>Upgrade ○○ Materials to LightweightRP Materials```ボタンを押すことです。

するとこうなります。

![bandicam 2019-09-20 17-40-30-272.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281560/27892602-db31-6020-c90f-a06e315ff2d5.jpeg)

見てわかるとおり、透過処理のされていないのっぺりとした感じになってますね。
今度は葉っぱ部分のマテリアルを選択して、SurfaceTypeをOpaqueからTransparentに変更しましょう。

![bandicam 2019-09-20 17-43-02-054.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281560/4df4e7fb-69c9-c466-045d-c29e427041f1.jpeg)

するとこうなります。
![bandicam 2019-09-20 17-44-34-827.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281560/35bbfd89-ef38-43fa-25cd-02e36abb6d4f.jpeg)

いい感じになりましたね。

上記の方法はSpeedTreeさんのサイトに書いてあるんですが、わざわざStandardを経由して変更しなくても、いきなりNature/SpeedTreeからLightweightRender Pipeline/Litに変えて、SurfaceTypeを変更するだけでもできました。

#その他
既存のアセットで```Edit>Render Pipeline>Upgrade ○○ Materials to LightweightRP Materials```ボタンを押してマテリアルを変更したが、なんかコレジャナイ…みたいな時があります。
![bandicam 2019-09-20 17-55-32-426.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281560/891d4487-3716-e108-3119-7e753ff2ac3e.jpeg)
マテリアル自動変更では、変更先が処理の軽いLightweight Render Pipeline/Simple Litになっていることが多く、これだと味気ない感じになってしまいます。これは単純にLightweight Render Pipeline/Simple Lit から Lightweight Render Pipeline/Lit　にshaderを変えるだけではっきりとした見た目になります。
![bandicam 2019-09-20 17-59-58-364.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281560/1a2930fe-ad71-2fa1-60c3-866888347c0a.jpeg)

#開発、執筆にあたり、下記のサイト様を参考、引用させていただきました。
1. [speedtree-The State of the SpeedTree/Unity HDRP Pipeline](https://store.speedtree.com/the-state-of-the-speedtree-unity-hdrp-pipeline/)