OmniAICreator/Qiita-1.07M huggingface dataset:
Markdown記法はやりたくない

# レイアウト

```
# やりたくない
## やりたくない
### やりたくない
#### やりたくない
##### やりたくない
###### やりたくない
```
# やりたくない
## やりたくない
### やりたくない
#### やりたくない
##### やりたくない
###### やりたくない
```
- やりたくない
- やりたくない
    - やりたくない
```
- やりたくない
- やりたくない
    - やりたくない

```
1. やりたくない
2. やりたくない
    1. やりたくない
```

1. やりたくない
2. やりたくない
    1. やりたくない

```
- [ ] やりたい
- [x] やりたくない
```

- [ ] やりたい
- [x] やりたくない

# 装飾

```
**強調かつ太字にしたくない**
```

**強調かつ太字にしたくない**

```
*強調かつ斜体にしたくない*
```

*強調かつ斜体にしたくない*

```
~~打ち消したい~~
```

~~打ち消したい~~

```
`コードのインライン表示したくない`
```

`コードのインライン表示したくない`

```
>引用したくない
>>引用したくない
```

>引用したくない
>>引用したくない

# 挿入

リンク

```
[title](http://...)
```

[title](http://...)

画像埋め込み

```
![alt](http://...)
```

![alt](http://...)

水平線

```
---
```

---

コードタイトル

    ```ruby:qiita.rb
    puts 'code with syntax'
    ```
```ruby:qiita.rb
puts 'code with syntax'
```

Markdownのエスケープ

```
\
```

# テーブル
```
| Left align       |       Right align |    Center align    |
|:-----------------|------------------:|:------------------:|
| This             |              This |        This        |
| column           |            column |       column       |
| will             |              will |        will        |
| be               |                be |         be         |
| left             |             right |       center       |
| aligned          |           aligned |      aligned       |

```

| Left align       |       Right align |    Center align    |
|:-----------------|------------------:|:------------------:|
| This             |              This |        This        |
| column           |            column |       column       |
| will             |              will |        will        |
| be               |                be |         be         |
| left             |             right |       center       |
| aligned          |           aligned |      aligned       |
Pythonで毎日AtCoder #42

### はじめに
[前回](https://qiita.com/taxfree_python/items/f9a605b440c384bcfa23)
昨日のABC-Dを解きます。

### #42
[問題](https://atcoder.jp/contests/abc163/tasks/abc163_d)

**考えたこと**
解説を読んでもすっきりしなかったので[けんちょんさんの記事](https://drken1215.hatenablog.com/entry/2020/04/20/003900)を参考に実装しました。
この問題を考えるうえで大切なのは$10^{100}$が書かれている意図に気付くことです。解説記事にも書いているように$10^{100}$があることによって違う個数を選んだ場合に選んだ数字の和が重複することはなくなります。また、和は連続の整数になります。以上のことから、{0,1,...N+1}の中からkからN+1個選んだ数字の和を計算する問題と考えることができます。和の個数は($i個から作れる最大の整数-i個から作れる最小の整数+1$,$k\leq i \leq N+1$)と書くことができます。
$i$番目の最小の和は、$\frac{i(i-1)}{2}$、最大n番目からk番目の和は、$\frac{i(2N-i+1)}{2}$。これらを実装すると、

```python
n, k = map(int,input().split())

ans = 0
for i in range(k,n+2):
    minmin = (i*(i-1))//2 #変数名がひどい
    maxmax = ((2*n-i+1)*i)//2
    ans += maxmax - minmin + 1

print(ans%(10**9+7))
```

### まとめ
今回のコンテストはC:簡単、D:少し簡単、E:は? だったのでDくらいは解けないといけないと思いました。ではまた、おやすみなさい
【scala】今日はシャドウバースRAGE大会のエントリー締め切り日

# 4月20日の学び
本日はシャドウバースRAGE Summer大会のエントリー締切日でしたね。
最近のローテ成績はよくないので悩みましたがエントリーすることにしました。
初のオンライン予選大会ということでどうなるか少し心配。
まあ当選したら全力で戦うだけですね！

##　PlayFrameworkの処理について
PlayFrameworkはメソッド内に記述した処理を上から順に処理していきます。最後に処理したものがメソッドの返り値というわけですね。今れれば当たり前のことに感じるのですが、ハマりました。
データベースの値をupdateして、成功したらOk(views.html....)で遷移するように実装していたのですが、Resultがないよというコンパイルエラーが発生したため、メソッドの最後部分にResultの記述がないことが原因かと思い、Result記述をしました。しかし、これではメソッドの処理が終了しようがしまいがページ遷移をしてしまう記述でした。
データベースのupdate終了後に処理するResultは読み込まれるが、最終的に処理をかえすのはメソッドの最後に記述したResultということで、記述の意味がないことを学びました。
そもそものエラーはAction.asyncの.asyncの記述がなかったために、resultの記述が欲しいのにFuture[result]しかなかったからコンパイルエラーが発生していました。
Futureという型についても少し知ることができました。

## FutureとFuture.successful
```scala
val a = Future {
  Ok("HelloWorld")
}
  a
```
Future[result]型のresultを実装する際に上記のように記述をしたのですが、この場合正しい記述は

```scala
val a = Future.successful {
  Ok("HelloWorld")
}
  a
```
このようにすることで、Futureの処理が成功した際に処理をすることができるため、安全な記述になる。
例外的な処理が発生しない場合にはこの処理をするのが安全。
外部APIとの連携などは例外発生の可能性があるので使用しない。

## ラジオスイッチ
HTMLのテンプレートの中にラジオスイッチを実装したかった
調べたもので実装ができたがフォームのラベル追加について記述がなかったのでアウトプット
PlayFrameworkでのラジオスイッチ実装、ラベルの実装

```
@helper.inputRadioGroup(フォーム名("値のキー"),options = Seq("値" -> "view上の表記", "値" -> "view上の表記"),'_label -> "view上のフォームの表記")
```
こうすることで、値をなんという名前で受け取るか、ユーザーにはなんという名前で表示するか、フォームの名前をどうユーザーに見せるかも表記することができる。

## フォームから受け取った値でバリデーションを実装する
これにはholdというものをフォームに対して使用するらしい
今後の実装の際に導入したい
パワポしか使えない人間の誤魔化しEPS画像作成


# はじめに

論文に必要な画像をまだ作っておらず，しかも投稿日まで時間がない人間です．

そのため，まだ触ったことのないInkscapeでベクター画像を作るには到底時間がない！（もっと余裕を･･･）

そこで，今回は自分用にパワポを用いた誤魔化しベクター画像を作りたいと思います．

# アルゴリズム

## 1. パワポで図を作る

いつもどおりパワポで図を作ります．
矢印や画像などをフル活用します．

## 2. パワポで作ったものをグループ化する

図を作成したら，一個の図にしたいものを「グループ化」してあげましょう．

<img width="961" alt="スクリーンショット 2020-04-20 22.06.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211482/0d9f07e5-e8c2-0693-c296-cb708e43cbe5.png">

上記は，すでにグループ化したものになります．

## 3. 図として保存で，PDFにする

上記のグループ化したものを右クリックして「図として保存」をします．




<img width="813" alt="スクリーンショット 2020-04-20 22.07.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211482/0b75e932-b823-2718-b080-7370eec1aee2.png">

PDFとして保存してあげます.

## 4. PDFをEPS形式に変換する

PDFをEPS形式に変換します．

オンラインにあるやつを使ってもいいですが，大体なんやかんや画像が一部書けてたり，画質が下がったりします．

そのため，popplerというPDF操作ライブラリを用います．
特に，このpopplerに含まれている`pdftops`実行ファイルを用いてPDFをEPSにします．

https://texwiki.texjp.org/?Poppler　
が参考になりそうです．


Macの場合は

```
brew install poppler
```
とすればよいです．


あとは，

```
pdftops -eps hello.pdf
```
として，PDFをEPS形式にしてあげます．


# 参考文献

- https://texwiki.texjp.org/?Poppler
- https://sekika.github.io/2015/10/18/eps-fig/

# あとがき

よくよく調べたらPDFでベクター形式なのですね･･･
総合的に見てあまり画質低下はないのかな･･･（調べてみます）
AWSやAzureでWindows構築時に最初にやるべきこと5選！

Windows1年生のひつじです。

ちょっと検証のためにWindowsサーバを建てたのですが、
色々とやることがやることがあったのでメモしておきたいと思います。

## 忙しい人向け

**やること1：InternetExplorerのセキュリティオフ**
ServerManager->LocalManager->IE Enhanced Security Configuration->Off

**やること2：Windowsパッチ適用**
Windows Update->Check for update

**やること3：言語パックの設定**
language->add langage -> japanese -> language option -> Download and Install language Pack

**やること4：chromeとか必要なソフトのインストール**

**やること5：マスターイメージを取得する**
AWSやAzureの機能でWindowsのイメージを取得しておく

## 本題

まず、各クラウド事業者で用意されているWindowsは英語仕様となっています。
また標準ブラウザのInternetExplorerもデフォルトでは警告が上がりまくる仕様になっていて困ることが多いと思います。

これらの設定を日本語化したり、いい感じにすることが必要なのです。
Windowsを複数作成するときに毎回設定することも手間なので
最初に設定を入れ込んだイメージを取得することで"いい感じに設定済のWindows"を用意しておくことも大事です。

##やること1 InternetExplorerのセキュリティオフ

Windowsサーバをたちあげると標準ブラウザ（IE）を使おうとすると、警告がでまくって操作がかなり辛いです。
Chromeのダウンロードも一苦労、、、

なのでセキュリティをOFFにしておきましょう。
`ServerManager->LocalManager->IE Enhanced Security Configuration->Off`

<img width="1668" alt="スクリーンショット 2020-04-17 10.51.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/a9b2112a-daf2-c75c-c63e-096e1a29111d.png">

## やること2 Windowsパッチ適用
Windowsサーバを起動したあとに適用されていないパッチを適用しましょう。
これはクラウド側で用意されたWindowsイメージがあるのですが、そのイメージが用意されたあとに配信されたパッチを当てるということです。

以下の赤枠からもパッチ適用の画面に遷移できます。

<img width="1668" alt="スクリーンショット 2020-04-17 10.51.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/16e5a994-70bf-8132-54b0-bd0dad297f18.png">

<img width="1120" alt="スクリーンショット 2020-04-17 10.55.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/bcaa7bd4-b00c-277e-2a58-465a634d30ef.png">

## やること3 言語パックの設定

デフォルトでは言語パックが英語しかないので日本語の言語パックをインストールしましょう。

*注意：「Move up」ボタンをクリックして優先準備をかえておきましょう！ *
*注意：「option」ボタンをクリックした先で有効化できます*

`language->add langage -> japanese -> language option -> Download and Install language Pack`

<img width="1127" alt="スクリーンショット 2020-04-17 10.58.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/56924567-bbf3-cd22-f135-60ff81418e8c.png">

## やること4 chromeとか必要なソフトのインストール

これは好きなものを入れてください。
WinSCPとかターミナルソフト、軽量のエディタなんかは運用でよく使うツールかもです。

## やること5 マスターイメージを取得する

クラウドのプラットフォームでイメージ作成のツールが用意されています。
下図ではAzureのコンソールですが「キャプチャ」→「作成」ボタンを押すだけで簡単にイメージを作成することができます。
これはAWSやAlibabaCloudでも同様ですね。

<img width="967" alt="スクリーンショット 2020-04-20 22.06.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/5f59bb92-7c4f-5aba-3bbe-9756182703ba.png">


##　最後に

いかがでしたでしょうか。
私はWindowsサーバを構築した経験が少ないのですが、色々とやることがあったかと思います。
特にWindowsUpdateを最新化するのに結構な時間を要しますので、最初の作業を実施するのに2〜3時間はみておいたほうがいいかもしれませんね。
"Configuration issue: platform iPhoneSimulator.platform doesn't have any non-simulator SDKs; ignoring it" でAdhoc ipa生成が失敗する時の対応

# はじめに

WebRTCの一部をカスタマイズしてビルドして生成したFrameworkを使い、XcodeのProduct > Archiveは成功。そこからipa生成しようとしたところ途中で失敗し、IDEDistribution.standard.logに以下が出力されていました。

```
2020-04-20 12:24:27 +0000  /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool exited with 1
2020-04-20 12:24:27 +0000  ipatool JSON: {
    alerts =     (
                {
            code = 3620;
            description = "Configuration issue: platform AppleTVSimulator.platform doesn't have any non-simulator SDKs; ignoring it";
            info =             {
            };
            level = WARN;
        },
                {
            code = 3620;
            description = "Configuration issue: platform WatchSimulator.platform doesn't have any non-simulator SDKs; ignoring it";
            info =             {
            };
            level = WARN;
        },
                {
            code = 3620;
            description = "Configuration issue: platform iPhoneSimulator.platform doesn't have any non-simulator SDKs; ignoring it";
            info =             {
            };
            level = WARN;
        }
    );
}
2020-04-20 12:33:24 +0000 [MT] Canceled distribution assistant
```

その際の対応メモです。

# 対応

### Framework内の不要なアーキテクチャをlipoコマンドで削除する。

ターミナルでプロジェクト内の該当framework直下へ移動。

`-info`で現在含まれている情報を確認。

```
% lipo -info WebRTC
Architectures in the fat file: WebRTC are: x86_64 i386 armv7 arm64 
```

`-remove`で削除。

```
% lipo -remove i386 WebRTC -o WebRTC  
% lipo -remove x86_64 WebRTC -o WebRTC
```

`-info`で変更後の情報を確認。

```
% lipo -info WebRTC
Architectures in the fat file: WebRTC are: armv7 arm64
```
AWSのRoute53で独自カスタムドメインを取得し、S3で静的なWebサイトをホスティングした際の参考サイト（SSL認証済）

自分用です。

参考サイト
awsチュートリアル
Route 53 に登録されたカスタムドメインを使用した静的ウェブサイトの設定
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html#root-domain-walkthrough-create-buckets

無料ドメインは2020.4現在は取得できません。
無料ドメイン(.tk)とRoute53を利用して0円でHTTPS環境を設定してみた
https://dev.classmethod.jp/articles/mesoko-r53-cdn/

CloudFrontって何？っていう方に。
AWS再入門 Amazon CloudFront編
https://dev.classmethod.jp/articles/cm-advent-calendar-2015-aws-re-entering-cloudfront/

AWSでSSL証明書を利用するには？AWS Certificate Manager(ACM)の使い方
https://cloudnavi.nhn-techorus.com/archives/928
puppeteer で ChromeのSpeechRecognitionAPI を使用する


# はじめに

みなさんこちらの記事は読んでいただけたでしょうか？
[.NET Frameworkで音声認識をしてzoomのビデオ画面に字幕を出す](https://qiita.com/yoh1496/items/0ebf0bac208898b19172)

![サンプル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328319/f690609f-71cc-6e92-d4d7-67dce7555287.png)


Zoomの自分の動画スペースに字幕を表示する方法なんですが、
先日とあるオンラインMeetUpイベントで使用してみたところ、
Webカメラに字幕を重ねて表示して配信することができました！！！実用的！


## 何言ってるかわからない問題

前回の記事にも載せましたが、.NET Frameworkの音声認識は
精度が良いとは言えたものではなく、とてもガバガバな認識結果を返してきます。

すると「え、それは何を表示してるの？」と、しゃべっている内容と表示文字列が
リンクしていると認識されない現象が発生します。致命的！

## ほかの方法を試す

というわけで、違う方法を試してみることにします。今回、配信界隈を調査する中で
「[ゆかりねっと](http://www.okayulu.moe/)」という音声合成ソフトがあることを知りました。
調べるとどうも内部的に Google Chrome を使用しているそうです。

はて、GoogleChrome？と思って調べたところ SpeechRecognition API なるインタフェースが策定されていることを知りました。

[SpeechRecognition - Web API | MDN](https://developer.mozilla.org/ja/docs/Web/API/SpeechRecognition)

それは試さない手はない、ということで試してみました。

# 実現方法

字幕制御を nodejs で実装したので、同じく nodejs でいきます。

- OS: Windows 10 64bit
- ブラウザ: Google Chrome 81
- node: v12.16.2

## puppeteer の導入

今回はChromeを使用する予定なので `puppeteer-core` で。

```cmd
npm install --save puppeteer-core
```

## 実装

調べれば2, 3秒でわかる内容なんですが、今回学びがあったので備忘録程度に。

### ブラウザとの双方向通信

https://github.com/puppeteer/puppeteer/issues/2331

`puppeteer` を使用して、ブラウザとデータのやり取りをする場合

- puppeteer → page ： `page.evaluate`
- page → puppeteer ： `page.exposeFunction`

というのを使用すると良いです。

```javascript
await page.exposeFunction("functionA", result => {
  console.log(result);
});
```

とあらかじめしておくことで、

```javascript
await page.evaluate( () => {
  window.functionA("result from browser");
});
```

このように、ブラウザ側で `functionA` が呼び出せるようになります。

### `headless` でSpeechRecognition APIが使用できない

`puppeteer.launch` のときに `headless:true` とすることで、
ヘッドレス Chromeが使用でき、無駄にWindowが表示されないなど便利なのですが、
今回は `start` イベントが発生せず、どうも使用不可っぽいので、画面サイズ0でお茶を濁しました。

### 「マイクを使用する」ダイアログを表示させない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328319/fbd40df9-c392-bc52-3799-e62384bf83c4.png)

これですね。これツールを起動するたびに出ても仕方ないのでスキップするオプション
`--use-fake-ui-for-media-stream` を使用します。

### ソース

というわけでソースコード載せておきます。ほぼ MDN のまんま。

https://github.com/yoh1496/puppeteer_speech_recognition

ただただ認識した文字列をコンソールに出力するだけです。

# 実行結果

前回記事でも試した

- zoomに字幕を表示しています
- 字幕のテストだよ
- 字幕なんだけど、ちゃんと音声認識されてるんですかね

の3つを試しました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328319/cfe47fa9-6e77-89fe-a432-ff63cef26f68.png)

良い感じですね。さすが！！

# 感想

結果は劇的に向上しました。が、1つ注意点として挙げられるのが
**「オフライン実行できない」**ということです。

Chromeの音声認識はサーバーに音声データを挙げて、サーバー側で結果を出力します。
なので、プライバシー問題もありますし、ネットワークの状況によっては使用不可だったり、レスポンスがめちゃくちゃ遅くなることも考えられます。

なので、今回は「クラウドサービスを使用したら音声認識精度が劇的に上がった」程度に捉えておくのがいいのかな、と思います。
サクッと効果が実感できるソリューションなのは間違いないですが。

# 終わりに

なぜか `puppeteer` で制御したけど意味あったのか・・・？


# 参考URL

- [ゆかりねっと](http://www.okayulu.moe/)
- [SpeechRecognition - Web API | MDN](https://developer.mozilla.org/ja/docs/Web/API/SpeechRecognition)
Kinx ライブラリ - Range 追加機能

# Range 追加機能

以前の以下の記事にも同じ内容を追記しました。

* [Range, Enumerable, for-in](https://qiita.com/Kray-G/items/821eeba150a86d93766d)

## 添え字 for String, Binary, Array, and Range

これら 4 種類のオブジェクトに対して、配列インデックス形式の添え字指定に `Range` を使用できるようにしました。下記の説明は、Range for Range 以外は対象が違うだけで **ほとんど同じ** です。

### Range for String

通常の文字列への要素アクセスは、その位置の文字コードを返す。

```javascript
var str = "abcdefghijklmnopqrstuvwxyz";
System.println(str[25]);   // 122
System.println(*str[25]);  // 'z'
```

Range オブジェクトを引数に渡した場合、その範囲の部分文字列を返す。`String#subString()` の代わりになるが、`String#subString()` は長さを指定するので、並べてみると以下のような感じ。

```javascript
var str = "abcdefghijklmnopqrstuvwxyz";
System.println(str[2..25]);            // "cdefghijklmnopqrstuvwxyz"
System.println(str[2...25]);           // "cdefghijklmnopqrstuvwxy"
System.println(str.subString(2, 23));  // "cdefghijklmnopqrstuvwxy"
```

### Range for Binary

通常のバイナリへの要素アクセスは、その位置の 1 バイトの数値を返す。

```javascript
var bin = <0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f>;
System.println(bin[11]);   // 11
```

Range オブジェクトを引数に渡した場合、その範囲の部分バイナリを返す。`Binary#subBinary()` の代わりになるが、`Binary#subBinary()` は長さを指定するので、並べてみると以下のような感じ。

```javascript
var bin = <0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f>;
System.println(bin[2..12]);            // <0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c>
System.println(bin[2...12]);           // <0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b>
System.println(bin.subBinary(2, 10));  // <0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b>
```

### Range for Array

通常の配列への要素アクセスは、その位置の要素を返す。

```javascript
var ary = 16.times();
System.println(ary[11]);   // 11
```

Range オブジェクトを引数に渡した場合、その範囲の部分配列を返す。`Array#subArray()` の代わりになるが、`Array#subArray()` は長さを指定するので、並べてみると以下のような感じ。

```javascript
var ary = 16.times();
System.println(ary[2..12]);            // [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
System.println(ary[2...12]);           // [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
System.println(ary.subArray(2, 10));   // [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
```

### Range for Range

通常の Range オブジェクトへの要素アクセスは、その位置の要素を返す。ちなみに一度 `toArray()` してしまうので破壊的だが、内部に `toArray()` 結果を持っておくことで再度 `[]` を適用できるようにはしてある。

```javascript
var range = 0..16;
System.println(range[11]);   // 11
```

Range で指定すると以下の通り。`toArray()` の結果は保持されているので、別の Range オブジェクトで範囲指定しても正しくその範囲を取ることはできる。

```javascript
var range = 0..16;
System.println(range[2..12]);   // [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
System.println(range[2...12]);  // [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
```

## まとめ

プレビュー 0.5.2 に入れました。以下の記事にも追記(再掲)。

* [Range, Enumerable, for-in](https://qiita.com/Kray-G/items/821eeba150a86d93766d)

以上、ご報告でした。
Symfony のデバッグ画面から PHPStorm を開く

Symfony のデバッグ画面では、エラーが起きた場所がすぐわかりますよね。
コールスタックもわかるので不具合の場所をすぐに特定できます。

そうしたら、IDE を開いて修正する。という段取りになりますが、それをクリック2回で済ませることができます。

公式サイトでは次の場所で説明されています。

https://symfony.com/doc/current/reference/configuration/framework.html#ide

DeepL による翻訳を載せます。

> Symfony は変数ダンプと例外メッセージで見られるファイルのパスをブラウザのなかでこれらのファイルを開くリンクに変えます。お気に入りのIDEもしくはテキストエディタでこれらのファイルを開きたい場合、このオプションを次の値のいずれかに設定します: `phpstorm`、`sublime`、`texttmate`、`macvim`、`emacs`、`atom`と`vscode`。
>

こちらにあるように、*config/packages/framework.yaml* の `framework` の下に `ide` キーを設定し、値を `phpstorm` にすればよいのです。PHPStorm 以外のエディタにも対応しているようです。詳しくは公式サイトをごらんください。

```yaml
framework:
  ide: phpstorm
```

> 注: `phpstorm` オプションはMacOS上のPhpStorm でネイティブにサポートされており、Windowsは [PhpStormProtocol](https://github.com/aik099/PhpStormProtocol)、Linux は[phpstorm-url-handler](https://github.com/sanduhrs/phpstorm-url-handler)が必要です。

この文によると、macOS の場合は他に何もしなくてよいのかと思ったのですが、僕の環境では、`PhpStorm Protocol.app` のインストールが必要でした。

`PhpStorm Protocol.app` のインストール方法は、
https://github.com/aik099/PhpStormProtocol#installing-on-mac
に書かれています。

1. [このリポジトリ](https://github.com/aik099/PhpStormProtocol)をクローンします (もしくはZIPでダウンロード)
2. クローンされたフォルダに移動 (ZIPの場合は解凍したフォルダに移動)
3. PhpStorm Protocol.appフォルダを/Applications/フォルダにコピーします。
4. クローンしたフォルダを削除

この両方の設定をしますと、デバッグ画面では、ファイル名のところがリンクになります。
そこをクリックすると、「PHPStorm を開きますよ」というダイアログがでるので OK をクリックすると PHPStrom が開いて、エラーの場所にナビゲートしてくれます。
SQLまわり

#SQLでのテーブルに設定するキーの種類や制約

SQLのテーブルでは、格納する値に様々な制約を設けることで、変なデータを格納させないことができる。

データを格納する処理を実行する側でも制御しますが、SQL側でも制約を設けることで、より確実にデータを格納することができる。

###制約の種類

####NOT NULL制約
NULL値を許可しない。NOTNULLを制約することで、この列はNULL値を格納できない。
基本、データを格納する時はNULLを許可しないで、必要な時に許可するようにするのが良い。

####PRIMARY KEY制約
主キー制約とも言う。これは、重複不可かつNOTNULLを満たしている場合に格納できる。
idに使われることが多く、よく使われる。

####UNIQUE制約
ユニーク（一意）と言う意味で、重複を許さない。
同じデータを入れないために使う。

####CHECK制約 
列の値が条件に該当するかチェックする。
例えば、年齢を入れる列があったとしたら、20歳以上と言う条件を指定することで、20歳未満のデータを入れることができなくなる。

####DEFAULT制約
レコードを登録する時、値を指定しなかった場合、初期値を格納する。
初期値を予め設置しておくことで、値を指定しなかった時、その設定した値を入れてくれる。

####FOREIGNKEY制約
外部キー制約が設定され、別テーブルとの参照整合性を保つことができる。
別テーブルを参照したい時に使われる。



以上がSQLでの制約でした。
C# 基礎プログラミング100本ノック～16-20本目～

#こんばんは

本日も基礎プログラミング100本ノックやっていきます！

前回→[11-15本目](https://qiita.com/K_Hisui/items/9e41d70a085f6efdaf2b)
次回→[21-25本目](https://qiita.com/K_Hisui/items/5669409b4a0dccd66db6)

#16本目
>整数値を入力させ、入力値が0でなければ再度入力させ、0であれば終了するプログラムを作成せよ。

~~~Sample.cs
while (true)
{
    Console.Write("整数値を入力してください：");

    int num = int.Parse(Console.ReadLine());
                
    if(num == 0)
    {
        break;
    }
}
~~~

while文とうとう出てきましたね～
do～whileの方がきれいに書けるかな？

~~~Sample.cs
int num;
do
{
    Console.Write("整数値を入力してください：");

    num = int.Parse(Console.ReadLine());

} while (num != 0);
~~~

こっちの方が短く書けてますね
それに綺麗に思える（私だけかな？）

#17本目
>要素数10の整数型の配列を宣言し、i番目の要素の初期値をiとし、順に値を表示するプログラムを作成せよ。

要素数5の1次元配列の宣言は以下の様に行うらしい。言語によって仕様が変わるのでなるほどなって感じですね。

~~~Sample.cs
int[] array = new int[5];
~~~

ではやっていきましょう！

~~~Sample.cs
int[] nums = new int[10];

for (int i = 0; i < 10; i++)
{
    nums[i] = i;
    Console.WriteLine(nums[i]);
}
~~~


#18本目
>要素数10の整数型の配列を宣言し、整数値を入力させ、すべての配列の要素を入力値として、すべての要素の値を表示するプログラムを作成せよ。
~~~Sample.cs
const int ARRAY_LENGTH = 10;

int[] nums = new int[ARRAY_LENGTH];

for (int i = 0; i < ARRAY_LENGTH; i++)
{
    Console.Write("配列に追加する数値を入力してください。");
    int num = int.Parse(Console.ReadLine());
    nums[i] = num;
}
for(int i = 0; i < ARRAY_LENGTH; i++)
{
    Console.WriteLine(nums[i]);
}
~~~



#19本目
>要素数5の整数型の配列を宣言し、すべての配列に対して順に入力された整数値を代入し、すべての要素の値を表示するプログラムを作成せよ。

~~~Sample.cs
const int ARRAY_LENGTH = 5;

int[] nums = new int[ARRAY_LENGTH];

for (int i = 0; i < ARRAY_LENGTH; i++)
{
    Console.Write("配列に追加する数値を入力してください。");
    int num = int.Parse(Console.ReadLine());
    nums[i] = num;
}
for(int i = 0; i < ARRAY_LENGTH; i++)
{
    Console.WriteLine(nums[i]);
}
~~~

#20本目
>整数値を2つ入力させ、1つめの値を2つめの値で割った結果を表示し、続けてその結果に2つめの値を掛けた結果を表示するプログラムを作成せよ。計算はすべて整数型で行うこと（割り切れない場合は自動的に小数点以下が切り捨てられる）。

~~~Sample.cs
int result;

Console.Write("input 1st num : ");
int numFirst = int.Parse(Console.ReadLine());

Console.Write("input 2nd num : ");
int numSecond = int.Parse(Console.ReadLine());

result = numFirst / numSecond;

Console.WriteLine(result);

result *= numSecond;

Console.WriteLine(result);
~~~


#リンク
[基礎プロI 100本ノック 基礎編](http://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocks.html)
Git で submodule を使ってマイクロサービスを開発している時に時々使うコマンドのオレオレ忘備録

## submodule 丸ごと clone
```shell
git clone --recursive git://example.com
```

### いつ使う？
プロジェクトを初めて clone した時。

### 何が便利？
おそらく以下のコマンドをよく使うと思うが、これを1回で済ませることができる。
逆に言えば上記コマンドで `--recursive` をつけ忘れた時は、下記2つ目のコマンドを叩けば良い。

* `git clone git://example.com`
* `git submodule update --init --recursive`


## submodule を全部最新化
```shell
git submodule update --init --recursive
```

### いつ使う？
前述したやつ。
チーム等で開発してて、誰かが submodule を追加や更新した時に使う。

### 何が便利？
submodule の初期化(`git submodule init`)もしてくれるし、submodule の submodule とかも適切な状態にしてくれる。


## submodule のブランチをすべてマスターに切り替えてコミットを最新にする
```shell
git submodule foreach git checkout master && git submodule foreach git pull origin master
```

### いつ使う？
* submodule 個々の最新をチェックしたい時。
* submodule の開発をする時。
* master からブランチを生やして作業したい時。

などなど。

### 注意
全ての submodule で master 最新にしたときに、サービスが正常動作するとは限らない。
(だから親の git で submodule コミット番号を管理しているわけだが)
AWS 初期編　クラウドエコノミクス　memo

##クラウドバリューフレームワーク
・コスト削減
・スタッフの生産性
・運用上の耐障害性
・ビジネスの俊敏性


##MPA　移行ポートフォリオ評価


##クラウドエコノミクス
ビジネス価値
クラウド財務管理


##運用上の耐障害性
運用上の耐障害性　＝　アップタイムとセキュリティ

###４つの基軸
・オペレーション
・セキュリティ
・ソフトウェア
・インフラストラクチャ

##クラウド財務管理
・測定と説明責任
・コストと最適化
・計画と予測
・クラウド財務オペレーション

##コスト最適化
・インスタンスの適切なサイジング
・伸縮性の向上
・適切な料金モデルの選択
・ストレージの最適化


##セキュリティの基本：責任共有モデル
###顧客
・顧客のデータ
・プラットフォーム、アプリケーション、IDとアクセス管理
・オペレーティングシステム、ネットワーク、ファイアウォール構成
・クライアント側のデータ暗号化とデータの整合性認証
・サーバー側の暗号化（ファイルシステムやデータ）
・ネットワークトラフィック保護（暗号化、整合性、アイデンティティ）

###AWS
・ソフトウェア
・コンピュート、ストレージ、データベース、ネットワーキング
・ハードウェア/AWSグローバルインフラストラクチャー
・リージョン、アベイラビリティゾーン、エッジロケーション



参考
https://aws.amazon.com/jp/compliance/shared-responsibility-model/
AWS 初期編　テクニカルプロフェッショナル　memo

##Elastic Block Storage
・EC2と共に使用するために設計された。
・スループットとトランザクションの両方が集中するどんな規模のワークロードにも対応できる、
高性能なブロックストレージサービス

##AWS Storage Gateway
既存のオンプレミス環境とAWSクラウドを接続するハイブリッドクラウドストレージ

##Amazon Glacier（グレイシャー）
低頻度のアクセスを想定し、運用コストを低く抑えたバックアップ/アーカイブ用のストレージサービス

##AWS CloudTrail
AWSのアカウントのガバナンス、コンプライアンス、運用監査、リスク監査を行うためのサービス
アクティビティ及びAWSのサービスに対するAPIコールのログを記録する

##Amazon S3(Simple Storage Service)
オブジェクトストレージサービス。
静的なサイト向け
容量無制限。使用した分だけ料金が発生

##Amazon Redshift
データウェアハウス
⇨統計や分析を行うときに使うはず。

##AWS Snowball
安全で堅牢なデバイスを提供するサービス
オンボードのストレージとコンピューティング機能を備えたペタバイト規模のデータ転送
オンプレミス環境からAWSにデータ転送をする場合に使用

##AWS Direct Connect
オンプレミスからAWSへの専用ネットワーク接続の構築をシンプルにする
⇨インターネット経由をしなくてよくなる



##AWS CodePipeline
リリースモデルに基づき、構築⇨テスト⇨デプロイを自動化する
完全マネージド型
継続的デリバリー
リリースの自動化

##Amazon DynamoDB
Key-Value
フルマネージド型の NoSQL データベースサービス

##AWS Lambda(ラムダ)
サーバー管理が不要でコードの実行が可能
継続的スケーリング
クラウド上でアプリケーションを実行する新たなプラットフォーム


##Amazon Route 53
AWSの提供するDNSサービス


##Amazon Virtual Private Cloud
AWS上で利用者が占有可能な仮想プライベートネットワークを構築できるサービス


##

##
##
##
##
##
##
##
##
##
##
mkdocsをMacにインストールする。

#mkdocsとは？
mkdocsは自動的にMarkdownによりWebページを自動生成してくれる便利なツールです。

#pythonのインストール
Webサイトよりpython３をダウンロードしてウィザードに従いインストールします。

$python3 --version

pip3も使えるようになるはず。
$pip3 --version
最新は、3.8
※最近のMacOS（Monterey）はインストールしているはずです。

できない場合は、
$sudo sudo easy_install pip

#mkdocsのインストール(例）

$pip3 install mkdocs
最新は1.2.3(2021年)

#mkdocsのバージョン確認

$mkdocs --version

パスが通っていない場合は

$cat \\$SHELL

/bin/zsh

zshの場合は、

cd ~

sudo vi .zshrc

export PATH=/Users/MyName/Library/Python/3.8/bin:$PATH

source ~/.zshrc

#mkdocs任意のアップグレードまたはグレードダウンする場合は、
$pip3 install --upgrade mkdocs==1.0.4

# pipによるパッケージバージョン一覧

$pip3 list

#マテリアルインストール
$pip3 install mkdocs-material

$pip3 install pygments

$pip3 install mkdocs-macros-plugin

$pip3 install fontawesome_markdown

#mkdocsテスト

$ mkdocs new test

$cd test


# ダウンロードする場合は
$git clone https://github.com/任意のレポジトリ/****.git

# ブランチの切り替え
ブランチはmasterとgh-pagesが通常あります。
デフォルトのブランチがgh-pagesの場合は、
$git checkout master でブランチを切り替えます。

テキストエディタ等でmdファイルを編集しましたら、
ymlファイルがあるディレクトリ上で

$mkdocs build

html、jsなどが更新されます。

デプロイする場合は、
$mkdocs gh-deploy
が実行されページが更新されます。

mdファイルのmasterブランチも一緒に更新しましょう。
$git commit -m "変更内容"

$git push -u origin master


mdファイルとymlファイルが生成されます。
mdファイルはサイトの内容が入り、ymlファイルはwebサイトのテーマになります。

ローカルでサーバーが立ち上げます
$mkdocs serve

ブラウザで内容を確認します。
http://127.0.0.1:8000

# 新規レポジトリを追加の場合は、

$git init

## 変更追加した場合は、

$git add .

$git commit -m "first commit"

$git push -u origin mastergit remote add origin https://github.com/takeo/takeochan01.git

## すでにサイトがある場合は、
$git clone https://https://github.com/takeo/takeochan01.git

$git pull origin master

#Gitの設定確認

$cat ~/.gitconfig

## デプロイします。
$mkdocs gh-deploy

※Githubがパスワード認証をやめました。秘密鍵と公開鍵を作成後、githubに登録。
Macでは、ghコマンドを使ってクローンするといいみたいです。

#Gitコマンドメモ

### リモートと同期する

$git fetch origin

###  ローカルの更新履歴

$git log

### ローカルのブランチのリスト

$git branch -a

### ブランチの切り替え

$git checkout master

$git checkout gh-pages

### リモートのマスターブランチにプッシュ

$git push -u origin master
レスポンシブ対応：CSSのみ

#はじめに
CSSのみで行った、レスポンシブ対応の方法を一例として記載します。

#HTMLに記述

```index.html
<head>
　　<meta charset="UTF-8">
　　<meta name="viewport" content="width=device-width,initial-scale=1.0">//・・・①
　　<link href="style.css" rel="stylesheet" type="text/css">//・・・②
</head>

<h1>文字サイズと色が変わります。</h1>//・・・③
```
①headタグにこの一文を記載します。
②記載するcssです。
③cssが対応するセレクタです。


#CSSに記述

```style.css
/* ：1280px〜
------------------------------ */
/*ここに基本CSSを書きます。*/
h1{
  font-size: 30px;
}
 
/* ：700px〜1279px
------------------------------ */
@media screen and (min-width:700px) and (max-width:1279px) {
  h1{
    font-size: 20px;
    color: blue;
  }
}
 
/* ：480px〜699px
------------------------------ */
@media screen and (min-width:480px) and (max-width:699px) { 
  h1{
    font-size: 10px;
    color: red;
  }
}
 
/* ：〜479px
------------------------------ */
@media screen and (max-width:479px) { 
  h1{
    font-size: 5px;
    color: green;
  }
}
```
画面の幅のサイズによって対応するプロパティの値が決まります。

#あとがき
これだけでレスポンシブ対応ができます。
メディアの規格ごとに細かい違いがあるので、どこを基準として設定するのかがポイントです。
他にも様々な方法があるのでより適した方法をチョイスしましょう。
アメリカ国防総省のAWSセキュリティを参考にお勉強

いつも忘れないように、コンセプトから。

###コンセプト
・お金かけてまでやりたくないのでほぼ無料でAWSを勉強する
　→ちょっとしたサービスを起動すると結構高額になりやすい。
・高いレベルのセキュリティ確保を目指す
　→アカウントを不正に使われるととんでもない額を請求されるので防ぐ

いろいろ忙しかったので久しぶりにお勉強をはじめました。コロナでリモートワークなので通勤時間分は空いているはずなんですが、その分勉強するかというとやってないですね。。。朝起きてちょっとして仕事をはじめ、終えて寝る。時間はちょっとずつありますが、ダラダラ過ごしてしまい、良くないなと思う今日この頃です。

###AWSブログ(セキュリティ)
さて、先週末にちょっと興味深いAWSブログが公開されてました。DoDというのはアメリカ国防総省ですが、そこでセキュリティのレベル認定を行っていて、そのレベル４をパスしたサービスが追加されたというものです。
https://aws.amazon.com/jp/blogs/security/16-additional-aws-services-authorized-at-dod-impact-level-4-for-aws-govcloud-us-regions/

追加されたのは以下のサービスです。
Amazon Cloud Directory
Amazon Comprehend
Amazon Kinesis Data Firehose
Amazon Route 53
Amazon SageMaker (also authorized at DoD IL 5)
Amazon Transcribe
Amazon Translate
AWS CodeBuild
AWS CodeCommit
AWS DataSync
AWS IoT Greengrass
AWS License Manager
AWS Organizations
AWS Service Catalog
AWS Trusted Advisor
AWS Web Application Firewall (WAF)

全部使うかというと、そうでもないものもありますが、なかなか充実してきました。Sagemakerだけ高いレベルなんで、DoDでも積極的に使っているんでしょうか。ちなみに、AWSのサービスがどのコンプライアンスに適合しているかは以下のサイトにまとまっています。知っている人も多いと思いますが。。。
https://aws.amazon.com/jp/compliance/services-in-scope/

こちらは日本語なので読みやすいですね。結構評価中のものもあるので、自社に導入する時のセキュリティ基準に加えるのも良いと思います。ちなみに、適合しているからといって、そのサービスが安全かというえばそうではなく、どういう風に設定して、どう使うかが重要なのは言うまでもありませんね。設定をミスすれば情報漏洩につながります。

ただ、逆に適合しているサービスであれば、正しく使えば安全だとも判断できるので、そういう意味では有効な指標だとも思います。安全なサービスを正しく使うというのが重要ですね。

なお、DoDのクラウドに対するセキュリティ要件はこちらを参照するとわかります。レベルの解説は22ページ以降に記載されています。
https://dl.dod.cyber.mil/wp-content/uploads/cloud/pdf/Cloud_Computing_SRG_v1r3.pdf
三菱UFJ国際投信eMAXISのデータをPythonで取得して期初を100としたグラフを作る

三菱UFJ国際投信eMAXISのデータをPythonで取得してコードを期初を100としたグラフを作る。


まずライブラリをインポート（使わないのもある）。

```Python:
#invite my friends to the party...
import numpy as np
import seaborn as sns
sns.set()
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime
```

三菱UFJ国際投信ウェブサイトからcsvを取得して保存。ウェブに何度もアクセスるのはマナー違反なので、取得したファイルを自分のPCに保存。

```Python:
#三菱UFJ国際投信ウェブサイトからcsvを取得して保存
import urllib.request
    
url_list = {'Japan Equity':'https://emaxis.jp/content/csv/fundCsv.php?fund_cd=252634',
            'Emerging Equity':'https://emaxis.jp/content/csv/fundCsv.php?fund_cd=252878',
            'Developed Equity':'https://emaxis.jp/content/csv/fundCsv.php?fund_cd=252653',
            'Japabn Bond':'https://emaxis.jp/content/csv/fundCsv.php?fund_cd=252648',
            'Emerging Bond':'https://emaxis.jp/content/csv/fundCsv.php?fund_cd=260448',
            'Developed Bond':'https://emaxis.jp/content/csv/fundCsv.php?fund_cd=252667',
            'Developed Reit':'https://emaxis.jp/content/csv/fundCsv.php?fund_cd=253674',
            'Japan Reit':'https://emaxis.jp/content/csv/fundCsv.php?fund_cd=253669',
           '8 assets': 'https://emaxis.jp/content/csv/fundCsv.php?fund_cd=252760'}

for key in url_list:
    url = url_list[key]
    title = "{0}.csv".format(key)
    urllib.request.urlretrieve(url,title)
```

全ファンドのトータル・リターン指数をひとつにまとめたファイルを作成。
（三菱UFJ国際投信のCSVファイルは、分配再投資ベース基準価額がはじめからあるので楽）

```Python:
#全ファンドのトータル・リターン指数をひとつにまとめたファイルを作成
assets = ['Japan Equity','Emerging Equity','Developed Equity','Japabn Bond','Emerging Bond'
          ,'Developed Bond','Developed Reit','Japan Reit', '8 assets']
df_all = pd.DataFrame()
for asset in assets:
    asset_file = "{0}.csv".format(asset)
    df = pd.read_csv(asset_file, skiprows = [0,1], names = ['date','nav_void', 'nav','div', 'aum'],
                    parse_dates = True, index_col = 0)
  
    df['tr'] = df['nav'] / df['nav'].shift(1)
    df[asset] = df['tr'].cumprod()
    df = df.loc[:,[asset, 'div']]

    df_all[asset] = df[asset]

df_all.to_csv('df_all.csv')
```

トータル・リターン指数をひとつにまとめたファイルを作っておけば、あとは色々使える。

例えば、期初を100とした累積リターン推移グラフは以下の通り。

```Python:
df = pd.read_csv('df_all.csv')

df = df_all['2019-12-29':]
df_cum = (df / df.iloc[0,:])*100
df_cum.plot(figsize = (6,6),title = "Plot Chart (Start = 100)")
plt.savefig('emaxis_chart',bbox_inches="tight")
```

↓このようなグラフができる。
![emaxis_chart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341224/f2932978-98da-caa4-1dce-1d86f715be7f.png)

2020年3月以降、日本債券と先進国債券以外は大幅下落。下落した資産に投資するなら、[ｅＭＡＸＩＳ Ｓｌｉｍ バランス（８資産均等型）](https://emaxis.jp/fund/252760.html)が手っ取り早い（※投資は自己責任）。
Salome-Meca 2018を用いたモーダル解析（SDLV）

構造物を設計する場合、構造物の固有振動数がどこにあるのか、また、その周波数で強振した場合、どのような形状で強振しているのかが、問題になることがあります。
強振して構造物が破壊した場合、これらの事がわかれば、対策がとれます。
このため、ここで固有振動数と変形の形状を解析する方法（モーダル解析）を示します。

この資料はオープンCAE勉強会＠岐阜で公開されているFS氏ご提供の「[SALOME-Mecaの使用法解説](http://opencae.gifu-nct.ac.jp/pukiwiki/index.php?SALOME-Meca%A4%CE%BB%C8%CD%D1%CB%A1%B2%F2%C0%E2)：[10.0モーダル解析]()」をSalome-Meca 2018（Code_Aster 13.6）のAsterStudyモジュールを用いて実行しました。

# ジオメトリ

幅10mm×高さ20mm×長さ100mmの直方体

# 材料

- ヤング率：E=132,000MPa
- ポアソン比：$\nu$=0.343
- 密度：$\rho$=8.96e-9 Ton/mm3

# 拘束条件と荷重条件

|境界条件|トポロジ|境界条件の種類|条件|
|:--|:--|:--|:--|
|fix|面|変位|DX=DY=DZ=0|

![mesh2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/01183de3-6961-713d-a89d-da8355403647.png)


# 解析結果

六面体1次要素、メッシュサイズ5mm、3次の変形図（×10倍表示）を示します。

![modal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201403/16c70fe9-590a-0217-70c2-96e8c1ceadca.png)

結果を理論解と比較してみます。
理論計算とCAE解析結果を比較すると、次表のようになります。

| 区分 | 1次 | 2次 | 3次 |
| --- | --: | --: | --: |
| CAE解析結果 | 624 | 1,214 | 3,739 |
| 理論解 | 622 | 1,242 | 3,885 |

# コマンドファイル

```python:bar100.comm
DEBUT(LANG='EN')

MAIL = LIRE_MAILLAGE(FORMAT='MED',
                     UNITE=20)

MODEL = AFFE_MODELE(AFFE=_F(MODELISATION=('3D', ),
                            PHENOMENE='MECANIQUE',
                            TOUT='OUI'),
                    MAILLAGE=MAIL)

Cu = DEFI_MATERIAU(ELAS=_F(E=132000.0,
                           NU=0.343,
                           RHO=8.96e-09))

CHMAT = AFFE_MATERIAU(AFFE=_F(MATER=(Cu, ),
                              TOUT='OUI'),
                      MAILLAGE=MAIL,
                      MODELE=MODEL)

BLOCAGE = AFFE_CHAR_MECA(DDL_IMPO=_F(DX=0.0,
                                     DY=0.0,
                                     DZ=0.0,
                                     GROUP_MA=('fix', )),
                         MODELE=MODEL)

ASSEMBLAGE(CHAM_MATER=CHMAT,
           CHARGE=(BLOCAGE, ),
           MATR_ASSE=(_F(MATRICE=CO('MASSE'),
                         OPTION='MASS_MECA'),
                      _F(MATRICE=CO('RIGIDITE'),
                         OPTION='RIGI_MECA')),
           MODELE=MODEL,
           NUME_DDL=CO('NUMDDL'))

MODES = CALC_MODES(CALC_FREQ=_F(NMAX_FREQ=5),
                   MATR_MASS=MASSE,
                   MATR_RIGI=RIGIDITE,
                   OPTION='PLUS_PETITE')

MODES = CALC_CHAMP(reuse=MODES,
                   CONTRAINTE=('SIEF_ELGA', ),
                   RESULTAT=MODES)

IMPR_RESU(FORMAT='MED',
          RESU=_F(MAILLAGE=MAIL,
                  RESULTAT=MODES),
          UNITE=80)

FIN()
```
リモートワークをはじめて感じたこと ※走り書き

# はじめに
しがないSEの雑記。
社会情勢の関係で仕事が社員すべてリモートワークになったことで出会ったことや感じたことをつらつらと書く。
また何か書きたいことがあれば次を書くかもしれない。

# 必ず朝会（夕会）はしろ
これは本当に必要だと感じた。
これをやることで仕事にリズムが生まれるし、相手が何してるのか概要が把握できる。

　「共有ワークスペースなどで報告してればいいんじゃね？」

といった意見もあるかもしれないが、それ１本で進めるのはやめたほうがいい。
理由は２つある。

## 理由１：日に日に報告内容が適当になってくる人が確実に出る
出勤してれば他人の目などもあって、それになりに緊張して仕事ができるが、
リモートワークという他人の目がない状況で自分を律し続けるができる人はかなり少ない。

当然といえば当然だが、ルールがなければをきちんと設けないとリモートワークの秩序がどんどん乱れる。

**大体の人間は怠け者である。**

## 理由２：最低限のコミュニケーションの場を設ける
この理由も侮れない。

文字だけだと疎遠になるし、感情や体調が見えないという影響はかなり大きくて、
意思疎通のずれがひどくなり、ストレスがやたらと溜まることも多い。

これは自分と相手の親しさに反比例する。

相手の状態を知っていれば、そこまで親しくなくても「それならしゃーない」などと思えるので
とにかく１日１回でも話す価値は非常に大きい。

他にも仕事の会話でも話すことでストレス発散効果はあるし、冒頭でも言っているが、
仕事にリズムが生まれて生産性にも大きく影響する。


## 朝会で聞く内容
本筋に戻る。
朝会で聞くことは以下は聞いたほうがいい

- 前日の実績／進捗
 - 全体スケジュールがあるならその共有もする
- 今日何するか
- 詰まってる点

場合によっては夕会も開いてその日の進捗を聞いてもいいと思う。
スケジュールがきつい案件ほど意識して進捗報告は密にしたほうがいい。

詰まってる点は概要だけ聞いて、後で答えられる人が個別にチャットして聞くような形にする。


# 打ち合わせで決まったことは必ず共有しろ
**心構えとして、社外の人と打合せした感じで対応したほうがいい。**

社外の人と打ち合わせをしたら、決まったことを議事録にしてメールなりで
連絡することが多いと思うが、それと同じように社内の打合せ内容も
関わる人全員が閲覧できる場所にアップしたほうがいい。
マークアップツールなどでweb共有すると楽。

後、重要なのは都合が悪くて打ち合わせに参加できなかった人に伝えたいことがあれば、
toallだけじゃなくて、必ずその人にmentionしておくこと。

## No 全体メンション　Yes 個別メンション
本当に全体共有したい内容以外でtoallは使用しないほうがいい。
日本の昔の悪しき風習のメールのとりあえずCCと同じような意識でtoallされたら、見てほしい情報が埋もれる。
やめてくれ。

**どれだけの人が全体メンションを自分宛だと思って行動できるか考えてみてほしい。**
自分はできる！という人。素晴らしい、ぜひ続けてくれ。めっちゃ助かる。
すまないが私は完全にはできない。ある程度読み飛ばしてしまう。

これも続けられる人間は一握り。続けられない人間の方が圧倒的に多いので
面倒くさがらず、共有内容はできる限り個別メンションが望ましい。

どうしてもtoallが多くなるようなら、それは情報共有方法を見直したほうがいい。
わざわざメンションしなくても、タスク管理ツールの導入で解決できる場合も多い。


# リモート相手に何か聞きたければ、一度メッセージを投げてくれ
これ実際にあってモヤッとした話。

何か質問がある際に、相手に何も聞かずにいきなりビデオチャットの要請を投げてくる人が多発。

出勤していた時であれば

「〇〇さんちょっといいですか？」

などワンクッションが挟まっていたのに、なぜかリモートになるとその配慮がなくなる。
いつでも時間が空いてると思うなよ・・・と思いつつ応答して
なぜそのワンクッションがなくなったのか聞いてみると

- メッセージ打つのが面倒くさい
- 電話かけるのと一緒だと思った


1つ目は論外なので指導したが、2つ目の理由は一理ある。
確かに電話だったら相手の状況など気にせずかけることも多い。

私自身も「あれ、じゃあなんでモヤッとしたんだ？」と思ったので考えてみた。
そこで思い至ったのが、「**一声かけられる状態で、かけてこないのはなんでだ？**」という点。

思い至った内容がかなりの狭量だが、心境的にあってる。
たぶん、これを許せる心が広い人もいると思うが、どうやら私は心がせまいらしい。

**あと私自身が電話も好きじゃない。**
自分の時間が邪魔されたように感じるので、切り替えるためにも一声欲しい派。
声かける側の立場で考えると、いきなりかけたほうが楽なのはわかるんだけどね・・・

実際これについては「いきなりで問題ない」「一声欲しい」という意見はそれぞれあったが、「いきなりで問題ない」派も「一声あったほうが気持ちいい」という意見が多かったので、ビデオチャットする場合は「何かあったら一声かけて応答があってからしましょうね」という**マナー**を設けることに落ちついた。

ルールにしなかったのはそこまでガチガチに決めるようなものではないと思ったため。
正直こんなことなんて、どうてもいいと思ってる人にとっては強制されるのがストレスになるので、「そうしましょうねー」という程度にとどめたわけだ。
ただそれだと、私みたいに「絶対一声欲しい派」が納得しないので「絶対一声欲しい派」の名前の後ろに適当なマーク（🦆）つけて、「これついてる人に対して聞くなら一声かけてくれ」という住み分けルールは設けた。

**あと個人的に作業PCをミュートにして、通知を視覚的に表示するのみにした。**
**だいぶ快適になった。**

# いきなり打合せを開くな
これも１つ前の項目と同じだが、いきなり状況をも確認せず、「今から打ち合わせします！集まってください」なんて言うな。
勘弁してくれ。
いつもだったら都合を確認して進めているだろう。

細かいことだが、リモートワークだとどうしても意思疎通が制限されて色んなことが雑になりがちなので、
要所要所で軽い決め事設けたほうが大きな面倒事も起こらない。

**人は顔を合わせないと色々なところで行動が雑になる。注意しよう。**

# 最後に
ほんの少しのポエムだが、書けば書くほど「当たり前のことを書いてるなー」「面倒くさいこと書いてるなー」と思う自分がいるし、読んでくださっている方も感じていると思う。
だが、**なぜかリモートワークだと分かり切ったことをルール化、マナー化して周知しないとできない**という不思議なことに出会ったので、あえて文章にしてみた。

~~本音は自分のストレス発散もかねている。~~
MaixduinoでSDカードを使う

# はじめに

マイクからSDカードに録音するアプリを作ろうとしたところ、[Sipeed Maixduino](https://wiki.sipeed.com/en/maix/board/maixduino.html)でSDカードが使えない。

### 開発環境

- PlatformIO
- Framework: Arduino

# 原因

C:\Users\<ユーザーid>\.platformio\packages\framework-maixduino\variants 下にボード別の構成情報がある。Maixduino の場合、.\sipeed_maixduino\pins_arduino.h になる。

この76行目にfpioのピン配置がある。MaixduinoはArduino nanoのピン配置互換にするために、ここでピンのマッピングを行っているが、SDカードをアクセスするためのSDライブラリーの中でもピンマッピングを行っているにもかかわらず、ここでは17個しか指定されていないため、SPIのピンマッピングが正しく行われず、SDカードにアクセスできないと思われる。

# 対策

そこで、18個目以降を追加する。

修正前

```c:pins_arduino.h
static const uint8_t _maixduino_pin_map[17] = {4, 5, 21, 22, 23, 24, 32, 15, 14, 13, 12, 11, 10, 3, 31, 30, 16};

```

修正後

```c:pins_arduino.h
static const uint8_t _maixduino_pin_map[48] = {4, 5, 21, 22, 23, 24, 32, 15, 14, 13, 12, 11, 10, 3, 31, 30, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47};

```

# おわり

PlatformIO + Arduinoライブラリーで、無事SDカードにアクセスすることができた。

使用例

https://github.com/fukuen/maixduino-rec-play-demo
【Go】"fatal: 'origin' does not appear to be a git repository" が出ちゃったら…

完全に自分のせいですが:laughing:

普段GoプログラミングにはGoLandを使ってるのですが、
`"fatal: 'origin' does not appear to be a git repository"` エラーが出てプロジェクトがビルドできなくなっちゃいました。
その修復メモです。

# 何をやったかというと…

* 諸事情でgithub認証設定を削除してた
* 今日、Goバージョンを1.14に更新
* GoLandを起動してプロジェクトを開く
* そのプロジェクトの`go.mod`を開いて`go 1.13` -> `go 1.14` に書き換え
* プロジェクト全体の再ビルドが走る
    * `require`モジュールの中に`1.14`合わせで更新が生じるものがあった

↓ :scream::scream::scream:

```sh
fatal: 'origin' does not appear to be a git repository
```

github認証が死んでるままモジュール更新して、
一部モジュールのチェックサムがおかしくなってしまったようです…

# 修復手順

今回は↓で治りました:laughing:

* github認証をちゃんと設定
* ↓のコマンドを実行

```sh
$ cd MyHogehogeProject
$ go clean -modcache
$ go get -u
```
VSCodeのRemote - SSH で "Connecting with SSH timed out"になる

VSCodeを使っていて、`Remote - SSH`の拡張を使用してどこかのサーバに繋ごうとすると、ログインに成功しているのにその後"Connecting with SSH timed out"と言われる場合の対処法。

どうやらbash以外のシェルを使っている場合にこの問題が出るらしい。そういえば、最近fishを使うようになったので、そのせいみたいだ。対処方法は、設定の`remote.SSH.useLocalServer`を`false`とする、もしくはチェックを外せば良い。

https://github.com/microsoft/vscode-remote-release/issues/2509

ちなみに、自分の環境はこんな感じだけど、多分OSやバージョンには依らないと思う。

- MacOS 10.15.4
- VSCode 1.44.2
- Remote - SSH 0.51.0

リモートもMacとLinuxに対して試したけど、同じエラーが出たのでローカルの問題ですね。
目的と異なるサイトが表示された時の主な原因

#概要
URLをクリックして、目的とは異なるサイトが表示される事案がたまにニュース等で報道されていますが、その原因はどのようなものがあるのか調べてみました。

#主な原因
##原因①
###ドメインが第三者に取得された
　ドメインを継続して使用するには、定期的に更新しなければならないが、更新を怠ると第三者にそのドメインを取得される可能性がある。
（たとえば、jpドメインは有効期限切れから1ヵ月もしくは6か月が経過すれば第三者が早い者勝ちで登録できる）

　また、期限が切れる前に複数の応募があると、オークションにかけられることもある。元の登録者が信頼のおける人物や組織の場合だと、フィッシング詐欺に利用されることも。

###＜対策＞
#####　・第三者に取得されないよう、ドメイン取得時にドメインとサーバ証明書の自動更新を申し込む
　　→クレジットカードの有効期限切れにも注意

##原因②
###DNSレコードが残ったまま
　ホスティングを解約した後に、DNSレコードを削除していないと、同ドメインでIPアドレスの移行先サーバにアクセスされてしまう。

###＜対策＞
#####　・DNSレコードをきちんと削除してからwebサイトを閉鎖する。

#####　・リンクの取り下げ依頼を忘れずに行う。
　　→ドメインを失効させる場合は、他のサイトにURLのリンクが残らないように、webサイトの閉鎖を告知したり、移行先にリダイレクトしたりする。

　　→このとき、HTTPリファラーでリンク元のURLを取得し、リンク元のwebサイト担当者に取り下げを依頼するといい。
#####※「HTTPリファラー」とは
　…HTTPパケットに含まれるリンク元のURL


#まとめ
・URLアクセス時に異なるサイトが表示されてしまう原因として、「DNSレコードの消し忘れ」や「第三者によるドメイン取得」が考えられる

・ドメイン契約を自動更新したり、廃止するサイトはDNSレコード削除やリンク元のURL削除通知をおこなうことが大切。

#参考サイト
以下のページを参考にさせていただきました。
https://webtan.impress.co.jp/e/2009/02/12/4417
CRUD処理について

# CRUD処理とは
CRUDはcreate、read、update、deleteの頭文字をとった造語で、データベースの処理を表す言葉

# 処理一覧

Create処理（データの追加）

```ruby

User.create(name:”A”,age:21)
```

Read処理（データの読み込み）

```ruby

User.all                   # データを全て取得
User.find(2）　　　　　　　　　# 指定したidを取得
User.find_by(name:”A”)　　　# 最初にヒットしたデータを取得
User.where(age:29）　　　　　 # 該当のデータ全て取得
```


Update処理（データの更新）

```ruby

user=User.find(1)
↓
User.age=22
↓
user.save
```


Delete処理（データの削除）

```ruby

user=User.find(1)
↓
user.destroy
```
Alamofireまとめ

###URLEncodedFormParameterEncoderとは
- 値をurl-encoded string型にして、あるURLクエリを作ったり、URLクエリに追加する。または、リクエストのHTTPのbodyとして作る。encoded stringをセットする場所はエンコードのdestinationで決める。
- URLEncodedFormParameterEncoder.Destination一覧
  -  .methodDependent(.getや.head、.deleteリクエストでクエリ文字列を戻り値とする要求は、リクエストのHTTP bodyとしてリクエストと設置をする。)
  -  .queeryString(エンコードした文字列をリクエストURLのクエリに設置、追加する。)
  -  .httpBody(URLRequestのHTTPbodyとしてエンコード文字列を設置する。
- URLEncodedFormPatameterEncoderは、URLEncodedFormEncoderを使って、Encodable型からString型のURLにエンコードする。このエンコーダーは、エンコードする型の種類に応じてカスタマイズできる。 (ex.ArrayEncoding, BoolEncoding, DataEncoding...etc)
- URL Encoded Parameters を使ったGET Requestは以下のとうり

```swift
let parameters = ["foo": "bar"]

// All three of these calls are equivalent
AF.request("https://httpbin.org/get", parameters: parameters) // encoding defaults to `URLEncoding.default`
AF.request("https://httpbin.org/get", parameters: parameters, encoder: URLEncodedFormParameterEncoder.default)
AF.request("https://httpbin.org/get", parameters: parameters, encoder: URLEncodedFormParameterEncoder(destination: .methodDependent))

// https://httpbin.org/get?foo=bar
```
AWSのトラブルシューティングメモ

### Nginxの再起動

```:ターミナル
sudo service nginx restart
```

### Unicornの再起動

```：ターミナル
> ps aux |grep unicorn
# Unicornのプロセスidを確認する
> kill -9 （unicornのプロセスid）
```

### デプロイ

```:ターミナル
bundle exec cap production deploy
```

## 本番環境で　rails c

[ローカルのターミナルから本番環境のリモートサーバーにrails consle(rails c)する](https://qiita.com/yukiji/items/e64977741ed6062526cb)
【pandas】dtを使った日付データの処理の基礎


PythonのPandasライブラリのdtアクセサを使った日付データの処理について

## ケース
日付データにto_datetime関数などでオブジェクトから変換したあとに、
任意の日付の型に変えるor特定の部分の日付データを抜き取りとる

## データ
まず時間のデータを作ります

```python
import pandas as pd
date_data = pd.DataFrame({'date':
                         ['2020-04-01 01:01:01',
                         '2021-04-02 02:02:02',
                         '2022-04-03 03:03:03',
                         '2023-04-04 04:04:04',
                         '2024-05-05 05:05:05']})
```


```python
date_data
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>date</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>0</td>
      <td>2020-04-01 01:01:01</td>
    </tr>
    <tr>
      <td>1</td>
      <td>2021-04-02 02:02:02</td>
    </tr>
    <tr>
      <td>2</td>
      <td>2022-04-03 03:03:03</td>
    </tr>
    <tr>
      <td>3</td>
      <td>2023-04-04 04:04:04</td>
    </tr>
    <tr>
      <td>4</td>
      <td>2024-05-05 05:05:05</td>
    </tr>
  </tbody>
</table>
</div>



データのタイプを見ましょう


```python
date_data.dtypes
```




    date    object
    dtype: object



現在date_data['date']のtypeはobjectです

これをまず日付として扱えるデータの型に変えましょう


```python
date_data['date'] = pd.to_datetime(date_data['date'])
```


```python
date_data['date']
```




    0   2020-04-01 01:01:01
    1   2021-04-02 02:02:02
    2   2022-04-03 03:03:03
    3   2023-04-04 04:04:04
    4   2024-05-05 05:05:05
    Name: date, dtype: datetime64[ns]


## 日付データ処理
### 年・月・日・秒の部分だけ取りたい

dtアクセサについては以下の通り
  
[Series.dt](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.html?highlight=dt#pandas.Series.dt)

>pandas.Series.dt  
Series.dt()[source]  
Accessor object for datetimelike properties of the Series values.


```python
date_data['date'].dt.year
```




    0    2020
    1    2021
    2    2022
    3    2023
    4    2024
    Name: date, dtype: int64




```python
date_data['date'].dt.month
```




    0    4
    1    4
    2    4
    3    4
    4    5
    Name: date, dtype: int64




```python
date_data['date'].dt.day
```




    0    1
    1    2
    2    3
    3    4
    4    5
    Name: date, dtype: int64




```python
date_data['date'].dt.second
```




    0    1
    1    2
    2    3
    3    4
    4    5
    Name: date, dtype: int64



### 年/月 (ex:17/01)など特定の型で欲しい場合

strftimeという関数がありました。"strf"は"str format"の略みたいです


```python
date_data['date'].dt.strftime("%y/%m")
```




    0    20/04
    1    21/04
    2    22/04
    3    23/04
    4    24/05
    Name: date, dtype: object



ex:2002/04/01
%y→%Y にすれば4桁になる　


```python
date_data['date'].dt.strftime("%Y/%M/%d")
```




    0    2020/01/01
    1    2021/02/02
    2    2022/03/03
    3    2023/04/04
    4    2024/05/05
    Name: date, dtype: object



一旦、以上です。
G SuiteアカウントとActiveDirectoryアカウントのパスワードを同期する

エンタメ系企業の社内もろもろを担当しているakibinです。

作業中はドラムンベースを聴いてる時が一番はかどっているような気がします。[DJ Markey](https://www.youtube.com/watch?v=PKPWMmyYj3g)オススメです。
※この記事は石野卓球を聴きながら作業してますが。こちらもはかどる。

#今回やってみたこと

前回、[G SuiteとActiveDirectoryのアカウントを同期](https://qiita.com/akibin/items/b4399a3f44faf6df346b)してみたので、そのままパスワードも同期して、G SuiteとADのアカウントを完全に同期しちゃえば、ユーザも２つアカウント覚えなくてすむんじゃい！
ということで、仮想構成は以下です。

| 情報種類 | ドメインやアカウント | メモ |
|:-----------------|:------------------|:------------------|
| G Suiteドメイン | gsuitest.co.jp |  |
| G Suite認証用アカウント | gsadmin@gsuitest.co.jp | G Suiteへアクセスを許可するアカウント |
| ADサーバ | Windows2019 |  |
| ADサーバのホスト名 | ad-host |  |
| ADドメイン | adtest.co.jp |  |
| 同期したいou | employer |  |
前回同様、このou=employer配下のアカウントのパスワードをG Suiteに同期します。

同期には**[G Suite Password Sync](https://support.google.com/a/answer/2611859?hl=ja)（GSPS）**を使用します。

#事前準備
以下を用意しておく。
- Windows2019にADを立てておく
- ADがG Suiteドメインにアクセス出来るようにしておおく
- AD認証用アカウント（adadmin）を作成しておく
- 同期したいou(employer)配下に同期したいユーザを作成しておく
- G Suite認証用アカウント（gsadmin@gsuitest.co.jp）を作成しておく

#作業スタート
###【G Suiteに認証用アカウントにカスタムロールをつける】
※[G SuiteとActiveDirectoryのアカウントを同期](https://qiita.com/akibin/items/b4399a3f44faf6df346b)で作業済みであれば不要

同期にはAPIとユーザ・グループを編集可能な権限を付ける必要あり、一般管理者では弱く、特権管理者では強すぎるため、以下手順でカスタムロールを作成して、認証用アカウントに付ける。
>管理コンソール＞管理者ロール＞新しいロールを作成＞名前を入力＞続行＞管理 API の権限＞「ユーザー」と「グループ」にチェックを入れる＞続行＞ロールを作成

[ユーザーに管理者ロールを割り当てる](https://support.google.com/a/answer/172176?hl=ja)方法は←参照。

###【GSPSをサーバにインストールして設定】
1. [G Suite Password Sync について](https://support.google.com/a/answer/2611859?hl=ja)からGSPSをダウンロードしてインストールする。**GSPSは必ずADと同じサーバにインストールする**
2. GSPSを起動して[次へ]すすむ
![スクリーンショット 2020-04-20 18.58.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504009/4c64ae71-9777-6540-b703-cca2910b64fe.png)
3. G Suiteドメインへアクセスするため、gsadmin@gsuitest.co.jpでログイン/認証する
    - Admin Email Address : gsadmin@gsuitest.co.jp
    - Authentication : ３-legged OAutnにチェック（ブラウザからログインして認証）
![スクリーンショット 2020-04-20 19.03.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504009/91493611-0ac8-ef0f-59d0-bd90e66e0f4f.png)
これでステータスがAuthorized（緑）に変わるの(上では変わってないですが気にしない)で次へすすむ
4. 以下設定を実施
    - Appkication's Security Context(Recommended) : **チェックを入れる**
    - Base DN : **ou=employee,dc=ad-host,dc=adtest,dc=co,dc=jp**
    - Mail Attribute : **mail**
![スクリーンショット 2020-04-20 19.15.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504009/2f0b7228-97ea-0d77-304e-5b2950d571b0.png)
5. これで設定完了。同期設定が保存され、常時同期が走ります。
![スクリーンショット 2020-04-20 19.16.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504009/d185edca-ed5c-330f-db4a-68ac8d87923f.png)

AD側でユーザのパスワードが変更されたタイミングで、G Suite側のパスワードも同期されます。
ちなみに、**ADにユーザ作成した時点では同期はされませんでした**。

あと、G Suite側でパスワード変更してしまうと、G SuiteとADで違うパスワードになってしまうので、G Suiteでのパスワード変更を停止する必要があります。
手順は[G Suite Password Sync を設定する](https://support.google.com/a/answer/2611842)の完了とメンテナンスの内容を参照してください。

これでアカウント運用も楽になるかな！

こちらもぜひとも！
＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊
◆ Twitterアカウント
@AkibinMusic
◆ Youtubeチャンネル
https://www.youtube.com/channel/UC-JOpwEnJn3gCrUA4NdCYgg