OmniAICreator/Qiita-1.07M huggingface dataset:
iOSシミュレータでWebサイトが開けないとき

　表題なのですが、まぁ丸一日分時間をかけてしまったのでメモを残しておきます。

# iOSアプリからWebサイトを開こう

　と思いました。参考にしてる本にもちゃちゃっと書いてありましたし、余裕でいけると思ってコードを書いて、どれどれ、と実行。(サイトとかは本当はDBに保存されてるのを取ってきたりしてるんですが適当に変えてます）

```swift:ViewController.swift

    @IBAction func wakeWebsite(_ sender: Any) {
        // urlの設定
        let url = URL(string: "https://ja.wikipedia.org/wiki/1月1日".addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!)!
        if UIApplication.shared.canOpenURL(url) {
            UIApplication.shared.open(url)
        }
    }
```

ドメインが表示されて、いけるかな、と思ったら。

”Safari cannot open the page because it could not establish a secure connection to the server."

おおっと。ページが表示されず、エラーメッセージが表示されてます。

# 迷走

- ATSでホワイトリストの設定（そもそもHTTPSじゃん！）
- ％エンコードはしてる、よなぁ
- 違うページ開いてみる。<br>
　これは、yahooやgoogleだとまた別のメッセージがでて、ぽちぽちと押してると表示出来るようになることはなる
- 違うやり方でやってみる
- シンプルにプロジェクトを作り直して試す

## 違うやり方〜WkWebView
WKWebViewで表示してみるかー

```swift:ViewController.swift

import WebKit

~~
    @IBOutlet weak var webView: WKWebView!

    override func viewDidLoad(){
        super.viewDidLoad()
        // URLRequestを作る
        let urlRequest = URLRequest(url: URL(string: "https://ja.wikipedia.org/wiki/1月1日".addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!)!)
        webView.load(urlRequest)
    }

```

Storyboardで配置してOutlet接続してます。
結果はページまっしろ。

実際にはUrlに変換した段階で、デバッガで内容を見るとSafariでちゃんとページ表示してくれてるんですよね。

## 違うやり方〜SFSafariViewController

```swift:ViewController.swift

import SafariServices

    @IBAction func wakeWebsite(_ sender: Any) {
        // urlの設定
        let url = URL(string: "https://ja.wikipedia.org/wiki/1月1日".addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!)!
        // safariで起動
        let svc = SFSafariViewController(url: url)
        present(svc, animated: true, completion: nil)
    }

```

これも最初のURLスキーム形式と同じ結果。


# 解決方法

…とても単純でした。Macに入っているウイルスセキュリティのWebシールドをオフにすること。ブロックされてしまって表示されてないだけでした。
WkWebViewのは試しませんでしたが、他の2つはどっちもちゃんと動きました。

参考
https://stackoverflow.com/questions/46980164/cant-visit-website-on-ios-simulator-this-connection-is-not-private
バックアップファイルを1週間分にするメモ（Windows）


### 環境

環境：Windows
バックアップ先：D:\DBBackupと仮定する


### バッチファイルを作成する

backup1week.bat

```shell-session: backup1week.bat
::1週間を超えたデータを削除する

::３←２,２←１,１←今日のデータ
md D:\DBBackup\8days
move D:\DBBackup\7days D:\DBBackup\8days
move D:\DBBackup\6days D:\DBBackup\7days
move D:\DBBackup\5days D:\DBBackup\6days
move D:\DBBackup\4days D:\DBBackup\5days
move D:\DBBackup\3days D:\DBBackup\4days
move D:\DBBackup\2days D:\DBBackup\3days
move D:\DBBackup\1days D:\DBBackup\2days
md D:\DBBackup\1days

::一番古いデータを削除
if %ERRORLEVEL%==0 rd /s /q D:\DBBackup\8days
```

### バックアップ作成

D:\DBBackup\1daysにバックアップを作成する。

### タスク化

上記をタスク化する。
オリジナルのgooglecodelabsを作る

オリジナルのgooglecodelabsを作りましょう！
ハンズオンの資料でPDF配布が一般的ですが、googlecodelabsで資料を見やすくしてみませんか？

https://github.com/googlecodelabs/tools

# 完成資料
こちらのサイトにデプロイしていますので確認してみてください。

- https://gaomar-codelabs-demo.netlify.com
- https://github.com/gaomar/codelabs-demo

<img width="1298" alt="スクリーンショット 2019-01-31 11.35.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/154355/1291f012-3b82-5d77-41b6-01d00a95e370.png">

## googlecodelabs環境構築
googlecodelabsの解説をします！

### goをインストールしよう！
Goの環境を整えます。こちらからインストールしてください。

[https://golang.org/doc/install](https://golang.org/doc/install)

### 環境変数設定（Windows編）
Windowsの方はGoの環境変数にインストールしたフォルダを指定しましょう。

コントロールパネルから［システムの詳細設定］をクリック

![s100.png](https://qiita-image-store.s3.amazonaws.com/0/154355/74efa37f-bb3b-5ed0-bf47-dc3fc6c7d725.png)


［環境変数］をクリック

![s101.png](https://qiita-image-store.s3.amazonaws.com/0/154355/75a8ef0a-a697-4b65-5e2f-ca06a4584778.png)

Pathをクリックして、［編集］ボタンをクリックします。

![s102.png](https://qiita-image-store.s3.amazonaws.com/0/154355/1a25005f-70be-c8ae-9e80-1c1d8e6da61c.png)


インストールしたGoの実行環境フォルダを指定します。

![s103.png](https://qiita-image-store.s3.amazonaws.com/0/154355/67559bad-5409-c3af-496c-b6ce56ae24a1.png)


### 環境変数設定（Mac編）
Macの方はbash_profileにPathを通しておきましょう

```
export PATH=$PATH:/usr/local/go/bin
```

## claatをインストール

### 実行環境インストール
mdファイルをエクスポートしてhtmlにコンバートするプログラムをインストールします。
コマンドプロンプトやターミナルを開いてください。

```
$ go get github.com/googlecodelabs/tools/claat
```

### Pathを通す(Windows)
Windowsの方はclaatコマンドを実行するためにPathを通しておきます。

![s104.png](https://qiita-image-store.s3.amazonaws.com/0/154355/fb8132f7-5821-1fa5-68ef-c63d7f944112.png)

# Markdownファイルを作成する
お好きなmdファイルを作成してください。
ここで注意なのですが、mdファイルの先頭にこれを記述しないとExport時にエラーが表示されます。

```
---
id: dist
{{if .Meta.Status}}status: {{.Meta.Status}}{{end}}
{{if .Meta.Summary}}summary: {{.Meta.Summary}}{{end}}
{{if .Meta.Author}}author: {{.Meta.Author}}{{end}}
{{if .Meta.Categories}}categories: {{commaSep .Meta.Categories}}{{end}}
{{if .Meta.Tags}}tags: {{commaSep .Meta.Tags}}{{end}}
{{if .Meta.Feedback}}feedback link: {{.Meta.Feedback}}{{end}}
{{if .Meta.GA}}analytics account: {{.Meta.GA}}{{end}}

---
```

## exportする
mdファイルをエクスポートしましょう。

### exportコマンドを実行する
コマンドプロンプトやターミナルを開いて、下記コマンドを実行します。  
エクスポートしたいフォルダにまず移動しておいてください。

```
$ cd エクスポートするフォルダ
$ claat export index.md
```

すると`dist`フォルダが作成されます。distフォルダに移動してください。serveコマンドを実行して静的サイト用ファイルを書き出します。

自動的にブラウザが起動してcodelabsを確認することができます。

```
$ cd dist
$ claat serve
```

あとはdistフォルダの中身をS3等にデプロイすればOKです！

# まとめ
これでリッチな資料ができました！
ただ、サイトを表示する際はすごく表示に時間がかかってしまうのが難点です。一度表示されれば爆速で動きます。
是非使ってみてはいかがでしょうか？

システム化のご検討やご相談は弊社までお問い合わせください。
https://i-enter.co.jp/contact/
入門　監視　書評

入門　監視　書評
---

入門監視を読んだ。
お風呂に入りながら２−３hくらいで、読み終えることができた。
Webシステムの開発や、Webサービスの提供に関わるエンジニアであれば読んでおいて間違いなさそう。
読み終わってから早速チームのメンバーにお勧めした。

以下、個人的に刺さったフレーズ集。

## １章　監視のアンチパターン

* いくつならツールが多すぎると言えるか
    * 例えば `データベースを監視する3つのツールがそれぞれ別の情報を提供するなら、おそらく問題ありません`

* 監視とは複雑な問題をひとくくりにしたもの
    * `他人に変化を共用するのは、統合の試みを台無しにする最悪の方法です`

* アンチパターン２：役割としての監視
    * `監視とは役割ではなくスキルであり、チーム内の全員がある程度のレベルに至っておくべきです`

* アラートに関しては、OSのメトリクスはあまり意味がない
    * `CPUやメモリ使用率のような低レベルなメトリクスではなく、「なぜ動いているか」を基準にアラートを送ることが有益である`

* アンチパターン４：監視を支えにする
    * `問題の修正を忘れてはいけません`

* アンチパターン５：手動設定
    * `監視は自動化すべきです`

## ２章　監視のデザインパターン

* 監視サービスのコンポーネント

    * `データ収集`
    * `データストレージ`
    * `可視化`
    * `分析とレポート`
    * `アラート`

* デザインパターン４：継続的改善
    * `明日は世界レベルになるであろう仕組みも、１年後にはそうでない可能性があります`
    * `業界が進歩するに従って、２年あるいは３年で監視の仕組みを再構築しなおすことになるかもしれません`

## ３章　アラート、オンコール、インシデント管理

* 振り返り
    * `重大なサービス停止などのインシデントに対しては、きちんとした振り返り（postmortem）が重要です`

## ５章　ビジネスを監視する

* 会社のビジネスKPIを見つける
    * `アプリケーションが動いていることをどうやって知らせたらよいでしょうか？　何をチェックしていますか？　どう動いていたらよいのでしょうか？`
    * `アプリケーションのKPIは何ですか？　なぜそのKPIを使っているのですか？　そのKPIはどんなことを教えてくれますか？`

## ７章　アプリケーション監視

* サーバレスまたはFunction-as-a-Service
    * `StatsDを使えばよいのです`

* マイクロサービスアーキテクチャを監視する
    * `GoogleのDapper論文`
    * `Zipkin`
    * `分散トレーシングの仕組みは` `一意なリクエストIDを「タグ付け」し` `リクエストがどのサービスにアクセスしたか` `各サービスでどのくらいの時間を過ごしたかが分かります`
IT業界以外に勤務のプログラマが予算説明に必要な回答例

予算申請する際に、説明が必要とのことで記録。

IT業界であったり、電気系の業界であれば不必要な説明も、業界以外では何か記載が必要かも。

日本の組織には、日本語の文書を参考資料としてつけるとよい。
JISがあればJISがよい。

工業標準化法で、日本工業規格の尊重とのこと。
http://elaws.e-gov.go.jp/search/elawsSearch/elaws_search/lsg0500/detail?lawId=324AC0000000185

```
(日本工業規格の尊重）
第六十七条　国及び地方公共団体は、鉱工業に関する技術上の基準を定めるとき、その買い入れる鉱工業品に関する仕様を定めるときその他その事務を処理するに当たつて第二条各号に掲げる事項に関し一定の基準を定めるときは、日本工業規格を尊重してこれをしなければならない。
```

#電池
電気で動かすものを利用するため。

参考資料
JIS C8500：2013一次電池通則Primary batteries-General
http://kikakurui.com/c8/C8500-2013-01.html

#ジャンパ線
電気回路で２箇所に通電してうごかしたいことがあるため。　

JIS C3101-1994電気用硬銅線Hard-drawn copper wires for electrical purposes
http://kikakurui.com/c3/C3101-1994-01.html



#ビニールテープ
２つの物質を、他と絶縁したまま隣接させておきたいため。

JIS C2336：2012電気絶縁用ポリ塩化ビニル粘着テープPressure-sensitive polyvinyl chloride tapes for electrical purposes
http://kikakurui.com/c2/C2336-2012-01.html

#はんだ
電気回路で常時結線しておきたい場所があるため。

参考資料
JIS Z3282：2006はんだ−化学成分及び形状  Soft solders - Chemical compositions and forms
http://kikakurui.com/z3/Z3282-2006-01.html

鉛フリーの場合
JIS Z3198-1：2014鉛フリーはんだ試験方法−第 1 部：溶融温度範囲測定方法Test methods for lead-free solders-Part 1: Methods for measuring of melting temperature ranges

#ワッシャー
ねじどめする際に、ねじがゆるみにくくし、なおかつ基板を破損しないようにするため。

JIS B1256：2008平座金Plain washers
http://kikakurui.com/b1/B1256-2008-01.html

# SDカード
電子機器に内蔵するメモリには入りきらないデータを保存するため。

機密事項、個人情報は保存しない。機密保持、個人情報規定には該当しない旨の主張が通る場合には、くれぐれも機密情報、個人情報をほぞんしない。

すべてのSDカードの購入、運用にあたっては、運用簿を義務付けている場合には、
その手順に従って書類を作成し、運用する。

すべてのSDカードの取り出しを禁止している組織にあっては、
取り出さない旨の誓約書を書く。

SD規格の概要
https://www.sdcard.org/jp/developers/overview/

# USBケーブル
USB機器どうしをつないで利用するため。あるいは、USB機器に通電、充電したいため。


JIS C5402-1992電子機器用コネクタ試験方法Method for test of connectors for use in electronic equipment
http://www.kikakurui.com/c5/C5402-1992-01.html



#テスタ
回路が破損しないように導通前に導通試験をするため。

日本工業規格JIS C1202 : 2000回路計Circuit Testers
http://kikakurui.com/c1/C1202-2000-01.html


#＜この項は書きかけです。順次追記します。＞
例示をご希望の品目があれば、おしらせください。
一部の項目は、説明が適切でないかもしれません。
参照しているJIS、適切でないかもしれません。
よりお勧めのJISまたは団体規格がありましたらおしらせくださると幸いです。

なお、用途の都合上、日本語文書に限定しています。
英語文書の案は、後日、追記予定です。

#文書履歴(document history)
ver 0.01 初稿　4項目 20190131 朝
ver. 0.02 ビニールテープ追記 20190131 午前
ver. 0.03 USBケーブル追記 20190131 正午
ver. 0.04 ワッシャー追記 20190131 午後
ver. 0.05 SDカード追記 20190131 午後２時
ver. 0.06 工業標準化法追記 20190131 夕
初めてのdocker push

今まで既存のdocker imageから作っていたimageを少しいじったので
改めて自分用のimageとしてpushしてみた。

##  まずdockerにログイン
```console
$ docker login
```

Docker Hubに登録している自分のアカウントの認証情報を入力してログイン。
これをやっておかないと、pushしたときに

```
unauthorized: incorrect username or password
```
と出てきてエラーになる。

## 今あるimageの確認

```console
$ docker images
```

ここで出てくるimageから、自分がpushしたいimageの`IMAGE ID`をコピーしておく。

## imageをタグ付
まずは、ローカルでimageをタグ付けする。

```
$ docker tag {IMAGE ID} {ACCOUNT NAME}/{IMAGE TITLE}:{TAG}
```

* `IAMGE ID` : 先ほどコピーしたIMAGE ID
* `ACCOUNT NAME` :  Docker Hubにログインしたアカウント名
* `IMAGE TITLE` : 任意のタイトル
* `TAG` : タグ名。最新版の時は `latest` とかつける

##  push

```
$ docker push {ACCOUNT NAME}/{IMAGE TITLE}:{TAG}
```

さっきタグ付けしたimageをpushする。

## Docker Hubで確認
Docker Hub https://hub.docker.com/ の自分のアカウントページで、pushされたimageがあることを確認。
sudo rm -rf / を実行してみた

# sudo rm -rf / を実行してみた
うるせぇ！テメェの記事なんて見てる暇ねぇ！  
結果だけ教えろ！って人 → [結果](#結果)

その２もあるよ → [その２](https://qiita.com/SHINE/items/01926ba6abd0c8988e1a)

## 前提
&emsp;全てを消し去りたい。バルスを唱えたい。誰でもそんなときあると思うんです。そう、最悪のコマンド `sudo rm -rf /` を実行してやりたいと...
しかし実行する勇気がない方もたくさんいると思います。そんな方達のためにも私は実行してやりましたよ。そんな方々に向けた記事です。

## 実行環境
&emsp;流石に親機でやるわけにもいかないので VM 建てます。
でも Docker とか AWS だと (今回の実験に影響ない思うけど) ネットワーク構成とかちゃうし、Ansible とか Itamae とか聞いたことあるけど知見ないのでここは Oracle 大先生の力を借りて VirtualBox で建てることにした。実行環境は下記の通り。
gg ったらええやんって思ったけどなんか gg ったら負けな気がする。

**実行環境**
- `Host OS:` macOS Mojave Version 10.14.2
- `VM 管理:` VirtualBox Graphical User Interface Version 5.2.22 r126460 (Qt5.6.3)
- `Guest(VM) OS` CentOS7 x86 Minimal 18.10

## 予想
&emsp;いやー、流石にそんな簡単に実行出来ちゃったらまずいだろうから何かしら怒られるんじゃないかなぁ？

## 実行
&emsp;適当にチャチャっと作っただけでなーんも設定してない。インターネットすら繋げてない。作ったのは root ユーザのみ。
じゃ、実行してみよっか！ (root で入ってるから `sudo` いらんけど)

<img width="723" alt="6bffc112901b15a95f6be1781da78bcb.png" src="https://qiita-image-store.s3.amazonaws.com/0/239391/9fa1e188-918a-eddc-b30d-2dc60ed55237.png">


## 結果
やっぱりなんか警告出るんだね

```
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe
```

ということでこの警告の通り `--no-preserve-root` をつけて実行してみる。

```
sudo rm -rf --no-preserve-root /
```

うわああぁぁぁぁぁぁぁ
<img width="722" alt="fead38a4c9fa4fd6e9d32d592c1c4a75.png" src="https://qiita-image-store.s3.amazonaws.com/0/239391/274c4ef2-35ed-a0f4-88b9-4980803eaf4e.png">


大量に Permission で弾かれたので途中停止。

仕方ない。もう一つの最悪なコマンド `sudo chmod -R 777 /` を実行してやろう。
と思ったらこちらも `Operation not permitted` で弾かれた。

## まとめ
&emsp;うーむ... root 権限でもそう簡単に出来ないもんは出来ないのか...
多分どっかしらの設定ファイルいじくりまわしてやればいける気がする。
とりあえずそう簡単にルートディレクトリを消したりすることは出来ないことがわかった。

以上、暇人による検証でした。

その２で完結？！ → [sudo rm -rf / を実行してみた その２](https://qiita.com/SHINE/items/01926ba6abd0c8988e1a)
VBAメモ: ExcelシートをSQLで検索（型が一致しないエラー）

# ExcelにADO接続する

Excelシートに保存されたデータを、条件で検索して、結果を別のシートに表示したい。
検索条件の関係から、Excel関数ではちょっと辛い、めんどい、SQL使いたい。

ということで、VBAで**自分自身にADO接続**した。
シートをテーブルに見立てている状態。

```vb
Public Sub MyADOExcel()
   
    Dim cn As Object
    Dim rs As Object
    Dim query As String

    ' レコードセットオープン時の引数、constしとく
    Const adOpenKeyset = 1
    Const adLockReadOnly = 1

    ' コネクション準備
    Set cn = CreateObject("ADODB.Connection")
    cn.Provider = "Microsoft.ACE.OLEDB.12.0"
    ' 1行目は項目名(HDR=YES)
    cn.Properties("Extended Properties") = "Excel 12.0;HDR=YES;IMEX=1"

    ' レコードセット準備
    Set rs = CreateObject("ADODB.Recordset")

    ' コネクションオープン、接続先は自分自身
    cn.Open ThisWorkbook.FullName
    
    ' 普通にSQL文作る
    ' この場合、「DATA」という名前のシートの中を探そうとしてる
    query = " SELECT 営業所コード,営業所名,(DATAシート1行目の項目名)" _
        & " FROM [DATA$] " _
        & " WHERE 受注残数 > 0 (AND 何か条件いろいろ)" _
        & " ORDER BY  営業所コード,(何かいろいろ)"

    ' 作ったSQLで、レコードセット開く
    rs.Open query, cn, adOpenKeyset, adLockReadOnly

    '「結果」という名前のシートに結果をべったり貼ってる。
    ' この場合2行目2列目から貼ってる。
    Worksheets("結果").Cells(2, 2).CopyFromRecordset rs
  
    ' 一応後片付け
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
 
End Sub
```

いろいろはしょったが、「接続してデータ取る」の肝はこのぐらい。

# 問題：型が一致しないエラー

基本、調子よく動いていた。
が、まれに「**-214746259 式で型が一致しません**」というエラーが発生した。

結論から言うと、エラーの通り、型が違った。

## 一致しない原因

文字列のつもりでSQLを書いている項目を、システム側は「データ見る限り、数値じゃね？」と判断していた。

* 文字列の項目に、「数値にも見える値」が含まれていた。
* それが、たまたま、データの冒頭近くに固まっていた。

Excelシートをテーブル扱いする場合、**型は最初の数件（デフォルト8件）から推測**される。
こちらの思惑とは関係なく、勝手に判断されてしまう。
セルの設定を見てくれても良さそうなのに、見てくれない。
**指定する方法は、ない**。

### 解決方法（一応）

DATAシートを**件の項目で降順ソート**してから、SQLを発行するようにした。
降順なら、**数値より文字列が上**にくるので、文字列型だと推測してもらえる可能性が高まる。

先方の了解が得られたので、この時はこれ以上の工数は使わなかった。

もっと汎用性の高い解決方法はないものか。
「型を間違いようのない、**お手本データ**をあらかじめ冒頭に入れておく」とかだろうか。
もちろん、検索でお手本がヒットしないように条件づけするわけだけど、凡ミスの温床になりそうだなぁ。

##情報元

[ADO を使用して Excel ブックのデータの読み取りおよび書き込みを行う方法 (ExcelADO) / Microsoftサポート](https://support.microsoft.com/ja-jp/help/278973/excelado-demonstrates-how-to-use-ado-to-read-and-write-data-in-excel-w)
以下引用（強調は私）：

> Excel テーブルは、従来のデータベースとは異なり、**列に直接データ型を指定する方法がありません**。
> 代わりに、列の中の一定数の行が OLE DB プロバイダによりスキャンされ、そのフィールドのデータ型が推測されます。
> スキャンされる行数は、デフォルトでは 8 行ですが、接続文字列の拡張プロパティで、MAXSCANROWS 設定に 1 ～ 16 の値を指定することでスキャンされる行数を変更できます。

# 雑談

DBってすばらしいよね、便利だよね。

でもこの時は、Excel単体で動かしたかったんだ。
現場ってそういうもんだよね。
rbenvをサクッとインストールする Mac編

## これ何？

- [公式のREADME](https://github.com/rbenv/rbenv#installation)の要点をまとめたもの
- サクッとrbenvをインストールしたい人用にまとめました
- 詳しく知りたい方は[公式のREADME](https://github.com/rbenv/rbenv#installat)を参照してください
- Homebrewを前提としているので、必要な方は[こちら](https://brew.sh/)を参照してインストールしてください

## rbenvのインストール

```bash
$ brew install rbenv
$ rbenv init
$ source ~/.bash_profile
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
$ rbenv install -l
$ rbenv install 2.6.0
$ rbenv local 2.6.0
$ ruby -v
ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-darwin18]
$ gem install bundler
```

## rbenvのバージョンアップ

```bash
$ brew upgrade rbenv ruby-build
```
[Microsoft] Azure WebApps (App Service)の簡易認証でAzure AD B2Cを使う方法

Azure App Serviceの簡易認証でAzure AD B2Cを使うと、フリープランのAzure ADではできないログイン画面のカスタマイズができる(?)かもしれません。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/59475/a7633b9b-da3f-abea-ed1c-2ddb389a72bf.png)
これはあらかじめ用意されているGrayテンプレートを使用したログイン画面です。

# 簡易認証の設定に必要な情報

簡易認証を設定するときには、以下の情報が必要です。

- Client ID
- Issuer Url
- Client Secret

![image.png](https://qiita-image-store.s3.amazonaws.com/0/59475/3b0d35ce-a209-c242-3344-65b1c410825d.png)

それぞれの取得方法を説明します。

# あらかじめ必要なもの

Azure AD B2Cテナントは作成済みであるとします。

まだの場合は[Tutorial: Create an Azure Active Directory B2C tenant](https://docs.microsoft.com/en-us/azure/active-directory-b2c/tutorial-create-tenant)の手順に従って作成します。

# 簡易認証に必要な情報の取得方法

## Client ID

Azure AD B2Cに登録したアプリケーションのApplication IDです。

### アプリケーションの登録方法

アプリケーション名はお好みでつけます。

Reply URLをWebAppsのURL+`/.auth/login/aad/callback`にします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/59475/d5754c30-6fac-dfdc-572f-53bf2b32155e.png)

登録すると、Application IDが発行されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/59475/13fcc820-b4d0-4493-b668-06b1c3a48ef8.png)


## Issuer Url

Azure AD B2Cに登録したUser flows(policies)から作成します。

User flows(policies)を作成[^1]したら、Run user flowをクリックします。

[^1]: 画面をカスタマイズするには、プレビュー版のSign in v2を使用する必要があります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/59475/d9c58cdd-7f51-bcb0-92e0-5ae6e1ab56a4.png)

URLが表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/59475/006b39f9-3105-10bb-0f7c-a46b0b5f6a8c.png)


## Client Secret

Azure AD B2Cに登録したアプリケーションで生成したKeyです。

アプリケーションの画面から、Keyを生成します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/59475/509cb2ac-5b32-d122-cf8a-ad621c7ac76b.png)


# 参考リンク

- [Cross-Post: App Service Auth and Azure AD B2C](https://blogs.msdn.microsoft.com/appserviceteam/2016/06/22/app-service-auth-and-azure-ad-b2c/)
- [About user interface customization in Azure Active Directory B2C](https://docs.microsoft.com/en-us/azure/active-directory-b2c/customize-ui-overview)
SteamVR Plugin 2.2.0 更新内容

* Unity 2018とUnity 2019aのサポート
 
* スケルトンデータから作成済みのポーズにブレンドするためのSteamVR_Skeleton_Poserコンポーネントを追加

* 主な重大な変更点：アクションとアクションセットはスクリプト可能なオブジェクトではなくなりました。生成されたものがすべて含まれている既存のSteamVR_Inputフォルダーを必ず削除してください。つまり、すべてのプレハブとシーンですべてのアクションとアクションセットを再設定する必要があります。 （actions.jsonファイルとバインディングjsonファイルは問題ありません）

* 重大な変更点：DefaultActionおよびDefaultActionSetプロパティはもう存在しません。

* 良い知らせ：生成は今やほぼ瞬時であり、すべてのプレハブとすべてのシーンをループする必要はありません。次の形式でデフォルトを設定します。public SteamVR_Action_Pose poseAction = SteamVR_Input.GetAction-SteamVR_Action_Pose  - （ "Pose"）;またはpublic SteamVR_Action_Boolean interactiveWithUI = SteamVR_Input .__ actions_default_in_InteractUI;

* 大きな変更点：DefaultActionとDefaultActionSetプロパティはもう存在しません。良い知らせ：生成は今やほぼ瞬時であり、すべてのプレハブとすべてのシーンをループする必要はありません。次の形式でデフォルトを設定します。public SteamVR_Action_Pose poseAction = SteamVR_Input.GetAction-SteamVR_Action_Pose  - （ "Pose"）;またはpublic SteamVR_Action_Boolean interactiveWithUI = SteamVR_Input .__ actions_default_in_InteractUI;

* 大きな変更点：actionSet.inActionsおよびactionSet.outActionsは生成されなくなりました。すべてのアクションを直接設定レベルに移動しています。以前：SteamVR_Input._default.inActions.GripGrab。今：SteamVR_Input._default.GripGrab。 Out-Actionと同じ名前のIn-Actionの衝突は、フィールド名の先頭に "in_"と "out_"を追加することによって処理されます。

* 大きな変更点：新しいSteamVRプラグインがアセンブリ定義ファイルを使用できるようにするために、生成されたアクションプロパティはSteamVR_Actionsクラスに移動されました。これはすでにアクションへの参照を壊していたので、私たちはよりフレンドリな名前も作成しました。 SteamVR_Input .__ actions_default_in_GripGrab  - > SteamVR_Actions.default_GripGrab

* Mixed Realityカメラ設定を修正しました。 Exampleアクションに、「ExternalCamera」ポーズアクションを設定した「mixedreality」アクションが設定されました。このポーズをトラッカー/コントローラーに設定すると、複合現実感が再び機能するはずです。デフォルトでは、カメラトラッカータイプはこのアクションにバインドされています。 SteamVR / Resources / ExternalCameraで使用されているポーズを変更することもできます。

* スケルトンの振る舞いとアクションクラスにたくさんの新しい役に立つ機能を追加しました。指のカール、指の広がり、参照ポーズ、追跡レベル、骨の名前など

* プラグインで使用される部分的な入力バインディングを作成する機能を追加しました。部分バインディングフォルダを作成してプラグインに含めます。ユーザーがあなたのプラグインをインポートするとき、彼らはあなたのアクションとバインディングをインポートするオプションを提示されます。


* アクションへのより広範な文字列アクセスを追加しました。 SteamVR_Input.GetAction（アクション名）、GetState（アクション名、inputSource）、GetFloat（アクション名、inputSource）、GetVector2（アクション名、inputSource）
動画を確認しながらファイルを仕分けるやつを考えてみた

# はじめに
大量の動画を再生して中身を確認しながら仕分ける作業って意外と面倒ですよね。
というわけで、基本キーボード操作だけで動画の再生（早送り、巻き戻しもできる）とファイルの移動を流れでできる方法を考えてみました。
# 丁度いいソフトが無い問題
求める機能はこれだけ
1 フォルダを指定で動画ファイルのリストを作成し順番に再生してくれる。
2 再生、停止、早送り、巻き戻しがキーボード操作でできる。
3 再生している動画のファイルをキーボード操作で移動かコピーできる。

1と2の機能だけならフリーで高機能な動画再生ソフトが世の中たくさんあるので対応可能。
しかし、３の機能がどのソフトも付いてないですよね。
グーグル先生に聞いてもG○M playerとかしか出てきませんでした。

# 無いなら後付けしましょう
色々たどって最終的に行き着いたのが[Ges player](http://shirosai.web.fc2.com/gesplayer/)。
このソフト、マウスジェスチャで操作できることがウリなのですが、動作が軽いのとキーボードショートカットも自由に設定できるので使い勝手が良いです。
さらに他のソフトとと連携できる「外部連携ツール」が備わっております。
[ここ](http://shirosai.web.fc2.com/gesplayer/tool.html)に簡単な使い方が載ってるのですが、要はコマンドライン引数で他のソフトをキックできるみたい。
しかも、それもキーボードショートカットに設定できるのでこれの機能を利用しました。

# 必要なソフト

- [Ges player](http://shirosai.web.fc2.com/gesplayer/) 
- [ExtremeCopy](http://www.easersoft.com/) Standardのポータブル版を使いました

# 設定方法
1 まずは適当なフォルダにGes playerをインストールなり展開なりする。
2 ExtremeCopyは解凍したフォルダをGes playerのフォルダの中にコピー
3 Ges playerを起動し「表示」タブから「オプション」を開く
4 オプションの「ツール」タブで追加を押してExtremeCopyに引き渡す設定をする。

以下は「動画ファイルがあるフォルダ内の「a」というフォルダに移動させる」という設定です。
![スクリーンショット 2019-01-31 18.00.50.png](https://qiita-image-store.s3.amazonaws.com/0/273543/e81f2c8f-4e36-c16e-d696-9e9fa03a5feb.png)


- タイトル：何でもよし
　自分でわかりやすいの設定してください。
- 実行ファイル："ExtremeCopy-2.0.5-portable\ExtremeCopy.exe"
　ges playerのフォルダ内に入れたExtremeCopyのexeファイルを指定してください。
- 実行引数：`-src $FILE -dst $DIR"\a" -exe move`
　[ここ](http://www.easersoft.com/document.html)と[ここ](http://shirosai.web.fc2.com/gesplayer/)を参考にしました。
`-dst`のあとが移動先の指定です。この設定では`$DIR`で動画が保存されているフォルダを指定し`"\a"`がその下のフォルダの指定になります。振り分け先を変えたいときはここをいじる。
- 作業フォルダ：多分空欄で大丈夫
- ウインドウ：通常ウインドウ
- 動作：実行して終了するまで再生を待機する
設定を変更したら右下の「変更」ボタンを必ず押してください。

5 ツールの設定が完了したら一度オプションウインドウを閉じて再び開き「キーボード」タブを開く。
![スクリーンショット 2019-01-31 18.01.55.png](https://qiita-image-store.s3.amazonaws.com/0/273543/d4ef20c4-e653-902c-8a4d-f0207e718d65.png)

6 [ツール]に4で追加した機能があるので、ショートカットキーのところに任意のキーを登録し「変更」ボタンを押す。
# 操作方法
動画があるフォルダ内にあらかじめ移動先のフォルダを作っておき（これやらないとバグる）、ges playerを立ち上げて動画の有るフォルダをドラッグ＆ドロップ。
左側のウインドウにファイルの一覧が表示され次々再生されていくので、移動したいファイルを再生しているときに5で設定したショートカットキーを押すだけ。
もちろんファイル移動や再生停止巻き戻しもキーボードやマウスジェスチャーで操作できるので楽ちん。
# まとめ
今回はファイル形式がaviだったのでコーデック不要でしたが、他の形式再生するときは必要かも。
今までメディアプレイヤーでポチポチ再生してエクスプローラでファイルの移動してたけど、これに変えてから3倍くらい早くなった気がする。
PHPで標準入力から値を取得して表示する方法を解説


[未来電子テクノロジー](https://www.miraidenshi-tech.jp/intern-content/program/)でインターンをしている大学生です。

PHPで標準入力の値を取得して表示する方法を解説します。

#####fgets
()で指定したファイルポインタから1行取得する関数

#####STDIN
標準入力（standard input）を意味する定数


####例1
標準入力
n
・1 ≦ n ≦ 100
・n は整数

```.php
<?php
$ans = fgets(STDIN);
echo $ans;
?>
```
出力結果は1～100の整数いずれかになります。


####例2
標準入力
n_a
n_g
n_s
・1行目にりんごを表す文字列 n_a 
・2行目にぶどう表す文字列 n_g
・3行目にいちご表す文字列 n_s
・入力は合計で3行です。

先ほどと同じ場合

```.php
<?php
$ans = fgets(STDIN);
echo $ans;
?>
```

この場合、りんご、ぶどう、いちごのいずれか1行のみしか出力されません。
よって、配列を使って標準入力の値を全て取得したいと思います。

```.php
<?php
while ($line = fgets(STDIN)) {
   $array[] = trim($line);
}
 echo "$array[0]\n";
 echo "$array[1]\n";
 echo $array[2];
?>
```
whileを使って配列$arrayに標準入力の値を全て格納します。
trimは文字列の先頭および末尾にあるホワイトスペースを取り除く関数です。
出力結果は"\n"を用いて改行します。
この場合、
りんご
ぶどう
いちご
というように、3列にいずれかの文字列が1つずつ表示されます。

ここまでお読みいただきありがとうございました。
Railsでrakeタスクを使ってdbからcsvをローカルに保存

みなさんエクセル好きですよね。。
CSVにして、ファイルを可視化したいって要望は多いんです。

そこで今回は、railsのrakeタスクの機能を使ってデータをcsvにしてくれる機能を実装していこうと思います。

# Rakeタスクファイルを生成

```console
rails g task create_csv
```
実行するのに必要なタスクファイルを生成します。

最初の状態はこれ

```ruby:lib/tasks/create_csv.rake
namespace :create_csv do
end
```
# タスク実行処理

```ruby:lib/tasks/create_csv.rake

require 'csv'

namespace :create_csv do
  desc "実行処理の説明"
  #モデルにアクセスする場合は :enviroment　を指定します
  task :export => :environment do
    #csvを生成
    csv_export = CSV.generate do |csv| 
      csv << Model.column_names
      csv << 
      Model.all.map do |model|
        model
      end
    end

    # 現在時間でダウンロードできるようにする
    current_time = DateTime.now.to_s
    # ファイル作成
    File.open("./" + current_time + "_user.csv", 'w') do |file|
      file.write(csv_export)
    end
    # ダウンロード
    stat = File::stat("./" + current_time + "_user.csv")
    send_file("./" + current_time + "_user.csv", :filename => "./" + current_time + "_user.csv", :length => stat.size)
end
```

# ターミナルにて実行確認

```terminal
rake create_csv:export
```

# ファイルが生成していることを確認

<img width="149" alt="Screenshot 2019-01-31 at 10.41.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/181534/b477682e-4309-dc5d-2b40-0244431d7700.png">

これでCSVファイルを生成できました！簡単ですね！
データを可視化してみたい時はぜひ！！
学びの記録　〜Progate HTML&CSS 初級編〜

今回、HTML＆CSS初級編で学んだことで忘れやすい部分についてまとめます。

# ブロック要素・インライン要素
HTMLの要素には自動的に改行されるものとされないものがあって、それぞれブロック要素、インライン要素と呼びます。
![スクリーンショット 2019-01-31 9.49.31.png](https://qiita-image-store.s3.amazonaws.com/0/351843/d775ff98-cbc4-4fb5-dd56-378ef9ea4cca.png)
![スクリーンショット 2019-01-31 9.50.09.png](https://qiita-image-store.s3.amazonaws.com/0/351843/2ba6948e-f780-5aba-fdc9-8de760f59bac.png)

#ボックスモデル
これはborder、padding、marginを使う際の重要な概念です。
HTMLの全ての要素にはborderという基準となる枠線があり、その内側の余白がpadding、外側の余白がmarginで調節することができます。
また、heightやwidthで大きさを変えることができますが、実際に変えているのは文字の大きさのみで周りの余白も合わせた全体の縦横を調節している訳ではありません。
![スクリーンショット 2019-01-31 9.56.31.png](https://qiita-image-store.s3.amazonaws.com/0/351843/86c38c37-5cce-318c-9cbe-49fd5a265a07.png)

#フォームのレイアウト
いわゆるお問い合わせフォームを作る時に使用されるHTMLの要素を確認しておきます。

``` HTML:index.html
<form>
 <p>input要素</p>
 <input>

 <p>textarea要素</p>
 <textarea></textarea>
 
 <input type="submit">
</form>
```
Macintosh 外付けGPU

Macintoshでpythonやっていて、外付けGPUが欲しいことがしばしば。

Linuxはだんだん AMDのGPUでもPython使えるようになってきたらしい。

Core X RC21-01310100-R3J1
http://www.gdm.or.jp/pressrelease/2018/0614/266311

SA-RX590-8GD5N+/11289-01-20G
https://www.ask-corp.jp/news/2018/11/sapphire-nitro-plus-radeon-rx-590-8g-gddr5-special-edition.html



Pulse Radeon RX 570 8G GDDR5
https://www.ask-corp.jp/products/sapphire/graphicsboard/radeon-rx-570/sapphire-pulse-radeon-rx-570-8g-gddr5.html

NITRO+ RADEON RX 5709G GDDR5
https://www.ask-corp.jp/products/sapphire/graphicsboard/radeon-rx-570/sapphire-nitro-plus-radeon-rx-570-8g-gddr5.html


# cupy対応
https://github.com/cupy/cupy/releases/tag/v5.0.0

##問い合わせ
「Macintoshのpythonのcupyに対応していますでしょうか。NVIDIAのcudaに相当するライブラリ・ドライバはありますでしょうか。」

って問い合わせをした。

# Chainer対応

https://github.com/chainer/chainer/releases/tag/v5.0.0
Chainer入れるとcupyも入る。

Chainer/CuPyをAMDGPU上で動かす(インストール～MNISTまで)
https://qiita.com/kz_lil_fox/items/05bb375225e80fa99e39


# tensorflow対応

調べ中。



Linux版は
http://repo.radeon.com/rocm/misc/tensorflow/


# Keras対応
(小ネタ)ROCｍ環境でRStudio/Kerasを利用する
https://qiita.com/kz_lil_fox/items/c5ffa8028d5bc6be1187

# 参考資料(reference)

深層学習で学習やるならNVIDIA一択？いや、AMDという選択肢がありますよ
https://qiita.com/kz_lil_fox/items/d1a18f58e9e5033e7e14

AMD製GPU + ROCm + OpenCV + TensorFlow でGPUコンピューティング環境をつくる
https://qiita.com/hktm/items/ead2ed4ed3441fca7311

CuPyの一般的な存在意義？
https://teratail.com/questions/140308

NVIDIA以外の選択肢を！「ディープラーニングの民主化」を目指すGPU EATERの「お値段以上戦略」とは
http://ainow.ai/2018/05/10/137569/#AMDGPU

# 文書履歴(document history)
ver. 0.01 初稿 20190131 朝
ver. 0.02 Chainer追記 20190131 午前 
ver. 0.03 参考資料追記 20190225
ver. 0.04 URL追記　20230227

### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

####  Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
Qiita API を使って Ruby スクリプトで新規投稿する例。json の gem とか使わず、ヒアドキュメントで強引に json 投げつけるバージョン。

Qiita API を使って Ruby スクリプトで新規投稿する例。json の gem とか使わず、ヒアドキュメントで強引に json 投げつけるバージョン。

# Get Token 

https://qiita.com/settings/applications

# API Document

[Qiita API v2 documentation - Qiita:Developer](https://qiita.com/api/v2/docs#item)

# Script
```
TOKEN=***************** ruby example.rb
```

```ruby
# https://qiita.com/api/v2/docs#item

require 'net/https'
require 'uri'

qiita = 'https://qiita.com'
path = '/api/v2/items'
url = qiita + path

uri = URI.parse(url)
http = Net::HTTP.new(uri.host, uri.port)

http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

req = Net::HTTP::Post.new(uri.request_uri)
req["Authorization"] = "Bearer #{ENV['TOKEN']}"
req["Content-Type"] = "application/json"

req.body = <<~EOM
{
  "body": "# Example",
  "coediting": false,
  "group_url_name": "dev",
  "private": false,
  "tags": [
    {
      "name": "Ruby",
      "versions": [
        "0.0.1"
      ]
    }
  ],
  "title": "Example title",
  "tweet": false
}
EOM

res = http.request(req)

puts res.response
puts res.code, res.msg
```


# 例

![image](https://user-images.githubusercontent.com/13635059/52021629-44413b00-2539-11e9-839b-df0f8fbf91a0.png)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
IBM Cloud Internet Services(CIS)でTLSオプション「End-to-End CA Signed」を使うときの注意点

# IBM Cloud Internet Serviceとは

IBM Cloudで利用できるCDNサービス（Cloudflare）です。詳しくは以下を参考にしてください。
[IBM Cloud Internet Services (CIS)を使ってみた（オーダー・初期設定）](https://qiita.com/y_tama/items/9151b4c981abbb65c53d)


# TLSオプションを使うときの注意点について
今回CISのTLS設定でEnd-to-End CA Signedモードを選択した際、購入した証明書をオリジン、エッジに配置したところ、以下の画面が表示されうまく通信できなかった。この対応を記載します。

<img width="960" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/284877/407ae652-20d7-80b0-7369-dbad53558143.png">


## CISのTLS設定について
クライアント、エッジ(CIS)、オリジンサーバー間をセキュア通信したい場合に使用する設定です。その中でもモードがいくつかあり、本番環境などでは「End-to-End CA Signed（エンドツーエンド　CA署名）」が推奨とされています。

[IBM Cloud CIS Document(TLS Option)](https://cloud.ibm.com/docs/infrastructure/cis/ssl-options.html#tls-options)

# 対応

Origin Certificatesを使用します。Origin CrtificatesはCISで作成できる証明書でこれをオリジン側に配置することでエラーが出なくなります。
[IBM Cloud CIS Origin-certificates](https://cloud.ibm.com/docs/infrastructure/cis/origin.html#origin-certificates)

作成までの流れをざっくりと記載しておきます。
CISのコンソール画面で左メニューから「Origin」を選択し、画面右側の「Order certificate」を選択します。

<img width="1120" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/284877/f21b15ab-f49b-c811-2a09-c622999dc095.png">

クリックすると、以下の画面が出力されるのでご自身のサイトで使用するホスト名を記載します。※このホスト名はご自身のCISで設定しているドメイン名となります。例えば、CISに「hoge.com」と登録している場合はキャプチャーのようなhostnameが使用可能です。*も使えます。
<img width="682" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/284877/405e0066-3030-49ee-2aa7-a32f344f5495.png">


「Order」を実行すると、証明書と秘密鍵が作成されますので、これをオリジンに配置してください。
ちなみにオリジンはNetscalerやapacheでは動作確認できましたが、IBM Cloud Load Blancer(ICLB)ではうまくいきませんでした。
※ICLBはアドレスがホスト名になっているためと思われますが、うまくいった方は教えてください。
XREAにComposerでLaravel5.5をインストールする

# はじめに

レンタルサーバの[XREA](https://www.xrea.com/ "XREA")にLaravel5.5をインストールした。その時のメモ。
[Laravel](https://laravel.com/ "Laravel")はPHP向けのWebアプリケーションフレームワーク。2019年1月時点では5.7が最新版だが、今回はLTS版である5.5をインストールする。
Laravel5.5には、バージョン7.0以上のPHPが必要だが、XREAは標準の設定でPHP7.0が使える(確認したサーバでは7.0.32だった)ので条件を満たしている。
Laravelのインストールには依存管理ツールの[Composer](https://getcomposer.org/ "Composer")が必要なのでこれもインストールする。

# インストールの流れ
XREAでインストールするためには、SSH接続IP許可を設定してターミナルに接続する必要があるがその手順は割愛する。SSHでターミナルに接続したところをスタートにして、以下の流れでインストールする。

1. 必要なディレクトリの作成
2. Composerのインストール
3. Laravelのインストール
4. 公開ディレクトリへのリンク

# 必要なディレクトリの作成
Laravelや、Laravelのインストールに必要なComposerを格納するためのディレクトリを、ホームディレクトリの直下に作成する。

```shell
-bash-4.2$ cd ~
-bash-4.2$ mkdir laravel
```

# Composerのインストール
作成したディレクトリ内で、[Download Composer](https://getcomposer.org/download/)に従ってComposerをインストールする。

* XREAでは、使用するCLI版PHPのコマンド名が`php`ではなく、`phpcli`であることに注意。
* 3番目の手順でハッシュ値をチェックしているが、この時の期待値はバージョンによって異なるので注意。インストール時点での前述のDownload Composerに記載された値で置き換える。

```shell
-bash-4.2$ cd laravel
-bash-4.2$ phpcli -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
-bash-4.2$ phpcli -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
-bash-4.2$ phpcli composer-setup.php
-bash-4.2$ phpcli -r "unlink('composer-setup.php');"
```
# Laravelのインストール
Composerの`create-project`コマンドを実行してLaravelをインストールする。`myproject`は任意のプロジェクト名で、指定した名称のディレクトリが直下に作成される。

* XREAでは`register_argc_argv`がオフのため、`-d`オプションでオン(=1)に設定する。
* XREAは開発環境ではなくデプロイ先サーバとするので、`--no-dev`をつける。ユニットテスト用のパッケージなど開発でのみ必要なものをインストールしない。そのため依存関係の警告が表示されなくなる。

```shell
-bash-4.2$ phpcli -d register_argc_argv=1 composer.phar create-project --no-dev --prefer-dist laravel/laravel myproject "5.5.*"
```

# 公開ディレクトリへのリンク
ここまでの手順で公開ディレクトリは`~/laravel/myproject/public`に生成されるので、ドキュメントルートからリンクする。

* XREAでは`~/public_html/サブドメイン`がドキュメントルートとなる。ここでは`myproject.example.net`がサブドメインの場合の例で示す

```shell
-bash-4.2$ cd ~/public_html
-bash-4.2$ ln -s ~/laravel/myproject/public myproject.example.net
```

# 確認

http://myproject.example.net にアクセスして、LaravelのWelcomページが表示されれば完了。

# 参考資料

* [Laravel Release Process](https://laravel-news.com/laravel-release-process): Laravelのリリース来歴
* [Laravel 5.5 インストール](https://readouble.com/laravel/5.5/ja/installation.html): 必要なPHPのバージョン, Composerを使ったインストール
* [PHPコマンドラインオプション](http://php.net/manual/ja/features.commandline.options.php): PHPCLI実行時の設定値の変更
* [XREAでLaravel5.6を導入する方法](https://qiita.com/t_mitarai/items/0146905d81c3db7981cb)
* [LaravelをCORESERVER(XREA)で動かす](https://qiita.com/studio15/items/d0abf6e6feb2cf3b0408)
Release Build ? 英語(31)

#『Release ビルドって何ですか？』
https://twitter.com/you_and_i/status/1090759376426565633

への返答

BuildしてみなきゃReleaseしてもいいかどうか分からない。事前にRelease Buildだって決めるのはどうかと。「うまくいったらReleaseするBuild」の略だよって教えてあげれば。
https://twitter.com/kaizen_nagoya/status/1090759948806418432

#Release ビルド の問題点
##用語
Releaseが英語でビルドがカタカナ語。

これはやめよう。

Release Build（見直し予定）
か
出荷用構築
かどちらかがよい。

##時間

構築してから出荷する。

時間的には、構築(build)が先で出荷(release)があと。

ということは、

Build for Release

がわかりやすいかも。

いや、
Build to Release
かな。

Release ビルドについて質問した人を誉めたたえよう。
IT業界って、日本に限らず、怪しい言葉が横行しているような気がする。

#用例

知人からの用例
「Assemble to order（注文が来たら組み立てろ）」

「orderは名詞でanが省略」

時間的には、orderが先で、Assembleが後。


Build to Release
より
Build for Release
だろうか。


#翻訳例

出荷用構築
http://translate.google.com

Construction for shipment

#Visual Studio
How to: Create a Release Build
https://docs.microsoft.com/en-us/cpp/build/reference/how-to-create-a-release-build?view=vs-2017

用語を詰めると理解してもらいにくくなるのと、用語を詰めないと日常会話が長くなるのの均衡。

#参考資料(reference)
なぜ計画者(programmer)はカタカナ語を使わない方がよいのか
https://qiita.com/kaizen_nagoya/items/d09e5ee549c4d9a17912

文章の書き方 - Mew
https://www.mew.org/~kazu/material/2008-bunshou.pdf

#文書履歴(document history)
ver. 0.01 初稿 20190131　早朝
ver. 0.02 Build to Release追記 20190131 朝
ver. 0.03 参考資料追記 20190131 午前9時
ver. 0.04 translate.google.com結果追記 20190131　午前9時10分 
ver. 0.05 Visual Stuido追記 20190131 午前9時20分 
ver. 0.06 Assemble to order追記 20190131 午前10時
ver. 0.07 標題追記 20200105
[React][TypeScript]create-react-app + tslint + prettier

## 概要

- create-react-appでtypescript版の雛形を作ってlinter/fomatterの環境を整えるまでの手順メモ

## 手順

### 雛形生成

- create-react-appでtypescriptのオプションを付けるとtypescriptで生成できる

```zsh
npm i -g create-react-app
create-react-app react-ts-sample --typescript
cd react-ts-sample
```

- 動作確認

```zsh
npm start
# open http://localhost:3000/
```

![react2.gif](https://qiita-image-store.s3.amazonaws.com/0/175213/1fcb94bf-86ec-dc31-9ce3-41030b9a1412.gif)


### tslintとprettierの追加

- ライブラリをインストール

```zsh
npm i -D tslint tslint-react tslint-config-prettier tslint-plugin-prettier
```
- tslint.jsonを作成

```json:tslint.json
{
  "extends": [
    "tslint:recommended",
    "tslint-react",
    "tslint-config-prettier"
  ],
  "rulesDirectory": [
    "tslint-plugin-prettier"
  ],
  "rules": {
    "prettier": true,
    "interface-name": false
  }
}
```

- .prettierrcを作成
    - 好みに合わせて変更して下さい

```json:.prettierrc
{
  "printWidth": 100,
  "singleQuote": true,
  "trailingComma": "es5"
}
```

### VSCodeの設定

- VSCodeのformatOnSaveと組み合わせるとより快適になります
- Prettierの拡張機能を追加する

![prettier](https://camo.qiitausercontent.com/6702d41b4a75a372c1dc11b73f629d75281918f4/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3137353231332f31656632396264652d333138322d303938372d653066352d3766393734626564386631662e706e67)

- TSLintの拡張機能を追加する

![tslint](https://qiita-image-store.s3.amazonaws.com/0/175213/dda447a0-c632-cf86-e862-573c89f4f47f.png)

- 保存時にprettierがかかるように設定を追加する

![user_settings](https://camo.qiitausercontent.com/e0224cb080edd2e0ee76f316218b11b7f5fe19f0/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3137353231332f64373033626366352d633538632d353533622d623665362d6232383034636234643436362e706e67)

- 以下の2つの設定を追加

```json:settings.json
{
  "prettier.tslintIntegration": true,
  "tslint.autoFixOnSave": true
}
```

## まとめ

- これらが完了するとVSCode上でのlintエラーの可視化とprettierによる自動フォーマットが可能になります

![demo.gif](https://qiita-image-store.s3.amazonaws.com/0/175213/947e39a6-cca4-8ec0-6285-42ce8cc56d07.gif)
Qiita API で自分のユーザー情報を取得するRubyのスクリプト例

Qiita API で自分のユーザー情報を取得するRubyのスクリプト例

```
TOKEN=xxxxxx ruby example.rb
```

```rb
require 'net/https'
require 'uri'

path = 'https://qiita.com/api/v2/authenticated_user'

uri = URI.parse(path)
http = Net::HTTP.new(uri.host, uri.port)

http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

req = Net::HTTP::Get.new(uri.request_uri)
req["Authorization"] = "Bearer #{ENV['TOKEN']}"

res = http.request(req)
puts res.code, res.msg
puts res.body
```

# 結果

```
200
OK
{"description":"Web系。Ruby とか。 いなうらゆうま / YumaInaura / 稲浦悠馬","facebook_id":"yumainaura","followees_count":89,"followers_count":136,"github_login_name":"YumaInaura","id":"YumaInaura","items_count":1009,"linkedin_id":"","location":"Osaka","name":"Inaura いなうら 稲浦 Yuma ゆうま 悠馬","organization":"","permanent_id":89618,"profile_image_url":"https://qiita-image-store.s3.amazonaws.com/0/89618/profile-images/1546214964","team_only":false,"twitter_screen_name":"YumaInaura","website_url":"http://twitter.com/yumainaura","image_monthly_upload_limit":104857600,"image_monthly_upload_remaining":85146345}
```








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
herokuで heroku run rake db:migrate 打って Mysql2::Error::ConnectionError になったときの対処

herokuでデプロイする際にマイグレーション実行で躓いた。

```
heroku run rake db:migrate
```
でエラー

```
Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
```

まずはソケットの場所を疑う（scaffoldで作ったデプロイ練習用のアプリなので可能性は低いが・・・）。
`config/database.yml`のproduction:socket:のパスと`mysql_config --socket`で得られるパスを確認。

```
/var/lib/mysql/mysql.sock
```
同じ。

次に`heroku config`で環境変数を確認してみる。

```
CLEARDB_DATABASE_URL:     mysql2://
LANG:                     en_US.UTF-8
RACK_ENV:                 production
RAILS_ENV:                production
RAILS_LOG_TO_STDOUT:      enabled
RAILS_SERVE_STATIC_FILES: enabled
SECRET_KEY_BASE:
```
`DABASE_URL`がない。しかも`CLEARDB_DATABASE_URL`の値が`mysql2`になっている。
herokuCLIで設定した際になにか間違えたのか？　よくわからん。
ここはherokuのpernonal/settingsでconfig Varsを追加した。

これで正常にマイグレーションできた。
私PowerShellだけど子を持つ親になるのはいろいろ大変そう

# はじめに

PowerShellから画面を表示する場合にOwnerを指定しないので親子関係をもっておらず裏に隠れてしまうのが気になっていました。

この問題について少し調べたのでまとめておきます。

# どこからOwnerを取得するか

ぐぐってみたところカレントのProcessを取得して[MainWindowHandle](https://docs.microsoft.com/ja-jp/dotnet/api/system.diagnostics.process.mainwindowhandle?view=netframework-4.7.2)プロパティでハンドルを取得してくるのをみつけました。

以下のコードで実験してみたら0が格納されていて有効なハンドルが取得できませんでした。

```powershell:console_handle_1.ps1

$process = [Diagnostics.Process]::GetCurrentProcess()
write-host $process.MainWindowHandle
```

他の方法を調べたら[GetConsoleWindow](https://docs.microsoft.com/en-us/windows/console/getconsolewindow)でコマンドプロンプトのウィンドウハンドルを取得できそうです。
以下のコードで実験してウィンドウハンドルが取得できることを確認しました。

```powershell:console_handle_2.ps1

Add-Type -Name ConsoleAPI -Namespace Win32Util -MemberDefinition '
[DllImport("Kernel32.dll")]
public static extern IntPtr GetConsoleWindow();
'

$hwnd = [Win32Util.ConsoleAPI]::GetConsoleWindow()
Write-Host $hwnd
```

# ソースコード

取得したウィンドウハンドルを以下のようにOwnerに設定します。

```powershell:show_dialog.ps1

Add-Type -AssemblyName PresentationFramework
Add-Type -Name ConsoleAPI -Namespace Win32Util -MemberDefinition '
[DllImport("Kernel32.dll")]
public static extern IntPtr GetConsoleWindow();
'

[xml]$xaml = @'
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Test"
  Height="200" Width="300" >
</Window>
'@
$reader = (New-Object System.Xml.XmlNodeReader $xaml)
$window = [Windows.Markup.XamlReader]::Load($reader)

$wih = New-Object System.Windows.Interop.WindowInteropHelper($window)
$wih.Owner = [Win32Util.ConsoleAPI]::GetConsoleWindow()

$window.ShowDialog() | Out-Null
```

これでコンソールの画面が親となった画面を表示することができました。

## 気になること

VS Codeから実行した場合は、ウィンドウハンドルは取得できますが、VS Codeが親になってませんでした。
理由はよくわからないけど、親になってVS Codeの画面が操作できなくなっても困るので、これで良しとしました。

Ownerを指定しているので親子順は固定されたのですが、親のコンソールの画面をクリックできたり、×ボタンで閉じれたりするのが不満。
親画面のハンドルがあるからEnableWindowしたりとかすればいいんでしょうけど、そこまでこだわらないことにします。


# メッセージボックスに応用

メッセージボックス表示についても、親を指定してみました。
Forms.MessageBoxの第一引数にIWin32Windowで親を指定すればよいので、
NativeWindow.AssignHandle()でハンドルを渡して作りました。
不満だった親画面が操作できる問題はメッセージボックスだと発生しないようです。


```powershell:show_messagebox.ps1

Add-Type -AssemblyName System.Windows.Forms
Add-Type -Name ConsoleAPI -Namespace Win32Util -MemberDefinition '
[DllImport("Kernel32.dll")]
public static extern IntPtr GetConsoleWindow();
'

$hwnd = [Win32Util.ConsoleAPI]::GetConsoleWindow()
$nativeWindow = New-Object Windows.Forms.NativeWindow
$nativeWindow.AssignHandle($hwnd)

$result = [System.Windows.Forms.MessageBox]::show($nativeWindow,"message","title","YESNO","Info")
write-host $result

```


# さいごに

子を持つことを想定していないコンソールのウィンドウが子を持つのはそれなりに大変なようです。

私も来週には第一子が生まれる予定です。
里帰り中の妻のデプロイ待ちなのですが、ここまでくると無事にリリースされるのを祈るしかできないのがつらいですね。

子を持つことは不安なことも多く、大変なことだとは思いますが、チームでいろいろ挑戦していきたいです。
（これが言いたかっただけの記事です）



# 私PowerShellだけど…シリーズ

[私PowerShellだけど、君のタスクトレイで暮らしたい](https://qiita.com/magiclib/items/cc2de9169c781642e52d)
[私PowerShellだけど「送る」からファイルを受け取りたい（コンテキストメニュー登録もあるよ）](https://qiita.com/magiclib/items/7529557f756af9c8d21b)
[私powershellだけどタスクトレイの片隅でアイを叫ぶ](https://qiita.com/magiclib/items/9d0cd35814b6fcff2e44)
JavaScriptでネストしたプロパティに安全にアクセスする

現時点では「4. _try」が良いように思う。

# 1. &&で連鎖する

パッケージ不要。

```js
const val = obj && obj.nested && obj.nested.property && obj.nested.property.value;
if (val === null || val === undefined) {
  console.log('Not found');
}
```

hogefugaさんからコメントを頂いたように、

```js
const obj = {a: false};
const val = obj.a && obj.a.b;
```

本来欲しいはずの`obj.a.b`の値ではなく、`obj.a` (false)が`val`に代入されてしまうという問題がある。


# 2. typyを使う

https://github.com/flexdinesh/typy

```
$ npm install --save typy
```

```js
const deepObj = {
  nestedKey: {
    goodKey: 'hello',
    superNestedKey: {}
  }
};
// safely return the value from a nested key in an object
const myObj = t(deepObj, 'nestedKey.goodKey').safeObject; // => 'hello'
// Typy won't throw undefined error for badKey.goodKey
// instead the return value will be undefined
const myObj = t(deepObj, 'badKey.goodKey').safeObject; // => undefined
```

typyは有名ではないものの、他にも `safeString` などいくつかメソッドを持ったそこそこ便利そうなライブラリ。

```js
const str = t('typy is safe').safeString; // => 'typy is safe'
const str = t(null).safeString; // => ''
const str = t(undefined).safeString; // => ''
const str = t(22).safeString; // => ''

const num = t(22).safeNumber; // => 22
const num = t('22').safeNumber; // => 0
const num = t(undefined).safeNumber; // => 0
const num = t(null).safeNumber; // => 0
```

# 3. lodashの_.getを使う

```
$ npm i --save lodash
```

```js
var _ = require('lodash');

var object = { 'a': [{ 'b': { 'c': 3 } }] };
 
_.get(object, 'a[0].b.c');
// => 3
 
_.get(object, ['a', '0', 'b', 'c']);
// => 3
 
_.get(object, 'a.b.c', 'default');
// => 'default'
```

# 4. _try

https://stackoverflow.com/a/41553572

パッケージ不要。
try～catchのコストはどんなもんだろう。[こちら](https://stackoverflow.com/questions/19727905/in-javascript-is-it-expensive-to-use-try-catch-blocks-even-if-an-exception-is-n) によるとよっぽどのことがない限り気にする必要はないっぽい。
オリジナルの関数名 `_try` は長いしタイプしづらいので変えた。

```js
function t(func, fallbackValue) {
    try {
        var value = func();
        return (value === null || value === undefined) ? fallbackValue : value;
    } catch (e) {
        return fallbackValue;
    }
}

t(() => user.address.postcode) // return postcode or undefined
t(() => user.address.postcode, "none") // return postcode or a custom string
```
ハノイの塔を用いて再帰的アルゴリズムを考えてみる。


#前提
プログラミング始めて1ヶ月の~~クソザコ~~大学生によるpythonコードの為いろいろつっこみ所がある可能性、またかなり基本的な事をあたかも難しいことのように表記している可能性が考えられるが、自己満なのでいいのである。

#経緯
Atcoderのある問題の解答の一つに

```python
def func(x):
    ...
    ...
    return null + func(y)
```
のように、関数を定義するコード内にその関数が出現するという空前絶後前代未聞の表記が現れた。

初学者の僕は、「いやいやいや、卵が先か鶏が先かかなんかのギャグか？」と思ったが、どうやらこれは再帰関数というものらしい。
ぱっと見感覚的に理解できそうだが、せっかくなのでどうやら再帰的アルゴリズムを扱うときによく出てくるらしいハノイの塔を用いて軽く考察してみる。


#ルール
おなじみハノイの塔。
・A,B,Cの順に並んだ3本の柱の柱Aに最初N段の円盤が小さいものが上になるように置かれている。
・円盤は1枚ずつ移動できる。
・自分より小さな円盤の上にその円盤を置くことはできない。
・0 < N
・Nは整数。

###入力
円盤の枚数Nを出力する。

```python:input
N
```

###出力
操作毎の動き出力する

例

```python:output
AからB
AからC
BからC
```

#考察

ともかくコードを書いてみたが再帰関数の使い方がわからないので、ネットで拾ったコードを参考に書いてみた。

```python:hanoi.py
n = int(input())

def change(n, a, b, c):
    if n == 1:
        print(a, "から", c)
    else:
        change(n-1, a, c, b)
        print(a, "から", c)
        change(n-1, b, a, c)

change(n, "A", "B", "C")
```

###結果

```
3
A から C
A から B
C から B
A から C
B から A
B から C
A から C
```
まあ他人のを真似て書いたので動いて当たり前なのである。

まず柱Aの一番下の円盤を柱Cに移す為に、柱Aの上からn-1個の円盤を柱Bに移す。
その作業にchange(n-1, a, c, b)が使え、次に柱Aにある1つの円盤を柱Cに移す。
この時、柱Bにn-1個の円盤が積み重ねてある状態のためこれまたchange(n-1, b, a, c)で完了する。

といった手順は分かる。

しかしコードの意味が分からない。
こんなに簡単でいいのか。
<br>
再帰関数の例としておそらく最も簡単な1からnまでの和を求める関数

```python:sum.py
def sum(n):
    if n == 0:
        return n
    else:
        return n + sum(n-1)
```
この例は、なんかnが0になるまでループしてるんだな～（小並）って感じで分かる。
戻り値が整数値を取るために理解しやすい。


本題のコードだが、途中で「えっ、この関数なにを返すんだっけ？」と~~なりがちである~~（僕はなった）。

とりあえずデバッガーで動きを見ようとしたが、関数だからか僕の知識不足か知らないが細かい動きが見れなかった。
<br>
なのでcountとcounterという変数を用意してあげて出力ごとにコードのどの部分でprint()が実行されているのか見ることにした。

そのコードがこちら

```python:hanoi_2.py
n = int(input())
count = 0
counter = 0

def change(n, a, b, c):
    global count
    global counter
    if n == 1:
        count += 1
        print(a, "から", c,count,counter)
    else:
        change(n-1, a, c, b)
        counter += 1
        print(a, "から", c,count,counter)
        change(n-1, b, a, c)

change(n, "A", "B", "C")
print(count)
print(counter)
```

###結果
```
A から C 1 0
A から B 1 1
C から B 2 1
A から C 2 2
B から A 3 2
B から C 3 3
A から C 4 3
4
3
```
なんとなく理解した。

n = 1になるまでif文をジグザグして、n = 1になったら下まで処理して次いく
これを繰り返す

って感じだ。（幼並）

例えばn = 3の場合、change()とprint()を略して順に書くと

(3, A, B, C)

&emsp;&emsp;(2, A, C, B)
&emsp;&emsp;&emsp;&emsp;(1, A, B, C) "AからC"
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;"AからB"
&emsp;&emsp;&emsp;&emsp;(1, C, A, B) "CからB"

&emsp;&emsp;"AからC"

&emsp;&emsp;(2, B, A, C)
&emsp;&emsp;&emsp;&emsp;(1, B, C, A) "BからA"
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;"BからC"
&emsp;&emsp;&emsp;&emsp;(1, A, B, C) "AからC"

となるわけだ。
本質はfor文と変わらないのか、、？<br>
<br><br>
「まず柱Aの一番下の円盤を柱Cに移す為に、柱Aの上からn-1個の円盤を柱Bに移す。
その作業にchange(n-1, a, c, b)が使え、次に柱Aにある1つの円盤を柱Cに移す。
この時、柱Bにn-1個の円盤が積み重ねてある状態のためこれまたchange(n-1, b, a, c)で完了する。」

これをそっくりそのままコーディングすると簡単に所望のプログラムが得られるが、それを1つ1つ追ってみるとかなりややこしい
という見た目と本質のギャップに頭が追いつかないが、眠いので考えるのは今度にしよう。

もう朝の5時だ。徹夜してしまった。



#結論
で、結局なにがしたかったんだ？

#参考
https://atcoder.jp/
https://ja.wikipedia.org/wiki/ハノイの塔
https://p--q.blogspot.com/2014/06/python13.html
http://www.howisit.jp/2018/05/01/recursive/
Realtime Databaseでは空配列や空オブジェクトを保存できない

# 概要

firebaseのRealtime Databaseでデータを保存した時に、何故かぬるぽが発生していました。

# サンプルコード

データを保存したら表示する簡単なサンプルコードです。

```js
// firebaseのconfigとかは省略

const ref = firebase.database().ref("test");

ref.on("value", snap => {
  console.log(snap.val());
});

(async () => {
  await ref.set({ i: 1, list: [1], obj: { i: 1 } });
  await ref.set({ i: 2, list: [], obj: {} });

  process.exit();
})();
```

```
{ i: 1, list: [ 1 ], obj: { i: 1 } }
{ i: 2 }
```

2回目のconsole.logでは、listとobjが消えてしまっています。どうもRealtime Databaseでは空配列や空オブジェクトをセットすると、プロパティが消えてしまうみたいです。

- https://stackoverflow.com/questions/48462093/storing-empty-arrays-in-firebase?rq=1
- https://stackoverflow.com/questions/15911165/create-an-empty-child-record-in-firebase

# 対応策
firebaseの仕様なので、クライアント側でチェックするくらいしか対応方法はなさそうです。

```javascript
ref.on("value", snap => {
  console.log({ list: [], obj: {}, ...snap.val() });
});
```

```
{ list: [ 1 ], obj: { i: 1 }, i: 1 }
{ list: [], obj: {}, i: 2 }
```

# 配列に関して補足
そもそもRealtime Databaseで配列は使わない方が良さそうでした。一応、いくつかの条件を満たせば配列を使っても問題ないらしいです。

- https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html
UnityのSimpleAnimationで速度を変える方法

##SimpleAnimationのgithubの[コード](https://github.com/Unity-Technologies/SimpleAnimation)を読みます。

```cs:SimpleAnimation.cs
public State GetState(string stateName){ 
        SimpleAnimationPlayable.IState state = m_Playable.GetState(stateName);
        if (state == null) 
            return null; 
        return new StateImpl(state, this); 
}
```

```cs:SimpleAnimationPlayable_States.cs
 public float speed{ 
         get { return (float)m_Playable.GetSpeed();} 
         set { m_Playable.SetSpeed(value);} 
 } 
```

つまり、変えたいアニメのstate持ってきてspeed項目を変えてあげればいいと。

```csharp

SimpleAnimation SA;
void Start(){
        SA = GetComponent<SimpleAnimation>();
        SA.GetState ("hogeanime").speed = 2f;
}
```
これで変えられます。