OmniAICreator/Qiita-1.07M huggingface dataset:
VS codeのLatexのビルド設定

# 目的
今まで英語の論文しか書いてなくて，久しぶりに日本語の原稿をLaTeXで書くので，VS codeで日本語文章をビルドできるようにしました。

# VS codeのビルド設定
雑なメモ代わりなので，詳細は以下参照。
[TeX wiki](https://texwiki.texjp.org/?Visual Studio Code%2FLaTeX#mccdb80b)
[VSCodeのLaTeX Workshopの設定について]( https://blog.sh4869.net/post/2019/10/10/vscode-latexmk-setting/)

# 何が難しいか
latex-workshopの設定でplatex用の設定をtoolsとrecipesの両方に設定しないと日本語用のビルド設定ができないこと。最初Tex Wikiの記事を途中までしか読んでなくて，toolsだけしか設定せず，混乱しました。

# ビルド設定を最後使ったやつをデフォルトにする
command + option + bでビルドが走りますが，デフォルトだと，ビルド設定の一番はじめのものになってます。ショートカットによるビルドを最後に使ったやつにするには，settingsを開いて，
Latex-workshop > Latex > Recipe: Defaultの項目を修正します。
英語設定だとlastUsedにする。

# settigns.json

```json
"latex-workshop.latex.tools": [

    
        {
            "name": "latexmk_platex",
            "command": "latexmk",
            "args": [
                "-e",
                "$latex=q/platex %O -synctex=1 -interaction=nonstopmode -file-line-error %S/",
                "-e",
                "$bibtex=q/pbibtex %O %B/",
                "-e",
                "$biber=q/biber %O --bblencoding=utf8 -u -U --output_safechars %B/",
                "-e",
                "$makeindex=q/pmendex %O -o %D %S/",
                "-e",
                "$dvipdf=q/dvipdfmx %O -o %D %S/",
                "-norc",
                "-gg",
                "-pdfdvi",
                "%DOC%"
                ],
                "env": {}
        },
中略
```

```json
"latex-workshop.latex.recipes": [
    
        {
            "name": "latexmk 🔃",
            "tools": [
                "latexmk"
            ]
        },
中略
        {
            "name": "latexmk (platex)",
            "tools": [
                "latexmk_platex"
            ]
        },
```
環境変数設定後、反映されていない時の解決策

#環境変数とは？
OSが設定値などを永続的に保存し、利用者や実行されるプログラムから設定・参照できるようにしたもの。 プログラムの実行時などに必要となる、利用者やコンピュータごとに内容が異なる設定値などを記録するために用いられる。
アクセスキーを他者にバレたくないときにパソコンで設定する

#環境変数が反映されてない原因
環境変数を変更後、同じターミナルで
rails sしていなかったから

#環境変数の設定手順
【MacOSがMojave以前の場合】
#1.vimを開始する

```
ターミナル
$ vim ~/.bash_profile
```
#2.[ i ]を押して環境変数を設定する
escキーを押した後[:wq]を押して通常のターミナルに戻る

#3追加した環境変数を使えるようにする

```
source ~/.bash_profile
```

#4 rails sでサーバーを再起動する
RaspberryPiで天気予報付き時計＋イロイロ(1)

#そもそも
面白そうなものを見つけた。
https://github.com/o24/pi_weather

んだけど、天気だけでは面白くないのでイロイロ追加した。
https://twitter.com/clau_pump/status/1305073857036914689

ので導入をメモった。

#作業ディレクトリ作成
いつもの/gitで作業。WinSCP経由でWindow上でテキスト書けるのが良いのです。

```
sudo mkdir /git
sudo chown pi /git 
```

#スターターキット導入

```
cd /git
git clone https://github.com/o24/pi_weather.git
```
config.rbを適当に変更。横浜人なので14と4610を入力。
適当にyahoo天気見に行ってアドレス確認してね。

```/git/pi_weather/script/config.rb
# 都道府県
AREA_ID = "14"
# 北部、南部など
ZONE_ID = "4610"
```

#rubyのオプションのインストール
nokogiriは入れるのに苦労した。ruby-devが必要っぽい。

```
sudo gem update --system
sudo apt-get update
sudo apt-get install ruby-dev -y
sudo gem install nokogiri pry pry-byebug
```

#天気取得の動作確認
```
cd /git/pi_weather/script; sudo /usr/bin/ruby2.5 /git/pi_weather/script/run.rb
```
成功すれば`/git/pi_weather/client/src/json/temp.json`が出力されていてXMLでごちゃごちゃ書いてあるはず。


#天気の自動取得
crontabに登録して天気を自動取得。
毎時取得ぐらいでいいと思う。

```
#(↓なんかcrontabをファイル指定できないんだけど・・・？？？)
sudo vi /etc/crontab

5 * * * * root cd /git/pi_weather/script; /usr/bin/ruby2.5 /git/pi_weather/script/run.rb > /dev/null
```

#httpサーバー(apache)インストール
```
sudo apt-get install apache2 -y
```
`/var/log`をtmpfsに突っ込んでいると起動しなくなるので以下も追加しよう。
ガリガリ書き込むことになるので、ついでに更新データはtmpfsに突っ込もう。

```
sudo vi /etc/fstab

tmpfs  /var/log/apache2       tmpfs defaults,size=16m,noatime,mode=0755 0 0
tmpfs  /git/pi_weather/client/src       tmpfs defaults,size=16m,noatime,mode=1777 0 0
```
#httpのっとり
スターターキットからapacheへのリンクでデフォルトページを上書きする。

```
cd /var/www
sudo mv html html_bk
sudo ln -s /git/pi_weather/client/src html
```

#http動作確認
うまくいってればPCアクセス可能になっていて、スターターキットの時計が表示されるはず。
http://piのIPアドレス/
githubでfatal: the remote end hung up unexpectedlyが出た時の対処法

## 背景
新しいサービスのためのファイルを多数追加してgitにpushしようとしたところ、

```
packet_write_wait: Connection to 52.192.72.89 port 22: Broken pipe
fatal: the remote end hung up unexpectedly
fatal: the remote end hung up unexpectedly
```

というエラーが発生したので、対処法を調べてみた。
備忘録として記事を作成。


## 対処法
### postできるサイズを上げる

```
git config --global http.postBuffer 10M
```

これだけでは解決せず、、、


### SSHに設定を追加
~/.ssh/configに以下の設定を追加

```
ServerAliveInterval 600
TCPKeepAlive yes
IPQoS=throughput
```

自分のconfigファイルは以下のようになっている

```~/.ssh/config
 Host github github.com
      HostName github.com
      IdentityFile ~/.ssh/keys/id_rsa
      ServerAliveInterval 600
      TCPKeepAlive yes
      IPQoS=throughput
      User git
```

これでpushしたところ問題無く通った

## 参考にしたサイト
https://blog.veloc1ty.de/2019/06/01/github-clone-broken-pipe/
任意の文字列が左から何文字目に出てくるかを出力したい

【概要】
----------------------------------------
<b>1.結論</b>

<b>2.どのように使うか</b>

<b>3.ここから学んだこと</b>



1.結論
----------------------------------------
<b>indexメソッド</b>と、<b>puts</b>を使う！
<br>

2.どのように使うか
----------------------------------------

```ruby:
def search(str)
 puts(str.index("検索したい任意の文字列")+1)
end
```
となります！
こうすることで(str)が仮引数になっており任意の文字列（実引数）を取ってくる形になり戻り値（putsの中身 )が出力されます。

<b>str.index("検索したい任意の文字列",[検索したい開始位置])</b>
が型になります。

ここで気をつけてほしいことが2点あります。
<b>1点目</b>に"+1"としている部分です。配列と同じようにカウントが"0"から始まります。
<b>2点目</b>に最初の文字しか反応しないことです。

ex) ohmygoodness,oh! 
であれば"oh"を検索した際に”0”と出力されてしまう(1点目)。そして2つ目の"oh"は認識されません(2点目)。
<br>

3.ここから学んだこと
----------------------------------------
”左から”があれば右からもあるわけでその場合は”rindex”を使用します。注意したいことが2点あります。1点目は[検索したい開始位置]は負の数が入ることです。"-1""-2"と記載します。
2点目は出力される値は先頭から数えた値になります。
また、こちらも最初の文字しか反応しない(今度は末尾のohのみ)ことです。

参考にしたサイト:
<a href="https://uxmilk.jp/24005">Rubyで文字列の検索をする方法：index, rindex</a>
<br>
linuxで音量を指定して、音を鳴らす

amixer -c0 sset PCM 60% && aplay --duration=2 a.wav
amixer -c0 sset PCM 70% && aplay --duration=2 a.wav
amixer -c0 sset PCM 80% && aplay --duration=2 a.wav
amixer -c0 sset PCM 85% && aplay --duration=2 a.wav
amixer -c0 sset PCM 90% && aplay --duration=2 a.wav

"duration=2"は、2秒後に再生を停止するためのオプション。
【VBA】ダイアログで選択したフォルダのパスをセルに入力する

##アクティブセルにダイアログで選択したフォルダのパスを入力できるようにする
フォルダパスを入力したいセルを選択して
「フォルダパスを選んで入力」ボタンを押すとダイアログが表示され
選択したフォルダのパスが入力されるようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700414/d4177576-b8b0-cf6b-e2d7-ce432ae03e7f.png)

```VB
Private Sub btnFldSelect_Click()
    Dim TargetRange As Range '入力対象のアクティブセル格納用
    Set TargetRange = ActiveCell 'アクティブセルを変数に格納
    Dim TargetFldName As String '選択したフォルダパス格納用
    
    'ダイアフォルダグ表示
    Application.FileDialog(msoFileDialogFolderPicker).Title = "パスを入力したいフォルダを選んでね" 'ダイアログタイトル
    If Application.FileDialog(msoFileDialogFolderPicker).Show = True Then 'フォルダを選んでダイアログOK押下
       TargetFldName = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1) '選択したフォルダのパスを格納
       TargetRange.Value = TargetFldName 'アクティブセルにフォルダパスを入力
    End If
End Sub
```
【実行結果】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700414/d555412c-1fea-eabb-fa02-ab4a955890ce.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700414/3d5be4f4-627c-6f34-bb9c-6282df5524ba.png)

##ワタシ流こだわり
なくてもいけるけど、RangeやCellsに値入力するときは`.Value`を必ずつけます。
RubyのHTTPClientでクエリに配列を渡してリクエストする方法

`https://httpbin.org/get?params[]=a&params[]=b&params[]=c`

このようなURLでリクエストしたい場合は以下のようにする

```ruby:sample.rb
#!/usr/bin/env ruby

require 'httpclient'

url = 'https://httpbin.org/get'
query = {
    'params[]' => ['a', 'b', 'c']
}
puts HTTPClient.get(url, query).body
```

```shell-session:test
$ ./sample.rb | jq '.args'
{
  "params[]": [
    "a",
    "b",
    "c"
  ]
}
```
【nvm-windows】ディレクトリ毎に Node.js のバージョンを自動で切り替える

functions などを書いていると、Node.js のバージョンを切り替えたいことがありますよね。手動で`nvm use`するのも面倒なので自動化しましょう。

nvm のインストールについては割愛します。

# 環境
- Windows 10 Pro
- Git Bash
- nvm 1.1.7

## .nvmrc
バージョンを切り替えたいディレクトリに`.nvmrc`を作成し、nvm にインストール済みの Node.js のバージョンを記述します。

```
14.10.1
```

## ~/.bashrc
以下を追記。ディレクトリを移動した際、`.nvmrc`が存在すれば、`.nvmrc`に記述されている Node.js のバージョンを変数に格納し、`nvm use [変数]`を実行しています。

```bash
enter_directory() {
     if [[ $PWD == $PREV_PWD ]]; then
       return
     fi

     PREV_PWD=$PWD
     [[ -f ".nvmrc" ]] && current_node_ver=`cat .nvmrc` && nvm use $current_node_ver
}
export PROMPT_COMMAND=enter_directory
```

## やってみる

```bash
$ cd ~/project
$ echo "14.10.1" > .nvmrc
```

```bash
$ cd ~
$ nvm use 10.22.0
Now using node v10.22.0 (64-bit)

$ cd ~/project
Now using node v14.10.1 (64-bit)
```

自動で`nvm use 14.10.1`が実行されました。
Serverless+Nuxt.jsのプロジェクトを軽くしてLambdaの上限を守る

Nuxt.jsをUniversalモードで利用するためにAWS＆Serverlessフレームワークを活用している方向けです。

Serverlessフレームワークを活用するときに使われるAWSLambdaはアップロードできるファイルサイズに上限があります。Lambdaにアップロードできるファイルのサイズは圧縮前で250MB、圧縮後で50MBです。

Nuxt.js+TypeScript+Serverlessの構成ではこれを余裕で超えてしまいます。

実際、Lambdaは250MBまでと言いながら350MBくらいまで上げられるのでしばらく放置していたのですが、ついにそれすら超えてしまうようになりアップロード出来なくなってしまったので対策を打つことにしました。

# 対策方法
対策方法はズバリ「lamndaで使うやつ以外アップロードしない」です。当たり前の話なのですが、serverless.ymlの`excludeDevDependencies`をtrueにしても、どうやら全てが正しくexcludeされているようには見えなかったので、いっそのこと自分たちで全て選ぶようにして`excludeDevDependencies`をfalseにしました。

package.jsonのdependenciesにはlambda上のnuxtで利用するもののみを入れ、それ以外は全てdevDependenciesに移動させました。

ブラウザ側で本番環境で使われる
- vee-validate
- vue-lazyload
- hooper

などをも使っており、通常はdependenciesに入れるものではありますが、ここらへんも割り切ってdevDependenciesに移動させました。


リリースコマンドも

```console
rm -rf node_modules
npm i --production
sls deploy --stage prod
```

というように変更し、dependencies以外のライブラリーが絶対にserverlessのpackageに入らないようにしました。

# 結果
ファイルサイズを60MBほど少なくすることが出来、`excludeDevDependencies`をfalseにしたことで、リリースにかかる時間が6分から1分半へと劇的に改善しました。
ローカルのサーバを立ち上げてHTMLを開く

# 背景
ローカルで以下のようなhtmlファイルを作成

```html:iframe.html
<html>
    <head>
    </head>
    <body>  
        <iframe src="iframe_content.html" width="200" height="300" id="iframe-01"></iframe>
    </body>
</html>
```

```html:iframe_content.html
<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    </head>
    <body>
        <h1>iframe内</h1>
        <div class="iframe-width"></div>
        <script>
          const win = window.window;
          $('.iframe-width').text('iframeの幅 : ' + win.innerWidth + 'px');
          console.log(win.parent);
        </script>
    </body>
</html>
```

そしてファイルパスを使って（/Users/.../iframe.html）アクセスしたところ，以下のようなエラーがコンソールで出てしまった．

```console
Uncaught DOMException: Blocked a frame with origin "null" from accessing a cross-origin frame.
```

調べてみたところ，ローカルでサーバを立てて動かせばこのエラーが出ないっぽいので，やってみることにしました．（[参考](https://teratail.com/questions/8109)）

# Dockerでnginxを起動

### 環境
- OS : macOS
- ブラウザ : Google Chrome（バージョン85）

### ディレクトリ構成
```
*
├- Dockerfile
└- sample_html/
     ├- iframe.html
     └- iframe_content.html
```

### Dockerfile作成
nginxのイメージを基に作成します．
`sample_html` 配下のフォルダを表示対象とします．

```dockerfile:Dockerfile
FROM nginx
COPY sample_html /usr/share/nginx/html
```

### docker imageの作成
`sample` というイメージ名で `1.0` というタグをつけて，カレントディレクトリにあるDockerfileを元にイメージを作成

```
$ docker build -t sample:1.0 .
```

### dockerコンテナの生成・起動
バックグラウンドで `sample` というイメージ名で `1.0` というタグがついているdockerイメージを起動

```
$ docker run -d -p 8080:80 sample:1.0
```

### docker run のオプションについて
- -p : `ホストのポート:コンテナのポート` ポート番号の紐付けを宣言


### アクセス確認
http://localhost:8080/iframe.html にアクセス
すると，コンソールにエラーが表示されずにiframeの親の情報を取得することができる．
![スクリーンショット 2020-09-14 10.36.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533014/f7947209-ca03-cfa4-15cb-8df1cafbcd0b.png)


# 参考
- [とりあえずhtmlの表示をDocker使って行う[nginxバージョン]](https://qiita.com/sachiko-kame/items/e163a35406a133f72b67)
- [Docker入門 Nginxを動かしてみる](https://qiita.com/mtakehara21/items/d7be42cf12772f3ada25)
OracleからAzure DB（PostgreSQL）へ移行する~③PostgreSQLのメモリ管理

今回はPostgreSQLのメモリ管理について記載します。

#PostgreSQLのメモリ構成
以下、PostgreSQLのメモリ構成を簡単に記載します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/c154ee86-98e2-4917-23f1-933505cb07a3.png)

バックエンドプロセスは接続要求があると起動するプロセスですが、各バックエンドプロセスごとに、`temp_buffer`、`work_mem`、`maintenance_work_mem`などが確保されます。
共有メモリは各プロセスやデータベースが共通に利用するメモリ領域です。

今回は各メモリの特長や設定値の目安を記載します。

#共有メモリ領域
共有メモリは大きく共有バッファ、WALバッファ、空き領域（Free Space Map）、可視性マップ（Visibility Map）に分かれます。

* __共有バッファ（shared_buffers）__
共有バッファはいわゆるOracle Databaseで言うところのバッファキャッシュです。テーブルやIndexのデータそのものをこの領域にキャッシュして利用します。カーネルパラメータのshmmaxよりも小さい値で設定することが大原則ですが、一般的にサーバに搭載されている__メモリの25％程度で設定することが推奨値__となります。大きければ大きいほど性能が出るといわれていますが、OSに必要なメモリ、他のプログラムで利用するメモリの事も勘案し、__最大でも50％程度を目安__に設定することが一般的となります。

* __WALバッファ(wal_buffers）__
これはトランザクションログをキャッシュする領域ですが、デフォルト値はshared_bufferの1/32で設定されるようになっています。小さくし過ぎると、頻繁にI/Oが発生してしまい、一方で大きくし過ぎると、リカバリー時間が長くなるデメリットがります。WALバッファの設定値は__16MB~32MB程度で設定__してみるのが一般的です。

* __空き領域マップ（Free Space Map)__
FreeSpaceMAPはOracleユーザーでは聞きなれない領域かもしれません。この領域ではテーブル上の利用可能な領域を管理しています。トランザクションから全く参照されていない行を探し、空き領域として再利用可能にしますが、その領域を管理しています。なので、このサイズが小さいと、空き領域を再利用することができず、クラスタのサイズが大きくなってしまうので調整が必要です。
設定値の目安はここに記載している通り、__テーブルとインデックスの最大数をmax_fsm_relationに指定し、それに16をかけた値をmax_fsm_pagesに指定する__という流れになります。
実際にFSMが不足しているとvacuumで警告が発生しますが、その例を記載します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/0bb567f6-420d-f948-bd18-3ed47e9f857b.png)
余談ですが、FSMはPostgreSQL11から機能改善されています。FSMの更新はバキュームの完了後に実施していました。このため、バキュームが完了できなかった場合、ガンガンPostgreSQLが肥大化する問題が発生していましたが、11からバキューム実行中でもFSMを更新するようになり、例えばテーブルでは８GBのバキュームが完了する度に、FSMを更新するようになりました。

* __可視性マップ（Visibility Map）__
最後が可視性マップです。テーブルのデータが可視であるか否かを管理する領域です。
VACUUMの処理の際にも高速化するために利用されます。これは実際に物理ファイルとしてテーブル単位で自動で作られますが、これをメモリ上で展開して参照などを行う事になります。PostgreSQL9.2以降ではインデックスオンリースキャン検索でも使用されます。

#プロセスメモリ
プロセスメモリはプロセスごとに生成されるメモリ領域となります。大きく「作業メモリ」、「tempバッファ」で構成されメモリを確保したプロセスのみが参照可能です。

* __作業メモリ（work_mem)__
クエリ実行時に行われる、並び替えやハッシュテーブル操作のために使われる領域となります。JOINやHASHテーブル操作が１つのSQLで複数回実行される場合、その数分だけ領域が確保されます。
以下の方法にて最大サイズの見積もりが可能です。
　　__最大見積サイズ = (サーバの搭載メモリ – (shared_buffer + その他メモリ(OS、MW等)) /max_connections__
また、初期設定値としては経験上、サーバの搭載メモリをmax_connectionsで割って、さらにその値を4や16で割った数を見積もりサイズとすることが多いです。
　　__見積サイズ　=　サーバ搭載メモリ/max_connections/[4-16]__

* メンテナンス用作業メモリ（maintenance_work_mem)
VACUUMやインデックス作成、外部キーの追加など、いわゆるデータベースメンテナンス操作で使用する領域となります。目安としては__サーバ搭載メモリの10%程度で最大でも1GB程度__を設定することが推奨されていますが、VACUUMに問題がある場合には、この推奨値を超えてさらに大きくすることが必要な場合もあります。

* 一時バッファ（temp_buffers）
Create temp table文で作成するテーブルを格納するためのメモリ領域となります。なので__作成する一時テーブルの大きさに応じて調整__することが望ましいという事になります。

#最後に
Oracleと似たようなメモリ領域や、Oracleは更新型、PostgreSQLは追記型なので、その違いによってOracleには存在しないようなメモリ領域があることを、ご理解いただけたのではないかと思っております。

##次回は
次回PostgreSQLで管理されるディレクトリやファイル関連について記載します。
Bench mark mail API で外部のメールフォームから顧客情報を登録する

## BenchMark mail?
BenchMark mailとは、メールフォームを簡単に作成し、顧客管理などを行うことができるサービスのこと。

## API Document
https://developer.benchmarkemail.com/

## 今回やったこと
・外部のメールフォームから必要情報を取得し、APIでBenchMarkに送信
・事前に作成した顧客リストにユーザー情報を追加

## 手順

### 1.BenchMarkに登録

### 2.マイメニューからAPIKeyを取得
右上の自分のアイコンをクリック
→API連携
→APIキー

### 3.以下サンプルコードにならって作成
1.{{url}}は

```
https://clientapi.benchmarkemail.com/Contact/{{ListId}}/ContactDetails
```


```
var data = {"Data":{
"Email":"{{email}}",
"FirstName":"{{FirstName}}",
"LastName":"{{LastName}}",
"EmailPerm":"{{0 or 1}}",
"Field1": "{{NickName}}",
"Field2": "{{custumField}}",
"Field3": "{{custumField}}",
"Field4": "{{custumField}}",
"Field5": "{{custumField}}",
"Field6": "{{custumField}}",
"Field7": "{{custumField}}",
"Field8": "{{custumField}}",
"Field9": "{{custumField}}"
};

var xmlHttpRequest = new XMLHttpRequest();
xmlHttpRequest.open( 'POST', '{{url}}' );

xmlHttpRequest.setRequestHeader( 'Content-Type', 'application/json' );
xmlHttpRequest.setRequestHeader( 'AuthToken', '{{token}}' );

xmlHttpRequest.send(data);

xmlHttpRequest.addEventListener("load", function(){
	console.log(this.response); // 通信結果出力
}, false);

```
user名が変更になってpyenvのライブラリのパスが通らなくなった場合の対応

# 概要
user名が変更になり、ホームディレクトリの名前が変更されると、pyenvが動かなくなることがあります。これは、pyenvの環境にあるライブラリが参照しているpythonのパスが通常ホームディレクトリ内にあるのですが、通らなくなることによります。以下の方法で解消可能です。pyenv-virtualenvでも対応は同様です。
環境： Ubuntu 16.04

# 手順

```
# 環境名取得
$ pyenv versions
 
$ vi ~/.pyenv/versions/環境名/bin/pip
```

一行目は以下のようになっていると思います。

```
#!/home/旧user名/.pyenv/versions/環境名/bin/python3.*
```

これはインタプリタ言語において、読み込むインタプリタを指定するいわゆるシバンというものです。IDが古いままですので、新しいものに変更します。

```
#!/home/新user名/.pyenv/versions/環境名/bin/python3.*
```

これでpipが動くようになりました。あとは、他のライブラリも再インストールすれば一律変更できます。

```
$ pip freeze > requirements.txt
$ pip install -r requirements.txt
```
Qiitaの質問時に心がけると良さそうなこと 5つのアンチパターン


# はじめに

[Qiitaに質問機能がリリースされ](https://blog.qiita.com/question-release/)
トップページにも質問のトレンドが載るようになりました。

![スクリーンショット 2020-09-14 9.54.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211482/650bd2ca-02f1-cb0e-ac95-100684e3cf9d.png)


しかし、質問をしても回答がつかない場合があります。
これは多くの場合、「質問の仕方」に問題があります。

質問のフォーマットをきちんと整えることで、より良い回答が貰えそうです＞＜！

# 最もシンプルで安定する方法

![スクリーンショット 2020-09-14 9.56.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211482/bed7458a-59e1-b0e0-ab19-b129e1b99f05.png)

`質問（テンプレートあり）`を選択すると良いです。

テンプレートありを選択すると以下のようなテンプレートが選択されます。
Markdownの基本的記法も入力されているため、これに従って書けば多くの場合良いと思います。

```
### 解決したいこと
ここに解決したい内容を記載してください。
例）
Ruby on RailsでQiitaのようなWebアプリをつくっています。
記事を投稿する機能の実装中にエラーが発生しました。
解決方法を教えて下さい。
```


# 実際に悪い例を見てみる

ただテンプレートを見ても
**どうしてこういうテンプレートを使っているのか？**がわからないため
回答者側から　アンチパターンを5個見てみましょう。


## 1. 何がしたいのかよく分からない

たまに質問内容で

> エラーが出ました。どうすればよいですか？

があります。

回答者側から見ると、「何がしたいのか、どうしてそういうアプリ作っているのか分からん...」となってしまい、回答を行うことができません。

**作りたいアプリの背景・行っていること・これから行いたいこと**をできるだけ載せると良さそうです。

## 2. エラーコード・ソースコードを画像で貼る

![スクリーンショット 2020-09-14 10.04.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211482/780de4fd-0796-18d1-f9f4-701db5731fd1.png)

エラーの出た箇所や該当ソースコードを画像で貼っている質問があります。

回答者側から見ると「えぇ...コピーして悪い箇所を検索できないやんけ...」になります。

>
> \`\`\`c++
> int main() {
>     int a;
>     cin >> a;
>     cout << a << endl;
> }
> \`\`\`

```c++
int main() {

    int a;
    cin >> a;

    cout << a << endl;

}
```

Markdownにはコードブロック機能があるため、できるだけコードを直で書きましょう。


## 3. 自分のやったことを書き忘れる

質問者が「解決するために何を行ったのか？」が書いてない場合があります。
そうすると、回答者は同じルートをたどり時間の無駄になってしまう可能性があります。

できるだけ自分が行ったこと・参考にしたURLなどを書いてあげてください。


## 4. 自分の環境を書かない

python, rubyなど多くのプログラミング言語はライブラリを使用して開発を行います。

このとき、質問者の使用環境`Mac`や`Windows`であったり
使っているライブラリのバージョンが書かれていない場合があります。

使用しているOSの差異やライブラリのバージョンの差異で、エラーに対する解決方法が異なる場合が多いです。

できるだけ自分の使用環境の詳細を書いてあげてください。
こうするだけで、回答者はとても楽になります。


## 5. 質問前に考えない

質問をする前に、できるだけ自分で解決しようとするととても成長につながると思います。

解決しようとして探したURLをまとめ、それを質問ページに書くだけでも回答者は非常に探す手間が減り、質問者の意図を汲みやすくなります。

わからないことをすべて質問しようとすると、成長には繋がりづらいようです。
考えたあとに質問をすると、その回答もスッと頭の中に入るようになります。



# 最後に

Qiitaの質問機能の追加に対しては、賛否両論あったようです。

しかし、質問を通して「アウトプットの習慣」が身についた場合、「次は自分も質問じゃなくて記事書いてみるか！」と、記事をアウトプットする精神的障害が下がることもあるのかなと思います。

もっともっとアウトプットが増えていくといいですね＞＜（自分ももっと頑張っていきたいです...）
ぜひアドバイスや編集リクエストなどをいただければと思います。
python 配列の基礎

# python 配列の基礎

複数のデータをまとめて管理するには配列というものを用います。
配列は[要素1, 要素2, ...]のように作ります。リストに入っているそれぞれの値のことを要素と呼びます。
配列を使うと、複数の文字列や複数の数値を1つのものとして管理することができます。

# 変数に、複数の文字列を要素に持つリストを代入してください

```python
fruits = ['apple','banana','orange']
```

配列も1つの値なので変数に代入することができます。
このとき、リストを代入する変数名は慣習上複数形にすることが多いので、覚えておきましょう。

# インデックス番号が0の要素を出力してください

```python
print(fruits[0])
```

```python:出力結果
apple
```

リストの要素には、前から順に「0, 1, 2,・・・」と数字が割り振られています。これをインデックス番号といいます。インデックス番号は0から始まる点に注意してください。
リストの各要素は、リスト[インデックス番号]とすることで取得することができます。

# インデックス番号が2の要素を文字列と連結して出力してください

```python
print('好きな果物は' + fruits[2] + 'です')
```

```python:出力結果
好きな果物はorangeです
```

# リストの末尾に文字列「grape」を追加する

リストには、新しく要素を追加することもできます。
「リスト.append(値)」とすることで、すでに定義されているリストの末尾に新たな要素を追加することができます。

```python:
fruits.append('grape')
```

# インデックス番号が0の要素を文字列「strawberry」に更新する

リストの要素を更新することもできます。
「リスト[インデックス番号] = 値」とすることで、リストの指定したインデックス番号の要素を更新することができます。

```python:
fruits[0] = 'strawberry'
```
laravel6系でのartisan serve時にTarget class [XXXController] does not exist. error


ゴミ記事の可能性もあるので、その視点を持って以下を読んでください。
## 発生している状況
web.phpと記述とXXControllerの記述が正しいにもかかわらず、
Target class [XXXController] does not exist.エラーを吐く。

しかしweb.phpに直接bladeを読み込むように書いてあげると問題なく表示される。

## 前提条件
```
composer create-project --prefer-dist laravel/laravel site "6.*"
```
で作成したプロジェクトで発生したエラー

サーバーはphp artisan serveで実行

## 対処法
・６系でサーバーを立てる場合、dockerで立てましょう
・または５系を使いましょう

## 試したこと
この手のエラーはスペルミスやパスが間違っているなどが原因であることが多いので何度も確かめたが、
そこに問題はなかった。

また処理がどこまで届いているのか
XXController.php、 Controller.phpにて

```Laravel:XXController.php
dd('hoge')
```
と確認したところコントローラーに処理が届いていない。

ではルーティングの方はどうだろうか、

```Laravel:web.php
dd('test)
```
と確認ところtestと表示されルーティングまでの処理が届いていることを確認。

壊れている可能性も上がったが、その場にいたもう一人の別の環境の方もlaravel６系で同様のプロセスを行ったところ同じエラーを吐く。

では５系で行ったらどうか？
すると問題なくコントローラーまで処理がいった。

## まとめ
具体的な原因は不明だが、どうやらlaravel６系で発生しているartisan serve 周りのエラーらしい。

発生している症状は、コントローラーまでに処理が届かない。５系で行うと問題なく解決する。

わかっている人がいましたら、ぜひ教えてください。
ESLintでExpected a leading zeroと言われたら

ESLintで`Expected a leading zero`と怒られたんだけど、意味がちゃんと分かってなかったので調べたメモです。
ちなみにエディタはVScodeです。

# Expected a leading zeroって何？

直訳すると「先行ゼロが必要です」。先行ゼロ？何？
ちなみに該当行はこうでした。

```css:NG
margin-left: .5rem
```

`.5rem` これがだめだったみたいです。
小数点の数値のゼロは省略しちゃいかん！というわけですね。

```css:OK
margin-left: 0.5rem
```
こうしたらエラーが消えました。

## 補足
既存プロジェクトに途中参加したため、そこでのルールはこうでしたという話になります。
（Lintのルールはプロジェクトによりけり…たぶん）
ESETのファイアウォールが動作しているとDockerで立ち上げたlocalhostのページがブラウザで確認できない問題

## 目的

- ESETというセキュリティソフトを導入し、Dockerので起動しているlocalhostのページをブラウザで表示しようとした時に表示されない問題を解決する。

## 免責事項

- 本作業ではセキュリティソフトの設定を変更します。若干デリケートな作業になりますので慎重に作業をしましょう。
- 会社から貸与されているPCで本作業を実施する場合、管理者に相談の上実施することを強くオススメします。
- 本作業を実施して皆様のPCにいかなる損失が合った場合でも筆者は責任を負いかねます。
- 本記事の最後に記載されている参考文献のリンク先も是非ご確認いただきたいです。

## 前提情報

- 筆者の先輩が書いてくださった記事を参考に環境構築を行ったDockerでnginxのローカルサーバを起動する。
    - [Dockerで始めるLaravel講座 - Docker編](https://qiita.com/layzy_glp/items/cc2ac45dd203d73319ad)
    - [Dockerで始めるLaravel講座 - Laravel編](https://qiita.com/layzy_glp/items/579b295e8cc899aef2c4)
- ESETのパーソナルファイアウォール「有効」にした状態で、Google Chromeにて下記にアクセスしLaravelのトップページが表示されたら作業完了とする。
    - [http://localhost:8080](http://localhost:8080)

## 問題

- ESETのパーソナルファイアウォールが「有効」状態でDockerのコンテナを起動しブラウザで[http://localhost:8080](http://localhost:8080)にアクセスしてもLaravelのトップページが表示されない。

## 方法

1. ESETのアプリを起動する。
1. 「設定」をクリックする。

    ![空白_Skitch_キャンバス-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/20abfed8-79bb-fc3d-5bbc-c380cc4c45cb.png)

1. 「パーソナルファイアウォール」をクリックする。

    ![空白_Skitch_キャンバス-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/389d735d-c2fc-0217-3119-a5e403de922d.png)

1. 「設定」をクリックする。

    ![空白_Skitch_キャンバス-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/3bf3cd7c-1d1c-30aa-1ce4-17130236989d.png)

1. 「フィルタリングモード」の「自動モード」を「対話モード」に変更する。

    ![ネットワーク.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/ef339023-487d-ad6a-1a40-ca22ccc97cb8.png)

1. 現在通信中のトラフィックを許可するかのウインドウが出るので怪しい通信ではないことを確認して「アクションを記憶する（ルールを作成する）」を選択して「許可」をクリックする。このウインドウは今行われいてる内向きのトラフィックと外向きのトラフィックすべてに対して表示されるのでウインドウが出なくなるまで前述した「許可」の作業か「拒否」の作業を実施する。

    ![空白_Skitch_キャンバス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/d70f6e0e-5f59-eb28-b8f5-b55046eadab0.png)
    ![空白_Skitch_キャンバス-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/37b8e876-a19c-a75c-f258-de676809a600.png)



1. Dockerのコンテナを起動する。
1. ブラウザにて下記にアクセスする。
    - [http://localhost:8080](http://localhost:8080)

1. 先に実施した様にトラフィックの許可を求められるので内容を確認し、「アクションを記憶する（ルールを作成する）」を選択して「許可」をクリックする。

    ![空白_Skitch_キャンバス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/d70f6e0e-5f59-eb28-b8f5-b55046eadab0.png)
    ![空白_Skitch_キャンバス-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/37b8e876-a19c-a75c-f258-de676809a600.png)

1. [http://localhost:8080](http://localhost:8080)にてLaravelのトップページが表示されることを確認する。
1. 「フィルタリングモード」の「対話モード」を「自動モード」に変更する。

    ![ネットワーク-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/d5c2dd62-0d9f-4fc8-f2a0-54d1a4266a8c.png)

## 参考文献

- [Mac環境で特定の通信が遮断される（「パーソナルファイアウォール機能」に起因する場合）](https://eset-support.canon-its.jp/faq/show/1583?site_domain=default)
mindの研究 その4

#概要

mindが謎なので調べてみた。
vistaに入れた。
zundoko書いてみた。

#サンプルコード

```メインとは
　乱数は　バイト変数
　ズン数は　変数
　乱数に　２４３を　入れる
　ズン数に　０を　入れる
　ここから
　　乱数に　５を　掛け　乱数に　入れる
　　乱数に　１を　引き　乱数に　入れる
　　もし　乱数が　１２７より　大きい　ならば
　　　「ズン　」を　表示する
　　　ズン数に　１を　加え　ズン数に　入れる
　　さもなければ
　　　「ドコ　」を　表示する
　　　ズン数に　０を　入れる
　　つぎに
　　もし　ズン数が　４に　等しい　ならば
　　　打ち切り
　　つぎに
　繰り返し
　「ドコ　キヨシ！ 」を　表示する。





```

#実行結果


```


ドコ　ズン　ドコ　ズン　ズン　ドコ　ドコ　ドコ　ズン　ズン　ドコ　ドコ　ドコ　ド
コ　ドコ　ズン　ドコ　ドコ　ドコ　ドコ　ズン　ズン　ドコ　ズン　ズン　ドコ　ドコ
　ズン　ドコ　ズン　ズン　ドコ　ドコ　ズン　ドコ　ドコ　ドコ　ズン　ズン　ズン　
ドコ　ズン　ドコ　ドコ　ズン　ドコ　ズン　ズン　ズン　ズン　ドコ　キヨシ！

```

以上。
RAID とは？種類は？

## RAID とは

- RAID(Redundant Array of Inexpensive Disks)
- 1つのデータを複数のHDDに分散させたり、同時に複数個保存出来る機能
- 2台以上のHDDが1つのHDDのように認識させる

### RAIDのメリット

- HDDが故障した際にデータの損失を回避することができます
- データを複数のHDDに分散して書き込むため、処理速度が速い

### RAIDのデメリット

- RAIDのレベルによって、使用可能な容量は搭載HDDの合計容量より少なくなる(コスト高)
- 上記のことから、大容量のデータを保管するには費用がかかる
- 削除データの復旧は出来ない

## RAID0

- ストライピングと呼ばれている
- データを複数のHDDに分散して書き込む
- 冗長性がないので、HDDが故障した際はデータの復旧が出来ない

|必要HDD|実効容量|耐障害性|
|---|:---:|---:|
|2本以上|HDDの100%|なし|

## RAID1

- ミラーリングと呼ばれている
- 同じデータを複製して別々のHDDに書き込む
- どちらかのHDDが故障しても別のHDDに残るので信頼性が高い
- データを複製しているので容量は総容量の半分しか使えない

|必要HDD|実効容量|耐障害性|
|---|:---:|---:|
|2本|HDDの50%|HDD1本|

## RAID5 

- 分散パリティと呼ばれている
- RAID0の様に、データを複数のドライブに分散させて書き込むが併せてパリティデータも同時に書き込む方式
- `パリティデータ`とは`誤り訂正補正(ざっくり言うとデータがおかしくなってないか)`
- HDDの数が多いほどアクセス速度が速くなる

|必要HDD|実効容量|耐障害性|
|---|:---:|---:|
|3本|HDD-HDD1本分|HDD1本|

## RAID6

- 複数分散パリティと呼ばれている
- RAID5と似たような構成だが、`パリティデータ`を二重に書き込むことで耐障害性を高めた
- RAID5ではHDD2本でデータ修復が不可能になりますが、RAID6では2本故障してもデータが復元できる
- 耐障害性に優れているが生成されるパリティが増加するので、書き込み処理性能や実効容量がRAID5よりも劣る

|必要HDD|実効容量|耐障害性|
|---|:---:|---:|
|4本|HDD-HDD2本分|HDD2本|

## RAID10

- RAID1+0とも書かれていることがある
- ミラーリング(RAID1)+ストライピング(RAID0)の構成
- データをRAID0でデータを分散したのち、データをRAID1で重複して保持する
- 故障は、各RAID1グループの中で1本まで。2本故障するとデータを損失する
- RAID0でデータを分散しているのでHDDの本数が多いとアクセス速度が上がる
- HDDはRAID1で2本単位でグルーピングしているので、総本数は偶数になる

|必要HDD|実効容量|耐障害性|
|---|:---:|---:|
|4本以上(2本単位)|全HDD容量の50%|HDD1本以上(HDD本数による)|


## 参考

- [RAIDとは何か？知っておきたい基礎知識](https://www.elecom.co.jp/pickup/column/storage_column/00003/)
- [RAID機能とは...？ HDD（ハードディスク）ケースに搭載された便利な技術!？ 使い方・特徴](https://www.century.co.jp/pc_solution/topics/raid.html)
- [RAIDの長所と短所](http://data119.jp/raid/purpose.html)
JavaScriptの関数について

私たちが普段目にしているWebサイトではたくさんのJavaScriptのコードが記述されている。その中のコードの管理方法としては関数を用いるのが有効的である。今回は、そんな関数についてまとめてみた。
##今回まとめること
1. JavaScriptでの関数定義
2. 無名関数と即時関数
3. アロー関数

##1.JavaScriptでの関数定義
######基本形
```qiita.js
function 関数名( 引数 ){
 //関数内の処理
}
```
######戻り値
戻り値とは、最終的に出力される値のことを指す。
JavaScriptでは戻り値をreturnを用いて明示する。

```qiita.js
function calc(num1,num2){
 return num1*num2
}

const num1 = 3
const num2 = 4
console.log(calc(num1,num2))
```
※num1 * num2 の値が出力される。

######関数宣言
```qiita.js
function 関数名( 引数 ){
 //関数内の処理
}
```
こちらは冒頭で記述した基本形。
######関数式
```qiita.js
変数 = function( 引数 ){
 //関数内の処理
}
```
こちらは関数名を指定しない（常に無名関数となる）
変数に対してfunctionから関数内の処理までを代入する。

######関数宣言と関数式との違いとは
まずはコードを書いてみる。

```qiita.js
//関数式
const hello = function(){
 console.log('hello')
}

//関数宣言
hello()
function hello(){
 console.log('hello')
}
```
結論、関数式は呼び出しもとのhello()が先に呼び出され、関数宣言では呼び出しもとのhelloが後から呼ばれる（Rubyの出力と同じ）
つまり、この場合正しく出力されるのは関数宣言となる。

######考察
関数宣言はRubyの出力と同じだと記述したが、Rubyは日本人が作成したことから結論を最後にもってきているのではないかと考えた。
逆に関数式は英語と同じで結論を先にもってくる。こういった言語の違いがあるのではないだろうか。
##2. 無名関数と即時関数
######無名関数
無名関数は関数名なしで関数を定義することができる。
先程ちらっと記述したが、関数式は常に無名関数である。

```qiita.js
const calc = function(num1,num2){
  return num1*num2
}

const num1 = 3
const num2 = 4
console.log(calc(num1,num2))
```
######即時関数
関数を定義すると同時に実行される構文。
呼び出しもとが不要で、一つの構成で出力できる。全体を（）で囲むといった特徴がある。

```qiita.js
// 無名関数
const countNum = function(num) {
  console.log(num)
}
countNum(1)

// 即時関数
(function countNum(num) {
  console.log(num)
})(1)
```
##3. アロー関数
functionの記述を省略し、代わりに ( ) => という記述によって関数を定義する。

```qiita.js
// 無名関数
const 変数名 = function(){
  処理
}

// アロー関数
const 変数名 = () => {
  処理
}
```
このようにより短い記述で関数を定義することが可能となる。
##最後に
ここまで記事を読んでいただき、ありがとうございました。

Webアプリケーションのみならず、Webサイトやゲームなど、幅広く利用されているJavaScript。是非使いこなせるようになりたいです。

幅広く利用されているのは、それなりの理由があるからだと思っていて、使いこなすことでプログラミングの幅を広げていきたいと考えています。

今回の記事はここまでです。最後まで読んでいただき、本当にありがとうございました!
Hyperledger Fabricのバージョン2系についての学習教材まとめ

現在Hyperledger Fabricの学習をしている最中ですが、学習教材にかなり制限があったり、もう参考にならない状態になってしまっている書籍や動画があったので記録しておきたいと思います。

## Hyperledger Composerという記述があるリソースはもはや古い
現在Hyperledger Fabricはバージョンが2系までリリースされており、1系との間ではかなりの差があります。
特に過去のバージョンではHyperledger Composerという別のHyperledgerプロジェクトのツールを使っていたようなのですが、Hyperledger Composerは2019年8月の時点でDeprecatedになっています。
https://github.com/hyperledger/composer/blob/master/README.md
にも関わらず現在出版されている書籍や動画のいくつかはHyperledger Composerの利用を前提とした内容になっており、この時点で特にハンズオンをするためのリソースとしてはかなり厳しい内容になっていると言わざるを得ません。
例えば[～ブロックチェーンの革新技術～ Hyperledger Fabricによるアプリケーション開発](https://www.amazon.co.jp/dp/B07JNY46ZS)は現在日本語での唯一の書籍ですが、こちらはHyperledger ComposerがDeprecatedされる前の2018年6月に出版されています。
そのためこちらの書籍を今から購入して学ぼうとすると、Hyperledger Fabricについての概念については学べるけれども、実際ハンズオンをしようとすると途端に困難になるというところがあります（書籍に記載されているコードなどのリンクが古く、ダウンロードしようとするとエラーになってしまう箇所も散見される。

## Hyperledger Fabricの2系に対応した教材
上記のようなことがあったため、最新バージョンの2系に関する教材がほとんどないため良い感じの教材を見つけるのに苦労しました。こちらにバージョン2系で有効なリソースをまとめておきます。

### [Hyperledger Fabric公式ドキュメント](https://hyperledger-fabric.readthedocs.io/en/latest/)
公式ドキュメントは当然のように利用できますね。これから紹介するリソースもどこかの段階で古くなる可能性もあるので、何か詰まってしまった時はやはり公式を参照するに越したことはないでしょう。

###  [The Complete Hyperledger Fabric Fundamentals](https://www.udemy.com/course/the-complete-hyperledger-fabric/)
こちらは2系対応というより、HLFについての概念を分かりやすく説明してくれている教材です。次の二つの教材を学習する前にざっと流し見しておくと、どのようなコンポーネントがHLFにあるのか、トランザクションはどのような流れで動作するのかなどが分かり、手始めに見るのによかったです。

### [Hyperledger Fabric 2.x Network Design & Setup](https://www.udemy.com/course/hyperledger-fabric-network-design-setup/)
HLFのコンポーネントであるPeerやOrdererなどを概念から説明してくれて、かつバイナリを実行しながらハンズオンでネットワークを構築できます。また簡単ではありますが、VM, Docker, そしてKubernetes上でHLFネットワークを構築するハンズオンもあるので、ハンズオンという意味でもかなり有用な内容です。

### [Mastering Hyperledger Chaincode Development using GoLang](https://www.udemy.com/course/golang-chaincode-development/)
こちらはHLF上で動作するスマートコントラクトである、Chaincodeを実装できるハンズオンです。こちらはまだ本格的に触ってはいませんが、二つ目の教材の講師の方が作られているので十分な内容が学べそうだと思っています。

### [Hands-On Smart Contract Development with Hyperledger Fabric V2](https://learning.oreilly.com/library/view/hands-on-smart-contract/9781492086116/)
あとはまだ未発売ですが、オライリーの方からHLF2系の書籍が2021年7月に発売されるようです。こちらはSafari Online Booksというサブスクサービスに登録しているとEarly Accessで作成途中の内容が読めるので、登録済の方は試しに読むことができそうです。
mindの研究 その3

#概要

mindが謎なので調べてみた。
vistaに入れた。
乱数が見当たらないので書いてみた。

#サンプルコード

```
メインとは
　乱数は バイト変数
　乱数に　２４３を　入れる
　２０を　回数指定して
　　乱数に ５を 掛け 乱数に 入れる
　　乱数に １を 引き 乱数に 入れる
　　乱数を　数値表示し
　　「 」を　表示する
　繰り返す。
```

#実行結果

```


66 183 110 219 186 95 38 67 178 135 94 43 42 47 22 147 34 87 78 123

```

以上。
Rails 6で認証認可入り掲示板APIを構築する #9 serializer導入

←[Rails 6で認証認可入り掲示板APIを構築する #8 seed実装](https://qiita.com/rf_p/items/05e44aa24f10b683fa0e)

# ActiveModelSerializerの導入

serializerを入れることで、jsonで返されるデータを簡単に整形できます。

```diff:Gemfile
...

+ # serializer
+ gem "active_model_serializers"
```

```powershell
$ bundle
```

# 設定ファイルとserializerの編集

導入できたらpostモデルのserializerと、ActiveModelSerializerの設定ファイルも作ります。

```powershell
$ rails g serializer post
$ touch config/initializers/active_model_serializer.rb
```

```rb:app/serializers/post_serializer.rb
# frozen_string_literal: true

#
# post serializer
#
class PostSerializer < ActiveModel::Serializer
  attributes :id
end
```

```rb:config/initializers/active_model_serializer.rb
# frozen_string_literal: true

ActiveModelSerializers.config.adapter = :json
```

```diff:app/controllers/v1/posts_controller.rb
     def index
       posts = Post.order(created_at: :desc).limit(20)
-      render json: { posts: posts }
+      render json: posts
     end
 
     def show
-      render json: { post: @post }
+      render json: @post
     end
 
     def create
       post = Post.new(post_params)
       if post.save
-        render json: { post: post }
+        render json: post
       else
         render json: { errors: post.errors }
       end
@@ -27,7 +27,7 @@ module V1
 
     def update
       if @post.update(post_params)
-        render json: { post: @post }
+        render json: @post
       else
         render json: { errors: @post.errors }
       end
@@ -35,7 +35,7 @@ module V1
 
     def destroy
       @post.destroy
-      render json: { post: @post }
+      render json: @post
     end
```

一旦ここまでやったら`rails s`を止めて、再起動しましょう。

# curlで確認

```powershell
$ curl localhost:8080/v1/posts 
{"posts":[{"id":20},{"id":19},{"id":18},{"id":17},{"id":16},{"id":15},{"id":14},{"id":13},{"id":12},{"id":11},{"id":10},{"id":9},{"id":8},{"id":7},{"id":6},{"id":5},{"id":4},{"id":3},{"id":2},{"id":1}]}
$ curl localhost:8080/v1/posts/1
{"post":{"id":1}}
```

serializerでidのみにしているので、idの一覧が取得できました。
それではsubject, bodyを追加してみます。

```diff:app/serializers/post_serializer.rb
 # frozen_string_literal: true

 #
 # post serializer
 #
 class PostSerializer < ActiveModel::Serializer
-  attributes :id
+  attributes :id, :subject, :body  
 end
```

```powershell
$ curl localhost:8080/v1/posts
{"posts":[{"id":20,"subject":"無駄","body":"ハチのすさいぼうかっこう。暴力血液恨み。秘めるちゅうもんする廃墟。"},...
curl localhost:8080/v1/posts/1
{"post":{"id":1,"subject":"hello","body":"警官総括大尉。めいしぼきんかたみち。伝統徳川超〜。
```

正常に動いていそうですね。
rubocopとrspecも動かして、問題なければcommitしておきましょう。


# 続き

→[Rails 6で認証認可入り掲示板APIを構築する #10 devise_token_auth導入](https://qiita.com/rf_p/items/43f1f12c473e1b02e766)
【[連載目次へ](https://qiita.com/rf_p/items/a846553c11571f4177eb#%E7%9B%AE%E6%AC%A1)】
mindの研究 その２

#概要

mindが謎なので調べてみた。
vistaに入れた。
fizzbuzz書いてみた。


#サンプルコード

```
メインとは
　余１５は　変数
　余５は　変数
　余３は　変数
　９９を　回数指定して
　　回数を　１５で　剰余を　余１５に　入れる
　　回数を　５で　割余を　余５に　入れる
　　回数を　３で　割余を　余３に　入れる
　　もし 余１５が　０に　等しい　ならば
　　　「FizzBuzz」を　表示する
　　さもなければ
　　　もし　余５が　０に　等しい　ならば
　　　　「Buzz」を　表示する
　　　さもなければ
　　　　もし　余３が　０に　等しい　ならば
　　　　　「Fizz」を　表示する
　　　　さもなければ
　　　　　回数を　数値表示する
　　　　つぎに
　　　つぎに
　　つぎに
　　「 」を　表示する
　繰り返す。

```

#実行結果

```


1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fiz
z 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz
 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 Fi
zzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz
 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97
98 Fizz

```

以上。
はじめてのGithub 接続～新規リポジトリへのpushまで  （Windows、CLI）

仕事柄、github自体に、年に数回触れる程度で、
何回やっても忘れる自分の為に手順を残します。

## ローカルのワークスペースの作成

ローカル環境に、作業用のフォルダを用意する

```
場所は好みで！ユーザーフォルダでもどこでも
```
### CLIでコマンドをたたく前に

コマンドプロントでたぶんもよいが、
Linux系のコマンドがないと使いづらいので
好みでよいのですが、今回はGit bashをインストールして使ってみました。

https://gitforwindows.org/

### ローカルにgit環境を整えていく

CLIでまずは自分の作業環境へ移動する

```
cd ~/(workspaces)/example_space
```

初回のみ、git利用の最低限の環境を整えるコマンドを叩く

```
git init
```

作業ディレクトリ配下に、github利用の為の必要なファイル構成が、構築される


## リモートの環境構築（githubにスペース確保）

※アカウントは開設済み前提

### 新しいリポジトリを作成する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/711655/095c6ace-8e4c-bd61-df57-ce93c62022bc.png)

↓

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/711655/e0daddd6-9bc9-577b-0fe7-4c9611d2a512.png)

公開は、publicでもprivateでも問題なし
以前は、無料アカウントは強制的にpublicのみだったようだが、
2020年9月現在は、無料アカウントでもprivateは解放されている:relaxed:

#### Initialize this repository with:

このリポジトリの説明などを書きたい場合は、Add a README fileへチェックを
このリポジトリにコミットしたくないファイル指定をしたい場合は、Add .gitignoreへチェックを

今回は、README.mdを作成することにして、
最後に、create repositoryクリックで新規リポジトリが作成される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/711655/5dcf8e38-aaea-eaea-4ca4-d4dd0667792f.png)

## リモートリポジトリを繋ぐ

まずは、先ほど作成した、新規リポジトリの紐づけをする

```
$ git remote add origin https://github.com/(github_account)/(repository_name).git
```

ローカルで作業する前に、リモートのリポジトリを作成した際に作成したファイル群を取り込む
※コンフリクトが起きるため

```
$ git pull origin master
```

ローカル作業領域ににREADME.mdがつくられていれば成功

## ローカルリポジトリへのコミット

コミットするファイル（example.html）をローカル作業領域に適当に準備する。

#### indexへの追加

改修対象ファイルであることを追加
※今回は、テストなので１ファイルだが、通常は複数のファイルを同時に指定する

```
$ git add example.html
```

#### ローカルリポジトリに改修のコミット

```
$ git commit -m "コメント"
```

#### リモートリポジトリへpush

```
$ git push origin master
```

正しくコマンドが通り、githubのリポジトリに反映されていれば、
今回のミッションコンプリートです！

おつかれさまでした！
mindの研究

# 概要

mindが謎なので調べてみた。
vistaに入れた。
開発環境作ってみた。

# 写真

![無題.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/35e41bd6-bc4e-02d9-0aca-5f99acb3b575.jpeg)

# サンプルコード


```
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
using System.IO;
using System.Text;
using System.Collections;
using System.Diagnostics;

class form1: Form {
	TextBox bo1;
	form1() {
		Text = "ohibar";
		ClientSize = new Size(500, 300);
		bo1 = new TextBox();
		bo1.Location = new Point(50, 80);
		bo1.Width = 370;
		bo1.Height = 200;
		bo1.Multiline = true;
		bo1.Text = String.Join("\r\n", new string[] {
			"メインとは",
			"　　　　文字列１は　文字列",
			"　　　　「＞」を　表示し　文字列入力し　文字列１に　入れること。",
		});
		Controls.AddRange(new Control[] {
			bo1
		});
		Button btn1 = new Button();
		btn1.Location = new Point(50, 50);
		btn1.Text = "save_run";
		btn1.Click += btn1_Click;
		Controls.AddRange(new Control[] {
			btn1
		});
	}
	void btn1_Click(object sender, System.EventArgs e) {
		string fileContent = string.Empty;
		string filePath = string.Empty;
		using (SaveFileDialog openFileDialog = new SaveFileDialog()) {
			openFileDialog.InitialDirectory = "c:\\";
			openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
			openFileDialog.FilterIndex = 2;
			openFileDialog.RestoreDirectory = true;
			if (openFileDialog.ShowDialog() == DialogResult.OK)
			{
				filePath = openFileDialog.FileName;
				Stream fileStream = openFileDialog.OpenFile();
				using (StreamWriter sw = new StreamWriter(fileStream, Encoding.GetEncoding("Shift_JIS"))) {
					sw.WriteLine(bo1.Text);
					sw.Close();
					MessageBox.Show(filePath + "を保存しました。");
				}
				Process p = new Process();
				p.StartInfo.FileName = @"C:\pmind\bin\mind.exe";
				p.StartInfo.Arguments = filePath + " file";
				p.StartInfo.RedirectStandardInput = true;
				p.StartInfo.RedirectStandardOutput = true;
				p.StartInfo.CreateNoWindow = true;
				p.StartInfo.UseShellExecute = false;
				p.Start();
				string line;
				line = p.StandardOutput.ReadToEnd();
				p.WaitForExit();
				MessageBox.Show(line);
				string a;
				a = Path.GetFileName(filePath);
				string b;
				b = Path.ChangeExtension(a, ".exe");
				ProcessStartInfo app = new ProcessStartInfo();
				app.FileName = b;
				app.UseShellExecute = true;
				Process.Start(app);
			}
		}
	}
	[STAThread]
	public static void Main() {
		Application.Run(new form1());
	}
}





```

以上。
Xcodeの「Please reconnect the device.」の解決方法

実機のOSのバージョンとXcodeのバージョンばあっていない時に、発生するエラー。わかりにくいです！！

# 対応方法リスト
1. Xcodeをアップデートする
2. 現在のXcodeのバージョンに、実機のiOSに対応するDevice Supportを突っ込む([ここら辺](https://sussan-po.com/2019/10/12/new-ios-device/)が参考になる)
Flutter で Button の背景に画像を設定する

# やりたいこと

Flutter の Button コンポーネントに 背景画像を設定して、画像ボタンを作りたい。

![Group 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252342/77bf5f0e-6394-1d15-9e57-a404490d532e.png)

この画像を背景にした Button を作る。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252342/4ca77d8b-887e-3078-b0b9-a922f914ff08.png)

(なんで じゃんけん なのかは ひみつ)

# どうする

Background のようなオプションは見当たらなかったので、child に画像を設定することで実装する。

## 実装

```dart
import 'package:flutter/material.dart';
import 'package:janken/gen/assets.gen.dart';

typedef void IncrementCallback();

class IncrementButton extends StatelessWidget {
  const IncrementButton(this._increment);

  final IncrementCallback _increment;

  @override
  Widget build(BuildContext context) {
    return RaisedButton(
      onPressed: this._increment,
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(10.0),
      ),
      color: Colors.orange,
      child: Container(
        width: 180,
        height: 180,
        decoration: BoxDecoration(
          image: DecorationImage(
　　　　　　　　// Assets.images.janken.trianglePng.path には 画像Path が入る
              image: AssetImage(Assets.images.janken.trianglePng.path), 
              fit: BoxFit.scaleDown),
        ),
      ),
    );
  }
}
```

# ひとこと

理解してれば「そりゃそう」なのかもだけど、理解するまでは方向性がつかめずに苦労しそう。
paiza Ruby Bランクになるために実施したこと

#はじめに
　30代半ば（IT業界未経験）で、就職活動を行うにあたり、自分のスキルレベルを示す必要があると考え、paizaのスキルチェックを活用することにしました。Rubyについては、プログラミングスクールで、少し触ったことがありました（Ruby on Railsを使うための最低限のレベル程度）。

#paizaのランキングについて
　paizaでは、EからSの6つのランクに分けられています（Eからスタート）。Sランクは上位2％、Aランクは上位8％、Bランクは上位30％、Cランクは上位60％と公式に記載されております。
　paiza転職では、取得ランク毎に応募できる企業が異なっており、2020年9月10日時点では、Cランク132件、Bランク638件、Aランク326件、Sランク48件あり、詳細等は不明ではありますが、Bランク程度以上のスキルが求められていると考えました。
　その中で、現在の自分のスキル、企業のニーズを鑑み、Bランクは必要と考え、一つの目標としてBランク取得としました。

#D→Cランクのステップアップについて
　D→Cランクについては、Rubyの入門動画を見て勉強しました。
　入門動画については、基礎、条件分岐、配列、ハッシュ、2次元配列、クラスについてのチャプターが用意されています。動画を見た後に、演習問題があり、それをひたすら解いて行きました。演習については、動画の内容をトレースする内容で、知識を定着することができます。
　問題集が用意されており、Cランクの問題を解くヒントとなるような、Dランクの問題を解いていき、Cランクの問題を解くといった流れで進みました。Cランクの問題が複雑だなと感じましたが、解法がイメージできるようになったので、Cランクのスキルチェックを受け、合格することができました。

#C→Bランクのステップアップについて
　問題集をひたすら解き、勉強しました。Bランクについては、Cランクの問題をより複雑にした内容となっています。問題の内容を理解するのが、難しい、条件分岐の方法が複雑になる、コードが増えるなど、D→Cのランクアップに比べ、数段難しくなりました。
　ただ、新しくメソッドを勉強しないといけないというものではないといったものではありませんでした。

参考記事
https://programming-beginner-zeroichi.jp/articles/305
https://paiza.jp/challenges/info
Ubuntu 20.04 で DVD を視聴

Ubuntu 20.04 で VLC を使って DVD を視聴する方法です。

ソフトのインストール

```bash
sudo apt install vlc
sudo apt install libdvd-pkg
sudo dpkg-reconfigure libdvd-pkg
```

vlc の 起動

```text
$ vlc
VLC media player 3.0.9.2 Vetinari (revision 3.0.9.2-0-gd4c1aefe4d)
[0000557c4449d5f0] main libvlc: vlcはデフォルトのインターフェースで実行しています。インターフェースのない vlc を使用するには'cvlc'を使用してください。
[0000557c44531db0] main playlist: playlist is empty
libdvdnav: Using dvdnav version 6.0.1
libdvdnav: DVD Title: R2NEN_KOKUSEICHOUSA
libdvdnav: DVD Serial Number: 50c81891
libdvdnav: DVD Title (Alternative): 
libdvdnav: DVD disk reports itself with Region mask 0x00fd0000. Regions: 2

libdvdread: Attempting to retrieve all CSS keys
libdvdread: This can take a _long_ time, please be patient
```

メディア　--> ディスクを開く
![vlc01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/f23cdc1b-b910-3781-f5a5-586969e92589.png)

再生をクリック
![vlc02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/495fb639-12e5-9f6f-b9e5-374ce0f3942e.png)
SAMLのシングルサインオン・ログアウトのテスト

[SAMLと私](https://qiita.com/e99h2121/items/81c4557934dae1c0fe02)の続き, 開発時メモです。

## 確認手順

###操作手順1
IdPを介したログインの自SPからのログイン・ログアウト  

1. https://自SPURL/ にアクセス IdPに admin/admin で入る 
1. と、wordpressにも admin/admin で入った状態になっている  
1. 自SP内の、任意のメニューを起動し admin/admin で操作できることを確認する。  
1. その後、自SPのログアウトボタンからログアウト  https://xx.xx.xx.xx/wordpress/ (IdPを介した他サービス) にアクセスする  

で、ログアウトできているか？


###操作手順2
IdPを介したログインの他サービスからのログイン・ログアウト  

1. https://xx.xx.xx.xx/wordpress/ (IdPを介した他サービス)  にアクセス Idpに admin/admin で入る 
1. と、自SPにも admin/admin で入った状態になっている  
1. 自SP内の、任意のメニューを起動し admin/admin で操作できることを確認する。  
1. その後、他サービスからログアウト  http://自SPURL/  にアクセスする 

で、ログアウトできているか？


## KeyCloakセットアップ
[KeyCloakのセットアップ](https://qiita.com/tamura__246/items/13fc301e9409fef77bf3)

## WordpressセットアップのためのXAMPPセットアップ
[XAMPPを使ってWordPressローカル環境を構築する全手順](https://bazubu.com/xampp-wordpress-23795.html)

## WordpressにKeyCloakプラグイン設定
[KeycloakでSAMLを使ってみる（WordPress編）](https://qiita.com/katakura__pro/items/1e65e0bde7fda75332a1) 参照
Djangoを使ったWEBアプリケーションの開発【アプリケーション追加編】

[初期設定編の続き](https://qiita.com/tesla1017/items/27bfa3496d0f2ad4df7b)

アプリケーションを追加しよう
-
今回、「posts」というアプリケーションを追加することにしました。
（※アプリケーション名は、複数形にするのが慣例のようです。）

```
$ python3.6 manage.py startapp posts
```
これを実行することで、project1フォルダにpostsフォルダが作成されます。

postsとプロジェクトの紐付け
-
postsフォルダ内に作成されたapps.pyの中を確認すると下記の内容になっています。

```python:apps.py

from django.apps import AppConfig


class PostsConfig(AppConfig):
    name = 'posts'
```
このPostConfigクラスをプロジェクトから呼び出せるように設定を行います。
settings.pyを開き「INSTALLED_APPS」に追記します。
「フォルダ名.ファイル名.クラス名」として追加していきます。

```python:settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'posts.apps.PostsConfig', #新しく追加する行
]
```
（※このとき「 , 」を付けておくと良いかもしれません。）
enebularで作ったものをHerokuにデプロイしたはずなのに、Not Startedって現れたときの解決法


enebularで作ったものをHerokuにデプロイしたはずなのに Not Started と表示され、デプロイされてないという怪奇現象が起こりました。



##環境

PC　：  MacBook Pro (Retina, 13-inch, Early 2015)
OS　：  macOS Catalina


## 結論
不具合ではなく、私の注意不足。
ディスプレイが小さいと、スクロールバーが現れず、気がつかなかったため。

なんのこっちゃと思われるでしょうから、
順を追って説明します。



##経緯
enebular内でNode-REDで作ったものをHerokuへデプロイをするために、公式サイトの手順通りにしていました。

公式サイト「Heroku へのデプロイ」
https://docs.enebular.com/ja/deploy/deployflow/heroku/

デプロイに成功しました。

![スクリーンショット 2020-09-14 7.02.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291592/957c17a2-7e69-4470-03f6-7d29f36437cd.png)


そして、記事に書いてあるとおり、「View」　を押します。
公式サイトには エネブラーがたちがるとありますが、

あれ？

![notStart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291592/0e3493b0-5834-b999-292c-404790c20ab8.png)


enebularのウェブサイトにアクセスして、そこからデプロイを試みます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291592/c6aaa182-a099-c848-7b95-786ba16dbca9.png)

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291592/7cf9597b-870f-5e99-38da-10f962c3c9b9.png)

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291592/1af30906-9e90-7a0a-3bde-e0ce31ec67ed.png)

ここで該当のApp Nameにチェックするのですが、先ほどデプロイした「linebot-redhack」が無い。

ここからすごく悩んで、enebularのスペシャリストのTさんに聞くも、分からない。

謎だ。
怪奇現象か？

##解決！
あきらめかけた時、
ふと、マウスのポインタをあわせると、
右にスクロールバーが現れた。

[![Image from Gyazo](https://i.gyazo.com/4516234f6f870cdb164309702b9ae84b.gif)](https://gyazo.com/4516234f6f870cdb164309702b9ae84b)


ちなみに、<B>17インチスクリーン</B>のPCでは、
最初からカーソルが現れてますね。
(PC: Dell ゲーミングノートパソコン G3 17 、Windows 10）

[![Image from Gyazo](https://i.gyazo.com/0639937cef6de29fc73b5e8ded2cc187.png)](https://gyazo.com/0639937cef6de29fc73b5e8ded2cc187)

　<br><br>

かつて、Windows95が出た頃、パソコンメーカーのコールセンターにかかってくる不具合の理由の多くが、コンセントを挿してないとか、電源を入ってないとか、聞いたことがあります。

まさに、今回のことはそれに通じます・・・

enebularのスペシャリストのTさん、貴重な時間をこんなことに費やさせてしまって、申し訳ございませんでした。
Djangoを使ったWEBアプリケーションの開発【初期設定編】

[起動編の続き](https://qiita.com/tesla1017/private/0d7840a545ffc3e3335e)

WEBアプリケーションを開発していくための初期設定を行います。
project1フォルダ内のproject1の中にあるsettings.pyファイルを編集していきます。
今回、エディタとしてAtomを使用していきます。

settings.pyの編集
-
settings.pyでは、データベース設定や認証などの記述がされています。
Djangoの標準としてsqlite3が設定されています。
（ただし、sqliteはアクセス数が多くなるとレスポンスが遅くなるため、本番環境では、PostgreSQLやMySQLが使用されるようです。）
まず、変更する点として「言語設定」「タイムゾーン」を変更します。

```
#言語設定
#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'

#タイムゾーン設定
#TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Tokyo'
```

そして、Djangoサーバーを起動し変化の確認を行います。

```
$ python3.6 manage.py runserver
```
ブラウザに「[http://127.0.0.1:8000/](http://127.0.0.1:8000/)」を入力することで起動画面を確認できます。
![screencapture-127-0-0-1-8000-2020-09-14-07_24_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313621/903a4994-14b4-cd05-1a5a-37a9b96b2d5a.png)
日本語に変化することを確認できました。

コマンドプロンプトでControl + Cでサーバーを停止させておきます。

マイグレート
-
次にマイグレートを行います。
マイグレートを行うことでデータベースのテーブルを作成することができます。

```
$ python3.6 manage.py migrate

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

```
無事、データベースの作成ができました。
今後このテーブルに必要な情報を追加していくことになります。

[アプリケーション追加編](https://qiita.com/tesla1017/private/25b5ddf28fca2ece1b96)