OmniAICreator/Qiita-1.07M huggingface dataset:
カウントアプリで型の変換,色の変更,if文,剰余について学ぶ

##この記事でわかる主なこと
1.Int型からString型への変換
2.テキストカラーの変更

##解決できそうなエラー
```
Cannot assign value of type 'Int' to type 'String'
```
##最終的にできるもの
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549093/d6414b2a-4528-4529-8a21-abfef1616b15.png" width=30%>               <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549093/df43bb77-7343-0733-3195-b34fa001fda4.png" width=30%>


##1.Int型からString型への変換
画面に表示されるUILabelはString型しか扱うできない。しかし、四則演算を行えるのはInt型やdouble型であるので、それらの型で計算したものをUILabelに表示するには**Int型からString型への変換**を行わなければならない。
Int型からString型への変換を以下のように行っている。

```swift

let convert = String(countNumber)
```


これで安心してUIlabelに数値を入れることができる。

##2.テキストカラーの変更
アプリの中では数字が3で割り切れる時に**(変数)%3 == 0**のようにすることで3で割り切れることを表現している。
今回は数字が3で割り切れる時のみ色を変更しているので、

```swift

numberLabel.textColor = UIColor.yellow
```

を条件の中に入れれば良い。
さらに、条件を満たさなかった時には色を戻す必要があるので、

```swift

numberLabel.textColor = UIColor.white
```
を条件を満たさなかった時のelse文の中に書く必要がある。

##全体のソースコード
```swift


import UIKit
class ViewController: UIViewController {
    var countNumber:Int = 0
    @IBOutlet weak var numberLabel: UILabel!
    @IBAction func downButton(_ sender: Any) {
        countNumber += 1
        let convert = String(countNumber)
        if countNumber % 3 == 0{
            numberLabel.text = convert
            numberLabel.textColor = UIColor.yellow
            print("\(countNumber)")
        } else {
            numberLabel.text = convert
             numberLabel.text = convert
            numberLabel.textColor = UIColor.white
        }
    }
    @IBAction func upButton(_ sender: Any) {
        countNumber -= 1
        let convert = String(countNumber)
        if countNumber % 3 == 0{
            numberLabel.textColor = UIColor.yellow
            numberLabel.text = convert
        } else {
            numberLabel.text = convert
            numberLabel.textColor = UIColor.white
        }
        
        numberLabel.text = convert
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        var convert = String(countNumber)
        numberLabel.text = convert
        numberLabel.textColor = UIColor.yellow
    }

}
```

#####GitHubURL
https://github.com/Hyperbolic4183/CountApp
Unity：2DShootingの作り方　#3

#解説動画
https://youtu.be/v8nQ2RGTlBI

・前回：https://qiita.com/simanezumi1989/items/d6c6d9358dd5d096f03f
・コードの差分可視化サイト：https://www.diffchecker.com

#コード

```GameController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

// スコアの実装
// ・UIの作成
// ・UIの更新
// ・敵と弾がぶつかったときにスコア加算＋更新
// ・Playerと弾の差別化：Tag

// ゲームオーバーの実装
//　・UIを作成
//　・敵とPlayerがぶつかったときにUIを表示
//　・リトライの実装
//　　・Spaceを押したらシーンを再読み込み

public class GameController : MonoBehaviour
{
    public GameObject gameOverText;

    public Text scoreText;
    int score = 0;
    void Start()
    {
        gameOverText.SetActive(false);
        scoreText.text = "SCORE:" + score;
    }

    private void Update()
    {
        if (gameOverText.activeSelf == true)
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                SceneManager.LoadScene("Main");
            }
        }
    }

    // スコア加算
    public void AddScore()
    {
        score += 100;
        scoreText.text = "SCORE:" + score;
    }

    public void GameOver()
    {
        gameOverText.SetActive(true);
    }
}
```

```EnemyShip.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 敵の移動：ましたに移動する
// 敵を生成：生成工場を作ってやる
// 敵に弾が当たったら爆発する
// 敵とPlayerがぶつかったら爆発する
// ------
// 敵を左右に揺らせる
// スコアの表示
// 敵を倒したときにスコアを上昇させる
// リスタートの実装

public class EnemyShip : MonoBehaviour
{
    public GameObject explosion; // 破壊のプレファブ

    // GameControllerの入れ物を作る：AddScoreを使いたいから
    GameController gameController; 
    void Start()
    {
        // GameObject.Find("GameController")
        //・ヒエラルキー上のGameControllerという名前のオブジェクトを取得
        gameController = GameObject.Find("GameController").GetComponent<GameController>();
    }

    void Update()
    {
        // 敵の移動：ましたに移動する
        transform.position -= new Vector3(0, Time.deltaTime, 0);
    }

    // 敵に弾が当たったら爆発する
    // 当たり判定の基礎知識：
    // 当たり判定を行うには、
    // ・両者にColliderがついている
    // ・少なくともどちらかにRigidbodyがついている

    // isTriggerにチェックをつけた場合はこちらが実行される
    private void OnTriggerEnter2D(Collider2D collision)
    {
        // collisionにぶつかった相手の情報が入っている：bullet, Player
        if (collision.CompareTag("Player") == true)
        {
            Instantiate(explosion, collision.transform.position, transform.rotation);
            gameController.GameOver();
        }
        else if (collision.CompareTag("Bullet") == true)
        {
            gameController.AddScore();
        }
        Instantiate(explosion, transform.position, transform.rotation);
        Destroy(gameObject);
        Destroy(collision.gameObject);
    }

    /*
    private void OnCollisionEnter2D(Collision2D collision)
    {  
    }
    */
}
```

#スタジオしまづからのお知らせ
スタジオしまづ は「プログラミング未経験でもゲームをリリース」をコンセプトに集まるオンラインサロンを運営しています。
https://camp-fire.jp/projects/view/149191
対象は以下の方としています。興味のある方はぜひ！
・独学でゲームを作れるか心配な方
・コミケで出展側として参加したい方
・一度でいいから自分のゲームを世に出したい方
・ゲームを作って憧れのゲーム会社に就職したい方
【Python】2資産ポートフォリオのリスクリターンマップを作る

[Twitter](https://twitter.com/ichiharahiroshi/status/1250566735725379584)でSPXLとTMFを組み合わせたポートフォリオのリスクリターンマップを紹介しました。

ここに、そのグラフを作るためのコードを保存しておきます。


あらかじめ以下のサイトからTMF,SPXL,VTIのcsvファイルを取得しておきます（期間はMAX）。
(本当は、取得するcodeをかければ良いのですが・・・)

TMF: [https://www.nasdaq.com/market-activity/funds-and-etfs/tmf/historical](https://www.nasdaq.com/market-activity/funds-and-etfs/tmf/historical)
SPXL: [https://www.nasdaq.com/market-activity/funds-and-etfs/spxl/historical](https://www.nasdaq.com/market-activity/funds-and-etfs/spxl/historical)
VTI: [https://www.nasdaq.com/market-activity/funds-and-etfs/vti/historical](https://www.nasdaq.com/market-activity/funds-and-etfs/vti/historical)

それぞれ、"TMF.csv", "SPXL.csv", "VTI.csv"というファイル名で保存しておきます。

#1. ライブラリの読み込み。

```python: 
#Invite frends to the party...
import numpy as np
import pandas as pd
from datetime import datetime
import seaborn as sns
sns.set()
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
```

#2. csvファイルを1つのDataFrameにまとめる関数

```python: 
def make_df(etfs):
    df = pd.DataFrame()
    for etf in etfs:
        csvfile = etf +'.csv'
        csv_data = pd.read_csv(csvfile)
        csv_data.Date = pd.to_datetime(csv_data.Date)
        csv_data = csv_data.set_index('Date')
        csv_data= csv_data.rename(columns={' Close/Last': etf})
        df[etf] = csv_data[etf]
        df = df.sort_index().dropna()
    return df
```

#3. 分散ポートフォリオ指数をDataFrameに追加する関数

```python: 
def make_port_df(df):
    #リターン算出
    rtn = (df /  df.shift(1) -1).fillna(0)

    #各比率のポートフォリオデータを作成
    for w in [9, 8, 7, 6, 5, 4, 3, 2, 1]:
        rtn['SPXL'+str(w)+' : TMF'+str(10-w)] =rtn['SPXL']*(w/10) + rtn['TMF']*(1-w/10)
    
    rtn += 1
    df = rtn.cumprod()
    
    return df 
```

#4. リスクリターンマップを作成する関数

```python: 
def rr_map(df):
    #月次リターン算出
    dfm = df.resample('M').ffill()
    m_rtn = (dfm /  dfm.shift(1) -1).dropna()

    #リスク算出
    std = (m_rtn.std())*(12**0.5)
    
    #年率リターン算出
    cum = m_rtn+1
    a_rtn = (cum.product())**(12/len(m_rtn))-1
    
    #リスクリターンマップ作成
    plt.figure(figsize=(6, 6))
    for asset in list(a_rtn.index):
        plt.scatter(x = std[asset], y = a_rtn[asset],label = asset)
    plt.xlabel('Risk')
    plt.ylabel('Return')
    plt.xlim(0,std.max()*1.1)
    plt.ylim(0,a_rtn.max()*1.1)
    plt.legend(loc = 'best')
    plt.title('Risk Return Map')
    
    plt.savefig('rr_map.png',bbox_inches="tight")
```

#4. 上記関数を実行する

```python: 
etfs = ['SPXL','TMF','VTI']
df = make_df(etfs)
df = make_port_df(df)
rr_map(df)
```
↓このグラフが表示される。
![rr_map.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341224/936c0ae3-4499-7ee9-d912-bef3d0e44714.png)

#5. まとめ
SPXLとTMFをだいたい半分ずつ持つことで、リスクリターン特性がVTIより優れたポートフォリオになりそうです（投資は自己責任でおねがいします）。

#6.次の課題
- [ ] 複数資産の分散ポートフォリオ
EC2 Amazon Linux 2でS3をマウント

EC2からS3をマウントする備忘録です。
色々方法はあるみたいですが、今回はgoofysを使用します。

# S3のバケットを作成

awscliでもできるらしいですが、AWSコンソールからS3に移動しバケットを作成しました。
ブロックパブリックアクセスのバケット設定は「パブリックアクセスをすべてブロック」にしました。

# IAMロール作成

EC2からS3にアクセスできるようにIAMロールを作成します。
新規作成、もしくは既存のロールで「AmazonS3FullAccess」ポリシーを付加します。
作成したロールを該当のEC2にアタッチします。

# SSH接続して以下を実行する

## ルートに切り替え

```shell-session
sudo su -
```

## Go、fuse、gitをインストール

```shell-session
yum install golang fuse git
```

## Goパスを設定

ホームディレクトリにパスを設定しました。

```shell-session
export GOPATH=$HOME/go
```

## goofysをインストール

```shell-session
go get github.com/kahing/goofys
go install github.com/kahing/goofys
```

## マウント用のディレクトリを作成

今回はホームフォルダ配下にしました。

```shell-session
mkdir ~/s3
```

## S3をマウント

```shell-session
$GOPATH/bin/goofys {S3のバケット名} ~/s3
```


## マウント確認

dfコマンドで確認してマウントできていたら完了です。

```shell-session
df -hT
```

```shell-session:結果
Filesystem             Type      Size  Used Avail Use% Mounted on
devtmpfs               devtmpfs  475M     0  475M   0% /dev
tmpfs                  tmpfs     492M     0  492M   0% /dev/shm
tmpfs                  tmpfs     492M  408K  492M   1% /run
tmpfs                  tmpfs     492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1             xfs       8.0G  3.0G  5.1G  37% /
tmpfs                  tmpfs      99M     0   99M   0% /run/user/0
{S3バケット名}           fuse      1.0P     0  1.0P   0% /root/s3
```
G SuiteではないアカウントのGoogle DriveデータをG Suiteに移行する

# はじめに
Google Driveのデータを別のアカウントに移行する場合、共有設定でオーナーを変更する方法があります。
ただし、G SuiteではないアカウントのGoogle DriveデータのオーナーをG Suiteのアカウントに変更することはできません。
このような場合にデータを移行する方法を記述します。

# 手順
## Google データエクスポート
下記のURLにアクセスします。
https://takeout.google.com/

#### 1. デフォルトではGoogle Drive以外のデータもエクスポート対象となるため、選択をすべて解除する。
<img width="600" alt="スクリーンショット_2020-04-21_16_38_17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354791/6f099618-7a9e-f84c-2861-547dcb31271c.png">

### 2. 下方にスクロールし、Google Driveを選択する。
<img width="600" alt="スクリーンショット_2020-04-21_16_40_31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354791/665f2eb7-39c3-0626-fca8-c12f82cf5a73.png">

### 3. さらに下方にスクロールし、「次のステップ」をクリックする。
<img width="600" alt="スクリーンショット_2020-04-21_16_41_32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354791/058898e4-72b3-3b33-a0e4-9176bacfc571.png">

#### 4. 配信方法、ファイルのサイズを下記の通り設定し、「エクスポートを作成」をクリックする。

<img width="600" alt="スクリーンショット_2020-04-21_16_43_54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354791/5ee10db5-b72b-9aae-8c0d-51b45b3eb5a7.png">

#### 5. 下記の表示となったら、エクスポートが開始されるので、完了のメールが届くまで待つ（数時間〜数日）。

<img width="600" alt="スクリーンショット_2020-04-21_16_48_38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354791/114db71f-2b85-5e29-7da8-02c8c16b751a.png">

#### 6. 下記の完了メールが届けば、ダウンロード準備完了なので、エクスポートされたアーカイブをダウンロードする。

<img width="600" alt="スクリーンショット_2020-04-21_16_51_08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354791/339a33cf-95a6-2b89-e68c-27aaee1b9ba8.png">

#### 7. 認証画面が表示された場合、パスワード入力を行う。（アカウントがエクスポート時と同じアカウントか確認する）

<img width="471" alt="スクリーンショット_2020-04-21_16_58_30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354791/f737d8fb-85f0-9d9c-f110-b4ef4d4b8722.png">

#### 8. ダウンロードが開始される。

#### 9. ダウンロード完了後、ダウンロードファイルを解凍する。

#### 10. Takeoutというフォルダ内にあるドライブというフォルダを移行先（G Suiteアカウント）のGoogle Driveのマイドライブ内にドラッグ&ドロップする。

#### 11. アップロードが完了したら、移行完了。

# まとめ
Google Drive内のファイルを個別にダウンロードする方法もありますが、Google データエクスポートを利用することで、まとめて移行ができるようになります。

# 参考
- [Google公式ヘルプ](https://support.google.com/accounts/answer/3024190)
在宅勤務なら AWS のサービスを活用しよう！

#はじめに
コロナウイルスの影響で、在宅ワークをせざるを得ない状況となりました。
皆様が少しでも良い環境で、在宅ワークを行えるように
AWS の公式ブログ、そのサービスの内容をご紹介したいと思います！
#在宅勤務について
たった数週間で多くのことが変わりました。
これまでのスタイルの生活、仕事、会議、挨拶、コミュニケーションは、しばらく姿を消しています。
友好的な握手と温かいハグは、現時点では健康的でなく、社会的にも受け入れられないものとなっています。

自分たちは、多くの人々が仕事、学校、コミュニティ環境の変化に対応するべきことを認識しています。
AWS では、お客様、コミュニティ、従業員が状況に合わせて対応できるようにするための措置を講じています。

現在、多くの都市や国々において、人々は、在宅勤務や自宅学習を求められています。
AWS のいくつかのサービスをご利用いただくことで、オフィスや教室から自宅への移行を少しだけ簡単にすることができます。
#ソリューションの概要
###Amazon WorkSpaces
仮想 Windows デスクトップ仮装 Linux デスクトップを起動でき、あらゆるデバイスでどこからでもアクセスできます。
これらのデスクトップは、リモートワーク、リモートトレーニングなどに使用できます。

###Amazon WorkDocs
他のユーザーとの共同作業を簡単にします。
場所とデバイスを問わないのは同様です。コンテンツを作成、編集、共有、および確認することができ、すべて AWS に一元的に保存されます。
###Amazon Chime
最大 100 人 (今月後半に 250 人に増加) が参加するオンライン会議 (チャットやビデオ通話など) をサポートします。
すべて単一のアプリケーションから行えます。
###Amazon Connect
着信コールやメッセージを何万人ものエージェントにルーティングする機能を使用して、コールセンターまたはコンタクトセンターをクラウドにセットアップできます。
これを使用して、エージェントが在宅勤務をしていても、緊急情報や個別のカスタマーサービスを提供できます。
###Amazon AppStream
デスクトップアプリケーションを任意のコンピューターに配信できます。
計算や 3D レンダリングに GPU を使用するものなど、エンタープライズ、教育、または遠隔医療のアプリを大規模に配信できます。
###AWS Client VPN
どこからでも AWS およびオンプレミスネットワークへの安全な接続をセットアップできます。
従業員、学生、または研究者に、既存のネットワークに「ダイヤルイン」(過去に私たちが使っていた言葉と同じ意味です) する機能を提供できます。
#料金体系について
これらのサービスの一部には、無料で簡単に開始できます。
その他は、AWS 無料利用枠で既に利用可能となっています。
詳細については、各公式サービスのホームページと、新しい Remote Working & Learning ページをご覧ください。
#在宅ワークに役立つコンテンツ
AWS では、これらのサービスと在宅勤務を可能な限り効率的に使用するのに役立つ AWS 関連コンテンツの取りまとめを開始しています。
[特別な機器はいらない Twitch で Meetup をライブストリーミングする](https://dev.to/aws/how-to-live-stream-meetups-on-twitch-without-any-special-equipment-56cb)
[Amazon Connect でリモートコンタクトセンターエージェントをすばやくセットアップ](https://aws.amazon.com/jp/blogs/contact-center/quickly-set-up-remote-contact-center-agents-with-amazon-connect/)
[Amazon Kendra、Amazon Comprehend、Amazon Translate などを使用して、学生を大規模に参加させ、教育するオンライン学習プラットフォームを構築する](https://www.linkedin.com/pulse/how-build-online-learning-platform-engages-educates-wong/)
[Jitsi 入門 – オープンソースウェブ会議ソリューション](https://aws.amazon.com/jp/blogs/opensource/getting-started-with-jitsi-an-open-source-web-conferencing-solution/)
[Amazon Chime を使用したリモートワークのベストプラクティス](https://aws.amazon.com/jp/blogs/business-productivity/best-practices-for-remote-work-using-amazon-chime/)
[Amazon WorkSpaces および Amazon WorkDocs で在宅勤務を可能にする新しいオファー](https://aws.amazon.com/jp/blogs/desktop-and-application-streaming/new-offers-to-enable-work-from-home-from-amazon-workspaces-and-amazon-workdocs/)
#終わりに
今後、様々な状況により在宅勤務が長引いたり
もしくは在宅ワークのほうが、効率的に業務を進められるという気づきがあって
本格的に、永続的に在宅ワークが主流になった場合に備えても、これらのサービスはとても役立つと思います。
何事も備えておきたい。是非今すぐご活用ください！
Pythonで毎日AtCoder #43

### はじめに
[前回](https://qiita.com/taxfree_python/items/229d58f2df01f72cf961)

### #43
[問題](https://atcoder.jp/contests/abc161/tasks/abc161_d)

**考えたこと**
コンテスト中に解けませんでした。この問題が難しいのはルンルン数を生成するコードを書けないからだと思います。私も書けませんでした。解説によると、10と9で割った余りに着目するようです。$x$を10で割った余りが0の時は一の位は0になり、生成可能なルンルン数は減ります。同様に$x$を9で割った余りが0の時も生成可能なルンルン数は減ります。なぜなら、一の位が0のとき隣合う数の差が1になるようなルンルン数は0、1しかありません。9のときも8、9しかありません。
それぞれどういったルンルン数を生成するかを整理すると、

```
x != 0 mod(10) → 10x+(x%10)-1
x != 9 mod(10) → 10x+(x%10)+1 

```
となります。これを実装すると

```python
from collections import deque

k = int(input())

lun = deque([])
for i in range(1,10):
    lun.append(i)

for i in range(k):
    x = lun.popleft()
    if x % 10 != 0:
        lun.append(10*x+(x%10)-1)
    lun.append(10*x+x%10)
    if x % 10 != 9:
        lun.append(10*x+(x%10)+1)
print(x)
```
データの両端にしかアクセスしないので、dequeを使っています

### まとめ
本番に解きたかった。余りを使った計算が苦手なので整数問題周りを練習します。ではまた。
【Ruby on Rails】Railsをインストールする

皆さまこんにちは。

前回Railsのインストールまで終わったので本日は早速アプリケーションを作っていきます。

## 新規アプリケーションの作成

今回はbodymakeという名前のアプリケーションを作っていきます。

```
$ rails _5.2.1_ new bodymake -d mysql
```

実行後みてみると、『bodymake』とできていますね！
その下にあるREADME.mdは不要なので削除してしまいましょう。
右クリック→deleteで削除できます。

### Gemfileを編集
赤枠に該当する箇所をそのように修正しましょう。
![bodymake - AWS Cloud9 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589286/68353abd-9b24-92db-b833-89141ab4eeb9.png)


さらに同じGemfileの一番下に下記を追加しましょう。

```
gem 'pry-rails'
gem 'compass-rails', '3.1.0'
gem 'sprockets', '3.7.2'
gem 'hirb'
gem 'hirb-unicode'
```

railsでは必要に応じてこのgemを随時追加していきます。

### Gemfile.lockを更新する

gemを追加しましたがこのままではまだ実行されておりません。
実行するために下記を入力しましょう。

```
$ cd bodymake
```
僕の場合bodymakeというディレクトリを作ったのでそっちに移動します。
他の名前で作った人は『cd 作ったディレクトリ名』を入力してください。

```
$ pwd
/home/ec2-user/environment/bodymake
```

pwdと入力してディレクトリが移動したか確認しましょう。
bodymakeと記載があるのでうまく移動してます。

```
$ bundle update
```
上記実行するとGemfileを更新することができます。

ひとまずこれでRailsのインストールが完了しました。

次回はデータベース周りの準備をしていきます。
ORA-01918: user ユーザ does not existとなった時の対応方法

- 環境
  - Red Hat Enterprise Linux Server release 5.11 (Tikanga)
  - SQL*Plus: Release 11.2.0.1.0
  - Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

# 事象 : いるはずのユーザを削除しようとすると怒られる
```sql
SQL> select distinct * from all_users where username like '%HOGE%';

USERNAME                          USER_ID CREATED
------------------------------ ---------- ---------
HOGE                                   100 12-DEC-17
HOGEDB                                  99 12-DEC-17
TESTHOGEDB                             121 21-APR-20

SQL> drop user testhogedb cascade;
drop user testhogedb cascade
          *
ERROR at line 1:
ORA-01918: user 'TESTHOGEDB' does not exist
```

# 原因 : USERNAMEの最後に半角スペースが入っているから
ふと、思い立ってクライアントツールを使ってSQLの結果をExcelにエクスポートして、USERNAMEの値のセルをコピーしてエディタに張り付けてみた。
USERNAMEの最後に半角スペースが入っていいた・・・。
ずっとSQL*Plusで見ていたら気が付かなかった・・・。

そもそも、なぜUSERNAMEの最後に半角スペースが入っているのか？
データベースのインポートで`impdp`コマンドを使うべきところを`imp`コマンドを使って[IMP-00038: Could not convert to environment character set's handle](https://qiita.com/ponsuke0531/items/aabb66dee21e2eb8a61b)になった。
その時に`imp`を`impdp`に変えただけでオプションを一切変えなかったら(アホでした)こうなったようだ・・・。

```bash:コマンドだけ変えてオプションを一切変えなかった
$ impdp ponsuke/password file=/path/to/dpdump/hogedb.dmp fromuser=hogedb touser=testhoge
```


## 対応 : 半角スペースを含めてUSERNAMEを指定して削除する

```sql
SQL> drop user "TESTHOGEDB " cascade;

User dropped.
```
【備忘録】AWS Lambda関数でLambda関数を呼ぶ　invoke

###Lambda関数から別のLambhda関数を呼びに行きたい時ってありますよね！
そんな時に使える方法を備忘録として残します。

[公式ドキュメント該当ページ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-sync.html)

呼び出す側のLambda関数  main

```index.js
const AWS = require('aws-sdk')
const lambda = new AWS.Lambda()

let params = {
              FunctionName: `invoked`,
              InvocationType: 'Event',
              Payload: JSON.stringify({
                id: "xxxxxxxxxx",
                message: "xxxx"
              })
            }
            console.log(params)
            // 呼び出される側のLambda関数を実行する
            lambda.invoke(params).promise()
```
呼び出される側の関数　invoked

```index.js.js
exports.handler = async (event, context) => {
console.log(event)
 }

```

#参考になるページ
[AWS Lambda 関数から 別の Lambda 関数を呼び出す方法](https://qiita.com/sy250f/items/7452a3067be2781035d6)
IMP-00038: Could not convert to environment character set's handleとなった時の対応方法

- 環境
  - Red Hat Enterprise Linux Server release 5.11 (Tikanga)
  - SQL*Plus: Release 11.2.0.1.0
  - Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

# `imp`コマンドでDumpをインポートしようとしたら怒られた

```bash
$ imp ponsuke/password file=/path/to/dpdump/hogedb.dmp fromuser=hogedb touser=testhoge

Import: Release 11.2.0.1.0 - Production on Tue Apr 21 14:04:57 2020

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

IMP-00038: Could not convert to environment character set's handle
IMP-00000: Import terminated unsuccessfully
```

# 原因 : `expdp`コマンドでエクスポートしたDumpファイルを`imp`コマンドでインポートするから
参考 : [ORACLE 11g IMP-00038 キャラクタセットが同じ場合の原因 解決方法:ＩＴみたいな　なにか！？](https://itpoino.ti-da.net/e6599097.html)

[`expdp`コマンドでエクスポートしたファイルだった・・・](https://qiita.com/ponsuke0531/items/b0fabe4628c7573b4d6f)

## 対応 : `impdp`コマンドでインポートする
[ORACLE／IMPORT（impdp）編 - オラクルちょこっとリファレンス](https://oracle-chokotto.com/ora_import_impdp.html)

```bash:うまくいった
$ impdp ponsuke/password directory=DATA_PUMP_DIR dumpfile=hogedb.dmp remap_schema=hogedb:testhogedb

Import: Release 11.2.0.1.0 - Production on Tue Apr 21 14:33:09 2020

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Legacy Mode Active due to the following parameters:
...省略...
```


# ほかの原因 : エクスポートしたDBとインポートしたDBのキャラクタセットが違うから
```sql:でキャラクタセットを確認する方法
SQL> select * from nls_database_parameters where parameter in ('NLS_LANGUAGE','NLS_CHARACTERSET');

PARAMETER                      VALUE
------------------------------ --------------------------------------------------------------------------------
NLS_LANGUAGE                   AHOGEICAN
NLS_CHARACTERSET               JA16SJISTILDE

```
N cross法 - 騒音に強い軽量なVAD(発話区間検出)

# N-cross法

ILRMAによる、音声を対象としたブラインド音源分離（BASS）を適応した際、音声が完全分離（対象としていない話者の音声をゼロにする）ではなく抑制された分離となってしまったので、こういった音声でも{VAD}できるように考案した手法です。N-cross法という名前は私が適当に付けた名前なので、検索しても多分参考文献は出てこないと思います。

目的としてはVAD用のデータセットを作るときにしゃべってない区間が不要なのでこれをなんとか取り除きたいという重いです。

# 概要

　音声の発話区間検出（voice activity detection: VAD）に用いられるゼロ交差法という手法が有りますがこれは耐騒音に弱いので、一般的には混合ガウス分布モデル (Gaussian mixture model; GMM) に基づくフレーム単位の音声・非音声識別に基づく区間検出が行われています。しかし今回のILRMAにより分離された音源では目的としない音声に対して音圧レベルの抑制は可能ではありますが完全にゼロにはできないので、GMMによる手法では必要のない部分の音声まで発話区間として扱ってしまいます。そこで背景に音声が存在していても目的とする音声を検出できる方法を実装しました。今回この手法を 「N-cross法」 と呼ぶことにします。この手法は今回のような使い方だけではなく、例えばカフェでの商談など外部の音声が混入しやすい状況であったり、音源にBGMが入ってしまった時などにも使えると思います。![Paper.スケッチ.7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543519/c0f35ff1-a8a9-78aa-6c7e-2faa3ff6d3e3.png)


# 理論
　理論としては単純で、ゼロ交差法では音声波形に対してY=0のラインでの交差頻度が高い区間を発話区間として検出しますが、この方法では小さな音声でも検出されてしまうので、N-cross法では任意のY=Nの値での交差点を利用します。このNの値を*N-cross Line*あるいは*感度*と呼ぶことにします。![Paper.スケッチ.8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543519/eaedb327-4b93-7452-c1d4-15b8539ca18a.png)

 
# 実装
 
 Pythonで実装しました。ColabとかJupyterで動かしてください。
 
```NcrossVad.py

import numpy as np
from tqdm import tqdm
import librosa

def NcrossVAD(data,N=0.02,frame = 320,threshold = 0.99):
    """
    VAD for Ncross Method
    '''
    data        :音声データ(ndarray)
    N           :N-Crossライン.背景ノイズの大きさにあわせて決めてあげてください(0~1)
    frame       :分析窓.この範囲でどれくらいN-Crossライン上の正負が切り替わったかを分析します
    threshold   :分析窓の中でどのくらい正負が切り替われば音声とみなすかの閾値です(0~1)

    return ノイズ部分がバッサリ切られたデータ
    """
    data /= np.max(np.abs(data))
    data += N

    data_pad1 = np.sign(np.pad(data, [0,1], 'constant'))
    data_pad2 = np.sign(np.pad(data, [1,0], 'constant'))
    dif = data_pad1-data_pad2

    zerocross_list = np.where(dif==0, 1, 0)[:-1]

    cnt = len(zerocross_list)

    ret=[]
    zero_cross=[]

    for i in tqdm(range(int(cnt/frame))):
        seg = zerocross_list[i*frame:(i+1)*frame]
        add = np.sum(seg)/frame
        if add < threshold:
            ret.append(data[i*frame:(i+1)*frame])
            zero_cross.append(1)
        else:
            zero_cross.append(0)
        
    return np.concatenate(ret)

data, sr = librosa.load("vadtest.wav",sr=32000)
ret = NcrossVAD(data,N=0.02,frame = 320,threshold = 0.99)
```
実行するとYouTuberみたいな喋ってない部分をばさばさカットしたみたいな音声が出てきます

元の音声
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543519/ade02ebd-1e5c-fd55-d54b-fd2c4b46abbe.png)


VADしたあとの音声
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543519/7fbece47-6714-09db-7b41-ab08cc5c4204.png)
【Ruby on Rails】アプリケーション作成前の事前準備の方法

皆さまこんにちは。

本日はWebアプリケーションを作る上で事前準備をまとめていきたいと思います。

前提として、コードはAWSのcloud9を使って実装していきます。
その辺の登録の仕方は検索してみてください（すみません）

ということでやっていきます。

## 事前準備

### ①environment create を押下する
![Your environments.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589286/fecfac70-9a36-1490-d095-867145b5fd96.png)

右上のやつです。
これを押下して作成していきます。

### ②順に入力していく
![Create a new environment.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589286/12055320-5986-a3d0-85b4-d0c2c88e3f0d.png)

2箇所入力欄がありますが、必須なのは上のだけです。
説明が必要なら下のも入力しましょう。

んで『Next step』を押下

### ③ページが遷移するがそのままもう一度『Next step』を押下
![Create a new environment (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589286/53ca6768-1181-89c6-2e04-3726de6c19a0.png)

### ④確認ページに遷移するのえ問題なければ『Create environment』を押下
![Create a new environment (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589286/0bcec190-08a4-e04a-de3e-05dee53ad069.png)

さて、これで事前準備が整いました。
ここからはまずRubyをインストールしていきます。

### Rubyをインストールする
下記手順に沿って実行してください。（ターミナルへ書いていきます）

```
$ rvm install 2.5.1
```
```
$ ruby -v
```
```
$ rvm --default use 2.5.1
```
5分くらいインストールに時間を要する作業になります。気長に待ちましょう。
文頭についている『$』はターミナルである証のようなものなので事前についています。コピペする際はそれ以降の文字からするようにお願いします。

### mysql関連ファイルのインストール
```
$ sudo yum install -y mysql-devel
```
Complete!
と最後に出ればOKです。

### mysqlの実行
```
$ sudo service mysqld start
```
Starting mysqld:
と最後に出ればOKです。

このコマンドはよく打つのでクルクルなどで登録しとくと便利です。

### bundlerのインストール
```
$ gem install bundler -v '1.17.3'
```

ここまで完了すればRubyを入れることができました。
続いてRailsをインストールしていきます。

### Ruby on Railsのインストール
```
$ gem install rails --version="5.2.1"
```
これも結構時間がかかるので気長に待ちましょう。

インストールが終わったら確認しましょう。

```
$ rails -v
```
Rails 5.2.1と出たのでOKです。


さあこれでRailsのアプリケーションを作成する準備ができました。
次回は早速アプリケーションを作っていきます。
コードを書かずにAIを構築してみる ー 失敗編

- コードを書かず、AWSのサービスを使いAIを構築してみる
- 例として、六角ボルト長の判別を行う
    - ちなみに肉眼では、ぱっと見で違いが判りにくかった
    - AIもうまく判別できていなかった　より学習データの量・質共に向上させる必要がある

## 学習データの作成

### 学習データの拡張

[参考](https://qiita.com/y_k_individual/items/624e3b34a9bdefff01d1)

### 学習データ数の見積

- パラメータ: 1（ボルト長）

    - [10倍の法則](https://lionbridge.ai/ja/articles/how-much-ai-training-data-do-you-need/)より: 学習データ数 10以上

    回転方向数 * マスク・切抜パターン数 * 撮影枚数 > 10  

  ここで、  
    マスク・切抜パターン数 = 3パターン  
    回転画像数 = 4方向  
  なので、  
  必要撮影枚数は最低1枚以上  

学習結果のテスト用も含め、今回は2つのボルトを15枚ずつ 計30枚撮影する  
学習データ数は計 360となる

### 学習データの登録

- S3に上げる前に余白の切取り・正規化・回転処理・マスク・切り抜き処理は済ませておく
- Amazon SageMaker Ground Truthでラベリングする

参考：
[Amazon SageMaker Ground Truth を試してみる](https://qiita.com/SatoshiGachiFujimoto/items/e4ab624d3527237ca9e9)

## 学習

- **Amazon Rekognition Custom Labelsは2020/04現在東京リージョンでは使えない**

- 学習データ例：20mm
![study_20mm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609106/953d1bdd-9c22-9312-d426-bd9be8f6afea.png)

- 学習データ例：25mm
![study_25mm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609106/b53ffc06-da57-7ca0-be8c-76fe62cbf5b8.png)




参考：  
[Amazon Rekognition Custom Labels でアーモンドとピーナッツの判別モデルを作ってみた。](https://qiita.com/KC_NN/items/d265eddcbdc8a47ed88c)
[Amazon SageMaker 物体検出モデルの構築 ～Honey Bees～](https://qiita.com/SatoshiGachiFujimoto/items/6c3ef71a89b58e8c64f3)
### 学習データセットの作成

先ほど作ったAmazon SageMaker Ground Truthのデータを使う

![data_set.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609106/f78c1569-2df7-70ad-40c2-1ed4252ba6f8.png)


### 学習実行

![study.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609106/e029476f-ae15-a807-0a8e-40d274af43d5.png)


- 今回は40分で終了


### 学習結果評価

![study_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609106/5d348802-1bc8-c8ae-9959-5d967c0ede26.png)

- この時点ではまずまずの結果だとおもっていた

[各パラメータの意味](https://qiita.com/dl_from_scratch/items/4efdf647b397d794cd67)

参考：
[Amazon Rekognition Custom Labels を使って自分ちの猫を見分ける！](https://qiita.com/clockpulse/items/fe1f7ce6a130e9abe1c6)

## テスト

CLIにて確認  
**2020/04現在 Windows最新版CLI未対応**

![result-20mm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609106/f477bbbe-1856-349a-999d-792057266818.png)




*!???*
![result-25mm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609106/2664c562-6642-dfc5-3e57-0781fb586576.png)

## まとめ

- 学習時の評価とは違い、実際にはうまく判別できていなかった
    - より学習データの量・質共に向上させる必要がある
- Sagemakerほど機能は豊富でない
    - チューニングはできない　AWSのアルゴリズムに完全にお任せである
    - 学習を中断することはできない  
    参考：
    [Amazon SageMakerの自動モデルチューニングにおいて学習ジョブの早期停止機能がサポートされました – Amazon SageMaker Advent Calendar 2018](https://dev.classmethod.jp/articles/2018advent-calendar-sagemaker-20181219/)
- 複数の物体の判別はできない

    - sample-20mm-25mm.png
      ![sample-20mm-25mm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609106/f77a6cd5-9f44-6d91-65d7-f57f36adfadb.png)
     ![result-20mm-25mm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609106/67d958df-7d40-f09c-e445-40e39d37d921.png)
1分でわかるBootstrap4の書き方

Bootstrap4を実際に書き始めるまでの基礎をまとめました。

```html:CDN
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">

<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
```
　
前提として、Bootstrapの要素は`body`直下に`container`クラスの`div`で囲います。
# marginとpadding


Bootstrapでは、クラスを用いてmarginとpaddingを表し、**プロパティ 上下左右-サイズ**の型で記述します。(例: mt-4 , p-auto)

|プロパティ|内容|上下左右|内容|サイズ|内容|
|:--|:--|:--|:--|:--|:--|
|m|margin|t|top|0|0|
|p|padding|b|bottom|1|*0.25|
|||l|left|2|*0.5|
|||r|right|3|*1|
|||x|left,right|4|*1.5|
|||y|top,bottom|5|*3|
||| |top,bottom,left,right|auto|auto|

#グリッドシステム

Bootstrapでは、要素の横1行を`row`クラスの`div`タグで区切り、12等分した1列をカラムと呼びます。
![無題 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424736/3f081a9a-01be-7261-173b-2292beabd9b7.png)
カラムは、クラス名に**col-画面サイズ-サイズ**の型で記述します。(例: col-md－6 , col-10)

|画面サイズ|内容|サイズ|内容|
|:--|:--|:--|:--|
||<540px|1|1/12rem|
|sm|540px|2|2/12rem|
|md|720px|3|3/12rem|
|lg|960px|4|4/12rem|
|xl|1140px|...||
|offset|余白|12|1rem|

#参考文献
詳しい内容やコンポーネントは公式ドキュメントが参考になります↓ ↓
[公式ドキュメント](https://getbootstrap.com/docs/4.4/getting-started/introduction/)
AtCoder Programming Guide for beginners(APG4b)をPHPで解く 4章（Exはありません。）


# 4.01 include ディレクティブ

include文は指定されたファイルを読み込み、評価する。

※PHPでAtCoderを解く分には使用しない。


# 4.02 名前空間

**名前空間**によって、名前の衝突を避けることができる。

名前空間の定義は以下のように行う。

```php
namespace 名前空間名;
```

名前空間に属する関数を利用する時は、以下のように行う。

```php
名前関数名\関数名;
```

# インポート系シンタックス

## requireとrequire_once

`require`は指定したファイルを読み込む。
もし、ファイルを読み込めたかった場合は、Fatal Errorを発生する。


`require_once`を使用すると、既に読み込まれている場合は再読み込みを行わない。
再読み込みが行われて、変数などが再定義されると困る場合は、`require_once`を使う。


## includeとinclude_once

`include`は、指定したファイルを読み込むという点では、requireと同じ。
ファイルが読み込めなかった場合は、警告を出すのみで、処理は継続する。


`include_once`を使用すると、既に読み込まれている場合は再読み込みを行わない。


## use

`use`は、指定した名前空間のクラスを参照できるようにする。
参照したいクラスのnamespaceとクラス名を指定する。
requireやincludeはファイルを指定するのに対して、useはクラス名、名前空間名を指定する。
ローカルPCでAWS KMSを使った処理をテストする

KMSを使った処理をローカルPCでテストしたときのメモ。

## 必要なもの

* Java開発環境
* Docker

[ソースはこちら](https://github.com/wenas/kms-local-test)

## 実行手順


### 1.[local-kms](https://github.com/nsmithuk/local-kms)の準備

AWS SDKから呼び出すlocal-kmsをコンテナで起動する。

今回は暗号化と復号のテストをするので、暗号化で使用するKeyを設定する。
local-kmsのドキュメントそのままに、seed.yamlファイルを作成する。

```yaml
Keys:
  - Metadata:
      KeyId: bc436485-5092-42b8-92a3-0aa8b93536dc
    BackingKeys:
      - 5cdaead27fe7da2de47945d73cd6d79e36494e73802f3cd3869f1d2cb0b5d7a9

Aliases:
  - AliasName: alias/testing
    TargetKeyId: bc436485-5092-42b8-92a3-0aa8b93536dc
```

yamlを作成したら、local-kmsを起動する。

```
docker run -p 8080:8080 \
--mount type=bind,source="$(pwd)"/init,target=/init \
nsmithuk/local-kms
```

### 2.AWS SDKの準備

KMSClientインスタンスの生成時にEndpointConfigurationからlocal-kmsにアクセスするように指定する。
リージョンはなんでもいい。

```java
    // EndpointにローカルKMSを指定.RegionはどこでもOK
    AwsClientBuilder.EndpointConfiguration endpointConfig =
        new AwsClientBuilder.EndpointConfiguration("http://localhost:8080/", "ap-northeast-1");

    kmsClient = AWSKMSClientBuilder.standard().withEndpointConfiguration(endpointConfig).build();
```

あとは生成したKMSClientから必要なメソッドを呼ぶ。
local-kmsはKMSと同じように暗号化と復号を実行してくれる。カスタマーキーの登録もできる。
AWSにデプロイしたり、KMSのセットアップしなくていいので楽です。


ちなみに、呼び出されたlocal-kms側のLogはこんな感じ。アカウント、リージョンのところは適当っぽい。

```
Encryption called: arn:aws:kms:eu-west-2:111122223333:key/bc436485-5092-42b8-92a3-0aa8b93536dc
```


## 参考

* [local-kms](https://github.com/nsmithuk/local-kms)
* [データキーの暗号化と復号化](https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/programming-encryption.html)
AWS Lambda関数でNode.js レイヤーを作る 

#対象者
AWSでLamdbaを使っている人/どんなことができるのか調べている人
LINEBotをサーバーレスで作りたい人
Lambdaのレイヤーという機能を知らない人/興味ある人
#下準備
とりあえずデスクトップに移動
`$ cd Desktop`
ディレクトリ作る
`$ mkdir nodejs`
nodejsディレクトリに移動
`$ cd nodejs`
初期化
`$ npm init -y `
レイヤーにしたいパッケージをインストール
`$ npm i xxxxx`
ex)LINEBotのSDKをインストールする場合
`$ npm i @line/bot-sdk`
nodejsディレクトリ自体をzipファイルに圧縮して下準備完了


#AWSコンソール
ログイン→Lambda→レイヤー→レイヤーの作成
<img width="910" alt="スクリーンショット 2020-04-21 16.53.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/05e5a9fe-6d1b-f383-f4a5-e5973d09130b.png">
名前はそのパッケージが分かる名前ならなんでもいい。
↓例えばの完成図
<img width="891" alt="スクリーンショット 2020-04-21 16.55.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/de3910fe-108f-4746-4ba2-40d3cb39d238.png">


#Lambda関数で読み込む

```index.js
const line = require('@line/bot-sdk')
```
こんな感じでレイヤーを使うことができます！
毎回全ファイルをZipしてアップロードしている人には超おすすめです（これを知ってから超楽になった。）
【PHPで解いてみた】4章 C++入門 AtCoder Programming Guide for beginners (APG4b)


#4.01.includeディレクティブ
##キーポイント
* ソースファイル：ソースコード書いてあるファイル
* ライブラリ：複数のファイルなどをまとめて便利に使えるようにしたものを
* requireとincludeは、別ファイルに書かれているソースファイルやライブラリを今いるソースファイルに読み込んでいる。
    * requireとincludeの違い 
        *  require：致命的なエラー（Fatal）となり処理を停止
        *  include：警告（Warning）となり処理は継続

#4.02.名前空間

##キーポイント
* プログラムにおいて、クラスや関数などの名前の衝突を防ぐために名前空間を使用して、それぞれグループ化。
* 「クラス」「インターフェイス」「関数」「定数」が名前空間お影響を受ける。
* 読み込んだクラスや関数などと名前が衝突することを防ぐ
git-credential.helperの認証情報を消す

[Git-for-Windows](https://gitforwindows.org/)でデフォルト設定の場合、`git-credential-manager.exe`によってレジストリに保存されます。

```bash
$ git config --show-origin --get credential.helper
file:C:/Program Files/Git/etc/gitconfig manager
```

普段は公開鍵認証を使っているけど、何かの拍子でうっかりパスワードが保存されてしまった人は、
「コントロール パネル\ユーザー アカウント\資格情報マネージャー」の「Windows資格情報」にある
`git:`で始まるやつを全部消してしまいましょう。
２、import を楽になる

新たなスクリプトを書く時、毎回importを書くか？前のコードをコピペするか。内容は難しくないが、時間がかかります。
![import.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263439/9325cf65-b6fd-7d70-7181-2b809ea180ea.jpeg)

pyforestを使うと、importを書く作業が楽にする。　
例：
![Jupyter.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263439/3b0f6430-7be1-bbfd-5244-44f10aa970fa.gif)
何もimportしなくでも、pandaを使えます。

###インストール
(Python3.6以上が必要)

```python
pip install pyforest
```
###使い方
```python
from pyforest import *
```
一行を書くのみで、登録済のライブラリーを使えます。

JupyterやIPythonを使えば、pyforestがそれ自体を自動起動に追加するので、上記の一行も必要ない。

スクリプトが完成すると、下記コマンドでスクリプトが関わっている全てのライブラリーを見ることができる。

```python
active_imports ()
```
スクリプトが使用したライブラリーしかimportしないので、スクリプトが重くならないはず。

###新たなライブラリー追加
pyforestは主流のデータサイエンスライブラリをサポートしている。例えば、pandas、numpy、matplotlib、seaborn、sklearn、tensorflowなどがある。(詳細はpyforest/_imports.pyを参照)

新規ライブラリーを追加時、user_specific_imports.pyファイに、一行を追記すればよい。

```python:user_specific_imports.py
TEMPLATE_TEXT = """# Add your imports here, line by line
# e.g
# import pandas as pd
# from pathlib import Path
# import re
"""
```

目次　[非IT業種のITメモ](https://qiita.com/ousrok/items/135734b5f66afb497253)
anyenvでインストールしたnodenvのインストールリストを更新した話

## node.jsのホームページで推奨版のバージョンを確認してみた
  https://nodejs.org/ja/
<img width="803" alt="スクリーンショット 2020-04-21 16.19.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76063/c10c7269-5050-cfcd-035a-c25568ac6e22.png">

## インストールしてるnode.jsのバージョンを確認してみる

```
$ node --version
v10.13.0
```

だいぶ古い。。。

## nodenvでインストールできるバージョンを確認してみる

```
$ nodenv install -l
0.1.14
0.1.15
0.1.16
...
11.10.1
11.11.0
11.12.0
```

12のメジャーバージョンが無い。。。

## anyenvのgithubページを覗いてみる
  https://github.com/anyenv/anyenv

  README.mdの最後にPluginsと[znz/anyenv-update](https://github.com/znz/anyenv-update)と言う気になるリンクがある。
  もちろんリンクをクリック！

## anyenv-updateをインストール

```
$ mkdir -p $(anyenv root)/plugins
$ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
$ anyenv update
```

インストールと使い方を実行する。
すごい更新されてる感じがする。

## もう一度nodenvでインストールできるバージョンを確認してみる

```
$ nodenv install -l
0.1.14
0.1.15
0.1.16
...
12.16.2
...
13.11.0
13.12.0
13.13.0
```

出てきた！（メジャーバージョン13まで出てきた）

## 推奨版のnode.jsをインストールする

```
$ nodenv install 12.16.2
$ nodenv rehash
```

## インストールしたバージョンに切り替える

```
$ nodenv global 12.16.2
```

## 最後にインストールしたnode.jsのバージョンを確認する

```
$ node -v
v12.16.2
```

おしまい👏👏👏
Jupyter lab でインタラクティブなプロットを行うメモ

## 背景

Jupyter lab で, パラメータを変えて画像処理結果を表示したり, 数値プロットしたい.

## 方法

ipywidgets(2D) を使う.

https://ipywidgets.readthedocs.io/en/latest/examples/Using%20Interact.html

ipywidgetsでインタラクティブなグラフを作る
https://qiita.com/a-lilas/items/4b0664862cc13bd9a8b8

Interactive Controls in Jupyter Notebooks
https://towardsdatascience.com/interactive-controls-for-jupyter-notebooks-f5c94829aee6

ありがとうございます.

itkwidgets(2D, 3D(WebGL))

https://github.com/InsightSoftwareConsortium/itkwidgets

itkwidgets は JupyterLab の Extensions でインストールできます.


## トラブルシュート

```
slider(f, x=10)
```

を実行すると,

```
<function __main__.f(x)>
```

などと出る.

pip でインストールしている場合, jupyter 側で拡張を有効にしておく必要があります.
ipywidgets の場合は以下.

```
$ jupyter nbextension enable --py widgetsnbextension
```

Jupyter lab の場合は, さらに

```
$ jupyter labextension install @jupyter-widgets/jupyterlab-manager
```

とします(もしくは, JupyterLab GUI の Extensions でもインストールできます)

https://towardsdatascience.com/interactive-controls-for-jupyter-notebooks-f5c94829aee6

同様に, 他のモジュールを使って `<function>` などが表示されてしまうとき, 拡張の有効化が行われているか確認しましょう.
Gitの脆弱性を回避するためのWindowsでのGitアップデート方法

Gitに深刻な脆弱性が見つかったとニュースになっていて、自分の環境を見直したときにアップデートが必要だったので、その手順を残しておきます。
Windowsでのアップデート方法になります。

#忙しい人のために結論
以下のコマンドを打ち込むだけです。

```
git update-git-for-windows
```


#今回のアップデート対象バージョン
今回アップデートすべきバージョンは以下の通りになります。（これより古いバージョンの人は早くアップデートして♥）

- git 2.17.3およびこれよりも前のバージョン
- git 2.18.2およびこれよりも前のバージョン
- git 2.19.3およびこれよりも前のバージョン
- git 2.20.2およびこれよりも前のバージョン
- git 2.21.1およびこれよりも前のバージョン
- git 2.22.2およびこれよりも前のバージョン
- git 2.23.1およびこれよりも前のバージョン
- git 2.24.1およびこれよりも前のバージョン
- git 2.25.2およびこれよりも前のバージョン
- git 2.26.0およびこれよりも前のバージョン

[引用元：Gitに認証データ窃取の脆弱性、アップデートを](https://news.mynavi.jp/article/20200418-1018783/)

#バージョンの確認方法
おなじみのコマンドを打ち込んでください。

```
git --version
```

Git bash上で実行
![2020-04-21 (3)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105911/15173b1c-30e0-671a-3cab-ab7e1e6bb69d.jpeg)


コマンドプロンプトで動く場合（これより以下の画像はコマンドプロントで実行します）
![2020-04-21 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105911/52e1f8f3-1384-b6ae-0821-0d6b1f7ddd93.png)

脆弱性のあるバージョンですので、早急にアップデートしましょう。

#アップデート
上の結論でも書いたコマンドを実行します。

```
git update-git-for-windows
```


![2020-04-21 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105911/2f75d558-a8b4-5ecb-10fd-a426dca9dca3.png)
イエスノーを問われますので`y`を入力してエンター。
するとダウンロードが始まりますので、しばらくお待ち下さい。
ダウンロードが完了するとインストール管理者権限を問われます。
管理者でコマンドを実行すると省略できます。


#親の顔並に見たインストール
![2020-04-21 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105911/a973334c-5d6d-1f88-a1f2-7152e74177bc.png)

基本は特にいじらずにインストールをクリックするだけで問題ありません。
古いバージョンの場合、新しく追加されているオプションが出てくるかもしれません。

#最後に
新しいバージョンになっているかを確認して終わりです。
同じくコマンドを打ち込んでください。

![2020-04-21 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105911/5f939a3d-ce72-12aa-0f2f-0f6e286f1d30.png)


かなり簡単にアップデートできますので、必ずアップデートしましょう！

#コマンドが実行できない人へ
バージョンによってはこのコマンドが実行できないとのことなので、そういう人は公式からインストーラーをダウンロードしてインストールしましょう！！！！！！
Vueの監視プロパティwatchで配列やオブジェクトの変更を監視しても変更時取得される古い値と新しい値が同じな件

リンク先の赤いびっくりマーク参照。
まーそういうことよね（・・｀
https://jp.vuejs.org/v2/api/index.html#vm-watch

>オブジェクトまたは配列を変更する(というよりむしろ置換する)とき、それらは同じオブジェクト/配列を参照するため、古い値は新しい値と同じになることに注意してください。Vue は変更前の値のコピーしません。

なのでdeep watchとかで配列やオブジェクトを監視する際旧値が必要な場合は
dataに旧値を手動保存しときましょーね
[Android]GoogleMap上ランドマークのストリートビュー表示


# GoogleMap上ランドマークのストリートビュー表示

以下の手順となります。
・ランドマークからPlaceIDを使ってplace/details API 実行して情報取得
・imageViewに表示するためライブラリ導入
・ストリートビュー表示する

## ランドマークからPlaceIDを使ってplace/details API 実行して情報取得
https://qiita.com/myatthinkyu/items/efc901d88a5f9d031c4f

## imageViewに表示するためライブラリ導入
```
implementation "com.github.bumptech.glide:glide:4.8.0"
```

## ストリートビュー表示する

```
buildingInfo.firstOrNull()?.let {
                var location = it.result!!.geometry!!.location
                var locationlatlng = location!!.lat.toString()+"," + location!!.lng.toString()

                val imageUri = Uri.Builder().apply {
                    scheme("https")
                    path("maps.googleapis.com/maps/api/streetview")
                    appendQueryParameter("size", "400x300")
                    appendQueryParameter("location", locationlatlng)
                    appendQueryParameter("key", BuildConfig.GOOGLE_API_KEY)
                }

                var imageview = findViewById<ImageView>(R.id.street_view_image)
                Glide.with(this).load(imageUri.toString()).into(imageview)

            }
```
オフライン環境でalpineのapkインストールを行う

## 概要
ネットワークにアクセスできない環境などでローカルパッケージを使ってapkのインストールを行う方法です。
alpineのバージョンは3.11.5で確認しています。

## パッケージのダウンロード
まずネットワークの使える環境でパッケージのダウンロードを行います。
Rオプションを指定して依存するパッケージごとまとめてダウンロードします。

```
# apk fetch -R curl
Downloading libcrypto1.1-1.1.1d-r3
Downloading curl-7.67.0-r0
Downloading busybox-1.31.1-r9
Downloading ca-certificates-20191127-r1
Downloading libssl1.1-1.1.1d-r3
Downloading libcurl-7.67.0-r0
Downloading nghttp2-libs-1.40.0-r0
Downloading musl-1.1.24-r2
Downloading zlib-1.2.11-r3

# ls
busybox-1.31.1-r9.apk            curl-7.67.0-r0.apk               libcurl-7.67.0-r0.apk            musl-1.1.24-r2.apk               zlib-1.2.11-r3.apk
ca-certificates-20191127-r1.apk  libcrypto1.1-1.1.1d-r3.apk       libssl1.1-1.1.1d-r3.apk          nghttp2-libs-1.40.0-r0.apk
```

## パッケージのインストール
インストールを行いたい環境で以下のコマンドを実行します。
パッケージは適宜必要なものを指定してください。

```
# apk add --allow-untrusted --no-network --repositories-file=repo.list *.apk
(1/4) Installing ca-certificates (20191127-r1)
(2/4) Installing nghttp2-libs (1.40.0-r0)
(3/4) Installing libcurl (7.67.0-r0)
(4/4) Installing curl (7.67.0-r0)
Executing busybox-1.31.1-r9.trigger
Executing ca-certificates-20191127-r1.trigger
OK: 7 MiB in 18 packages
```
https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Add_a_local_Package
-bash: npm: command not found の普通じゃない対処法

# 環境
Mac OS X ver10.14.5

# 経緯
nodebrew でインストールしたあと、パスを通して、一通り `npm -v` や `node -v`でバージョン確認できていました。
PCを再起動が原因と思われるが、`-bash: npm: command not found`が出るようになってしまった。
パスの設定を見直して、ターミナルの再起動、Macの再起動を図るも改善せず。
ただ、`nodebrew -v`は認識する。。。なぜ？？？

調査する過程で、インストールの参考サイトを見ているときに、別な確度に気づいたので共有します。

# nodebrew インストール参考サイト
https://qiita.com/mame_daifuku/items/373daf5f49ee585ea498

# 解決方法
結論から書くと、パスの指定方法を変更しました。
`~/.bash_profile`に以下を追記。

```terminal:mac
export PATH=/usr/local/var/nodebrew/current/bin:$PATH
```

通常、どの参考サイトを見ても以下の記述が一般的です。というか、僕もこれで動いていたんですが・・・。

```terminal:mac
export PATH=$HOME/.nodebrew/current/bin:$PATH
```

（ちなみに、わかってると思いますが、`:$PATH`を省略すると、大変なことに・・・ｗ）

これを何度も行いますが、一向に改善せず。
ファイルも実際にあることを確認してます。
ターミナルも再起動。
なんなら、`source ~/.bash_profile`も・・・。

うーん、なんでだろう？

参考サイトの手順をもう一度見直す。。。
試しに、以下を実行してみました。

```terminal:mac
nodebrew setup
```

nodebrewのセットアップです。

すると、以下の記述が・・・！

```terminal:mac
Fetching nodebrew...
Installed nodebrew in /usr/local/var/nodebrew

========================================
Export a path to nodebrew:

export PATH=/usr/local/var/nodebrew/current/bin:$PATH
========================================
```

あれ、、、
PATHの記述がちょっと違う・・・？
まさか・・・と思い、冒頭の通り追記すると、無事に`npm -v` `node -v`が確認できました。

めでたしめでたし。。。

なんだか行き詰まった方の参考になれば幸いです。
#Ruby + #rspec + VCR で 外部接続のテストをする、わりと最小の書き方

# code

```rb
# https://relishapp.com/vcr/vcr/v/5-1-0/docs/getting-started

# gem install vcr
# gem install webmock
# gem install faraday

require "vcr"
require "faraday"
require "pry" # for debug

VCR.configure do |c|
  c.hook_into :webmock
  c.cassette_library_dir = 'cassettes'
  c.debug_logger = File.open("vcr.log", 'w')
end

describe do
  it do
    VCR.use_cassette('example') do
      response = Faraday.get("https://example.com")
      expect(response.success?).to be true
    end
  end
end

```

# result

```

  is expected to equal true

Finished in 0.04331 seconds (files took 1.16 seconds to load)
1 example, 0 failures
```

# Original by Github issue

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











<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
MyBatisのMapper XMLでJavaの列挙型(Enum)を使う方法 

# はじめに
MyBatisのMapper XMLにおいて、
ネット上に定数(static final)を参照するコードはあるものの、
列挙型(enum)を参照するコードはあまり見かけなかったので記事にしました。

## インストール
```groovy:build.gradle
    compile 'org.mybatis:mybatis:3.5.2'
```

## 列挙型サンプル
```java:SampleEnums.java
package com.example;

public class SampleEnums {

    public enum Color {
        RED("1"), GREEN("2"), BLUE("3");

        private final String code;

        private Color(final String code) {
            this.code = code;
        }

        public String getCode() {
            return this.code;
        }
    }
}
```

## Mapper XMLサンプル(コードを設定)
```
<select id="findByColorIsBlue" resultType="SampleDto">
    SELECT *
      FROM SAMPLE_TABLE
     WHERE COLOR = '${@com.example.SampleEnums$Color@BLUE.getCode}'

<!-- 生成されるSQL
    SELECT *
      FROM SAMPLE_TABLE
     WHERE COLOR = '2'
-->
</select>
```

## Mapper XMLサンプル2(名称を設定)
```
<select id="findByColorIsBlue" resultType="SampleDto">
    SELECT *
      FROM SAMPLE_TABLE
     WHERE COLOR = '${@com.example.SampleEnums$Color@BLUE}'

<!-- 生成されるSQL
    SELECT *
      FROM SAMPLE_TABLE
     WHERE COLOR = 'BLUE'
-->
</select>
```
【SharePointをマスターしよう】実践！列の書式設定　サンプルコード付き

SharePoint をカスタマイズするための「列の書式設定」って難しいですよね。
「jsonってどんな風に書けばいいのかわからない💦」という方が多いのではないでしょうか？
今回は **列の書式設定**で即利用できるものをいくつかまとめました。
　
　
**※本記事は、はてなブログに移行しました。
　記事は最新化して情報も追加しています。よろしければそちらをご覧ください。**
　

**[・【SharePoint】実践！列の書式設定　サンプル１](https://kurattyodiary.hatenablog.com/entry/sprowcreate-1)**
**[・【SharePoint】実践！列の書式設定　サンプル２](https://kurattyodiary.hatenablog.com/entry/sprowcreate-2)**
GITHUB 作成方法


①GITHUBの登録をする
②GITHUBディスクトップのインストールをする

GUIで簡単操作！GitHub Desktopを解説します
https://style.potepan.com/articles/8753.html

リポジトリをクローンする
https://help.github.com/ja/desktop/contributing-to-projects/cloning-a-repository-from-github-to-github-desktop


【初心者向けガイド】GitHubの基本的な使い方の入門 – 2019
https://howpon.com/9474#Git
※参考資料等を頂く事が出来る！
SQLの基礎知識・文法

# 背景
SQLの基礎知識を備忘録としてまとめました！

## 基礎知識
mysqlの設定 (ターミナル上)

```ruby


mysql -u root                   # mysqlに接続

CREATE DATABASE データベース名;    # データベース作成

USE データベース名；                # データベース選択

CREATE テーブル名(カラム名　型);　   # テーブル作成

```

SQLのよく使うコード

```ruby

ALTER TABLE テーブル名 ADD(カラム名 型);                   # カラムの追加

ALTER TABLE テーブル名 CHANGE 古いカラム名 新カラム名 新型;    # カラムの修正

ALTER TABLE テーブル名 DROP カラム名;                      # カラムの削除

SHOW COLUMNS FROM テーブル名;                            # テーブル構造の確認

INSERT INTO テーブル名 VALUES(値1,値2...);                # 全カラムに値を入れていく

INSERT INTO テーブル名(カラム名1,...) VALUES(値1,...);      # 特定のカラムに値を入れる

UPDATE テーブル名 SET 変更内容 WHERE 条件;                 # データの更新

DELETE FROM テーブル名 WHERE 条件;                        # データの削除

SELECT カラム名                                           # カラムを検索(*で全てのデータを取得)

FROM テーブル名                                           # 検索するテーブルを指定する

WHERE NOT 条件                                           # 条件が当てはまらないもの

WHERE カラム名 BETWEEN 下限 AND 上限                       # カラムのデータの上加減を設定

WHERE カラム名 IN(値1,値2,...)                             # カラムのデータに値が含まれているもの

CONCAT(文字列1,文字列2)                                   # 文字列を結合させる

SELECT 取得するデータ AS(※省略可) 別名                       # カラムに別名をつける

DISTINCT カラム名                                         # 重複する行を除外する

GROUP BY カラム名　                                        # 指定したカラムが同じ値を持つデータをまとめる

SELECT COUNT(カラム名)                                     # NULLでないデータの数を取得

FROM テーブル名1 
JOIN テーブル名2
ON テーブル名1.カラム名1=テーブル名2.カラム名2                   # テーブル同士を結合させ、データを紐付けさせる

```