OmniAICreator/Qiita-1.07M huggingface dataset:
UbuntuにてC#のビルド&実行をdockerを利用して行う

# やりたいこと
C#の開発をLinux(Ubuntu)でやりたいと思ったのがきっかけ。
絶賛docker勉強中なので、docker使ってやってみようと思い挑戦しました。

# 前提
dockerおよびgitがインストールされていること

# 実験環境
ホストOS：Ubuntu 16.04

# 成果物
https://github.com/komorin0521/mono_docker

# 工夫した点
（そんなに大したことないですが）コンパイルは`mcs`, 実行は`mono`と別コマンドになるので、シェルでいずれかのコマンドを実行するようにした点くらいです。

# dockerのビルド

```
$ git clone https://github.com/komorin0521/mono_docker
$ cd mono_docker
$ docker build -t mono_docker .
```

# 実行例
## 1. compile
```
$ docker run -it --rm -v $PWD:$PWD mono_docker mcs $PWD/example/hello.cs
mcs /tmp/mono_docker/example/hello.cs
Success compilation!
```
## 2. run
```
$ docker run -it --rm -v $PWD:$PWD mono_docker mono $PWD/example/hello.exe
mono /tmp/mono_docker/example/hello.exe
Hello Mono World
```

# 推奨
mcsとmonoのaliasを`${HOME}/.bashrc`などに追記すること

```
alias mcs='docker run -it --rm -v $PWD:$PWD mono_docker mcs'
alias mono='docker run -it --rm -v $PWD:$PWD mono_docker mono'
```

# 改善点
前回の記事でもそうであるが、いちいち対象ファイルを指定するときに`$PWD/targetfile`と絶対パスで指定しないとファイルが見つからないというエラーが発生してしまうが、`$PWD`を忘れがち...
解決方法を見つけてアップデートしたい

# 参考
1. [【Ubuntu】【Mono】Monoの導入【SW】](https://www.nekochango.com/entry/linux/mono/setup)
NanoPi 事始め

#はじめに
　ラズベリーパイ(RasPi)はワンボードコンピュータの世界に様々なナントカパイを生み出してきました。NanoPiもそのひとつでRasPiの機能をギュッと凝縮した感じです。それ自体はHDMIなどを装備していませんが、色々な機器と組み合わせて使う場合はむしろ実装面積が少なくなり、低コスト・省スペースになり使い勝手が向上します。本稿ではNanoPiのNASキットを立ち上げるまでを順を追って説明します。

#NASキット
　この組込みが簡単に出来る特性を生かして、様々なキットが展開されています。本稿で紹介するNASキットもそのうちのひとつです。

##構成
　NASキットの構成は以下のとおりです。
1. 筐体
　冷却特性の良さそうな表面積を稼いでいるアルミの押し出し材です。これだけでご飯2杯は行けそうな感じです。
2. マザーボード
　HDD/SSDとNanoPi-NEO/NEO2を搭載するために厚めの基板となっています。特筆すべきはGroveコネクタを装備している点にあります。前面のパネルを加工してLCD/OLEDのディスプレイの搭載も可能でしょう。あるいは配線の取り回しを考えれば各種のセンサも接続出来そうです。
3. ヒートシンク
　NanoPiを長時間で動作させるためにヒートシンクが付属しています。ヒートシンクは別売もしていますが本キットでは標準装備です。
4. (NanoPi-NEO2)
　今回はNanoPi-NEO2を用いました。これは別売りになりますので、用途に応じてNanoPi-NEOでも良いでしょう。本キットではどちらも接続可能です。

　本キットで特筆すべきは冷却ファンがありません。ヒートシンクと筐体の形状とアルミの冷却特性を活かしたある意味、PassiveCoolingになります。Armのチップ特性を活かした構成とも言えそうです。


#発注
　電気系DIYerなら、みんな大好き[秋月電子](http://akizukidenshi.com/catalog/default.aspx)から購入します。今回は以下の二点を購入しましたが、手持ちの部品によって変わります。電源(5V/12V)やケーブルなども別途必要になるかも知れません。
- [NanoPi-NEO2](http://akizukidenshi.com/catalog/g/gM-12302/)
- [NanoPi-NAS kit](http://akizukidenshi.com/catalog/g/gM-12591/)


#到着後
　発注したら組み立てる前にいくつかやるべき事があります。
##パーツの確認 
　この手のキットは基本的に組立を開始して不可逆的な状態にすると、途中で欠品などの不具合に気がついても返品が出来ません。ですので全てのパーツが揃っているかを組立前に確認します。
##イメージのダウンロードと書き込み
　まずは基板本体が正常に動作しているかの確認をします。
###ダウンロード
こちらから、[NAS]()構築のイメージをダウンロードします。
###MicroSDへの書き込み
MicroSDへの書き込みは解凍後[Etcher](https://etcher.io/)を使います。


#動作確認
　書き込んだイメージを使って動作確認を行います。NanoPi-NEO2はケーブル接続のみですので、ネットワークケーブルをルータに接続します。電源を投入します。
##必要な機材
###電源ケーブル
　手元にあるMicroUSBケーブルを使います。
###ネットワークケーブル
　手元にあるネットワークケーブルを使います。
###電源
　筆者のルータはUSBコネクタがあるので、そちらを使いましたが必要に応じてUSBタイプの電源を用意します。スマホ用を使えばいいでしょう。

電源ランプの点灯に続いて、青LEDが点滅していればOKです。

##ネットワークアクセスの確認
1. 同じドメインに接続して[こちら](http://friendlyelec.local/)にアクセスして、画面が出ればOKです。
2. Username: admin, Password: openmediavault　を入力します。

##sshによる接続
```
%ssh root@friendlyelec.local
Password: fa
```

#組立
　部品の有無と動作確認が終わりましたので組立に入ります。

1. 前面パネルを外し、マザーボードを取り出す
2. NanoPiと付属のピンヘッダのハンダ付け
3. ヒートシンクの取り付け
4. マザーボードへの実装
5. コイン電池(CR2032)の取り付け
6. HDD/SSDの取り付け
7. 組立

　組立のコツは背面パネルをいきなり締めつけのではなくて、LANコネクタを中心にきっちりと嵌まるように調整してからネジを締めていきます。コネクタがかぶったまま締め上げると前後のパネルに浮きが発生し、そのまま締め上げるとパネルが塑性変形してしまい形状が元に戻らなくなってしまいますので、注意が必要です。

#最終動作確認
1.設置
　本体を安定性の高い場所に設置後、背面パネルの電源スイッチがオフになっている事を確認し、ACアダプタやLANケーブルを接続します。背面パネルの電源を投入しLEDの点滅を確認します。
2.疎通確認
　先ほどのネットワーク確認と同じ要領でNAS本体にアクセスして、ストレージの初期化などを行います。

#使いこなし
　基本的には[Openmediavault](https://www.openmediavault.org/)なので、情報は豊富です。様々なプラグインがあるので、自分の用途に応じてチョイスすると良いでしょう。ちなみに[irMagician](http://www.omiya-giken.com/?page_id=837)はそのまま接続出来ました。各種セッティングを施せば、そのままリモコンサーバとして利用する事も可能です。
エンジニアへの挑戦　営業時代にロボット呼ばれた人間

年末年始からTECH::CAMP始めて学んだこと書いてきます。
https://tech-camp.in/technology

とりあえず勉強方法から！
他の人の３倍は早く進めました。
AIコース、Python

【とりあえず環境作って実行】
最初から理解しようと思わずにとりあえず環境をパパッと設定して、
とにかくコードを実行してみる。
そのコードの動きが分かれば、一部だけ変えればそのまま使える武器となる。

【影響とその範囲】
処理についても、どこに何がどのように影響するのか、
それはどこまで影響するのかを考えれば構成が見えてくる。

【とにかく実践】
インプットしたら演習問題こなしまくる。

【コピべ最強】
基本的には自分で打つのではなく、コピペした方が誤りがないので、
コピペして一部分だけ書き換えるでやっていく。
写経もいいが、誤っている場所を探す間違い探しになってしまい、
無駄な時間を過ごすのでやめた方がいいと思った。
Puppeteer + GCP Functionsでサーバレスなスクレイピング

サーバレスなScraperを運用したい人向け。

## GCP FunctionsでPuppeteerが動くぞ！
2018年の8月から、GCPのGoogle App EngineとGoogle Functionsで **[Puppeteer](https://github.com/GoogleChrome/puppeteer)** が[サポート](https://cloud.google.com/blog/products/gcp/introducing-headless-chrome-support-in-cloud-functions-and-app-engine)されました。
Puppeteerは、nodejsで動くHeadless Chrome(Chromium) Driverです。

## 準備
インストール

```terminal
$ npm init
$ npm install -S puppeteer
```

## コード
まず、エントリーポイントになる`index.js`はこんな感じ。

```javascript:index.js
const scraper = require('./functions/scraper');
exports.scraper = scraper;
```

あとはfunctionsディレクトリの下に`scraper.js`を作り、そこにコードを作成していきます。
今回はasyncを使いたいのでnode8系で書きます。

```javascript:scraper.js
module.exports = async (req, res) => {
    const USERNAME = process.env['USERNAME'];
    const PASSWORD = process.env['PASSWORD'];
    const LOGIN_URL = 'https://example.com';

    // Chromiumを起動し、ページをつくる
    const browser = await puppeteer.launch({ args: ['--no-sandbox'] });
    const page = await browser.newPage();
    page.setViewport({ width: 1280, height: 1024 });

    // ログインページに移動し、ログインする
    await page.goto(`${LOGIN_URL}/login`, { waitUntil: 'domcontentloaded', timeout: 20000 });
    await page.type('input#email', USERNAME);
    await page.type('input#password', PASSWORD);
    await page.click('#login-btn-sumit');
    await page.waitForNavigation();
    await page.goto('`${LOGIN_URL}/users`', { waitUntil: 'domcontentloaded', timeout: 20000 });

    // スクレイピングの一例
    // user_info_fieldsクラスのtrタグをパースします
    const elements = await page.$$('tr.user_info_fields');
    const users = [];
    for (let i = 0; i < elements.length; i++) {
        const element = elements[i];
        const userid= await element.$eval('th', e => e.innerText);
        const username = await element.$eval('td.username span', e => e.innerText);
        const email = await element.$eval('td.email', e => e.innerText);
        users.push({
            userid: userid,
            username: username,
            email: email
        });
    }
    res.send(users);
}
```

## 環境変数
Functionsでは`.env.yaml`に記述しておけば、デプロイ時に環境変数に設定できます。

```yaml:.env.yaml
USERNAME : 'me@example.com'
PASSWORD : 'passwd1234!'
```
## デプロイ
GCP SDKとFunctionsエミュレータをインストールしておいてください。
Functionsエミュレータは次の通り。

```terminal
$ npm install -g @google-cloud/functions-emulator
$ functions start
```

ローカルでの実行とデプロイは次の通り。

```terminal
// ローカルデプロイ
$ functions deploy scraper --trigger-http"
// ローカル実行
$ functions call scraper

// 本番デプロイ
$ gcloud beta functions deploy scraper --trigger-http
```

Functions側をnode v8に設定しないとデプロイがコケます。
詳しいオプションは、[こちら](https://cloud.google.com/functions/docs/deploying/filesystem)とかを見てください。

## まとめ
お疲れ様でした。
Functions特有の癖もありますが、サーバレスでHeadless Chromiumを動かせるのはいろいろ応用が広がりそうです。FunctionsからGCSやCloud Store, BigQueryなどにも入れられるので、大規模な運用もできるかもしれません。

### 参考
 * [Cloud Functions with Puppeteer + Google Apps Script でスクレイピングサーバーをサクッと作る](https://qiita.com/howdy39/items/2f355fea8340a35aa5da)
 * [puppeteerでスクレイピング](https://qiita.com/tomi_shinwatec/items/a68cf7840c3da002c6e0)
GameMaker:Studio2使ってみた感想。

## はじめに

シンセとか4k introまとめたいけど、まず直近で終わったヤツについてまとめます。

### GameMaker:Studioとは

公式
https://www.yoyogames.com/gamemaker/

特徴

1. 後方互換性あり（前バージョンがかなり有名、バージョン間インポート機能あり
2. マルチプラットフォーム（1個作れば他環境へのエクスポートが楽
3. オブジェクトベースでGUI操作＋スクリプトベースでゲームを作成する
4. スクリプト言語（GML）の文法が超強力
5. エンジン自体が3Dアーキテクチャベースの環境

その他にも色々ありますけど。

### 項目の詳細

#### 1. 後方互換性あり

元々同じように2Dベースで作られた前バージョンが存在しているわけですが、
これを利用して前の資産をほぼ互換性を保った状態で移植が可能になってるみたいです。
（1→2への移植はOKですが、2→1への移植はNGです

#### 2. マルチプラットフォーム

Unityとかもそうなんですが、1個プロジェクト作れば同じソースコードとデータで移植が楽に行えます。
ただ気をつけた方が良いのが、「YoYoCompiler」を利用する場合。
これは、VisualStudioのコンパイラを利用してC言語に変換したソースコードをコンパイルしてしまおうというもの。
動作速度やネイティブなバイナリの出力が可能になりますが、コンパイラを使わない状態と結果に差異が出てくるケースがあります。
よって、一度テストしてみてから差異がないことを確認してみる等、いきなり導入しないことをおすすめします。
ただ使えるようになると強力です。

#### 3. オブジェクトベースでGUI操作＋スクリプトベースでゲームを作成する

これは、以下の形式でゲームを作っていくことになります。

- オブジェクトを画面に配置する
- オブジェクトの振る舞いを設定する（ソースコード等）
- スプライト・スクリプトやシェーダ等リソースの呼び出しを行う

つまり登場するオブジェクトをベースにゲームを作っていくことが可能になり、
登場人物とその行動の把握が容易になります。

UnityやUnrealEngine4と似たような構成にはなっていますが、2Dに機能を絞っている分、GameMaker:Studioは記述や設定が簡略化されている要素が見受けられます。


#### 4. スクリプト言語（GML）の文法が超強力

C言語に似た文法で処理を書くことができるので便利です。
中でも強力な文法が「with」になります。
これはGML独自と思われる文法で、
ゲーム中に登場しているオブジェクト（キャラクター等の定義）が登場していた場合、処理を実行するというものです。
つまり、「オブジェクトが画面内いなかったら処理を行わない、オブジェクトが画面内にいたら処理を行う」ということが簡単に実装できるのです。
速度的にも仮想マシン上で動かしているらしく、そこまで遅いという印象は持っていません。（前述のYoYoCompilerを使うことで更に最適化がかかる可能性あり）

#### 5. エンジン自体が3Dアーキテクチャベースの環境

これは公式というよりも自分が実装しらべた結果なのですが、少なくともWindows環境では、「3Dベースでの実装がなされている」形になります。
これによって、3Dアーキテクチャの知識を利用したGPUを利用するアプローチも可能となっております。

一番わかり易いところでは

- GPUアクセラレートによる描画の高速化が可能
- シェーダを利用して陰影・カラーキー・特殊処理が可能
- 3Dモデル・カメラの利用が可能

というところです。
実際自分のプログラムで以下の実装を確認済み。

- テクスチャを歪ませてラスタースクロール
- 透過オブジェクトに対し陰影をつける
- 2Dグラフィック中にレイマーチングによる描画を組み込み

ただ、エンジン上で制約かけているケースがあるため、どういうフローなら利用可能かは確認する必要あり。
（それでもUnityとかよりはアクセスしやすいと思う）

### おわり

2Dベースのゲームやアプリケーションを利用するなら有用な選択肢になるかと思います。
NxMの行列で要素が0であればその行と列のすべてを0にするプログラム

## そーすこーど
```cpp
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
  int N,M;
  cin>>N>>M;
  vector<string> matrix(N);
  int i,j;
  for(i=0;i<N;i++){
    cin>>matrix[i];
  }
  int row_mask=0;
  int col_mask=0;
  for(i=0;i<N;i++){
    for(j=0;j<M;j++){
      if(matrix[i][j]=='0'){
        row_mask|=(1<<i);
        col_mask|=(1<<j);
      }
    }
  }
  for(i=0;i<N;i++){
    for(j=0;j<M;j++){
      if(row_mask&(1<<i)||col_mask&(1<<j)){
        cout<<0;
      } else{
        cout<<matrix[i][j];
      }
    }
    cout<<endl;
  }
  return 0;
}
```
## 入力例1
```
3 3
111
101
111
```
## 出力例1
```
101
000
101
```
## 入力例2
```
2 33
111111111111111111111111111111110
111111111111111111111111111111111
```
## 出力例2
```
000000000000000000000000000000000
011111111111111111111111111111110
```
Python2でユニットテストする

# はじめに

標準で入ってるユニットテストのフレームワークである unittest を使ってみる。

# 環境

Python 2.7

# ディレクトリ、ファイル構造

```
$ tree -P '*.py' project
project
├── a.py
└── tests
    ├── __init__.py
    └── test_add.py
```

# コード

```bash
mkdir -pv ./project

cat <<'__PYTHON__' | tee ./project/a.py
#!/usr/bin/env python2
# coding: utf-8

def add(x, y):
    return x - y

if __name__ == '__main__':
    print(add(1,2))
__PYTHON__
chmod -v +x ./project/a.py

mkdir -pv ./project/tests

cat <<'__PYTHON__' | tee ./project/tests/test_add.py
import unittest
import a

class TestAdd(unittest.TestCase):
    def test_add(self):
        x = 2
        y = 3
        expected = 5
        actual = a.add(x, y)
        self.assertEqual(expected, actual)

if __name__ == "__main__":
    unittest.main()
__PYTHON__

touch ./project/tests/__init__.py
```

# 実行結果

```bash
cd ./projects
python -m unittest tests.test_add
python -m unittest discover tests
```

```console
$ python -m unittest tests.test_add
F
======================================================================
FAIL: test_add (tests.test_add.TestAdd)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "tests/test_add.py", line 10, in test_add
    self.assertEqual(expected, actual)
AssertionError: 5 != -1

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)
```

```console
$ python -m unittest discover tests
F
======================================================================
FAIL: test_add (test_add.TestAdd)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/root/unittest/project/tests/test_add.py", line 10, in test_add
    self.assertEqual(expected, actual)
AssertionError: 5 != -1

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)
$
```

# 参考資料

基本的な使い方はここがわかりやすい。
https://qiita.com/aomidro/items/3e3449fde924893f18ca

ディレクトリ構造はここがわかりやすい。
https://qiita.com/hoto17296/items/fa0166728177e676cd36
情報量・待ち行列理論など 応用情報技術者試験 対策日記@2

# 待ち行列理論・計算量
## 1. 待ち行列理論
[このサイト](http://objectclub.jp/technicaldoc/monkey/s_wait)を見ましょう。

人がやってくる到着率が**ポアソン分布**、サービス時間が**指数分布**に従い、窓口が一つの場合を**M/M/1モデル**と呼びます。M/M/1モデルでの待ち時間の求め方は、
μ = 列に並びにくる人の時間当たりの数
λ = お店が時間当たりにさばく客の数
として利用率ρ = λ/μ とします。
この時、**待ち時間 = ρ / (1-ρ) × 平均サービス時間** で計算できます！

とりあえずこれだけ暗記してたら大丈夫とのこと。
時間があったら計算過程とかも勉強して見たいなーと思います。

## 2. 情報量
**情報量** ある事象がどれぐらい起こりにくいかを表す尺度。
ある事象が起こる確率をPと置くと、
**選択情報量** = -log2(P)ビット で計算できる。
そして、全ての場合の情報量の平均を**平均情報量(エントロピー)**と呼ぶ。
平均情報量がデータの圧縮の限界値となる。

## 3. オートマトン
オートマトンとは、
1. 外から、情報が連続して入力される
2. 内部に、状態を保持する
3. 外へ情報を出力する
以上の特徴を持ったシステムのこと。
状態や遷移の数を有限個で表すことができるものを有限オートマトンという。
当たり前の様で何言ってるのかわからない。。。

## 4. 木の走査順
グラフ理論における木で、それぞれのノードを読んでいく順番を走査という。
例えば A+B という演算を行う時、コンピュータはA,+,Bの三つのノードを処理する必要がある。
この時、ノードの処理順番として三つの場合が考えられる。

**前置表記法(ポーランド表記法)**
+AB
**中置表記法**
A+B
**後置表記法(逆ポーランド表記法)**
AB+

人間にとって見やすいのはもちろん中置表記法やけど、コンピュータにとっては逆ポーランド表記法の方が処理しやすいらしい。表記法を置き換える問題が出ることがあるので要注意。 逆ポーランド記法では、方程式なら最後は多分イコールになるはず。

## 5. 計算量
計算量とはアルゴリズムを実行するのにどれくらい時間がかかるかを表すもの。
2の情報量と混同しない様に注意しないとな。
Ｏ(オーダ)記法という表記法を用い、入力データに対する増加量で表す。

n個の入力データに対してアルゴリズムを実行するときに、
計算量がnに比例して増加するものを**Ｏ(n)**
計算量がn^2に比例して増加するものを**Ｏ(n^2)**
計算量がlog(n)に比例して増加するものを**Ｏ(log(n))**
などという風に表します。

これ以上はきちんと計算も含めてアルゴリズムごとに理解したいので、探索とかソートのところで触れることにする。今回は一旦パス。

----
[ホームへ](https://qiita.com/k-y/items/dc2c9a3a8425712253e8)
NxNの行列を時計回りに90度回転させるプログラム

## ソースコード
```cpp
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
  int N;
  cin>>N;
  vector<string> matrix(N);
  int i;
  for(i=0;i<N;i++){
    cin>>matrix[i];
  }
  int layer;
  for(layer=0;layer<N/2;++layer){
    int first=layer;
    int last=N-1-layer;
    for(i=first;i<last;i++){
      int j=last-i+first;
      int tmp=matrix[first][i];
      matrix[first][i]=matrix[j][first];
      matrix[j][first]=matrix[last][j];
      matrix[last][j]=matrix[i][last];
      matrix[i][last]=tmp;
    }
  }
  for(i=0;i<N;i++){
    cout<<matrix[i]<<endl;

  }
  return 0;
}
```
## 入力例
```
4
1111
2222
3333
4444
```
## 出力例
```
4321
4321
4321
4321
```
【確率統計】事象の独立性

[Juliaで学ぶ確率変数(1) - 確率変数の定義 - Qiita](https://qiita.com/sand/items/afb5976ad28120d216c4)


#１．事象の独立性

```math
\begin{align}
\\
&以下p(E) >0とする。\\
&Eに関するFの相対確率、またはEが起こった時のFの条件付確率の定義\\
&p_E(F) \equiv p(F|E) \equiv \frac {p(E \cap F)}{p(E)}\\
\\
&以下が成り立つとき、FはEと独立であるという。\\
&p(F) = p_E(F)  \qquad \Longleftrightarrow  \qquad  p(E \cap F) = p(E)p(F)\\
\\
&この定義より、FがEと独立であるとき、逆にEがFと独立であることが言える。\\
\\
\\
\\
&*独立性の説明\\
\\
&n回試行を繰り返したときの根元事象の列。\\
&(a) \qquad a_1, a_2, ..., a_n\\
\\
\\
&上の(a)の中からEの元を抜き出したもの。\\
&(b) \qquad b_1, b_2, ..., b_r\\
\\
\\
&上の(b)の中からFの元を抜き出したもの。\\
&(c) \qquad c_1, c_2, ..., c_s\\
\\
\\
\\
&p(E) = \frac{r}{n} \qquad ... (a)におけるEの相対頻度\\
\\
&p(E \cap F) = \frac{s}{n} \qquad ... (a)におけるE \cap Fの相対頻度\\
\\
&\frac{p(E \cap F)}{p(E)} =\frac {s}{r} \qquad ... (a)における、Eに関するFの相対頻度\\
\\
\\
\\
&*独立性の例\\
\\
&トランプのカードから以下のものを取り除く\\
&(1)あらゆるK\\
&(2)スペードのA～6\\
&(3)ハートの7～Q\\
\\
&E :Aのカード全体\\
&E':Qのカード全体\\
&F :赤いカードの全体\\
\\
&p(F)=18/36=1/2\\
&p(E)=3/36\\
&p(E')=3/36\\
&p(E \cap F) = 2/36\\
&p(E' \cap F) = 1/36\\
\\
&\frac{p(E) \cap p(F)}{p(E)}=2/3 \neq p(F)\\
&\frac{p(E') \cap p(F)}{p(E')}=1/3 \neq p(F)\\
\\
&よってFはEと独立ではないし、E'とも独立ではない。\\
\\
\\
&今度はトランプから(1)(2)(3)を除かないで、カード全体で考える。\\
&E,E',Fに対応する事象を、E_1,E'_1,F_1とする。\\
\\
&p(F_1)=\frac{p(E_1 \cap F_1)}{p(E_1)}=\frac{p(E'_1 \cap F_1)}{p(E'_1)}=\frac{1}{2}\\
\\
&よってF_1はE_1と独立であり、E'とも独立である。\\

&\qquad \qquad  \qquad \qquad  \qquad \qquad  \qquad \qquad \qquad  \qquad \qquad \qquad \qquad  \qquad \qquad \qquad  \qquad \qquad \qquad  \qquad  \\
\end{align}
```


#２．独立性は直感だけでは判断できない例

以下の例から、独立性は直感的に判断できない。つまり**直感的な理解は難しい**ことがわかる。

```math
\begin{align}
\\
&さいころを2回振る試行を考え、以下のような事象に注目する。\\
\\
&A:最初に4が出る。\\
&B:和が7である。\\
&C:和が9である。\\
\\
&AとBは独立であるが、AとCは独立ではない。\\
\\
&これは以下のことから簡単にわかる。\\
&p(A)=1/6,p(B)=1/6,p(A \cap B)=1/36\\
&つまりp(A)p(B)=p(A \cap B)がなりたつ。\\
\\
&他方、p(C)=1/9,P(A \cap C)=1/36\\
&つまりp(A)p(C) \neq P(A \cap C)となる。\\
\\

&\qquad \qquad  \qquad \qquad  \qquad \qquad  \qquad \qquad \qquad  \qquad \qquad \qquad \qquad  \qquad \qquad \qquad  \qquad \\
\end{align}
```
[PHP]foreach文をコロン構文で書いた例

お急ぎの方、結論は[こちら！](https://qiita.com/riotam/items/5b4b9a73ef307498bcb3#html%E3%81%AB%E3%81%AF%E3%82%B3%E3%83%AD%E3%83%B3%E6%A7%8B%E6%96%87%E3%81%A7%E6%9B%B8%E3%81%8F)
#そのままforeach文
まずは、よくあるforeach文の例を用意してます。

```php5:例1
<?php
$array = [
	1 => "one",
	2 => "two",
	3 => "three",
	4 => "four",
	5 => "five"
];
foreach ($array as $key => $value) {
	echo "{$key}番目は{$value}が格納されている。<br>";
}
```
\$arrayという配列を用意し、これをforeach文で順番に\$keyと\$valueに代入して順番に表示しています。
これを実行すると…

```text:例1の実行結果
1番目はoneが格納されている。
2番目はtwoが格納されている。
3番目はthreeが格納されている。
4番目はfourが格納されている。
5番目はfiveが格納されている。
```
…と、このように表示されます。
#そのままforeach文をHTMLに入れると
上記のような結果を、HTMLでlist表示させたい場面がよくあります。
このままHTMLに入れ込むと…

```php5:例2
<?php
$array = [
	1 => "one",
	2 => "two",
	3 => "three",
	4 => "four",
	5 => "five"
];
?>

<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
	<?php foreach ($array as $key => $value) { ?>
		<li><?php echo "{$key}番目は{$value}が格納されている。"; ?></li>
	<?php } ?>
</body>
</html>
```
…と、このような書き方になります。
これで、実行すると下の図の通り、ちゃんと結果は得られます。
<img width="329" alt="スクリーンショット 2019-01-02 21.46.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/330623/ebb5c525-aff9-b378-0d16-32e43ac8008b.png">

しかし、

```php5
<?php } ?>
```
この『foreach文が終わりなんで、「 } 」ですよ〜』の所なんかは、非常に分かりにくく、ミスも生まれやすいですね。

#HTMLにはコロン構文で書く
そこで、以下の書き方がよく使われます。

```php5:例3
<?php
$array = [
	1 => "one",
	2 => "two",
	3 => "three",
	4 => "four",
	5 => "five"
];
?>

<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
	<?php foreach ($array as $key => $value) : ?>
		<li><?php echo "{$key}番目は{$value}が格納されている。"; ?></li>
	<?php endforeach; ?>
</body>
</html>
```
要は、 「 } 」を「 : 」に、「 } 」を「 endforeach; 」に変えた書き方です。
これにより、文字数は少し長くはなりますが、foreachの終わりがどこなのか、分かりやすくなります。
Pythonに百人一首を読み上げてもらった

# はじめに
年始早々に「百人一首やってないやん！」とか母が急に言い始めた。
こーゆうときに誰が歌読むの？ってなるので、そうだｐｙてょｎ(Python)に読ませよう！！

# 環境
* Ubuntu 18.04 LTS
* python3
* pygame、mutagen は pip で突っ込むんやで 
* 百人一首の音声データは調べればでてくるから（）

# 本編
とりあえずせっかちな百人一首ニキのために

```python
# coding:utf-8
from mutagen.mp3 import MP3 as mp3
import pygame
import time
import random

directly = 'ココにディレクトリを'


def playMP3(filename):
    pygame.mixer.init()
    pygame.mixer.music.load(filename)
    mp3_length = mp3(filename).info.length
    pygame.mixer.music.play(1)  # １回目の再生
    time.sleep(mp3_length + 7.0)  # 読み込みのラグを考慮して７秒足してる
    pygame.mixer.music.play(1)  # ２回目の再生
    time.sleep(mp3_length + 7.0)
    pygame.mixer.music.stop()


card = random.sample(range(1, 101), k=100)  # 順番のリストを作成
# print(card)

for i in range(100):
    print("\n{}枚目 [{}]".format(i + 1, card[i]))
    filename = directly + 'hyaku' + str(card[i]) + '.mp3'  # ここは音声ファイルの名前に依る
    playMP3(filename)
    tmp = input("put any key ...  ")
```

一首読み終わったら、なんか入力してEnter押せば、次行きます

# 軽く説明的なsomething
* 百人一首って、もう取られた札を読まれても困るから、今回は順番をリストに突っ込んでる。

```python
card = random.sample(range(1, 101), k=100)

# コレ スゴク ベンリ（なんか競プロでも使えそう（小並感））
```

* それとpython って文字列強引に扱えるから便利じゃない？（他の言語知らないけど）

```python
filename = directly + 'hyaku' + str(card[i]) + '.mp3'

# 例:hyaku26.mp3 (ファイル名)
```

# 最後に
今回初投稿なんで、python自信ニキいたらお手柔らかにお願いします。
ほとんどコピペは許して（プログラミングなんてそんなもんでしょ）

## 参考サイト
* [PythonでMP3音源を再生する](https://qiita.com/kekeho/items/a0b93695d8a8ac6f1028)
* [Pythonでランダムな小数・整数を生成するrandom, randrange, randintなど](https://note.nkmk.me/python-random-randrange-randint/)
Qiitaで自分が投稿した記事の一覧を得る

# はじめに

自分が公開した投稿のまとめを作ろうにもイマイチ作りにくい。
タイトルとURLのリストがあれば、いろいろ作りやすそうなので、やってみる。

# コード

```python
#!/usr/bin/env python36
# coding: utf-8
"""Qiitaの自身の限定共有以外の投稿を一覧表示する."""

import configparser
import os
from pathlib import Path
import requests
import json
import yaml

def get_headers(access_token):
    """カスタムヘッダーを得る."""
    return {'Authorization': "Bearer %s" % (access_token)}


def get_items_count(access_token):
    """公開されたアイテム数を得る."""
    url = 'https://qiita.com/api/v2/authenticated_user'
    headers = get_headers(access_token)
    resp = requests.get(url, headers=headers)
    return json.loads(resp.text).get('items_count')


def get_items(access_token):
    """限定共有を除く、すべてのアイテムを得る."""
    PER_PAGE_MAX = 100
    items = []

    # 全てのアイテムを得る
    url = 'https://qiita.com/api/v2/authenticated_user/items'
    page = 1
    while True:
        params = {'page': page, 'per_page': PER_PAGE_MAX}
        headers = get_headers(access_token)
        resp = requests.get(url, headers=headers, params=params)
        page_items = json.loads(resp.text)
        if len(page_items) == 0:
            break
        items.extend(page_items)
        page += 1

    # 限定共有を除く
    items = filter(lambda x: not x['private'], items)

    return list(items)


def process_items(items):
    """タイトルとURLを抽出する."""
    ret = []
    for item in items:
        d = {'title': item['title'], 'url': item['url']}
        ret.append(d)
    return ret


def print_yaml(items):
    """YAMLで出力する."""
    args = {'allow_unicode': True, 'default_flow_style': False}
    print(yaml.dump(items, **args))


if __name__ == '__main__':
    # 設定を読む
    config = configparser.ConfigParser()
    path = Path(os.getenv('HOME'), '.qiita.ini')
    config.read_file(open(path))
    access_token = config['DEFAULT']['access_token']

    # 処理する
    items = get_items(access_token)
    items = process_items(items)
    print_yaml(items)
```

# 設定

$HOME/.qiita.ini に次のファイルを置いておく。

```ini
[DEFAULT]
access_token = 71da9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

# 実行結果

```bash
$ ./qiita_items_list.py
- title: Pythonでデフォルト値、環境変数、オプションで値を指定する
  url: https://qiita.com/kumarstack55/items/eedd8c6beac7fad0052a
```

# ポイント

authentication_user の投稿数を知る唯一の属性 item_count は限定共有の投稿は含まれない。一方で、投稿を読む場合には限定共有の記事が含まれる。そのため、公開した n ページを読む、という処理はかけない。結果、限定共有ではないすべての投稿を得るには読める投稿数がゼロになるまで読み続ける実装にせざるを得ない。

（編集画面を見ても、Qiitaはノウハウを公開することを促すことが多いような気がするなあ。）
WindowsOSの言語のデフォルトは英語、キーボードはJIS配列、キーボードレイアウトはUS配列のときのIME設定

US配列が好きだが手元にはJIS配列キーボードしかない時、JIS配列キーボードをUS配列のレイアウトを使えばいいじゃんという発想に至った。
日本語のWindowsではやったことあるが英語のWindowsではやったことないのでその備忘録。

#下準備
- [Google日本語入力](https://www.google.co.jp/ime/)をインストールする
- Windowsの`Edit language and keyboard options`でLanguageに日本語を追加
- 日本語のオプションを`Google Japanese Input`だけにする
- `Change layout`で`Japanese keyboard(106/109 key)`から`English keyboard(101/102 key)`に変える

![設定](https://qiita-image-store.s3.amazonaws.com/0/224134/3636a57e-e89f-9c41-8e9f-2883cc553e08.png)

これだと`半角/全角キー`を押すと`` ` ``が打たれるだけなので`Ctrl + Space`で変化できるようにする必要があります←これが本題

#本題
`Google Japanese Input`の`Properties`を開き、`General>Keymap>Keymap style`の`Customize…`を開く
`New Entry`で以下の設定を追加する
![設定](https://qiita-image-store.s3.amazonaws.com/0/224134/fed3921d-de61-ca83-b9b2-078feb43462d.png)

おわり

#参考
http://d.hatena.ne.jp/yk5656/20140706/1405604280
Jupyter Notebookでバックスラッシュを表示する

Jupyter NotebookでPythonのプログラムを書くときに困るのは、バックスラッシュ（\）が表示されないことです。バックスラッシュは、エスケープシーケンスとしてよく使うのに、次のように"¥"が表示されてしまってはがっかりです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/258643/89899d78-255c-4b3e-c2ab-d6ea2345c700.png)



そこで、Jupyter Notebookに個人用のcssを作成することで、バックスラッシュを表示できるようにしてみました。まず、テキストエディタで次のようなcssを作成します。

```custom.css
.CodeMirror pre, .output pre {
  font-family: Arial,ＭＳ ゴシック;
}
```

このときfont-familyの1番はじめに、”arial”のような欧文フォント（日本語のひらがなや漢字が使えない）を指定します。次に、
C:\Users\（自身のアカウントのフォルダ）\.jupyter
のフォルダに”custom”というフォルダがなければ新規に作成します。そして、custom.cssというファイル名で保存します。つまり
C:\Users\（自身のアカウントのフォルダ）\.jupyter\ custom\custom.css
というファイルとして保存することになります。すると、次のとおりバックスラッシュが表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/258643/46f85a32-e847-4ddb-092f-6df59784f0bd.png)

jupyter notebookを表示するcssは別にあり、customer.cssがあれば優先して適用されるだけなので、上手く行かなくても、このcssファイルを削除してしまえば問題ありません。

バックスラッシュはアスキーコードでは”0x5c94”が割り当てられています。
かつてコンピュータの性能が良くなかった頃は、1文字を7ビットで表現していました。7ビット128のコードの中で、文字だけではなく改行マークなどの制御記号も割り当てなければならないので、アルファベット、数字や特殊記号などで94文字しかコードを割り当てることができません。そこで、バックスラッシュ（0x5c94）などについては、各国の事情に応じて文字を割り当ててよいことになりました。日本では、「やはり¥マークは必要だよね」ということで、0x5c94にはバックスラッシュではなく、"¥"マークを割り当ててしまったため、このような問題が起きてします。
ちなみにエクセルでも適当なセルに”\”と入力し、フォントをarialなどに変更すると、バックスラッシュが表示されます。一方、ワードでは、"¥"と入力してその部分を欧文フォントに変更しても”¥”のままとなってしまいます。この場合、【ファイル】→【オプション】→【詳細設定】→【レイアウトオプションの適用先文字】→
【バックスラッシュを円記号(\)に変換する】のチェックを外すと、【レイアウトオプションの適用先】の文書だけはバックスラッシュを表示できるようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/258643/93ec9d98-7485-e4aa-8bc1-5ff2f65e20a3.png)
元旦に7時間でWEBアプリを開発し、リリースした話

新年おめでとうございます。
元旦にwebアプリを開発し、リリースした話をします。

# リリースしたアプリケーション
Dockerを使っていていつも思うことがある。

**Docker hubのdescriptionにdocker-compose.ymlがない！**

例えば[redis](https://hub.docker.com/_/redis)にはdocker-compose.ymlのサンプルが書かれていない。
docker runのコマンドをdocker-compose.ymlに手動で書き換えるのは、かなり億劫である。
（たまに、docker runのコマンドとdocker-composeののオプションで違うのがあったりして面倒くさい）

そこで、[DCC(Docker Compose Converter)](https://docker-compose-converter.netlify.com/)を開発しました。

# DCCとは
[DCC](https://docker-compose-converter.netlify.com/)はDocker Compose Converterの略です。
ネーミングセンスがないのはご愛敬。

docker runのコマンドをdocker-compose.ymlに書き換えてくれます。
また、その書き換えたdocker-compose.ymlをダウンロードすることができるといったシンプルなものです。

# アプリケーションの開発期間に関して
タイトルにもある通り、DCCは7時間で開発しました。
DCCのソースコードは[ここ](https://github.com/MIDORIBIN/docker-compose-converter)にあります。
ファーストコミットが1月1日の23時、最終コミット(4aa12ad)が翌日の1月2日の6時になっています。
計7時間で開発しました。
ちなみに、アマゾンビデオの戦闘車をみながら開発していました。


# 使用技術
ホスティングサービス: netlify
フロントエンド: vue.js
バックエンド: なし

### フロントエンド
フロントエンドはvue.jsで開発しました。
小さいアプリケーションを作るがお手軽なので、非常に重宝しています。
DCCもかなり小さく、componentも２つか３つしかありません。

### バックエンド
バックエンドはありません。
なのでdocker runのコマンドがどこかに送信され、勝手にみられることをあり得ません。

### ホスティングサービス
静的なファイルを置くためのホスティングサービスとしてnetlifyを使わせていただきました。
ボタンを何回か押すだけですぐにホスティングしてくれるので便利です。
みなさんもぜひ利用してみてください。

# 今後の展望
docker-compose.ymlのversionが3に固定されてるので、ほかのversionでも出力できるようにしたい。
docker-compose.ymlからdocker runコマンドを生成できるようにしたい。
UIをもう少し頑張りたい。（だれかアイディアください）

# 終わりに
新年そうそうにwebアプリケーションを作ったお話でした。
明け方４時ぐらいから「新年そうそう何してるんだ？」と思っていましたが、なんとかやりきりました。
あまりニーズはないかもしれませんが、作っていて楽しかったです。
もし、docker runのコマンドからdocker-compose.ymlを作りたい場合には利用してみてください。
【Looking Glass】C95で展示したLooking Glassデモの実装について

C95で展示したLooking Glassデモの実装について説明したいと思います。
※Looking GlassがありUnityがインストールされている前提で進みます。

デモはこんな感じです（YouTube）
https://youtu.be/FMj0qfFN0Eo

ちなみにデモはUnity 2018.2.20f1＋HoloPlay SDK 0.1.4 で作りました。

#準備

まずは公式からHoloPlay SDKをダウンロードし、Unityに入れてください。

HoloPlay SDKのダウンロードはここから
https://lookingglassfactory.com/downloads/

<b>↓詳細な手順はこちらを参考にするのがいいと思います</b>

UnityではじめるLooking Glass
http://tks-yoshinaga.hatenablog.com/entry/looking-glass

ここまで出来ればUnityのシーンがLooking Glassで表示出来るようになっていると思います。

<b>※補足※</b>
高DPI環境でLooking Glassを右側に配置した場合、プレビューのオフセットを手動調整しないと表示がズレます。

例えばSurface Book2（解像度3240x2160）を200%表示で使っている場合、このように右側にLooking Glass（2の方）を配置すると
![190102_book2_LKGを右設置.jpg](https://qiita-image-store.s3.amazonaws.com/0/227733/5ba29c1b-1f7f-ecb7-72f8-106445719577.jpeg)

標準設定の↓では表示されません。
![190102_book2_NG設定.jpg](https://qiita-image-store.s3.amazonaws.com/0/227733/ca0b834f-5ef6-c1ae-f1ac-c012da6f7c08.jpeg)

正しく表示させるには、200％表示なので解像度の半分1620を設定します。
![190102_book2_OK設定.jpg](https://qiita-image-store.s3.amazonaws.com/0/227733/4cd28166-e42d-3d22-636c-0d4fd510c4f9.jpeg)
これで正しくプレビューできるようになります。

このような手動調整が面倒ならLooking Glassを左側に置いちゃいましょう。
Looking Glassを左側に置いた場合はLooking Glassの解像度分オフセットされる（メインモニタの解像度やDPIは関係しない）ので、調整不要でプレビュー出来ます。
![190102_book2_LKGを左設置.jpg](https://qiita-image-store.s3.amazonaws.com/0/227733/3e0757c0-16d3-d560-ba85-fd88a4df7b6a.jpeg)

![190102_book2_左置きOK設定.jpg](https://qiita-image-store.s3.amazonaws.com/0/227733/050e4607-a529-9d84-771c-04d8902cb625.jpeg)
[Left]ボタンを押せばHoloPlay Displayが左側に移動します。

#シーンの編集

Looking Glassに何か表示するのはとても簡単で（HoloPlay SDKのおかげ！）、このシーン上にある緑の領域内がそのままLooking Glassの表示空間になります。
![190102_初期状態のシーン.jpg](https://qiita-image-store.s3.amazonaws.com/0/227733/1f97004f-5f84-32e0-126a-fbb2f45e3ee6.jpeg)

そしてデモでは以下のようになっています。
![190102_配置済みシーン.jpg](https://qiita-image-store.s3.amazonaws.com/0/227733/b0770af0-4790-0310-1c2b-207d27210972.jpeg)

はい、これだけです！
あとは定期的に幕を下ろしてキャラを差し替えるの繰り返しです（Unityで何か作っている人なら難しくない処理だと思います）

シーンを見て「何で2Dの表示にHoloPlay UI Camera使ってないの？」と思った方、鋭いです！
最初はHoloPlay UI Cameraを使って幕／左上のタイトル／右下の名前はuGUIのImageで表示していましたが、Unity Editorのプレビューでは問題なくても実行ファイルにするとLooking Glassで表示されなくなりました。
そのため現状2D表示物はuGUIを使わずSpriteで表示しています（コミケ前日作業だったので問題の解決より完成優先）

#おまけ

実はLooking Glass本体下部のボタンで水槽モードに切り替えることも出来ました。
ボタンはHoloPlay SDKのButtons.csをシーンに追加するだけで使えるようになります。

ただ、本体に触れるのは転倒や落下につながるので展示中は発泡スチロールでフタをしました。
![190102_水槽.jpg](https://qiita-image-store.s3.amazonaws.com/0/227733/e203951d-80b6-6756-4376-0be0cc145ddf.jpeg)
Change-Oの使い方

#Change-Oとは
igbalstなど、Ｖ（Ｄ）Ｊアラインメントツールの出力を処理し、クローンクラスターを免疫グロブリン（Ｉｇ）配列に割り当て、そして生殖系列配列を再構築するためのツールの集まりです。

igblastのアウトプットは非常に見づらいので、その後のChange-OのMakeDb.pyで見やすいフォーマットに変換します。

#Change-Oのダウンロード

```
pip3 install changeo --user
```

もしくは以下でもダウンロードできます。

```
wget https://bitbucket.org/kleinstein/changeo/downloads/changeo-0.4.4.tar.gz
tar zxvf changeo-0.4.4.tar.gz
export PATH="$PATH:/PATHTOCHANGEO/changeo-0.4.4/bin"
```

#igblast
まずは、Change-Oをするまえに、igblastでアノテーションを行います。
igblastの設定は以下の通りです。

```
igblastn \
    -germline_db_V ~/share/igblast/database/imgt_human_ig_v\
    -germline_db_D ~/share/igblast/database/imgt_human_ig_d \
    -germline_db_J ~/share/igblast/database/imgt_human_ig_v \
    -auxiliary_data ~/share/igblast/optional_file/human_gl.aux \
    -domain_system imgt -ig_seqtype Ig -organism human \
    -outfmt '7 std qseq sseq btop' \
    -query S43_atleast-2.fasta \
    -out S43_atleast-2.fmt7
```
#IMGT-gapped リファレンスシーケンスの作成
以下のウェブサイトから、適切なシーケンスをダウンロードします。
http://www.imgt.org/vquest/refseqh.html

例は以下の通りです。

```
#Human TCR
##TRA
wget http://www.imgt.org/download/V-QUEST/IMGT_V-QUEST_reference_directory/Homo_sapiens/TR/TRAV.fasta
wget http://www.imgt.org/download/V-QUEST/IMGT_V-QUEST_reference_directory/Homo_sapiens/TR/TRAJ.fasta

##TRB
wget http://www.imgt.org/download/V-QUEST/IMGT_V-QUEST_reference_directory/Homo_sapiens/TR/TRBV.fasta
wget http://www.imgt.org/download/V-QUEST/IMGT_V-QUEST_reference_directory/Homo_sapiens/TR/TRBD.fasta
wget http://www.imgt.org/download/V-QUEST/IMGT_V-QUEST_reference_directory/Homo_sapiens/TR/TRBJ.fasta

##TRD
wget http://www.imgt.org/download/V-QUEST/IMGT_V-QUEST_reference_directory/Homo_sapiens/TR/TRDV.fasta
wget http://www.imgt.org/download/V-QUEST/IMGT_V-QUEST_reference_directory/Homo_sapiens/TR/TRDD.fasta
wget http://www.imgt.org/download/V-QUEST/IMGT_V-QUEST_reference_directory/Homo_sapiens/TR/TRDJ.fasta

##TRG
##TRD
wget http://www.imgt.org/download/V-QUEST/IMGT_V-QUEST_reference_directory/Homo_sapiens/TR/TRGV.fasta
wget http://www.imgt.org/download/V-QUEST/IMGT_V-QUEST_reference_directory/Homo_sapiens/TR/TRGJ.fasta

cat TR?V.fasta > human_tr_v.fasta
cat TR?D.fasta > human_tr_d.fasta
cat TR?J.fasta > human_tr_j.fasta
```


#MakeDb.py

igblastのアウトプットを見やすい形にするには、MakeDb.pyをかけます。コマンドは以下の通りです。

```
MakeDb.py \
    igblast \ 
    -i S43_atleast-2.fmt7 \ #igblastのアウトプット
    -s S43_atleast-2.fasta \ #igblastをかける前のfastaファイル
    -r human_tr_v.fasta human_tr_d.fasta human_tr_j.fasta \ #上記で作成したリファレンスシーケンス
    --regions \ 
    --scores
```

#アウトプット
アウトプットファイルは、ibglastのアウトプットファイルと同じディレクトリに作成されます。名前はigblastの後ろに"_db-pass.tab"がつきます。
cloud9にffmpegをインストールする

##0.ffmpegとbrewのバージョン確認

前提条件：cloud9、テンプレートはPHPを選択

・ffmpegのバージョン確認

```
$ ffmpeg -version
-bash: ffmpeg: command not found
```

・brewのバージョン確認

```
$ brew -v
bash: brew: command not found
```
両方ともインストールされていないことを確認する。


##1.Linex brew をインストールする。

```
$ sudo apt-get install build-essential curl git m4 ruby texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev
$ sudo apt-get install gettext
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
$ test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv)
$ test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
$ test -r ~/.bash_profile && echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bash_profile
$ echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.profile
$ brew install hello
```
##2.ffmpeg をインストールする。

```
$ brew install ffmpeg
$ brew install imagemagick
```

##3.終わりに
とりあえずこれでインストールはできます。

##4.参考URL
https://qiita.com/thermes/items/926b478ff6e3758ecfea
https://qiita.com/Ryosuke-Hujisawa/items/6a1c47d31ac299dc1c46
http://linuxbrew.sh/
Mac の Dock をディスプレイの下から右に移動する 画像説明  英語版

Mac dock move to right side from bottom for display long width clear viewing

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

# TOO BIG DOCK

![image](https://user-images.githubusercontent.com/13635059/50590846-ed136080-0ecf-11e9-8d03-96771de3bd2b.png)

Mottainai display size 

# Mac Setting

![image](https://user-images.githubusercontent.com/13635059/50590874-116f3d00-0ed0-11e9-9023-45fe03989f99.png)

# Doc

check Right

![image](https://user-images.githubusercontent.com/13635059/50590886-22b84980-0ed0-11e9-8e37-1bf7f60b5b9e.png)

# Finished!
![image](https://user-images.githubusercontent.com/13635059/50590892-28159400-0ed0-11e9-88b8-ffc0825549b6.png)

---

By 

Twitter https://twitter.com/Yumainaura

Github https://github.com/YumaInaura/YumaInaura/



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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Docker on Windows ハマったポイント

# 概要

以下の環境でDocker on Windows を使おうとしてハマった。
ハマったポイントをまとめておく。

* Windows 10
* Docker version 18.09.0, build 4d60db4
* docker-compose version 1.23.2, build 1110ad01

# ハマったポイント

## 指定されたファイルが見つかりません。
### 現象
docker-composeを実行したら「指定されたファイルが見つかりません。」というエラーが出た。

```powershell:docker-compose実行
> docker-compose ps
ERROR: Windows named pipe error: 指定されたファイルが見つかりません。 (code: 2)
```

### 原因

* Docker on Windows が起動していないことが直接の原因。
* OS起動後のDocker起動はそこそこ遅いが、せっかち過ぎてDocker起動前にdocker-composeをたたいいてしまった。

## OCI runtime create failed

### 現象

コンテナ作成時に`OCI runtime create failed`というエラーが出てコンテナ作成に失敗。

```powershell:docker 
> docker-compose up
Creating <container name>                  ... error
ERROR: for <container name>  Cannot start service <service name>: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:58: mounting \\\"<path name>\\\" to rootfs \\\"/var/lib/docker/overlay2/b53bee70d9c0cec0a41a7486f0831becb8f94624b9f343af7881babe3b3251b2/merged\\\" at \\\"/var/lib/docker/overlay2/b53bee70d9c0cec0a41a7486f0831becb8f94624b9f343af7881babe3b3251b2/merged/<path name>\\\" caused \\\"no
```

### 原因

* Docker on Windows の Shared Drivesのログイン情報が間違っていた。
* ユーザ名を「コンピュータ名\ユーザ名」ではなく、「ユーザ名」とすべきだった。
* 筆者の環境はMicrosoft アカウントだったが、ADアカウントかローカルアカウントだとまた違ってくるはず。
* とにかくログイン情報の **設定する** 際はなんのエラーもなく、 **利用する** ときに突如エラーになることに注意が必要。

### 参考サイト

https://ao-system.net/note/50

## 

<!--
## 

```
ERROR: for samba  Cannot start service samba: driver failed programming external connectivity on endpoint arrows_samba_1 (f17df4dc027b0f647352841789e9c0e28c23b49eed1b88f435e286c353021416): Error starting userland proxy: Bind for 0.0.0.0:445: unexpected error Permission denied
ERROR: Encountered errors while bringing up the project.
```

-->
@Twitter でのリプが難しい？チェインが崩れる？串が壊れる？ TwitterのUIは｢キャッチボール｣用に作られているかもしれない‥！

Twitter reply was to difficult to me is beginner. Why many posts user break reply chain?

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

# I noticed chained Twitter was broken from other twitters voice

clustered? proxied? my brain so confused.

![image](https://user-images.githubusercontent.com/13635059/50590011-585b3380-0ecc-11e9-9612-b10e78bac747.png)


![image](https://user-images.githubusercontent.com/13635059/50589804-69577500-0ecb-11e9-8ba2-b5b4b53ad36a.png)

# I noticed that reason is i sent message to user before he replay to me

# Twitter designed for formal case A tweet To B twitter to replay To A and B tweet after that

![image](https://user-images.githubusercontent.com/13635059/50589941-00bcc800-0ecc-11e9-97bf-9734a8a54f6d.png)


# Twitter replay chain is like play catch boll game

respond respond responde A and B and others is the RULE of game
In the case very natural UI twitter has maybe


![image](https://user-images.githubusercontent.com/13635059/50589910-d834ce00-0ecb-11e9-8102-ae27a8237014.png)

# And maybe Web UI is bother me

iPhone app UI is probably better than Web browser UI

# umm but i think Twitter is too clustered tweeting beginner user is me

but i understand the reason why just a little bit my brain be clear 👍 👍 👍 

# For JApanese user 3 lines

@Twitter でのリプが難しい？チェインが崩れる？串が壊れる？ TwitterのUIは｢キャッチボール｣用に作られているかもしれない‥！

- TwitterはAさんBさんAさんBさん‥というように、キャッチボールをするときに一番自然なインターフェイスになっている、意識しなくてもコンボが続くような
- @yumainaura のように1個のツイートにリプをつけて、またコメントが浮かんでリプをつけて‥というような方法だと、 Aさんのツイートが複数の Bさん = yumainaura のツイートを持つ、ブラさがる形になり、串のようにチェインできていなかった
- たぶんWebのインターフェイスがちょっと悪くて、何がどうチェインしてるのかが非常に分かりづらかった

---

By 

Twitter https://twitter.com/Yumainaura

Github https://github.com/YumaInaura/YumaInaura/










<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
amazon dash buttonのハック

# はじめに
n番煎じのamazon dash buttonを万能ボタン化する話 

[node.jsのライブラリ](https://github.com/maddox/dasher)がすでに開発されていましたが, 
Mac環境前提だったり, 不勉強でnpmよくわからなかったりと
苦労が多かったので, c++で自作しました

作ったコードは[github](https://github.com/tomokinex/dash_button)にあげてあります
どういう処理をしてるかはこの記事で説明していて, 
使い方は[github](https://github.com/tomokinex/dash_button)のREADME.mdに書いています

# amazon dash buttonの簡単な仕組み
amazon dash buttonはボタンを押すだけで注文してくれる便利？ボタンです
スマホによって設定したwifi下で作動します

詳しい仕組みは省きますが, arpという送信先を限定しない通信方式で, ルーターにリクエストを送信しています

最後まで設定をしない状態でボタンを押すと, リクエストを送信するが, 注文はされないという状態になります

ボタンをこの状態にしておき, 同じwifi内のサーバでボタンによるリクエストを受信することで, なんらかのアクションを発火させることができます

# amazon dash buttonの受信
まず, amazon dash buttonのMACアドレスを調べます
[Wireshark](https://forest.watch.impress.co.jp/library/software/wireshark/)等のパケットキャプチャソフトを使うか, 
[github](https://github.com/tomokinex/dash_button)内にあるarpパケットを受信するスクリプトで調べることができます  

次に, arpパケットを受信し, MACアドレスの照会をします
エラー処理を省略した簡単なコードを乗せておきます

```c++:arpの受信処理
    /*arp用のソケットを作り, bindする*/
    int arp_sock = socket(AF_PACKET, SOCK_DGRAM, htons(ETH_P_ARP));
    struct sockaddr_ll sockaddr;
    memset(&sockaddr, 0x0, sizeof(sockaddr));
    sockaddr.sll_family = AF_PACKET;
    sockaddr.sll_protocol = htons(ETH_P_ARP);
    sockaddr.sll_ifindex = if_nametoindex("eth0");
    bind(arp_sock, (struct sockaddr*)&sockaddr, sizeof(sockaddr))

    /*ソケットにarp通信を受信*/
    char buf[256];
    memset(buf,0x0,sizeof(buf));
    int arp_size = recvfrom(arp_sock, buf, sizeof(buf), 0, NULL, NULL);

    /*ソケットをキャスト*/
    struct ether_arp *arppack = (struct ether_arp*) buf;
```

```c++:ether_arpの実体
struct ether_arp {
 u_int16 arp_hrd; 
 u_int16 arp_pro; 
 u_int8 arp_hln;  
 u_int8 arp_pln  
 u_int8 arp_sha[6]; 
 u_int32 arp_spa; 
 u_int8 arp_tha[6]; 
 u_int32 arp_tpa; 
};
```
struct ether_arp内のarp_sha[6]が受信したarpソケットのMACアドレスになります
これを事前に調べたMACアドレスと照会して, 一致すれば何らかのアクションを発火します

# Webhooks
他の多くのamazon dash buttonハック系の記事と同様に, 何らかのアクションとして組み込んだのが[Webhooks](https://ifttt.com/webhooks)というサービスです

[Webhooks](https://ifttt.com/webhooks)は, 登録したURLにHTTPリクエストを送ることで, 別のアプリに通知を送ることができます

細かい設定は省略しますが, LINE, VoIP, slackをそれぞれ通知先に設定しました

サイトで設定すると, サンプルにcurlのスクリプトを出してくれるので, それをそのままシステム関数でコールしています
[github](https://github.com/tomokinex/dash_button)では, Makeのtargetを変えることで, ボタンの通知先を切り替えています

# 実際の動画
ボタンで発火するアクションをLINEの通知にしたversionの動画です
gifのレート下げてて見にくいですが, 多少の遅延があります  
![like.gif](https://qiita-image-store.s3.amazonaws.com/0/323745/5c1e2b17-65a2-4b1f-abd1-4433b8665fda.gif)

# おわりに
amazon dash buttonでアクションを発火させることはできましたが, 
何を発火させるかという部分の想像力が足りませんでした...

結局, LINE, Slackに固定文を送るボタンになりそうです

# 余談(環境構築)
最初はWSLで使おうとしてましたが, 
[tcpdump](https://www.tcpdump.org/manpages/tcpdump.1.html)やソケット作成ができなかったので, 
VM上のUbuntuで動作するようにしました

VM上のOSで外部ネットワーク情報を知るには, 
VMのネットワーク設定をNATではなく, 
ホストオンリーアダプタかブリッジアダプタに設定する
必要があるので, 注意しましょう

# 参考にしたサイト
https://blanktar.jp/blog/2013/04/ethernet-header.html
http://jis.hatenablog.com/entry/2013/09/20/143655
【動画連結】OpenCVで動画の連結をやってみた♪

OpenCVで動画連結してみた。
なかなか芽が出ないので、コマ切れになった動画を連結することとした。

やってみると、参考サイトがあり、ここから連結は簡単にできてしかも応用範囲も広そうなので、まとめておこうと思う。
###コードは以下に置きました
・[OpenCV/combine_movie.py](https://github.com/MuAuan/OpenCV/blob/master/combine_movie.py)

これは、ほとんど参考のexport_movie.pyのままで、単に複数動画に拡張したものです。
【参考】
・[Python + OpenCV で雑コラ動画を作成する③ 雑コラ動画作成](https://qiita.com/k_sui_14/items/92fd84f35245ad0be464)
###コード解説
OpenCVだけで、やれます。
関数名をcombine_movie()としました。
複数ファイルは列挙しています。

```py
#coding=utf-8
import cv2

def combine_movie():
    # 入力する動画と出力パスを指定。
    target1 = "kenbikyo_video_hatuga_60-3.mp4"
    target2 = "kenbikyo_video4450940952464.mp4"
    target3 = "kenbikyo_video4527173059250.mp4"
```
参考の通り、出力ファイルを定義します。
codecはウワンと同じMP4V,出力の拡張子は参考と同じとしました。
fps, int(width), int(height)を最初の元動画から取得します。
ここで、fpsをfps*2とか、int(fps*0.5)とすると、早回し、スロー再生ができます。

```py
    result = "kenbikyo_combine.m4v" 
    # 形式はMP4Vを指定
    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')  

    #動画情報の取得
    movie = cv2.VideoCapture(target1)    
    fps    = movie.get(cv2.CAP_PROP_FPS)
    height = movie.get(cv2.CAP_PROP_FRAME_HEIGHT)
    width  = movie.get(cv2.CAP_PROP_FRAME_WIDTH)
    print(fps, int(width), int(height))
    
    # 出力先のファイルを開く
    out = cv2.VideoWriter(result, int(fourcc), fps, (int(width), int(height)))
```
ここでは３個の動画を順に読み込み・書き出しをします。
結合動画を意味する'comBined_movie'を重畳します。

```py
    # 動画の読み込み
    for i in range(1,4):
        if i==1:
            movie = cv2.VideoCapture(target1)
            print(i)
        elif i==2:
            movie = cv2.VideoCapture(target2)
            print(i)
        elif i==3:
            movie = cv2.VideoCapture(target3)
            print(i)    

        # 最初の1フレームを読み込む
        if movie.isOpened() == True:
            ret,frame = movie.read()
        else:
            ret = False

        # フレームの読み込みに成功している間フレームを書き出し続ける
        while ret:
            cv2.putText(frame, 'comBined_movie', (400,400), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0,0,255), 2);
            
            # 読み込んだフレームを書き込み
            out.write(frame)

            # 次のフレームを読み込み
            ret,frame = movie.read()


if __name__ == '__main__':
    combine_movie()
```
思っていたより、案外簡単にできました。
###連結動画
・[複数の顕微鏡動画を連結してスロー再生、早回し再生などしてみた♪](https://youtu.be/pwBoF4kfeYs)
<a href="http://www.youtube.com/watch?feature=player_embedded&v=pwBoF4kfeYs" target="_blank"><img src="http://img.youtube.com/vi/pwBoF4kfeYs/0.jpg" 
 </a>
※画像をクリックするとYouTube動画につながります

###まとめ
・OpenCVで動画の連結をやってみた
・fpsの値で再生速度を変更できる
※再生速度変更だけでもできます

・いろいろなバラバラ動画から、まともな動画が作れそうだ
[翻訳]Googleの自然言語処理AI（BERT）の更新履歴（github上のREADMEの翻訳）

この記事は、2018年末現在、自然言語処理AIにおける最先端のディープラーニングモデルであるBERTについて、提供元であるgoogle-researchの[githubレポジトリのREADME](https://github.com/google-research/bert)記載内容のうち、更新履歴の部分を随時翻訳するものです。

※**githubレポジトリのREADMEの初稿部分の翻訳は、[別の記事](https://qiita.com/uedake722/items/927bf491a025f1a88b17)にあります。**
※日本語の処理に使用するには、[Multilingual READMEの翻訳記事](https://qiita.com/uedake722/items/b7f4b75b4d77d9bd358b)も参照ください

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

[^1]: ラテン文字でないアルファベットには、ギリシャ文字やキリル文字などがある

---

# 2018年11月23日
## Un-normalized multilingual model + Thai + Mongolian ：正規化なしの多言語モデル＋タイ語＋モンゴル語
入力に対していかなる正規化も行っていない新しい多言語モデルをアップロードしました(小文字化、アクセントマークの削除、Unicode正規化のいずれも行っていない)、そしてタイ語とモンゴル語にも対応しました。

多言語モデルを開発するにはこのバージョンを使用することを推奨します。特にラテン文字でないアルファベット[^1]を使用する言語においては。コードの変更は不要で、下記からダウンロードできます：

[BERT-Base, Multilingual Cased](https://storage.googleapis.com/bert_models/2018_11_23/multi_cased_L-12_H-768_A-12.zip): 104 languages, 12-layer, 768-hidden, 12-heads, 110M parameters

# 2018年11月15日
## SOTA SQuAD 2.0 System：最先端のSQuAD 2.0システム

SQuAD 2.0システムにおける83% F1スコアを再現するためにコード変更を提供しました。それは、現在のところLEADERBOARDにおいて3%差で１位です。詳しくは、[SQuAD 2.0セクション](https://qiita.com/uedake722/items/927bf491a025f1a88b17#squad-20)を見てください。

# 2018年11月5日
## Third-party PyTorch and Chainer versions of BERT available：BERTのPyTorch版及びChainer版がサードパーティによって利用可能に

HuggingFaceの研究者が[PyTorch版のBERT](https://github.com/huggingface/pytorch-pretrained-BERT)を利用可能にしました。我々が事前学習したチェックポイントと互換性があり、結果の再現ができます。Sosuke Kobayashiが[Chainer版のBERT](https://github.com/soskek/bert-chainer)を利用可能にしました（ありがとう！）。我々はPyTorch版の作成や維持にかかわっていませんので、質問は直接作者にコンタクトください。

# 2018年11月3日
## Multilingual and Chinese models available：多言語モデル及び中国語モデルが利用可能に

2つの新しいBERTモデルが利用可能になりました：

- [BERT-Base, Multilingual (Not recommended, use Multilingual Cased instead)](https://storage.googleapis.com/bert_models/2018_11_03/multilingual_L-12_H-768_A-12.zip): 102 languages, 12-layer, 768-hidden, 12-heads, 110M parameters
- [BERT-Base, Chinese](https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip): Chinese Simplified and Traditional, 12-layer, 768-hidden, 12-heads, 110M parameters

中国語では文字ベースのトークン化を用いています。中国語以外の言語ではWordPieceのトークン化を用いています。両方のモデルともコード変更なしにすぐに動かせます。中国語のトークン化をサポートするために`tokenization.py`中の`BasicTokenizer`の実装を更新しましたので、それをフォークしている場合は更新してください。tokenization APIについては変更していません。

さらなる情報は、[Multilingual README](https://qiita.com/uedake722/items/b7f4b75b4d77d9bd358b)を参照ください.
Mojave 用 Ghostscript (マスクメロンさん) への fix (2019-01-02時点)

macOS 用にマスクメロンさんが提供している Ghostscript.app は重宝していますが、Mojave 用のもの ( https://www.muskmelon.jp/?p=2265 ) はそのままでは動かない (ゴシック体フォントを発見できない) ような気がしますので、簡単に fix 方法を。

/Applications/Ghostscript.app/share/ghostscript/9.26/Resource/CIDFont ディレクトリ内の以下のファイルをリネームします。

* YuGothic-Bold → YuGo-Bold
* YuGothic-Medium → YuGo-Medium

以上です。
【macOS】コマンドラインから現在開いているアプリのスクリーンショットを撮る

## 実行するコマンド

```bash:terminal
screencapture -l$(osascript -e 'tell app "App名" to id of window 1') ~/Desktop/image.png
```

### 例

iTerm2のスクリーンショットを撮る場合

```bash
screencapture -l$(osascript -e 'tell app "iTerm" to id of window 1') image.png
```

**結果**
<img width="1068" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/113911/ef067f49-1cd3-aec8-9d8b-16cdb7be566d.png">

## 解説

ざっくり解説していきます。

### screencapture
macOSには、`screencapture`コマンドが標準機能として提供されています。
これは`cmd + shift + 3`など、ショートカットでスクリーンショットを撮った時に実行されるコマンドで、ショートカット以外でもコマンドライン上から実行することが可能です。

screencaptureにはいくつかのオプションがあり、今回は特定のwindowIDのウィンドウをキャプチャする`-l`オプションを使用しました。
これまで`cmd + shift + 4`で領域選択でキャプチャを撮っていましたが、このコマンドを知っておくとと結構便利かも :thinking: 

```bash
$ man screencapture

...中略
-l      <windowid> Captures the window with windowid.
...
```

### 特定のアプリケーションからWindowIDを取得する方法

起動しているアプリケーションからWindowIDを取得するには、AppleScriptから実行する必要があります。
そこで、`osascript`コマンドをターミナルから実行します。`osascript`は、コマンドラインからAppleScriptが実行できるコマンドです。

## 注意
Chrome・LINE・メッセージなど、一部、撮影できないアプリもありました。
原因はまだしっかり把握できていないので、ご存知の方はご教示いただけると幸いです :pray:

## 参考
- [How do I find the windowid to pass to screencapture -l? | Ask Question](https://apple.stackexchange.com/questions/56561/how-do-i-find-the-windowid-to-pass-to-screencapture-l)
- [コマンドラインでスクリーンショットを撮影する
](https://qiita.com/South_STR/items/f4624134726eca839647)
- [osascriptでOS Xのアプリを操作する](http://shuzo-kino.hateblo.jp/entry/2015/01/03/234722)
Docker-composeインストール方法

Docker-composeインストール方法についてメモ
最新化の方法も同様にしてできる。

#Docker-composeの手順
①インストールする verを指定して、ダウンロード(1.23.2)
②実行権限付与
③インストール確認

```
sudo curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version
```
🤖不器用なエンジニアは肉体動作をlifeHachすべきなんだぜ #絶望 #たんぽぽ #プログラミング



# Do not stop your 手

- エラーを読んで止まってしまうのは、手が止まっているからではないだろうか、先に手を動かすべき
- Google検索なり
- 立ち止まらないことにも勇気が必要というか、ずっとカタカタとキーボードを打ち鳴らすのって楽しくない？

# Happy HAcking Keyboard

- MAcBookAirをカタカタと打ち鳴らす幸福に気づくのが良いと思う
- むしろキーボードでアウトプットしていないときの息苦しさをもっと感じると良いと思う
- 心配事もストレスも苦しい悩みも、だいたい何らかのアウトプットをして手足を動かしていたら消えてしまう

# Ref

[お前は絶望的にプログラミングに向いてないから諦めて刺身にタンポポ乗せる仕事でもやってろ｜古都こと｜note](https://note.mu/kotofurumiya/n/n31d401fce782)

https://twitter.com/YumaInaura/status/1080414223170039808

![image](https://user-images.githubusercontent.com/13635059/50589184-fea53a00-0ec8-11e9-9842-7fca6f929b1c.png)

---

By 

Twitter https://twitter.com/Yumainaura

Github https://github.com/YumaInaura/YumaInaura/

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->