OmniAICreator/Qiita-1.07M huggingface dataset:
docker-composeを使ってbootstrap-vueを入れてみる

##bootstrap-vueインストール

```text:front/Dockerfile
FROM node:14.15.4-alpine3.10

ENV APP_HOME /app
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME

RUN apk update
COPY package.json .
RUN npm install -g npm @vue/cli

+ RUN npm install vue bootstrap-vue bootstrap
```

```terminal:ターミナル
$ docker-compose up -d
$ docker-compose ps
     Name                    Command               State                 Ports              
--------------------------------------------------------------------------------------------
****_db_1      docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp, 33060/tcp
****_front_1   docker-entrypoint.sh npm r ...   Up      0.0.0.0:8080->8080/tcp           
****_web_1     bundle exec rails s -p 300 ...   Up      0.0.0.0:3000->3000/tcp    

$ docker-compose run front sh
/app # vue -V
@vue/cli 4.5.11
/app # node -v
v14.15.4
/app # vue add bootstrap-vue
...
? Use babel/polyfill? No
...
✔  Successfully invoked generator for plugin: vue-cli-plugin-bootstrap-vue
/app # exit
```

##正しくインストールされたか確認

```vue:front/src/components/HelloWorld.vue
...
    </ul>
    <b-button variant="primary">Primary</b-button>
    <b-button variant="secondary">Secondary</b-button>
    <b-button variant="success">Success</b-button>
    <b-button variant="danger">Danger</b-button>
    <b-button variant="warning">Warning</b-button>
    <b-button variant="info">Info</b-button>
    <b-button variant="light">Light</b-button>
    <b-button variant="dark">Dark</b-button>
  </div>
</template>
...
```

``localhost:8080``
![スクリーンショット 2021-01-30 10.51.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1007663/8a0663dc-1f38-ae1e-1d48-f716c32a0876.png)

##参考サイト
・https://gangannikki.hatenadiary.jp/entry/2020/01/03/235700
リーダブルコード 4章 美しさ

本書の第１部「表面上の改善」にある3章のサマリーをまとめる。
（一時的にコード例は省略しています）

3つの原則
* **読み手が慣れているパターンと一貫性のあるレイアウトを使う**
* **似ているコードは似ているように見せる**
* **関連するコードをまとめてブロックにする**

# 4.1 なぜ美しさが大切なのか？

見た目が美しいコードの方が使いやすい。
さっと流し読みができれば、誰にとっても使いやすいコードと言える。

# 4.2 一貫性のある簡潔な改行位置

コードの見た目を一貫性のあるものにするには適切な改行を入れるように。コメントも整列させよう。

# 4.3 メソッドを使った整列

ヘルパーメソッドを使うことでコードを改善することができる。
また、コードの見た目をよくすれば、表面上の改善だけでなく、コードの構造も改善できる。

# 4.4 縦の線をまっすぐにする

列を整列させれば、コードが読みやすくなることがある。ミスも見つけやすくなる上、楽に流し読みができる。

## 整列すべきなのか？

# 4.5 一貫性と意味のある並び

コードの並びがコードの正しさに影響を及ぼすことは少ないが、そうであればランダムに並べずに意味のある順番に並べるといい。
例えば、
* **対応するHTMLフォームの<input>フィールドと同じ並び順にする**
* **最重要なものから重要度順に並べる**
* **アルファベット順に並べる**

# 4.6 宣言をブロックにまとめる

人間の脳はグループや階層を1つの単位として考える。
コードの概要を素早く把握してもらうために、「単位」を作る。

例えば、全てのメソッドを1つの大きなブロックにまとめるのではなく、**論理的なグループに分けてあげる。**
コード行は増えるとしても、読みやすくなる。
グループに分けたことで、最初にグループを把握して、後から必要になったときに詳細を読めるようになる。

# 4.7 コードを「段落」に分割する

文章は複数の段落に分割されているが、それは
* 似ている考えをグループにまとめて、他の考えと分けるため
* 視覚的な踏み石を提供できるから、ページの中で自分の場所を見失わない
* 段落単位で移動できるようになる

段落ごとに要約コメントを追加すれば、コードにざっと目を通せるようになる。

# 4.8 個人的な好みと一貫性

**一貫性のあるスタイルは「正しい」スタイルよりも大切**

# 4.9 まとめ

**一貫性と意味のあるやり方でコードを整形**

* 複数のコードブロックで同じようなことをしていたら、シルエットも同じようなものにする
* コードの列を整列すれば、概要が把握しやすくなる
* ある場所でA, B, Cのように並んでいたものを他の場所でB, C, Aのように並べてはいけない。意味のある順番を選んで、常にその順番を守る
* 空行を使って大きなブロックを論理的な段落に分ける
Skip GANomalyをHello World!(Windows, Anaconda, PyTorch)

#1 目的
Skip GANomalyをローカルPCで動かす
引用元リポジトリ[[1]](https://github.com/samet-akcay/skip-ganomaly)

#2 環境
OS: Windows 10
GPU: 無し
環境: conda

#3 構築の流れ
###3.1 クローン
   ```
   git clone https://github.com/samet-akcay/skip-ganomaly.git
   ```
###3.2 conda環境作成
```
    conda create -n skipganomaly python=3.7
```
###3.3 作成した環境をactivate
```
    conda activate skipganomaly
```
###3.4 PyTorchをインストール
[PyTorch](https://pytorch.org/)の公式サイトより、torch　v1.2.0をインストールする。[PyTorchの過去のバージョン](https://pytorch.org/get-started/previous-versions/)

```
# CPU only
pip install torch==1.2.0+cpu torchvision==0.4.0+cpu -f https://download.pytorch.org/whl/torch_stable.html
```

### 3.5 requirements.txtの編集
インストールしたPyTorchのverに合わせて編集

```diff:requirements.txt
- torchvision==0.4.2
+ torchvision==0.4.0
```

### 3.6 各ライブラリのインストール
```
   pip install --user --requirement requirements.txt
```

#4 動作確認
CIFAR10で動作確認する
はじめに可視化ツールVisdomを起動

```
python -m visdom.server
```
学習を実行

```
python train.py --dataset cifar10 --niter 5 --abnormal_class automobile --display --device cpu --gpu_ids -1
```
結果をvisdomで確認できる。
visdomはブラウザで (http://localhost:8097/) へアクセス
入力画像(Reals)に近しい画像が生成(Fakes)されていることが確認できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469182/ee6058aa-3d1c-4971-cebf-0872326e5a6c.png)

# 5 次稿
[次稿](https://qiita.com/hamukawa/items/67891ad1150dc9ae7c9a)でオリジナルのデータセットによる異常検知を試す
STM32G031J6M6とOLED、OLED096UNO-AでHello Worldを表示 STM32G031

1.ardiuno ide 1.8.11にSTM32 Corasをインストール
2.u8g2ライブラリーをインストール
3.ソースの例からHelloWorldを選択
4.U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ PA8, /* data=*/ PA12, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the Display
を選択
5.PA8とPA12を設定

```c++

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ PA8, /* data=*/ PA12, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the Display

void setup(void) {
  u8g2.begin();
}

void loop(void) {
  u8g2.clearBuffer();					// clear the internal memory
  u8g2.setFont(u8g2_font_ncenB08_tr);	// choose a suitable font
  u8g2.drawStr(0,10,"Hello World!");	// write something to the internal memory
  u8g2.sendBuffer();					// transfer internal memory to the display
  delay(1000);  
}

```

![old_8x8_031_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/d2e7b7b5-4b7e-aae7-1fdc-aada64c74337.jpeg)
ラズパイ初心者がラズパイ設定をしてみた

ラズパイ初心者がラズパイ設定をしてみた

しばらく前にラズパイをAmazonで購入したものの、なかなかセットアップする機会がなく、しばらく放置していましたが、重い腰をあげてセットアップを開始！

ちなみに購入したモデルはこちら：
https://www.amazon.co.jp/gp/product/B08D6CYBNS/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1

購入モデルは「Raspberry Pi 4 Model B /ラズベリーパイ4B（8GB RAM）」。
（どのモデルでも、セットアップはそんなに違いないですね）

セットアップ開始したものの、いつも”虹色”の画面から進まない。。。

そこで、以下の対処をしてみました。
・SDカード
　そもそもSDカードをささずに起動。　→  SDを認識しない、というエラーでとまる。はい、正常。
・USBの電源
　いくつかの記事で、USB-Type Cの電圧が足りないから、動かない、という話が。
　ということで、付属のケーブルに変更して再起動。　→ 虹色の画面でとまります。
・HDMIケーブル
　付属のケーブル指しています。問題なし、

　と思いきや！！

　２つあるHDMIケーブルの口の挿入先を変えると動いた、という記事があるじゃないですか！
　ほうほう、では差し替えてみましょう。


　あ、画面でるやん！！！

ということで、無事にインストールにたどり着きました。

HDMIケーブルを指す場所を変える、で問題なくインストールまで完了！

本日は以上。
（今日の記事はメモなので、後でもう少し成形しよう。。。）
【rails】devise認証をemailではなく、違う項目でログインする。

##実行環境
devise (4.7.3, 4.7.2, 4.7.1)
ruby 2.3.0p0
rails 5.1.4

##deviseのデフォルトカラムは、

```
 t.string :email,              null: false, default: ""
 t.string :encrypted_password, null: false, default: ""
```

##だがしかし、今回は部屋番号で認証したいので、下記と設定した。

```
t.string :room_number,        null: false
t.string :encrypted_password, null: false, default: ""
```
##そのために、下記を実施する。

```config/initializers/devise.rb

deviseの設定を変更するため、下記を変更する。※devise (4.7.3, 4.7.2, 4.7.1)
  ４９  config.authentication_keys = [:room_number]
  61  config.case_insensitive_keys = [:room_number]
  66  config.strip_whitespace_keys = [:room_number]　　　　　　　　　　
```

```app/models/user.rb
以下3つのメソッドをオーバーライド(上書き）して無効化。
  def email_required?　#バリデーションにemailの検証が必要かどうかを検証するメソッド
    false
  end

  def email_changed?
    false
  end
  def will_save_change_to_email?
    false
  end
```
```controller.rb
ストロングパラメーターの設定
before_action :configure_sign_in_params, only: [:new, :create]
def configure_sign_in_params
  devise_parameter_sanitizer.permit(:sign_in, keys: [:room_number])
end
```


これで
<img width="666" alt="スクリーンショット 2021-01-30 10 38 35" src="https://user-images.githubusercontent.com/70472160/106343164-636d3180-62e7-11eb-8326-d73ee2c3183d.png">

完成！！




##参考記事
[Rails] devise の使い方（Validatable Recoverable Rememberable）
https://tech.mof-mof.co.jp/blog/devise-option-methods-integrate-vrr/
laravel8インストールからgitlabへpushする手順

#はじめに
laravel8インストールからgitlabへpush
gitlabから新規プロジェクト立ち上げまでの手順をまとめました。
※この記事ではwindows10を使用していいます。

#目次

1.事前準備
2.laravel8環境構築
3.各種設定
4.gitlabへpush
5.gitlabからlaravel8環境構築

#1.事前準備
Composerをインストール
https://weblabo.oscasierra.net/php-composer-windows-install/
gitlabへ登録
https://gitlab.com/

#2.laravel8環境構築
LaravelをComposerでインストール
`composer create-project --prefer-dist laravel/laravel LaravelPJ "8.*"`
※しばらく時間がかかります

ディレクトリ移動
`cd LaravelPJ`
サーバ起動
`php artisan serve`

ブラウザでhttp://localhost:8000/
にアクセスしてLaravelって表示されれば成功

`Fatal error: require(): Failed opening required 'C:\XXX\XXX\Desktop\login\LaravelPJ/vendor/autoload.php' (include_path='C:\XXX\XXX\XXX') in C:\XXX\XXX\Desktop\login\LaravelPJ\artisan on line 18`
上記、エラーが発生する場合は、`composer install`を実行

#3.各種設定

①開発ライブラリ
Laravel Debugbar
`composer require barryvdh/laravel-debugbar --dev`
`php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"`
※画面上からSQLなど確認できます
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97130/6288aef4-f240-89d2-6349-6fc1fd075481.jpeg)

Laravel Collective
フォーム処理を短く書けるヘルパー集
composer require laravelcollective/html

②config/app.php 言語設定変更

```config/app.php
`timezone' => 'Asia/Tokyo',
locale' => 'ja',
faker_locale' => 'ja_JP',`
```
③.env 設定

```.env

// 「DB」や「メール」などの設定は環境によって設定する
```

#4.gitlabへpush
①gitlabに新規プロジェクトを作成

![WS000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97130/cb78af46-31c9-ec86-90ac-fa9b3452d642.jpeg)
![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97130/4ecb9f36-3bb4-da5a-7183-bef01a057efa.jpeg)
![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97130/26f18f24-3653-a30e-73d1-622798e2008c.jpeg)
![WS000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97130/613e1956-10e1-499f-2615-b276aa53d571.jpeg)
![WS000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97130/b90d3b41-5cec-6e84-fe64-5cd900d5b1db.jpeg)

②gitlabからプロジェクトをclone
![WS000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97130/56fe6357-2e39-77c7-8c18-b8967c94414c.jpeg)

③.2.laravel8環境構築でインストールしたコードをgitlabへpush

#5.gitlabからlaravel8環境構築
①新規フォルダを作成し、git clone
※4.gitlabへpush②参照

②.envを設定

③サーバ起動
`php artisan serve`

ブラウザでhttp://localhost:8000/
にアクセスしてLaravelって表示されれば成功
ISLispのモジュールのアイディア

#はじめに
ISLisp規格はとてもコンパクトで洗練されています。小さなコードを書く分にはこれで全く問題ありません。しかし、コンパイラのように数千行、1万行ともなるとモジュールがあった方が便利です。モダンな言語仕様のElixirにヒントを得て次のようなことを考えています。

#アイディア

```common-lisp
file "tests/module.lsp"


(defmodule foo
    (defglobal a 3)

    (defpublic bar (x)
    
        (+ (boo x) (gfib x)))
 
    (defun boo (x)
        (+ x a))
    
    (defpublic baz (x)
        (uoo x))
    
    (defmacro uoo (x)
        `(+ ,x ,x))


    (defgeneric gfib (n)
        (:method ((n <integer>)) (cond ((= n 1) 1)
                                       ((= n 2) 1)
                                       (t (+ (gfib (- n 1)) (gfib (- n 2)))) )))
    
    (defpublic fact (n)
        (if (= n 0)
            1
            (* n (fact (- n 1)))))
)

Easy-ISLisp Ver1.72
> (load "tests/module.lsp")
T
> (bar 10)
68
> (baz 10)
20
> (uoo 2)
Unbound function at eval UOO
debug mode ?(help)
>>:q
Easy-ISLisp Ver1.72
> (fact 10)
3628800
> 

```

外部からはdefpublicで定義した関数だけが参照できます。booはプライベートです。大域変数の宣言、 (defglobal x n) はプライベートにし外部からは参照不可とします。動的変数　(defdynamic x n)　も同様です。


#実装
実験的にEasy-ISLispのインタプリタに実装してあります。
https://github.com/sasagawa888/eisl

コンパイラを単純にするために名前空間を探索するハッシュテーブルは今まで通りにします。単に関数名、変数名に接頭辞を付加する方式にします。上記の例ですと関数booはfoo::booです。
GitHub Actions repository_dispatchで"Not Found"が帰ってきて困った

全然大したことはないのだけれど、想像以上にハマってしまったので自戒を込めて記録。

## 事象
![スクリーンショット 2021-01-30 9.48.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/932385/26b0f7f7-4716-7906-55bd-07bed8b25ae4.png)

GitHub Actionsで[Repository dispatch event](https://docs.github.com/ja/rest/reference/repos#create-a-repository-dispatch-event)を実行しようとしたら`Not Found`が帰ってきてしまった。

リポジトリ名をミスったかと思って`GET /repos/<owner>/<repo>`に問い合わせてみたが、そちらでは普通に情報が返ってきたため、リポジトリ名などは問題ないと思われた。

## 解決

`Not Found`が帰ってきたのでAPIとかリポジトリ名が違っていることを疑っていたのだが、公式ドキュメントによれば、どうやらそうではないらしい。

[Troubleshooting - GitHub Docs](https://docs.github.com/en/rest/overview/troubleshooting#404-error-for-an-existing-repository)

リポジトリ名がミスっていようがパラメータがおかしかろうが`４０４`が返されるとのこと。プライベートリポジトリに関する情報を流出しないためというのは理解できるが、要するに「正しくない」ということしか返さないということである。今回のようなミスの対処が面倒くさいのはつらい。

で、見直したところ…

![スクリーンショット 2021-01-30 9.48.14 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/932385/0b934eea-570c-6ae9-db9d-9a9c7d5673ca.png)

結局原因は`Authorization`の`h`が抜けていた、単にスペルミスだった。

## 参考

- [[GitHub]Actionsで上手く行かない時や選択肢に迷う時にチェックしておきたいポイント | Developers.IO](https://dev.classmethod.jp/articles/checkpoint-error-on-actions/)
  - 上記のトラブルシューティングページへはここからたどり着いた。
- [Cannot trigger dispatches from GitHub API - Stack Overflow](https://stackoverflow.com/questions/63042765/cannot-trigger-dispatches-from-github-api)
  - こちらの方はヘッダーに`token`と入れるべきところを`Bearer`にしてしまっていたらしい。その間違いで`404`を返されても困るよなあ…
【PHPUnit】PHPUnit上でメソッド単位のテスト実行をしたいので調べた

# やりたいこと
```php:unitTest.php
public function testA ()
{
    // テストAの処理
}

public function testB ()
{
    // テストBの処理
}
```

このようなコードで、`testA`を実行せずに`testB`だけ実行したい場面があると思います。
~~自分は今までtestAをコメントアウトしてました~~

# 解決方法

メソッド単位で実行できないのかなー...と思って調べたところ、同じ悩みを発見。
https://qastack.jp/programming/26095051/how-to-run-single-test-method-with-phpunit

```shell-session
$ phpunit --filter testB unitTest.php
```
こうすればtestBだけ実行できます。

****

調べていくうちに `@group` を設定したほうがよりPHPUnitらしいなと思いました。

```php:unitTest.php
/**
 * @group one
 */
public function testOne ()
{
    // テストAの処理
}

/**
 * @group two
 */
public function testTwo ()
{
    // テストBの処理
}
```

各テストに`@group`アノテーションを付けます。

`testOne()`だけ実行したいときは

```shell-session
$ phpunit --group one
```
解決。

お読みいただきありがとうございました。
【45＿軌跡】コマ大数学科

# 【45＿軌跡】コマ大数学科

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1017176/56ad51a8-3cfe-bdc4-8f19-1287fb40049c.png)

```latex
\begin{tikzpicture}
    \draw (0,0) rectangle (6,6);
    % 塗りつぶし
    \fill [cyan!50!white](0,6)--(3,{6-3*sqrt(3)})--(6,6)--(3,{3*sqrt(3)})--cycle;
    \draw [cyan!50!white,line join=rounded](0,6)--(3,{6-3*sqrt(3)})--(6,6)--(3,{3*sqrt(3)})--cycle;
    \filldraw [fill=cyan!50!white,thick,name path=A,line join=rounded](0,6) arc (90:60:6) (6,6) arc (90:120:6)(0,6) arc (180:240:6)(6,6) arc (0:-60:6);

  \end{tikzpicture}



\begin{tikzpicture}[xscale=0.5,yscale=0.5]
  % \draw (0,0) rectangle (6,6);
  % 塗りつぶし
  \fill [cyan!50!white](0,6)--(3,{6-3*sqrt(3)})--(6,6)--(3,{3*sqrt(3)})--cycle;
  \draw [cyan!50!white,line join=rounded](0,6)--(3,{6-3*sqrt(3)})--(6,6)--(3,{3*sqrt(3)})--cycle;
  \filldraw [fill=cyan!50!white,thick,name path=A,line join=rounded](0,6) arc (90:60:6) (6,6) arc (90:120:6)(0,6) arc (180:240:6)(6,6) arc (0:-60:6);
  \draw (-1,{6-3*sqrt(3)})--++(35,0);
  \fill [white!20!black](-1,0) rectangle (35,{6-3*sqrt(3)});
  \fill [white!40!black](-1,-1) rectangle (35,0);
  \fill [white!60!black](-1,-2) rectangle (35,-1);
  \fill [white!80!black](-1,-3) rectangle (35,-2);
\end{tikzpicture}
```
【047＿ヒルベルト空間】コマ大数学科

# 【047＿ヒルベルト空間】コマ大数学科

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1017176/18115e52-2122-1f42-874d-dd69f42e8f14.png)


```latex

  \begin{tikzpicture}
    \coordinate (O) at (0,0);
    \coordinate (A) at (1,0);
    \coordinate (B) at (60:1);
    \coordinate (C) at (80:0.7);    
    \draw [very thick] (O)--(A)--(B)--(C)--cycle;

% 内の正方形の作成
\foreach \x/\y/\z in {B/C/\maruichi,C/O/\maruni,O/A/\marusan,A/B/\marushi}
{\coordinate (\x'') at ($(\y)!1!90:(\x)$);
\coordinate (\y') at ($(\x)!1!-90:(\y)$);
\filldraw[very thick,fill=cyan!50!white,fill opacity=0.5]  (\y)--(\x'')--(\y')--(\x)--cycle;
\node at ($(\x)!0.5!(\x'')$){$\z$};
}

% 8正方形の作成
\foreach \x/\y/\z in {A/C/\maruhachi,B/O/\marugo,C/A/\maruroku,O/B/\marushichi}
{\coordinate (\x2) at ($(\y')!1!90:(\x'')$);
\coordinate (\y1) at ($(\x'')!1!-90:(\y')$);
\filldraw[very thick,fill=orange!50!white,fill opacity=0.5]  (\x'')--(\y')--(\x2)--(\y1)--cycle;
\node at ($(\x'')!0.5!(\x2)$){$\z$};
}
% 9,10正方形の作成
\foreach \x/\y/\z/\color in {O/B/\marukyu/red,A/C/\marujyu/green}
{\coordinate (\x2) at ($(\y)!1!90:(\x)$);
\coordinate (\y1) at ($(\x)!1!-90:(\y)$);
\filldraw[very thick,fill=\color!50!white,fill opacity=0.5]  (\x)--(\y)--(\x2)--(\y1)--cycle;
\node at ($(\x)!0.5!(\x2)$){$\z$};
}


```
【Java】標準入力から値を取得する方法

【コード】


```
import java.util;

public calss Main {
   public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       String data = sc.next();
 }
}

```

【解説】
標準入力を使うと、ファイルからデータを読み込んだり、データを受け取ることができます。
Javaで標準入力からデータを取得するには、Scannerを用います。

これを

```
public calss Main {
   public static void main(String[] args) {
      
  }
}

```
の中に記述します。
ちなみに、このコードはシステムを動かすための雛形のようなものです。

次に記述内容ですが、

```
Scanner sc = new Scanner(System.in);
```
でScannerを宣言し、

```
String data = sc.next();
```
data変数へと代入します。

もし出力したければ、

```
System.out.println(data);
```
をメソッド内の最後の行に記述しましょう

*import java.util; はデータを読み込むためのライブラリです。
【flutter】Dartファイル  ２段表示 名前順

Dartファイルが増えて目的のファイルを見失う・・・

そんな時のおすすめ設定です！


・ファイルの表示量を増やしたい！　→　多段表示に
・ファイル名が切れて分かりづらい！　→ 縮小表示に
・表示順番がバラバラで分かりづらい！　→ アルファベット順に

#初期状態
![スクリーンショット 2021-01-30 10.59.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1040271/869800ab-0712-b6e8-bbc5-add21398a8bf.png)

#設定方法

Preferences/Editor/General/Editor Tabsの画面で下記のように設定を変更。

![スクリーンショット 2021-01-30 11.15.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1040271/ba9bf143-d9df-eeec-91dc-aa1a44ecdb94.png)

#結果

編集後、右下の　Apply　→　OK で画面に戻ると。。。

多段表示で縮小表示の為、ファイル名も切れずに、更にアルファベット順に自動で並べ替えてくれています！

![スクリーンショット 2021-01-30 11.02.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1040271/d540a663-7040-25a2-5b64-39aaa89d5874.png)


多少はDartファイル捜索の時間が削減できると思います。
Docker Desktop requires Windows 10 Pro/Enterprise(16299+) or Windows 10 Home(18362.1040+).

ゲーミングPCにDockerをインストールしようとしたらエラーが表示された。
![Installing Docker Desktop 3.1.0 (51484) 2021_01_30 8_46_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358483/1cfc9fe6-b5a7-3b1e-e229-673acc3e0484.png)
確認してみる。
![Windows のバージョン情報 2021_01_30 8_49_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358483/bd4cb6be-8bd9-17ff-90a1-12fdbe3876bb.png)
18363.778 > 18362.1040 だから条件はクリアしてるように見えるけど。。。
失敗していたらしいWindows Updateを再実行してみた。
![Windows のバージョン情報 2021_01_30 9_27_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/358483/74b5ed89-f662-2c2d-ac4e-d2ac8d7a1260.png)
無事Dockerをインストールできた。
VRC ASSETリンク集

| 題名 | リンク | 
|:-----------|------------:|  
| Five Seamless Tileable Ground Textures|[LINK](https://assetstore.unity.com/packages/2d/textures-materials/floors/five-seamless-tileable-ground-textures-57060) |     
| Toony Skies       |     [LINK](https://assetstore.unity.com/packages/2d/textures-materials/sky/toony-skies-11020) | 
| 時計(SDK3用)       |     [LINK](https://booth.pm/ja/items/1986599) |  
| Homekit |     [LINK](https://docs.vrchat.com/docs/vrchat-home-kit) | 
| Quest向けVideoPlayerプレハブ |     [LINK](https://booth.pm/ja/items/2352788) | 
| VRChat向け自動更新ポスターまとめ (PC/Quest/SDK2/SDK3対応) |     [LINK](https://booth.pm/ja/items/2401621) | 
| abientCG (色々なテクスチャー) |     [LINK](https://ambientcg.com/) |
【Swift】CollectionViewで1行あたりのセルの数を指定する

CollectionViewで１行あたりのセルの数を指定したかったので調べました。

##何も指定せずに表示した場合
こんな感じに表示されました。
<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678954/df81136d-6320-1936-cb7a-fca749059b30.png">
どうやらセル間のスペースやサイズがデフォルトの値になっているので、セルのサイズやスペースを調整すると任意の数が表示できそうです。


##１行あたりのセルの数を４個にしてみる
とりあえず、例として１行あたりのセルの数を４個表示するのをゴールに設定

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678954/29c1d02f-3878-f668-f604-6055fc82f42c.png">
これを目指します。


##セルの数を指定するコード
引数`number`に１行あたりに表示したい数字を入れると、希望のセル数が表示される関数を作ってみた。

```swift
private func numberOfItemsInRow(_ number: CGFloat) {
        
        let layout = UICollectionViewFlowLayout()
        let width = self.view.frame.size.width / number
        let height = width
        layout.itemSize = CGSize(width: width, height: heigh)
        layout.minimumLineSpacing = 0
        layout.minimumInteritemSpacing = 0
        
        collectionView.collectionViewLayout = layout
    }
```

##解説
###UICollectionViewFlowLayout()
```swift
let layout = UICollectionViewFlowLayout()
```
`UICollectionView`のセルの`itemSize`等がプロパティとして用意されているオブジェクト`UICollectionViewFlowLayout`をインスタンス化。
これを調整していってセルのサイズを決めていきます。

###itemSize
```swift
let width = self.view.frame.size.width / number //引数number
let height = width
layout.itemSize = CGSize(width: width, height: heigh)
```
アイテム一個あたりの`width`を`self.view`の横幅を<b>表示させたい数</b>で割る。
`height`は今回はアイテムを正方形にしたかったので`width`と同じ値にしています。
セルの大きさを決める`itemSize`に`width`と`height`を代入

###Spacing
上記のコードだけだと4個表示させたいのに希望通りの数が表示されませんでした。
<img width="150"src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678954/3f355552-b4ad-cea7-a7b3-392be66edb78.png">

スペースの大きさを考慮していなかったのが原因だった為、スペースの大きさを０にします。

```swift
layout.minimumLineSpacing = 0
layout.minimumInteritemSpacing = 0
```
`minimumLineSpacing`は下辺のスペース、
`minimumInteritemSpacing`はセル同士の間のスペース

この二つのプロパティに０を代入して、スペースを無くしました。

###UICollectionViewLayout
`UICollectionView`には、セルのサイズや余白等のレイアウトを管理するためのプロパティとして`UICollectionViewLayout`が用意されています。

その`UICollectionViewLayout`に作成したレイアウトを代入すると完成です。

```swift
collectionView.collectionViewLayout = layout
```

###最後に作った関数を呼び出す

あとは、作った関数に引数を代入して呼び出して終わり。

```swift:collectionViewController.swift
override func viewDidLoad() {
    super.viewDidLoad()
        
    self.collectionView!.register(UINib(nibName: "CollectionViewCell", bundle: nil), forCellWithReuseIdentifier: reuseIdentifier)
         //１行あたり４個表示させる
         numberOfItemsInRow(4)
    }
```

##まとめ
今回はセル間のスペースを無しにしましたが、セル間のスペースを入れて希望の数を表示させたい場合は、`self.view.frame`の横幅に対しての一個あたりのセルの横幅だったり、`minimumInteritemSpacing`あたりを調整すると良さそうです。
 <br>
何か間違いやより良い方法がありましたら、優しく教えていただけましたら幸いです🙇‍♂️

##参考
<a href="https://teratail.com/questions/246611">CollectionView 列数を7にしたい</a>
Ruby on Rails：電話番号のデータ型はintegerよりstringにすべき（Invalid octal digitエラー対策）


※2022年から技術系の記事は[個人ブログ](https://yamaday0u.net/category/programmer/)に投稿しております。ぜひこちらもご覧ください→[yamaday0u Blog](https://yamaday0u.net/category/programmer/)

先日、商品購入アプリの開発途中でテストコードを実装していたところ、初心者的にでとんでもなくエラーに苦しめられたので、後学のために書き残します。

## 環境
Rails：6.0.3.4
MySQL：5.6.50

##謎のエラー：Invalid octal digit

RailsのgemであるRSpecを使ってテストコードの確認をしていたところ、以下のようなエラーが出ました

```:ターミナル
bundle exec rspec spec/models/order_item_spec.rb

SyntaxError:
アプリ名/spec/factories/order_items.rb:8: Invalid octal digit
      phone_numbr { 09012345678 }
                    ^~
```

`Invalid octal digit`は直訳すると「無効な8進数」という意味です。

テスト用に設定していた電話番号「09012345678」の2番目の9が無効な8進数でエラーしているよ、ということらしいです。

## エラーの原因
エラーの原因を調べたところ、Rubyでは、0から始まる数値は8進数として解釈されるそうです。

8進数は0〜7の数字で構成されるので、8や9があるとエラーになります。

今回の場合、テスト用の電話番号が、0から始まるために8進数の数値として解釈され、その後ろに8進数では存在しない9が出てきたために、「invalid octal digit（無効な8進数）」というエラーが出てきたというわけです。

## 解決策：データ型を変更（integer→string）
今回の商品購入アプリでは、データベースに保存する電話番号をinteger型に設定していたため、上記のような「0から始まるために8進数の**数値**」として解釈されていまいました。

そこで、`rails g migration`コマンドを使ってマイグレーションファイルを作成し、電話番号のデータ型をstring型にする変更を行いました。

```:ターミナル
rails g migration change_data_phone_number_orders
```

作成したマイグレーションファイルに以下のように記述し、`rails db:migrate`して完了です。

```20210129XXXXXX_change_data_phone_number_deliveries.rb
def change
    change_column :orders, :phone_number, :string
    # ordersはテーブル名、phone_numberがカラム名、stringが新しいデータ型
  end
```

```:ターミナル
rails db:migrate
```

ターミナルで再度`bundle exec rspec spec/models/order_item_spec.rb`したところ、無事テストが通りました。

データ型をintegerから変えないで解決する方法もあるとは思うのですが、調べがつかなかったので今回はこれで解決しました。

プログラミングの経験が浅い方は、電話番号のデータ型はstringにしておく方が無難だと思います。

RSpecについては以前記事を書いたことがありますので、是非読んでみてください。
[RSpecの導入&関係の深いgemについて（Qiita）](https://qiita.com/yamaday0u/items/c3bf6036e11298771a99)

## 参考資料
[invalid octal digit エラーが起きたとき（datetimeで起きて泣いたのでメモ）(Qiita)](https://qiita.com/teruringo/items/e16bc7fbf6e89fc735f0)
[Rubyのエラーを整理（初級者向け） - Speaker Deck](https://speakerdeck.com/universato/rubyfalseerawozheng-li-chu-ji-zhe-xiang-ke?slide=15)
Gitの裏側を整理できた講座について

## はじめに
GitやGitHubは実務をこなしていれば使えて当たり前になります。
とはいえ、本当に自分の使い方ってどこでも通用するのか？
そんな疑問を抱き、少しでも情報を得ようとUdemyで以下の講座を受講しました。

[Git： もう怖くないGit！チーム開発で必要なGitを完全マスター](https://www.udemy.com/course/unscared_git/)

すると、__思った以上に自分がGitを理解していないこと__に気づけたんですね。
なので、今回はこの講座で学習したことを紹介しつつ、gitについて軽く触れてみたいと思います。

##まず、Gitとは？
Gitはファイルのバージョンを管理するためのツールです。
WindowsでもLinuxでもMacでも使えます。
Gitが存在することによって、以下のような課題を解決できるんですね。

- 最新のファイルがどれかわからなくなる。
- 誰が、いつ、どのファイルを、どのように変更したかがわからなくなる
- ファイルの場所がどこかわからなくなる

プログラマーやSEがシステム開発に使うツールと思われがちですが、
デザイナーがプロダクトの制作に使ったり、事務でエクセルを管理するのにも役立ちます。
なので、これからGitを使っていくことはPCで作業をされる方にとって必ず役立つと思ってるんですよね。

##Gitの使い方
Gitはコマンドで操作することもできますし、外部のツールを使ってボタン等で操作することもできます。
ちなみに、私はGitをコマンドで操作することが多いです。
しかし、普段コマンド操作に慣れていない方にとって、コマンド操作は少しハードルが高く感じるかもしれません。
なので、コマンド操作に慣れない人はこの講座で内容を理解して、外部ツールを使えば問題ないかなと思います。


##Gitのファイル管理の概念

Gitでは、以下の４箇所にファイルを設置して管理します。

- ワークツリー
ワークツリーは自分が作業しているディレクトリ（フォルダ）のことです

- ステージ
ステージはワークツリーで変更したファイルを置く場所です。
ステージでは、変更したファイルを記録する準備をするんですよ。
ディレクトリ内の全てのファイルを記録したいわけではないので、変更を記録したファイルのみを一度ステージに追加するんですね。

- ローカルリポジトリ
ローカルリポジトリは変更を記録したファイルを置く場所です。
ファイルそのものが置かれているわけではなく、圧縮したスナップショットが保管されているんですね。

- リモートリポジトリ
リモートリポジトリは記録したファイルをチームで共有できる場所で、自分のPCの外にあります。
インターネット(GitHub等)上に存在したり、企業によっては社内のサーバーにリモートリポジトリを準備しています。


##Gitでのファイル操作の流れ

以下の順番で、実際にファイルを操作していきます。

```Bash

# リモートリポジトリのファイルをワークツリーに持ってくる
# 私はプロジェクトに参画した直後などは、以下のコマンドで最新のソースコードを取得するケースが多いです
$ git pull origin main

# git branchコマンドを使うと、作業ブランチを新規作成することができます
# なので、git pull origin mainの後に、以下のコマンドで開発用のブランチを作成するケースが多いです
$ git branch dev

# git checkoutコマンドを使うと、自分の作業ブランチを切り替えることができます
# なので、git branch devの後に、以下のコマンドで切り替えるケースが多いです
$ git checkout dev

# git addコマンドを使うと変更したファイルをステージに置くことができます
$ git add index.html

# git commitを使うと、ステージにあるファイルをローカルリポジトリに置くことができます
# また、git commitにはコメントをつけることができるので、何のためにファイルを変更したかを記録することができるんですね
$ git commit

# git pushコマンドを使うと、ローカルリポジトリの内容をリモートリポジトリに置くことができます
# 以下のコマンドでは「dev」というブランチ名でリモートリポジトリにファイルを置きます
$ git push origin dev
```

## 個人的に役立つと思ったこと
### コンフリクト発生時の対応

複数の作業者がいる場合、１つのファイルを複数の人が編集してしまうケースがあります。
そんな時、git push等で次の場所にファイルを置こうと思ってもエラーになるんですね。
これを、コンフリクト（衝突）と呼びます。
__実際に現場でコンフリクトが発生すると焦るんですよ。__
何が起こったかわからないですからね。
とはいえ、この記事で紹介している講座で予行演習をしておけば、コンフリクトが発生した時の対応スピードは大きく変わると思います。
__コンフリクトの解決方法を誤るともっと面倒なことになるので、ここは是非学習しておきたいところですね__


### GitHubフローの説明

__※既に複数の開発経験のある人には不要な説明かと思います__
GitHubフローとは、GitHubを使った作業の順序を定型化したものです。
とはいえ、多少企業やプロジェクトによっても異なるとは思いますが、スタートアップで若手のエンジニアが多い場面などでは定型化された手順があることは非常に有効です。
ある程度のルールがないと、悩むことが多くて開発が中々進まないですからね。


## 最後に

今回はGitの講座について紹介してみました。
権利上の問題とかもあるので、最低限の内容を記載しています。
文字だらけで理解しにくい部分が多いかもしれませんが、実際に講座を受講していただけたら全てクリアになると思ってます。
実際に私は受講してますし、この講座だけでGitの学習は良いのではないかと思っています。

最後まで読んでいただき、ありがとうございます。
datetimeで日時のBool演算

日時のTrue/False比較ができる。
後の方が大。

```python
import datetime

date1 = datetime.datetime(2021, 1, 30, 9, 0, 00, 00)
date2 = datetime.datetime(2021, 1, 30, 10, 0, 00, 00)
date3 = datetime.datetime(2021, 1, 31, 1, 0, 00, 00)

print(date1)
print(date2)
print(date3)

b1 = date < date2 < date3
print(b1)
b2 = date < date3 < date2
print(b2)
```

>2021-01-30 09:00:00
2021-01-30 10:00:00
2021-01-31 01:00:00
True
False

🐣
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)
Vim patchダイジェスト [2020/12]

[Vim](http://www.vim.org/)のリリースされた[patch](https://github.com/vim/vim/commits/master)の説明です。
([8.2.2073](https://github.com/vim/vim/commit/4b8a065145bb53762b869cd6b8e55b7ad7341761) ～ [8.2.2257](https://github.com/vim/vim/commit/2949cfdbe4335b9abcfeda1be4dfc52090ee1df6))
**新機能、大幅な仕様変更には、:four_leaf_clover:が付いています。**
Vim9 scriptの実装/仕様変更/不具合修正も頻繁におこなわれています。

* [8.2.2257](https://github.com/vim/vim/commit/2949cfdbe4335b9abcfeda1be4dfc52090ee1df6): :four_leaf_clover:Vim9: lambdaの呼び出し構文を`=>`のみとし、`->`のサポートを廃止しました。(関連patch: [8.2.2204](https://github.com/vim/vim/commit/65c4415276394c871c7a8711c7633c19ec9235b1))
* [8.2.2250](https://github.com/vim/vim/commit/de4f95b04134f6dfd10f60051a5078fd903a297d): :four_leaf_clover:Vim9: 部分文字列(`[:]`)のコロンの前後にスペースが必須となりました。
* [8.2.2233](https://github.com/vim/vim/commit/17793ef23aae0bc94539390ccfe5e63b0ad39ff2): :four_leaf_clover:`charidx()`を追加しました。文字列のバイトインデックスを文字インデックスで返します。
* [8.2.2204](https://github.com/vim/vim/commit/65c4415276394c871c7a8711c7633c19ec9235b1): :four_leaf_clover:Vim9: `:def`で定義した関数内のlambda呼び出し構文に`=>`をサポートし、`->`を非推奨としました。(関連patch: [8.2.2209](https://github.com/vim/vim/commit/9e68c32563d8c9ffe1ac04ecd4ccd730af66b97c), [8.2.2212](https://github.com/vim/vim/commit/c754b4cc98253e1935d3ea5790bc60869c7bc091))
* [runtimeファイル更新](https://github.com/vim/vim/commit/4072ba571babd733d1800c082416fe8fe3c28ed7): [Todo](https://github.com/vim/vim/commit/4072ba571babd733d1800c082416fe8fe3c28ed7#diff-fb7eed53e3f2993f9d82c748206eaca82fd1d054a417c6de477bb54373d85643)更新。helpファイル更新。他。
* [8.2.2183](https://github.com/vim/vim/commit/60f63100b9bc1d24b7b80c81f43cf2fc3da95987): :four_leaf_clover:Vim9: 非推奨のオプション `'edcompatible'`と`'gdefault'`を無視するようにしました。
* [8.2.2128](https://github.com/vim/vim/commit/100118c73ac068137cd298d22953896242752523): :four_leaf_clover:自動コマンドイベント `VimSuspend`と`VimResume`を追加しました。CTRL-Z による一時停止前や復帰後にトリガーされます。
* [runtimeファイル更新](https://github.com/vim/vim/commit/1b884a0053982335f644eec6c71027706bf3c522): [Todo](https://github.com/vim/vim/commit/1b884a0053982335f644eec6c71027706bf3c522#diff-fb7eed53e3f2993f9d82c748206eaca82fd1d054a417c6de477bb54373d85643)更新。helpファイル更新。他。
* [8.2.2082](https://github.com/vim/vim/commit/e0de171ecd2ff7acd56deda2cf81f0d13a69c803): :four_leaf_clover:Vim9: リテラル辞書の形式`#{}`のサポートを廃止しました。(関連patch: [8.2.2015](https://github.com/vim/vim/commit/2bede173a177e227e6224a8713f5b88a38d011af), [8.2.2090](https://github.com/vim/vim/commit/c5e6a7179d7dee4315b412b56e172bb1ff092d3e). [8.2.2135](https://github.com/vim/vim/commit/93f82cbee515e13b564f51ddcd5e3d6694358ba4))

---
#### 凡例

|表記|意味|
|:------|:------|
|:four_leaf_clover:|新機能、大幅な仕様変更|
|:alien:|Vim開発者向けの追加、変更|
|`'hoge'`|オプション (`:h options`参照)|
|`:hoge`|Exコマンド (`:h :index`参照)|
|`hoge()`|組み込み関数 (`:h functions`参照)|
|`v:hoge`|Vim定義済変数 (`:h v:`参照)|
|`+hoge`|feature (`:h +feature-list`参照)|

---
#### 方針
[こちら](http://qiita.com/h_east/items/23cd0d10932505072e6b#%E6%96%B9%E9%87%9D)を参照。
【Swift】数字が連番になった配列を作成する

数字が連番する配列を表示したい場合に、一個ずつ入力していくのは面倒臭いですよね、、

```swift:
let numbers = [1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
```

##範囲演算子を使って解決！

###...演算子　（終了の値も含む）
```swift
let numbers = Array(1...100)

print(numbers.count) //出力 100
print(numbers) // 出力　[1, 2, 3, 4, 5, 6...100]
```

###..<演算子　（終了の値を含まない）
```swift
let numbers = Array(1..<100)

print(numbers.count) //出力 99
print(numbers) // 出力　[1, 2, 3, 4, 5, 6...99]
```

##おまけ
`Array(repeating:count:)`というメソッドもあって、これなら同じ値が複数入った配列を生成出来ます。

```swift
let bunchOfLove = Array(repeating: "大好き", count: 100)

print(bunchOfLove.count) //出力 100
print(bunchOfLove) // 出力　[大好き, 大好き, 大好き, 大好き...大好き]
```

<br>
❤️
rails new から rails s を実行するまで

##初めに
rails newからrails sを実行するまでに数々のエラーと遭遇したのでメモ。
分かりづらいところ多々あると思いますが、エラーが解決し終わって書いてるので
どうかご容赦を。
温かい目で見守ってください。

##総括
大事なのは真摯にエラーと向き合うこと
エラー画面には解決のヒントがたくさん載ってること
検索の仕方を変えてみると意外とヒットする
英語で検索した方がヒントが多い
エラーが解決した時の喜びは大きい。
（難易度の高いゲームをクリアした時の喜びに近い）
ググる方法は以下の記事が大変参考になりました！
https://qiita.com/y_tom/items/1b54d4e1a9a5f3fab402

##開発環境
MacBook Pro
ruby2.6.6
rails6.1.1
mysql8.0

##エラー①
rails new を実行
gem nokogiri で問題発生（その時のエラー画面は残し忘れました）

https://qiita.com/dskst/items/b1f073fcffeca3bc9fc6
https://nokogiri.org/tutorials/installing_nokogiri.html#other-installation-scenarios

この記事を参考にエラー解決に挑戦
作者と同様に〇〇やってみた、を一つ一つ実行

結果

```
sudo NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"
```

を実行することにより解決

##エラー②
改めてrails new を実行
エラー画面を読むとwebpackerに問題あり？
と読めたがyarnがないのが問題だと気づく。

https://qiita.com/yokota02210301/items/293edf9e730f98fe633d
https://qiita.com/NaokiIshimura/items/8203f74f8dfd5f6b87a0

この２つの記事を参考にyarnのインストール、webpackerの再インストールを実行
.confingの権限をroot →　user に変える作業も必要

##エラー③
rails new を実行 →　作成できた！
rails s を実行して画面が出るか確認　→　エラー

Access dinied 'root'@'localhost'(passward: yes)
の問題

passwordが間違ってますよ、って言ってるみたいです。

rootのpasswordの再設定を試みる
https://dev.mysql.com/doc/refman/8.0/en/resetting-permissions.html

```
kill `cat /mysql-data-directory/host_name.pid`
```

はエラーになって弾かれたので、

```
sudo kill `cat /mysql-data-directory/host_name.pid`
```

を実行　→　出来た！

続いて、

```
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
```

を実行するも、ALTER がcommand not found
で弾かれる。(UPDATEも同様)

https://itips.krsw.biz/mac-zsh-command-not-found-error-reason-and-solution/
https://qiita.com/iwaseasahi/items/6e00883ccd0864ede17e

この記事を参考に
コマンド実行ファイルと検索パスを確認

どちらも異常なし。

usr/local/bin/rbenv
の中に
!/usr/bin/env bash の記述があったので
shellをzshからbashに切り替えて試行

それでもcommand not found

結局、mysqlを再インストールしました。
mysqlの初期設定でパスワードをコピペして実行すると弾かれる、らしい。
その時は再インストールするしかないみたい。

##エラー④
rails s を実行
permisson denied
となったので
root →　user
に権限を変更

##エラー⑤
rails s を実行
load error
が発生

そしてなぜかMySQLにアクセス出来なくなってる
https://qiita.com/carotene4035/items/e00076fe3990b9178cc0
この記事と同様の問題だった。

.pidファイルを作成
mysql.server restart
で解決

##エラー⑥
rails s を実行

```
Access denied for user 'blog'@'localhost' to database 'blog_development'
```

が発生。
mysqlリファレンスを見て要因を探ったが、解決に至らず。
そもそも、アクセス先を作ってないからでは？
という仮説に行き着く（ようやく）

```
rails g model(モデル名)
rails db:migrate
```

を実行

##エラー⑦
やっぱりエラー。
user'blog'に権限を付与してなかったので

```
mysql -u root -p
mysql>GRANT ALL PRIVILEGES ON *.* TO 'blog'@'localhost';
```

で権限を全て付与。

##エラー⑧
rails db:migrateを実行、以下のエラー。
ActiveRecord::NoDatabaseError: Unknown database 'vegtablelife_development'

```
rails db:create
rails db:migrate
rails s
```

を実行。
![スクリーンショット 2021-01-30 6.41.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/976902/63afea2d-efe6-9618-2832-9d9b6ba9f25c.png)

感動！！！
firebase deploy が出来ない現象を解決した備忘録

## 環境：
- Mac macOS Mojave 10.14.6
- Node version 14.15.1
- npm version 6.14.8
- firebase cli version 9.2.2

## 事象
久々に触ったreactアプリを、以前と同様にfirebaseに対してdeployしたかったのでターミナルで

```terminal:command
~/workspace/admin #firebase deploy --only hosting
```
とタイプしたところ、以下のエラーが発生

```terminal:log
Error: An unexpected error has occurred.

Having trouble? Try again or contact support with contents of firebase-debug.log
```

firebase-debug.log　を確認してみる

```terminal:firebase-debug.log
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type undefined
```
こちらとほぼ同じ内容でした　[https://github.com/firebase/firebase-tools/issues/1915](https://github.com/firebase/firebase-tools/issues/1915)

このエラーのため、firebaseに対してデプロイが出来ない状況でした。

## 解決策
firebase init でfirebaseの初期設定をもう一度行うことで解決しました。
エラー文でgoogle検索して様々な解決方法（firebase.json内のfunctionsキーを作成しなければいけない、各種ツールのアップデート&ダウングレード等）が出てきたのですが、結局既存のfirebase.jsonを別名保存して、新たにfirebase init し直す事で解決しました。

```terminal:command
~/workspace/admin #firebase init

     ######## #### ########  ######## ########     ###     ######  ########
     ##        ##  ##     ## ##       ##     ##  ##   ##  ##       ##
     ######    ##  ########  ######   ########  #########  ######  ######
     ##        ##  ##    ##  ##       ##     ## ##     ##       ## ##
     ##       #### ##     ## ######## ########  ##     ##  ######  ########

You're about to initialize a Firebase project in this directory:

  /Users/xxx/workspace/admin

? Which Firebase CLI features do you want to set up for this folder? Press Space to select features, then Enter to confirm your choices. Hosting: Configure and
 deploy Firebase Hosting sites

=== Project Setup

First, let's associate this project directory with a Firebase project.
You can create multiple project aliases by running firebase use --add, 
but for now we'll just set up a default project.

? Please select an option: Use an existing project
? Select a default Firebase project for this directory: zzz
i  Using project zzz

=== Hosting Setup

Your public directory is the folder (relative to your project directory) that
will contain Hosting assets to be uploaded with firebase deploy. If you
have a build process for your assets, use your build's output directory.

? What do you want to use as your public directory? build
? Configure as a single-page app (rewrite all urls to /index.html)? Yes
? Set up automatic builds and deploys with GitHub? No
? File build/index.html already exists. Overwrite? No
i  Skipping write of build/index.html

i  Writing configuration info to firebase.json...
i  Writing project information to .firebaserc...

✔  Firebase initialization complete!

```
ReactNativeアプリをApple storeへの公開する作業メモ[iOS]


手順は以下参考。それを実行したときの備忘録。

【2020年度版】 iOSアプリをApp Storeに公開する手順を簡潔に解説
https://qiita.com/Labi/items/3b71b8f5ef065904c1de


【プロダクトページ】スクリーンショットのサイズなどはこちらから
https://developer.apple.com/jp/app-store/product-page/



＃＃＃ アイコン作成
自分でsketchで作成して、以下で色なサイズを作成
https://appicon.co/


### スクリーンショット作成
https://help.apple.com/app-store-connect/#/devd274dd925
自分でsketchで作成。はめ込んだようにするならiphone, ipad本体の画像は自分で適当に切り抜きして作成。
どこかで配布されてそうな気はするけど..
iPhoneとiPadでスクリーンショットをそれぞれ取ればiPhone同士、iPad同士は中身は同じでOK

- iPhone用(5.5) 1242x2208 
- iPhone用(6.5) 1284x2778  
- iPad用(pro12.9 第２世代) 2048x2732  
- iPad用(Pro12.9 第3世代) 同上


### プライバシーポリシーの作成
既存のアプリやwebで探して、似たようなものを作ってgithub pageで公開した。あまり正解がわからない...

### サポート用のURL
TwitterアカウントのURLを設定


### APpIDの作成〜証明書〜プロビジョニングファイル作成

ここはやること多いけど、手順どおりでOK

### アプリ情報の登録

必要に応じて入力していくが、広告を入れているのでポリシーの設定がたくさん必要で手間。
正しく出来ているかもちょっと不安になる..


### 公開用buildファイルの作成とアップロード

buildファイルはXcodeで生成して、そのままXcode側からアップロードすると、登録画面で選択できるようになる。

buildで以下のエラー

```
main.jsbundle does not exist. This must be a bug with
```
以下では解決せず、
https://github.com/facebook/react-native/issues/29351#issuecomment-657929014
https://www.366service.com/jp/qa/900fec3c89ae3a9131d75577ea3a45ae


以下の対応で解決しました
https://qiita.com/yonjyugo/items/52302b8973d182ec0bde


```
Error: EMFILE: too many open files, watch
    at FSEvent.FSWatcher._handle.onchange (internal/fs/watchers.js:123:28
```
以下で解決
https://flaviocopes.com/react-native-emfile-too-many-open-files/


### 審査

審査申し込みして待ち。
自分はスクリーンショット修正の１回だけで無事公開された。
ずっとFPGA初心者（その２：状態を覚える）

# その２
最初は続くかどうか心配していたが、めでたくその２を迎える。今後、[その１](https://qiita.com/infinite1oop/items/4b0f03b97ed859fbd954)の内容から、初心者レベルで、少しずつトライ＆アレンジしてみたい。なお、その２以降、用いるボードおよび開発環境は、すべてその１と同じである。

## 状態を覚えておく
今回のお題は、回路内で状態を覚えておくというもの。

## ソフトウェアエンジニアには馴染みがないところ
FPGAのHDL（言語）には、同時に処理を行うものと順番に処理を行うものとがある。後者については、VHDLでは、Process文というのものを使う。これらについては、[このサイト](http://www7b.biglobe.ne.jp/~yizawa/VHDL/process.htm)などに説明があり、同時処理文、順次処理文などと呼ばれるらしい。

## 例題
ボタンを押したらLEDが点灯し、再度ボタンを押したら消灯するもの。

### コード
上記を実現するVHDLのコードは次のようなものとなる。

```vhdl:BtnLedOnOff.vhd
library ieee;
use ieee.std_logic_1164.all;

entity BtnLedOnOff is
	port (
		BTN:	in std_logic;
		LED: 	out std_logic);
end BtnLedOnOff;

architecture RTL of BtnLedOnOff is
signal LedFlag: std_logic := '1'; -- 1:消灯 0:点灯
	
begin -- 実コードはじまり	
	process (BTN) -- ① ここから
	begin
		if (BTN='0') then
			LedFlag <= not LedFlag;
		end if;
	end process;  -- ① ここまで
	
	LED <= LedFlag; -- ②
	
	-- #1 and #2 go at the same time.
end RTL; -- 実コードおわり

```
コードのはじまりからおわり（「begin」から「end RTL」）において、①と②とは同時に処理され（同時処理文）、①内は順番に処理される（順次処理文）。①では、「Process」の次のカッコ内の信号が変化した時に、①内の処理が順番の処理される。カッコ内の信号を「センシティビティリスト」と呼ぶ。

ボタンが押された時（負論理：押下は'0'）に、内部信号であるLedFlagを反転させる。いわば、LedFlagがStaticな状態変数のようなものとなる。（シロートなのでこの説明の仕方が適切か不明であるが。）


ちなみに、下記コード

```vhdl
-- これはNGです
	process (BTN)
	begin
		if (BTN='0') then
			LED <= not LED;
		end if;
	end process; 
```
は、Quartusの「Start Analysis & Elaboration」でエラーが発生し、Buildできず。Quartusのエラーメッセージは下記のようなもの。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/991110c4-983b-5e8f-84a9-01143fab4a2c.png", width=200%>
"Error (10309): VHDL Interface Declaration error in BtnLedOnOff.vhd(18): interface object "LED" of mode out cannot be read. Change object mode to buffer."というエラーである。直接信号を変化させることができないのであろうか？？　（勉強不足状態）

なお、実動作（写真など）は自明なので省略。

## 最後に
ソフト屋には、まだ馴染めない。
Setting default values of kwargs and inherit it

### Setting a default value for `kwargs`

```python
kwargs.setdefault('var', True)
```


### Using for loop can set multiple default values.

```python
for key, val in {'var1': 1, 'var2': 2}.items():
    kwargs.setdefault(key, val)
```


### `kwargs` attribute

```python
class foo:
    def __init__(self, **kwargs):
        kwargs.setdefault('var1', 1)
        self.kwargs = kwargs

    def print(self):
        print(self.kwargs['var1']


a = foo()
a.print()

# 1
```


### Inherit `kwargs`

```python
class foo2(foo):
    def __init__(self, **kwargs):
        kwargs.setdefault('var1', 2)
        super().__init__(**kwargs)
        
    def print(self):
        print(self.kwargs['var1'])

a2 = foo2()
a2.print()

# 2
```

The new default value has to be set before initiating super class, otherwise the parent default value will be used.

```python
a2 = foo2(var1=3)
a2.print()

# 3
```
propsについて

##propsとは
propertiesの略であり、その意味のpropertyの集まりです。
親コンポーネントから子コンポーネントに値を渡す際に自動的に格納される入れ物のようなものとイメージしてください。
コンポーネントに関しての説明は、[こちら](https://qiita.com/kunrenyouAcount/items/27cbcb4d91904baa2aba)の記事を参照してください。

実際の利用の仕方としては下記のような使い方がされると思ってください。
![propsについて](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1066052/f14e8f46-062b-301c-0d22-f387d8514f23.jpeg)
stateの使い方について[こちら]()を参照してください。

この図を見ていただくと、親コンポーネントではpropsといった言葉が登場していません。またそれに当たるようなものに変数を格納しているような箇所も見当たりません。ですが、子コンポーネントでその値を利用するときにはpropsに格納されているものを取り出すといった記述が必要になります。

ただし、親コンポーネントから子コンポーネントに渡される値を利用するときに毎回「props.key」や「props.parent」など「props.」と記述する手間を省くような記述の仕方も存在します。
子コンポーネント側の記述を以下のように書き換えれば、省略して利用することができます。

```react
const child = ({parent, key}) => {
   return (
       <div>
　　　 　　　<p>parent</p>
　　　　 　　<p>key</p>
       </div>
   )
}
```

####関連
- [Reactについて](https://qiita.com/kunrenyouAcount/items/27cbcb4d91904baa2aba)
- [Routerについて](https://qiita.com/kunrenyouAcount/items/3eb7c8491af40bd8442c)
Packerでitamae(HCL2)

```
build {
  sources = ...

  provisioner "shell-local" {
    inline = [
      "echo '${build.SSHPrivateKey}' > /tmp/packer-session.pem",
      "bundle",
      "bundle exec itamae ssh -u ${build.User} -h ${build.Host} -i /tmp/packer-session.pem recipe.rb"
    ]
  }
}

```

bundle installしないといけないっぽい

その他: Port, User, Password, SSHPrivateKeyもbuildから取得できる
https://www.packer.io/docs/templates/engine
[Go] リクエスト内容によって、レスポンスを JSON か XML か切り替える


## コード

リクエストの際に、`Content-Type: application/xml` の時は XML を返し、それ以外では JSON を返す方法になります。

```go
package main

import (
	"encoding/json"
	"encoding/xml"
	"net/http"
)

type User struct {
	XMLName xml.Name `json:"-" xml:"user"`
	Name    string   `json:"name" xml:"name"`
	Age     int      `json:"age" xml:"age"`
}

func getUsers(w http.ResponseWriter, r *http.Request) {

	data := []User{
		User{Name: "田中", Age: 25},
		User{Name: "加藤", Age: 30},
	}

	if r.Header.Get("Content-Type") == "application/xml" {
		w.Header().Add("Content-Type", "application/xml")
		xm.NewEncoder(w).Encode(&data)
	} else {
		w.Header().Add("Content-Type", "application/json")
		json.NewEncoder(w).Encode(&data)
	}
}

func main() {
	http.HandleFunc("/", getUsers)
	http.ListenAndServe(":8080", nil)
}
```

## ポイント
2 点ほど、知っておいた方が良いポイントがあります。

### JSON では使わないけど、XML で使いたい要素
XML では `<User>` タグが表示されます。
こちらも小文字で使いたいけど、JSON で表示されないので、無視したいです。
この場合、下記のような書き方をします。

```go
XMLName xml.Name `json:"-" xml:"user"`
```
のように、`json:"-"` とすることで、JSON 出力の場合、この要素を無視することができます。

### NewEncoder vs Marshal
どちらでも同じ結果がになりますが、書く行数が少ない & 処理の早い Encoder がおススメです。

```go
// Encoder を使うの場合
xml.NewEncoder(w).Encode(&data)
```

こちらが `Marchal` を使う場合になります。

```go
// Marshal を使う場合
output, _ := xml.Marshal(&data)
w.Write(output)
```
Reactについて

##Reactとは

Reactとは、FaceBook社が開発したWebサイト上のUIパーツを構築するための「JavaScriptライブラリ」です。
　しばしば三大フレームとして「 Angular」や「Vue.js」と比較されることがありますが、**Reactは「フレームワーク」ではなく「ライブラリ」です。**

>`React はユーザインターフェースを作成する為の JavaScript のライブラリです。`
参照：[React公式サイト](https://ja.reactjs.org/docs/getting-started.html)

　
>`Angularは、テンプレートを現在のJavaScript仮想マシン向けに高度に最適化されたコードに変換し、手書きコードのすべての利点をフレームワークの生産性で実現します。`
参照：[Angular公式サイト](https://angular.jp/features)

　
>`Vue (発音は / v j u ː / 、 view と同様）はユーザーインターフェイスを構築するためのプログレッシブフレームワークです。`
参照：[Vue.js公式サイト](https://jp.vuejs.org/v2/guide/)

ではフレームワークとライブラリでは何が違うかと言うと、自由度が違います。自由度が高い方がライブラリ、低い方がフレームワークと呼ばれるものになります。
一見すると自由度が高いことは良いことのように感じますが、複数人で開発する場合などある程度のルールがあらかじめ決まっていた方が開発する人によっての個人差が少なくすみ可読性が上がります。
もちろん自由度が高いことがメリットになる場合もあります。ある程度のルールが最初から決まっている場合にはその型にはまったものしか作ることができません。

詳しくは
[こちら](https://qiita.com/baby-degu/items/7dc4548bf7befc2671f4)の記事がわかりやすくまとまっています。


##Reactを使うメリット３つ

####値の管理がしやすい
Reactには「State」と言うデータの変更を検知し、関連するコンポーネントだけを効率的に更新、再描画する機能が実装されています。処理速度が速くなり、記述量が減るのでコードが見やすくなります。

####部品化することでの再利用性
「コンポーネント」と言う部品として機能と表示をまとめて扱えるため、一度開発したコンポーネントについては他のアプリケーションなどにも簡単に実装することができます。

####環境に依存しない汎用性の高さ
Reactでは開発の途中からでもReactの技術を使うことができるように、既存のコードを書き換える必要なしで導入できます。またReactNativeを使うことでモバイルアプリケーションにも対応できます。

####関連
- [propsについて](https://qiita.com/kunrenyouAcount/items/317ed50ca358b593041b)
- [Routerについて](https://qiita.com/kunrenyouAcount/items/3eb7c8491af40bd8442c)
Auto Encoderを用いた異常検知 PART1 （はじめに）

# この本について
**Auto Encoderを用いた異常検知を行います。**
工場のネジの不良品検知やコンクリートのひび割れ検知に応用できる、異常検知について紹介します。

![コンクリひび割れ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1053943/14d43a2f-0294-b259-62d8-2039da705f0c.jpeg)


# 実行環境
OS:macOS 10.15.7
開発環境:Nova(Python対応テキストエディタならOK)
パッケージのinstall:Anaconda 4.9.2
Python:3.8.3

# 必要なパッケージ
Pytorchやsklearnなどはインストールが必要なので、pipやcondaなどで適宜インストールしてください。
**本書では、以下のライブラリがインストールされているとして話を進めていきます。**

```python
import torch
import torch.utils.data
import torch.nn as nn
import numpy as np
import torch.nn.functional as F
from sklearn.model_selection import train_test_split
import pickle
from sklearn import svm
from sklearn.metrics import accuracy_score
```

# お問い合わせ
内容に関する質問は

mailto:deepblack.inc@gmail.com

までお願いします。
DockerでLaravelインストール直後にエラー

初記事です。  
DockerでLaravel8をインストールし、Welcomeページを開こうとしたら下記のエラーが。。
![スクリーンショット 2021-01-30 032953.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493983/c73ca3ee-0771-3b0f-b924-bb54721633f8.png)

パーミッションが足りないようで、アクセスが拒否されています。
権限を与えてやればいいわけですね。コンテナ内で以下のコマンドを叩きました。

```bash
$ chown www-data storage/ -R 
```

**結果** 
![スクリーンショット 2021-01-30 033115.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493983/080a1732-c7a1-a107-f2f7-4858cf29df91.png)  

参考になった記事
[DockerでLaravelを入れているとPermissionDeniedエラーが出た](https://qiita.com/Usuyuki/items/b235a23d516a8d6dedc6)
AntilatencyをUE4で動作させる。(Antilatency) (UE4)

*過去の記事はこちら↓*

○[Antilatencyというトラッカーについて](https://qiita.com/SotaroAbe/items/ab1bd54a62c5f7384ece)
○[Antilatencyのセットアップ](https://qiita.com/SotaroAbe/items/b1978094321279a84167)

---
前回の続きより、セットアップができたところでいよいよantilatencyを動作させます。

公式の動画等を見る限りだと、OculusQuestやVIVEのHMDと組み合わせた使い方を推奨している様ですが、
今回は**UnrealEngine4**を使って、レベルの中でトラッキングを実装してみたいと思います。

<font color="grey">*＊ UE4に対応した情報がとにかく無かった為、正しい動作の仕方である保証は出来ません。
もし別の方法を知っている方がいたら、是非共有していただきたいです…。*</font>

##SDKのインストール
![スクリーンショット 2021-01-29 11.41.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939279/2bcf18b9-3318-8cab-ed98-395348c46d9b.png)

公式からSDKがリリースされているので、[こちら](https://antilatency.com/getting-started/latest/sdk#content)からダウンロードします。
内容は以下の通りです。

**○AntilatencySDK
 ┣ Native - ネット、C++、Android用のネイティブライブラリとサンプル
 ┣ Unity - Unityパッケージファイル
 ┗ Unreal Engine - UE対応のプラグイン**

UnrealEngineフォルダの中にあるpluginsをUE4のディレクトリにコピペして使います。
現在対応しているverは4.18.3〜4.25.4です。

そしてプロジェクトを作成し、Editからpluginsを開いて"AntilatencyTrackingPlugin"が表示されていることを確認したら、Enabledにチェックを入れてリスタートしましょう。
![ss.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939279/7fc0c973-0e17-78c7-488a-aefc4ac3696e.jpeg)

##プラグインを使う
インストールが完了すると、コンテンツブラウザにAntilatencyと名の付く2つのフォルダが表示されました。
テクスチャからスクリプトまで色んなものが用意されていますが、
今回はあくまで*レベル内でトラッカーを動かす*ための機能のご紹介になります。
<font color="grey">＊前述の通り、正しい使用方法である保証はありません。

___

AntilatencyTrackingContentから、Blueprints>Sample>Actorsを開きます。
![スクリーンショット (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939279/2be25859-37d8-c511-3e04-76b7a8b3a774.png)
この中にある、**BP_DeviceManager**というアクターを使います。
ダブルクリックして、ブループリントを開きましょう。
![スクリーンショット (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939279/ab7f7534-8457-f854-7b79-4cc582d46df4.png)
ノードを見る限り、このBPがデバイスのネットワークを設定してくれるみたいです。
ですが、これをそのまま置いてもトラッカーは動きません。
動作させるには、コンポーネントを追加する必要があります。

![スクリーンショット 2021-01-30 2.54.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939279/66ec586f-7c0b-9c78-a9fc-0c8183f1d28e.png)
viewportを開き、画面左上のAddComponentから**"BP_Alt Tracker"**を追加しましょう。
このコンポーネントのトランスフォームが、Altから取得したトラッキング情報と連動します。
![スクリーンショット 2021-01-30 2.55.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939279/57e1b701-b624-c708-08d2-ab008797c175.png)
その下にメッシュを置けば、レベル上で視認できる様になります。

---
次に使うのが、AntilatencyTrackingContentのSampleにある
**"BP_AltEnvironmentWithMarkers"**というアクターです。
これをレベルに配置すると、AntilatencyServiceアプリで設定したマーカーのレイアウトを再現してくれます。
（[AntilatencyServiceアプリの設定方法](https://qiita.com/SotaroAbe/items/b1978094321279a84167)）
レベル配置後にServiceアプリからレイアウトを変更しても、連動して反映されます。
(フロアマットと同じサイズの床を作成しておくと、より分かりやすくなります。)

---
以上のものがレベル上に揃ったら、実行してみてください。
画面左上に、接続したデバイスの名前が赤文字で表示されたら、認識された証拠です。
その状態でALTを動かして、トラッキングが出来ているか確認しましょう。
<font color="red">＊注意：この時、SteamVR等、他のVRゲームが起動されていると、うまく動作しないかもしれません。
プロジェクトを開いた時にSteamVRが自動起動する場合は、pluginから"SteamVR"のEnabledを外す事で解決する場合があります。