OmniAICreator/Qiita-1.07M huggingface dataset:
出来るだけ最小限でdocker-compose、nginx、phpの環境を作成してみた

**私は初心者です。間違っていたりもっと良いやり方がありましたら教えていただけるとありがたいです**

参考

- [Docker + Nginx + PHP-FPM なら40秒くらいで環境を準備できる docker-compose が楽しくなってきました。 - Qiita](https://qiita.com/mochizukikotaro/items/b398076cb57492980447)
- [Docker Composeを使ってnginxとPHP-FPMでPHPの実行環境を構築する - あとらすの備忘録](https://kitigai.hatenablog.com/entry/2019/05/01/024341)

こちらのリンクにコードを置きました

<a href="https://github.com/okumurakengo/docker-nginx-php"><img src="https://github-link-card.s3.ap-northeast-1.amazonaws.com/okumurakengo/docker-nginx-php.png" width="460px"></a>


```docker-compose.yml
version: "3"

services:
  web:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
      - ./myapp:/var/www/html
    depends_on:
      - php

  php:
    image: php:7-fpm
    volumes:
      - ./myapp:/var/www/html
```

phpのサービスだけで、`/var/www/html` にファイルをマウントしたら良いかと思ったのですが、htmlが表示されず(ファイルがなくて404になる)webのサービスの方でも`/var/www/html`マウントしました

```nginx:default.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;
    root /var/www/html;

    location / {
        index  index.php index.html;
    }

    location ~ \.php$ {
       fastcgi_pass   php:9000;
       fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
       include        fastcgi_params;
    }
}
```

```myapp/index.php
<?php
phpinfo();
```

```shell
docker compose up -d
```

<img width="1142" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142910/ef4ec40e-422f-3555-7094-430d82dfc885.png">

以上です。m(_ _)m
パスワードリセットのシステムテストをしていたら、Rails Missing host to link to! のエラーがおでましになった

#前提

・ruby 2.6.3
・Rails 6.0.3.1
・rspec-rails (3.9.1)

#Rails Missing host to link to!

Rspecでパスワードリセットのsystem specを書いていたら

```
 ArgumentError:
            Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
```

上記のエラーが出ました。


**ホストがないのでhostパラメータを指定するか、default_url_options [：host]を設定して！！**

とのことでした。

確認URLを渡すメールが送れない状態みたいです。

自分は、**default_url_options [：host]**を設定することにしました。

```config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost:3000' }
```
開発環境には、設定してあるがテスト環境には確かに記述なし。

ので、テスト環境にも付け足す。

```config/environments/test.rb
config.action_mailer.default_url_options = { host: 'localhost:3000' }
```

ちなみに、本番環境にデプロイしたも上記のようなエラーが出流みたいなので、本番環境にも付け足しとく。

```config/environments/production.rb
config.action_mailer.default_url_options = { host: 'localhost:3000' }
```

上記設定で、エラー解消されました。

>[Missing host to link to! Please provide the :host parameter](https://easyramble.com/missing-host-to-link-to.html)
[RailsでMissing host to link to!が出たときに。model内でURL組み立てる場合の設定](https://qiita.com/daik/items/41a9bc8dec5ccec37f40)
【Unity】2019.4 Android実機でTextureが透過してしまう

## Unityバージョン
2019.4.2f1

## 症状
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237014/5c1b6a3c-6a6e-0c3b-bcd5-23af8e03dd22.png)

## 解決方法
Render Over Native UI のチェックを外す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237014/a6aa07ec-a14a-0463-fb11-b3fced676f24.png)
文字数が多い時に最後に出す「...」をJSでパパッと作る。

今回は、webサイトでよく見る
「サンプルテキストです。サンプルテキストです。サンプルテキ...」の
「...」を関数で出力する方法を紹介。


DEMOはこちら。
<p class="codepen" data-height="265" data-theme-id="light" data-default-tab="js,result" data-user="bo_chan6130" data-slug-hash="pogaWpj" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="pogaWpj">
  <span>See the Pen <a href="https://codepen.io/bo_chan6130/pen/pogaWpj">
  pogaWpj</a> by 坊 拓磨 (<a href="https://codepen.io/bo_chan6130">@bo_chan6130</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

##準備
HTML
JavaScript

##できること
・ある文字数を超えると、末尾に「...」が出る。
・超えなかったら超えない範囲の文字をそのまま出力。


##実装

```html:index.html
   <p id="hoge">サンプルテキストです。サンプルテキストです。</p>
```


```javascript:index.js
    var selectId = document.getElementById("hoge")
    var string = selectId.textContent.replace(/\s+/g,'');

    function truncate(str, len){
        return str.length <= len ? str: (str.substr(0, len)+"...");
      };
    selectId.innerHTML = truncate(string, 5);

```

ポイント
①任意のidを持ったタグの文章を変数stringにいれる。この際、文字列の中の不要な空白を削除したいので```replace(/\s+/g,'')```を記述。
②真ん中の```function truncate(str,len)```で出力の最大値を調整できるように関数を作成。
③最後、①を②の制限数分だけinnerHTMLで書き換え。


##まとめ
cssで擬似要素使う(こっちだとタグ出力範囲での制限だけでちょい使いづらい)よりもこっちの方が早かったので、
もし使いたい方はコピペドゾー。
3分間ネットワーク備忘録 第６回

## 概要
引き続き[３分間ネットワーク]()について、
学習の備忘録を書いていきます。


今回は、
- [第１３回](http://www5e.biglobe.ne.jp/aji/3min/13.html)
- [第１４回](http://www5e.biglobe.ne.jp/aji/3min/14.html)
- [第１５回](http://www5e.biglobe.ne.jp/aji/3min/15.html)


### 振り返り
前回の[第１２回](http://www5e.biglobe.ne.jp/aji/3min/12.html)で、
レイヤ２であるデータリンク層についての解説が始まりました。

今回からは、その時出てきたLAN規格の

- `イーサネット`
- `IEEE802.2`
- `IEEE802.5`
- `FDDI`

らの違いについて解説しています。
各規格が使っている方式については
[第１２回](http://www5e.biglobe.ne.jp/aji/3min/12.html)　の表12-03
に纏めてあるのでご覧ください。



### MACアドレス
データ転送の際に、レイヤ２は`物理アドレス`というものを逐次変更しながらデータをやり取りしていきます。
また、後から出てきますが、宛先となっているのはレイヤ３で扱われている`論理アドレス`というものです。

`物理アドレス`は、パソコンの`NIC`の`ROM`という不揮発性のメモリに焼き付けられている、
`４８ビット`のIDであり、
前半２４ビットはベンダのコード、後半の２４ビットはベンダがつけた識別IDとなっています。


### イーサネット

`イーサネット`は、`同軸ケーブル`、`CSMA/CD　アクセス制御方式`、
そして`バス型、スター型`の物理トポロジを使う規格のことです。

ここで出てくる`CSMA/CD　アクセス制御方式`について
[第１４回](http://www5e.biglobe.ne.jp/aji/3min/14.html)では主に解説してあります。
簡単にいうと、

伝送路に誰かのデータが流れていないかを`衝突カウンタ`（`CD`）を使って判断し、
もし衝突してしまったらもう一回送る。
もし誰のデータも伝送路になければ少し待ってから送信（`MA`）
する。
このとき、データの転送は宛先の`物理アドレス`にかかわらずとりあえずみんなに送りつける、
という`ブロードキャスト型`を使用します。
したがって、同軸ケーブルの伝送路は１つしかないため、誰かが送っている間はシンプルに待つ必要があるわけです。


この`シンプルさ`が故に、制御に複雑な機器が必要ではないので、
`安価に`ネットワークが構築できたため、それが普及の理由となったと解説されています。
しかしながら、その`シンプルさ故の欠点`として、`エラーフレームが問答無用で破棄される`ということが挙げられます。
さらに、受信側でエラーを修正もしないので、`ベストエフォート型`配送と呼ばれます。



もし同軸ケーブルを使わずに、例えば`光ファイバ`や`ツイストペアケーブル`を
使うとすれば、同軸ケーブルのような`半二重通信方式`（トランシーバを想像するとわかりやすい）ではなく、
`全二重通信`が可能となります。



### まとめ

イーサネットは`ベストエフォート型`配送を行う`CSMA/CD　アクセス制御方式`を使って、
同軸ケーブルを用いて`安価に`LANを’提供する物だった。

現在は`ツイストペアケーブル`を使用することが`主流`となっているようで、
その回線速度によって

- `ファストイーサネット`
- `ギガビット・イーサネット`

などがある。


今回はこの辺で。

終わり。
SSE2 _mm_min_ps, _mm_max_ps を ARM NEON で実装するメモ

## 背景

* _mm_min_ps, _mm_max_ps を使っているコードを, ARM NEON に移植したい
* グラフィック関係なので, NaN, -0.0, 0.0 などの振る舞いをきちんと扱う必要がある.

SSE2 の minps, maxps と, NEON の vminq_f32, vmaxq_f32(ARMv7 NEON からある) および vminnmq_f32, vnmaxnmq_f32(ARMv8 で利用可能) には互換性がありません.

## 情報

https://tavianator.com/fast-branchless-raybounding-box-intersections-part-2-nans/

## minps, maxps

IEEE754-2008 相当(?)です.

https://www.felixcloutier.com/x86/minps

両方 `0.0`(符号は問わない)の場合は, 第二ソースを返す.
第一ソースが NaN(quet, signaling) だと第二ソースを返す.
第二ソースが sNaN の場合, sNaN を返す.
(第二ソースが qNaN の場合, qNaN を返す)

それ以外: min(a, b)


## ARM NEON

arm neon の vminq_f32, vmaxq_f32 は, どちらかが NaN だと NaN を返す.

vminnmq_f32, vmaxnmq_f32 だと, どちらかが NaN だと他方のソースを返すが, signaling NaN の場合は sNaN を返す.

`-0.0`, `0.0` については, 小さい(大きい)ほうを返す. つまり vmin の場合は `-0.0` を返す.

`-0.0`, `0.0` の判定と, `NaN` の判定を両方うまくやるのは難しい感じです.
とりあえず以下のようになりました.

https://gist.github.com/syoyo/8e980a1c04f4253894d32da25d68bad4

## Max

同様にして, _mm_max_ps を実装します.

## その他

SSE2 minps,maxps は, コンパイラなどで対応するときによかったですが,
最近ですと, あまりこの振る舞いは推奨されず, 今後の仕様(IEEE-754 201x?)からは削除(ふるまいが変わる)されました.

http://grouper.ieee.org/groups/msc/ANSI_IEEE-Std-754-2019/background/minNum_maxNum_Removal_Demotion_v3.pdf

本来ですと, _mm_min_ps, _mm_max_ps を使っているコードを書きなおすのが望まれます.
(AVX あたりに新しい仕様にしたがった min/max 実装があったような?)
macOSでhomebrewを使ってGitのバージョンを最新化する方法

## 前提条件
OSバージョン: macOS Mojave Version 10.14.6
homebrewがインストール済みであること

## 手順

### 1. リリースされているGitの最新バージョンを確認

Git公式サイト
https://git-scm.com/
<img width="347" alt="Screen Shot 2020-07-05 at 21.23.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668194/4cebd88b-5c0b-ba9e-0446-49c38f5467db.png">


### 2. 自分のmacOSに入っているGitのバージョンを確認
```
$　git --version
git version 2.xx.x 
```
ここで入れたはずのパッケージのバージョンになっていない場合、パスが通っていない可能性あり。


### 3. homebrewでインストールされたGitパッケージの場所を探す
```
$　brew --prefix git
/usr/local/opt/git
```
このディレクトリを見ると、コマンドのバイナリ自体は以下にあることがわかるので
/usr/local/opt/git/bin --- ※


### 4. homeディレクトリにある.bash_profileに以下を追加
gitのパスを通します。
viで開いて※をパスに追加し上書き保存。

```
export PATH=/usr/local/opt/git/bin:$PATH
```

ターミナルを再起動して、バージョンを再確認。

```
$　git --version
git version 2.27.0 
```


おわり。
Kiwi TCMSをお試しする環境作成

[Kiwi TCMS](https://kiwitcms.org/)は、オープンソースのテスト管理システムです。
ちょっと試して見ようと思い [^1] 、動くところまでやったので手順のまとめです。

**（更新）**日本語入力時にエラーになるケースの対応が抜けていたので追加しました。[^2]

### 環境

* Windows 10 Pro 2004
* Ubuntu 20.04 on WSL2
* Docker version 19.03.12

### 手順

[ここに書いている](https://kiwitcms.readthedocs.io/en/latest/installing_docker.html)内容に沿って、以下の感じで進めていきます。

```bash
$ docker pull kiwitcms/kiwi
<snip>
$ curl -O https://raw.githubusercontent.com/kiwitcms/Kiwi/master/docker-compose.yml
<snip>
$ curl -O https://raw.githubusercontent.com/kiwitcms/Kiwi/master/99-charset.cnf
<snip>
$ curl -O https://raw.githubusercontent.com/kiwitcms/Kiwi/master/99-charset.sh
<snip>
$ docker-compose up -d
Creating network "dev_default" with the default driver
Creating volume "dev_db_data" with default driver
Creating volume "dev_uploads" with default driver
Creating kiwi_db ... done
Creating kiwi_web ... done
$ docker exec -it kiwi_web /Kiwi/manage.py migrate
Operations to perform:
  Apply all migrations: admin, attachments, auth, bugs, contenttypes, core, django_comments, kiwi_auth, linkreference, management, sessions, sites, testcases, testplans, testruns
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
<snip>
$ docker exec -it kiwi_web /Kiwi/manage.py createsuperuser
Username: test
Email address: test@example.com
Password:
Password (again):
Superuser created successfully.
$ docker exec -it kiwi_web /Kiwi/manage.py set_domain localhost
Domain updated successfully.
```

ここまでやったら、ブラウザから **https://localhost** に接続すると以下のような画面が開きます。
上のコマンドで作成したユーザーとパスワードでログインできます。
![opening.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30716/65fa1c89-807b-f08d-a9af-be07756b3ed0.png)

ログインするとこんな感じ。
![login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30716/820ff721-0562-88d7-9771-3102b519f4c7.png)


### おまけ

[トラブルシューティング](https://kiwitcms.readthedocs.io/en/latest/installing_docker.html#troubleshooting)として、デバッグモードでトレースバックを表示するようにする方法も書いてあります。
docker-compose.ymlと同じ階層に、**debug.py**などとしてファイルを作成します。

```python
# -*- coding: utf-8 -*-

DEBUG = True
```

その後、docker-compose.ymlのweb側に以下のように書き加えて再起動します。

```patch
        volumes:
            - uploads:/Kiwi/uploads:Z
+           - ./debug.py:/venv/lib64/python3.6/site-packages/tcms_settings_dir/debug.py
```

これでエラーが発生した際は、トレースバックが表示されるようになります。


[^1]: 実際に試すのはこれから。
[^2]: 手順で99-charset.cnfと99-charset.shをダウンロードするようにしています。[参考](https://github.com/kiwitcms/Kiwi/issues/1700)
Excel VBAを使用して色変換する

#やりたいこと
ExcelのセルにYUVの値を入力したら視覚的に表示したい

#仕様
・YUVのセルを用意
・セルに値を入力すると別のセルにRGB値が計算される
・計算式は以下を使用する
> R= 1.164*Y + 000000 + 1.596*V - 222.912
> G= 1.164*Y - 0.391*U - 0.813*V + 135.488
> B= 1.164*Y + 2.018*U + 000000 - 276.928

・ボタンを配置してボタンを押すとVBAでセルに色を表示する

```ColorConvert.xlsm
Sub ボタン1_Click()
    Range("D5").Interior.Color = RGB(Range("C5").Value, Range("C6").Value, Range("C7").Value)
    Range("D9").Interior.Color = RGB(Range("F9").Value, Range("F10").Value, Range("F11").Value)
End Sub
```
ffmpegのamixで音が小さくなった時の対処法

## amix使って音声マージしたらなんか音小さいんだけど。。
はい。やらかしました。ffmpegを使う機会があり、音周りロジックの修正をしたのですが、なんかもともとあったやつより音小さくなってました。。
自戒の意を込めて記事として残します。

## やりたかったこと
複数の音声素材を`filter_complex`でいじり、最終的にマージして１つのファイルにしたかった。

## どうやったか
```
ffmpeg -i a.mp3 -i b.mp3 -i c.mp3 \
-filter_complex " \
[0:a]~~[0a] \
[1:a]~~[1a] \
[2:a]~~[2a] \
[0a][1a][2a]amix=inputs=3[a] \
" -map "[a]" output.mp3
```
これで一応音声はマージできていたのですが、なんか音が小さい。
既存のロジックはamerge使っていました。それと比べると音量が半分くらいになってる。

## 原因
調べた限りだと、amixはinputsの数に応じて音量を`1/n`しているようだった。
ただこれリファレンスに乗ってたわけじゃないから確たる証拠が無い。

## 対応
対応方法は自分の中で２つあった
### 1.amergeを使う
採用したのはこっちの案。
もともとamergeを使ってたのだから戻せばよいのだ。
しかし、今回の改修の影響でinputされる音声ファイルの量が増えたため、既存ロジックのままだとinput channel多すぎエラーが出る。

`Input channel layout '40 channels (FL+FR+FC+LFE+BL+BR+FLC+FRC+BC+SL+SR+TC+TFL+TFC+TFR+TBL+TBC+TBR+DL+DR+WL+WR+SDL+SDR+LFE2)' is not supported
`

その辺を考慮しながら修正してこんな感じにした。

```
ffmpeg -i a.mp3 -i b.mp3 -i c.mp3 \
-filter_complex " \
[0:a]~~,channelsplit=channel_layout=stereo[0al][0ar]\
[1:a]~~,channelsplit=channel_layout=stereo[1al][1ar]\
[2:a]~~,channelsplit=channel_layout=stereo[2al][2ar]\
[0al][1al][2al][0ar][1ar][2ar]amerge=inputs=6,pan=stereo|FL=c0+c1+c2|FR=c3+c4+c5[a] \
" -map "[a]" output.mp3

# FL=c0+c1+c2 の = を < にすると自動でノーマライズしてくれる
```



### 2.amix時にvolumeを上げる
volumeが1/nされるなら打ち消すためにn倍volumeを増加させればよい。

```
ffmpeg -i a.mp3 -i b.mp3 -i c.mp3 \
-filter_complex " \
[0:a]~~[0a] \
[1:a]~~[1a] \
[2:a]~~[2a] \
[0a][1a][2a]amix=inputs=3,volume=3[a] \
" -map "[a]" output.mp3
```

## 感想
定量化できないものをテストするのってかなり難しい。
と思ってたらffmpegで音の波形を出力するコマンドがあるらしい。
https://nico-lab.net/create_samples_waves_image_with_ffmpeg/
これ使って波長一致ロジックとか組めばテストの信用性が上がると思う。
Djangoのテスト

# はじめに

ここでは、Djangoにおけるテストについて解説していきます。


# テスト対象

テスト対象は、以下のシンプルなブログ記事一覧ページとします。

```python:project/urls.py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')
]
```

```python:blog/urls.py
from django.urls import path

from . import views

app_name = 'blog'
urlpatterns = [
    path('list/', views.PostList.as_view(), name='post_list')
]
```

```python:blog/models.py
from django.db import models


class Post(models.model):
    title = models.CharField('タイトル', max_length=100)
    body = models.TextField('本文')
    created_at = models.DateTimeField('作成日時', auto_now_add=True)
    updated_at = models.DateTimeField('更新日時', auto_now=True)

    class Meta:
        ordering = ('-created_at')
    
    def __str__(self):
        return self.title
```

```python:blog/views.py
from django.views import generic


class PostList(generic.ListView):
    model = Post
    template_name = 'blog/post_list.html'
```

```html:blog/post_list.html
{% for post in post_list %}
<h1>{{ post.title }}</h1>
<p>{{ post.body }}</p>
{% endfor %}
```


# ファクトリークラスの作成

`factory_boy`を使うと、テスト用のレコードを作成することができます。

```python:blog/tests.py
import factory
from django.utils import timezone

from .models import Post


class PostFactory(factory.django.DjangoModelFactory):
    title = 'Sample post'
    body = 'This is a sample text.'
    created_at = timezone.now()
    updated_at = timezone.now()

    class Meta:
        model = Post
```

ここでは、`Post`モデル用のファクトリークラスとして、`PostFactory`を作成します。
`title`や`text`などのデフォルト値を設定できます。


# テストの作成

```python:blog/tests.py
from django.urls import reverse
from django.test import TestCase


class PostListTests(TestCase):

    def test_get_queryset(self):
        post_1 = PostFactory(
            title='First Post',
            body='This is the first post.'
        )
        post_2 = PostFactory(
            title='Second Post',
            body='This is the second post.'
        )
        res = self.client.get(reverse('blog:post_list'))
        self.assertTemplateUsed(res, 'blog/post_list.html')
        self.assertQuerysetEqual(
            res.context['post_list'],
            ['<Post: Second Post>', '<Post: First Post>']
        )
        self.assertEqual(
            res.context['post_list'][0].body,
            'This is the first post.'
        )
        self.assertEqual(
            res.context['post_list'][1].body,
            'This is the second post.'
        )
```

まず、上で作成した`PostFactory`を用いて、`Post`のレコードを作成します。
そして、記事一覧ページにアクセスした時のレスポンスを変数`res`に格納します。
`res`には、viewで作成されるcontextとして`post_list`が含まれますので、期待通りのquerysetが得られているかを確認します。
また、djangoのテストでは、`views.py`で指定したHTMLテンプレートが使用されているかを確認するために、`assertTemplateUsed`が使えます。


# テストの実行

テストを実行するには、以下のコマンドを入力します。

```bash
$ python manage.py test (blog)
```

最後にアプリケーション名を入れると、指定したアプリケーションでのみテストが実行されます。


# まとめ

ここでは、djangoにおけるテストについて解説しました。
開発が進む中でバグを防止するためにもテストは重要です。
【Rails】seedの作り方について

#目的
seedを勉強して学んだことをアウトプットしていきます！これからseedを学ぶ方にも参考になればいいなと思います。

#seedとは
seedファイルというのは初期データのことです。　　
例えば、開発中にデータベースをリセットした場合はデータも全て消えてしまいます。
毎回消えてしまうと登録機能がある場合リセットするたびに毎回データを登録をし直す必要が出てきます。　　
すごく面倒ですよね？　
そこで、seedファイルに入れておきたいデータをdb/seeds.rbに記述しておくといちいち作り直さなくて良いってことになります！！！

#基本パターン
これでUserのseedデータが一つ作られます。
 
```
User.create!(email: "test@example.com",password: "password" )
``` 
#複数seedデータを作りたい時
これは基本的なRubyのコマンドを使います！emailが同じものにならない様に引数にnを渡しています。n+1にしている理由は、nのみだと0からデータが始まってしまうからです。

```
10.times do |n|
 User.create!(
   email: "user#{n+1}@example.com",
   password: "password" )
end
```

#関連づけのデータ作成について
例えば、Userとそれに関連したTaskモデルがあったとします。seedデータとしてはUserモデルに関連したTaskを生成するすることにします。そうすると下記の様に記載できます！

```
User.all.each do |user|
 Task.create!(
  user_id: user.id,
  title: "title",
  memo: "memo",
  color: "red",
  start_date: "2020/5/1",
  end_date: "2020/5/30" )
end
```

#CSVファイルの読み込み方について
CSVファイルを読み込むには下記の様に記載します。"db/csv/masters/init_categories.csv"の部分は自分がファイルを置いているところに寄って変わります。

```
CSV.foreach("db/csv/masters/init_categories.csv") do |row|
 @categories = Masters::Category.create!(name: row[0])
end
```

#画像挿入について
今回はサンプル画像をアプリ下に用意していたので、そのやり方を下記に記載します。openメソッドを使用して読み込みます。

```
User.create!(
    image: open("db/images/sample.png"),
    title: "トピック",
    overview: "概要",
    link: "http://origin_job_topic_sample.com" )
```

#ランダムに値を入れたい時
例えば、Userモデルに下記の様に記載されていた時、seedデータを作る時は両方入っているパターンが欲しいですよね？ちなみにenumはuserやadminを数値で格納できる様にしてくれる機能です。

```
enum user_type: {
    user: 0,
    admin: 1,
  }
```
そんな時は下記の様に書くとランダムにデータを作ってくれます！これもRubyの基本的な書き方を使っています！

```
User.create!(
 email: "test@admin.com",
 password: "password",
 status: rand(0..1) )
```


#まとめ
seedも転職前では触った事がなかったのですが、基本的なことは今回で学習できたかなと思います。まだ、学習途中なので新しい知識を得たら随時更新していきたいと思います！！
DOMの基礎

#はじめに
勉強した内容は、DOMに関する内容です。

#DOMとは？
DOM（Document Object Model）とは、階層構造をもったモデルを表します。
JavaScriptでDOMにアクセスして、情報を読み取ったり、書き換えたりすることで、DOMの内容がHTMLに反映されます。
これを「DOMを操作する」と言う。

#DOM操作の一例
1.変化させたい要素を指定する
（例）
document.getElementById('id名')
document.querySelector()
document.querySelectorAll()

2.イベントを指定する
（例）
el.addEventListener(event, callback);
eventの内容は、clickなど
callbackはアロー関数で書く。
() => {}

3.処理を書く
（例）
HTML要素を追加
classを追加

#感想
概念の理解をしていかないとエラーが出て質問したいときにコミュニケーションが捗らないと思うので、Qiitaに記録を残して定期的に振り返りたいと思います。
明日も頑張ります。
数学の基礎

# ライブラリ
- NumPy (ナンパイ) : 数値計算ライブラリ
- scikit-learn (サイキットラーン) : 機械学習全般に強いライブラリ
- SciPy (サイパイ) : 確率統計に強いライブラリ
- seaborn (シーボーン) : グラフを描くためのライブラリ

**線形代数**とは「ベクトルと行列を扱う分野」である
ベクトル : 数値を縦方向に並べる
行列 : 数値を縦横方向に並べる

# 統計学
統計学とは得られているデータから法則性や知見を数学的に得る分野である
機械学習もある意味、統計学の中に含まれている

- **記述統計**
    - 手元のデータの分析を行う
    - 代表値を計算する
    - 傾向を分析する
- **推計統計**
    - 手元のデータの背後にある母集団の性質を予測する
    - 特に機械学習と密接に関わっている
    - データの基礎集計に使われる
        - 選挙速報 (出口調査した有権者=標本、有権者全体=母集団)
        - 視聴率
〔JavaScript〕連想配列の使い方

#連想配列とは
JavaSciptには連想配列というものがあります。

- 連想配列では、1つの変数で<font color="Tomato">複数の「**キー**」と「**値**」</font>を保持できます。
- キーは任意の文字列を使うことができます。
- 各項目を**プロパティ**と呼びます。(キーのことをプロパティとも呼びます)
- 構文は、キーと値を<font color="Tomato">波括弧`{}`</font>でくくります。(項目が複数の場合はカンマで区切ります。)
- 連想配列は**オブジェクトリテラル**または**ハッシュ**とも呼ばれます。
- 配列の`array`オブジェクトを<font color="Tomato">継承していません</font>。(arrayオブジェクトのメソッドやプロパティは使えません)

#宣言の仕方

```javascript
const a = {};
// または
const a = new Object();
// で連想配列を宣言する
```
とすることで宣言することができます。
サンプルを作ってみます。

```javascript
const animals = {a1:"犬",a2:"猫",a3:"鳥"};

console.log(animals["a1"]); // 犬
console.log(animals["a2"]); // 猫
console.log(animals["a3"]); // 鳥
```
####その他の使い方を例で説明していきます。

#項目を追加する方法

```javascript
const animals = {a1:"犬",a2:"猫",a3:"鳥"};
animals["a4"] = "熊";

console.log(animals);//{a1:"犬",a2:"猫",a3:"鳥",a4 :"熊"};
```
4つ目に追加することができました。
#項目を更新する

```javascript
const animals = {a1:"犬",a2:"猫",a3:"鳥"};
animals["a2"] = "猿";

console.log(animals);//{a1:"犬",a2:"猿",a3:"鳥"};
```
既にあるキーの値を更新することができました。

#項目を削除する

```javascript
const animals = {a1:"犬",a2:"猫",a3:"鳥"};
delete animals["a2"];

console.log(animals);//{a1:"犬",a3:"鳥"};
```
配列と同様`delete`を使って削除できます。

#変更を禁止する
`Object.freeze`を使用すると連想配列の<font color="Tomato">**変更を禁止**</font>にできます。

```javascript
const animals = Object.freeze({a1:"犬",a2:"猫",a3:"鳥"});

console.log(animals["a1"]); // 犬
console.log(animals["a2"]); // 猫
console.log(animals["a3"]); // 鳥

animals["a4"] = "熊";
console.log(animals["a4"]);// undefined
console.log(animals);//{a1:"犬",a2:"猫",a3:"鳥"}
```
`Object.freeze`を使用すると配列に追加させようとしても**できていない**ことがわかります。

#数を取得する
`Object.keys(obj)`を使うことでできます。

```javascript

const animals = {a1:"犬",a2:"猫",a3:"鳥"};
console.log(Object.keys(animals).length); // 3
```
`Object.keys`メソッドと`length`プロパティを使用して連想配列の数を取得しています。(キーと値あわせて1つと数えます。)

#まとめ
少し難しいですがうまく使えると便利だと思うので少しでも役立ったら嬉しいです。

#参考リンク
[JavaScript 連想配列の仕組みと使い方のサンプル](https://itsakura.com/js-object-literal'JavaScript 連想配列の仕組みと使い方のサンプル')
vscodeへeslint導入の手順(自分用メモ)

# vscodeへeslint導入の手順（自分用メモ）

## プロジェクトへのインストール

```shell
npm i -D eslint eslint-plugin-import eslint-plugin-react
```
### それぞれのおそらくな説明
- eslint
    - eslint本体
- eslint-plugin-import
    - ES2015 +（ES6 +）インポート/エクスポート構文のリンティングをサポートし、ファイルパスとインポート名のスペルミスの問題を防止する（google直訳）
- eslint-plugin-react
    - react用

※ちな、後ほど行う　eslint --init　で足りないプラグインは結局インストールできる模様

## cliのインストール
```shell
npm -g i eslint-cli
```

## 設定ファイルの作成
```shell
eslint --init
#実行すると以下を順に聞いてくる

? How would you like to use ESLint? ... # ESLINTをどのように使用しますか
> To check syntax only # 構文チェックのみ
  To check syntax and find problems # 構文チェックと問題検索
  To check syntax, find problems, and enforce code style # 構文のチェック、問題検索、コードスタイルの強制
# 上下ボタンで選択できる、選択してEnter　とりあえず一番下を選んだ

? what type of modules does your project use? ... # プロジェクトのモジュールのタイプは？
> JavaScript modules (import/export)
  CommonJS (require/exports)
  None of these
# 使っているタイプで選択、今回のプロジェクトではCommonJSを選択

? Which framework does your project use? … # フレームワークつかってる？
❯ React
  Vue.js
  None of these
# Reactで書くつもりだったのでReactを選択した

? Does your project use TypeScript? › No / Yes # typescriptで書くの？
# typescriptはかんがえていなかったのでNoを選択　左右ボタンで選んでENTER

? Where does your code run? …  (Press <space> to select, <a> to toggle all, <i> to invert selection)
✔ Browser
✔ Node
# スペースキーで選択できる 両方選んでみた

? How would you like to define a style for your project? … # プロジェクトの定義をどのようなスタイルにする？
❯ Use a popular style guide　# 人気のやつ使う
  Answer questions about your style　# 自分のスタイルで答える？
  Inspect your JavaScript file(s) # javascriptファイルを検査する
# popularなのを使うにしました。

? Which style guide do you want to follow? … # どのスタイルをフォローする？
❯ Airbnb: https://github.com/airbnb/javascript # airbnb
  Standard: https://github.com/standard/standard # standard
  Google: https://github.com/google/eslint-config-google # google
# Standardを使ってみることにしました

? What format do you want your config file to be in? … # 設定ファイルの拡張子
❯ JavaScript
  YAML
  JSON
# JSONにしておきました。

# その後進めると以下の通り
Checking peerDependencies of eslint-config-standard@latest
The config that youve selected requires the following dependencies:
# 選択した構成には、次の依存関係が必要です。

eslint-plugin-react@latest eslint-config-standard@latest eslint@>=6.2.2 eslint-plugin-import@>=2.18.0 eslint-plugin-node@>=9.1.0 eslint-plugin-promise@>=4.2.1 eslint-plugin-standard@>=4.0.0
✔ Would you like to install them now with npm? · No / Yes
# installしていいかい？　→　YESでENTER

Successfully created .eslintrc.yml file in ... # とでて設定ファイル作成完了
```

### プロジェクトのルート階層にできあがった.eslintrc.json
```yml
{
    "env": {
        "browser": true,
        "commonjs": true,
        "es2020": true,
        "node": true
    },
    "extends": [
        "plugin:react/recommended",
        "standard"
    ],
    "parserOptions": {
        "ecmaFeatures": {
            "jsx": true
        },
        "ecmaVersion": 11
    },
    "plugins": [
        "react"
    ],
    "rules": {
    }
}
# rules のところにいろいろルールを書けばいい様子
```

これで設定完了
VSCODEは勝手に.eslintrcを読み込んでくれるようです。
KVM guest でXDP を使う

KVMゲストで、[XDP](https://en.wikipedia.org/wiki/Express_Data_Path) を使うときの設定。

# 必要な設定

```xml
  <vcpu placement='static'>8</vcpu>
  ...
  <devices>
    <interface type='bridge'>
      <model type='virtio'/>
      <driver name='vhost' queues='16'>
        <guest csum='off' tso4='off' tso6='off' ecn='off' ufo='off'/>
      </driver>
    </interface>
  </devices>
```

## ポイント

`<driver ... queues='x'>` の queues の値は、`vcpu` 数の2倍以上である必要がある。
VCPUが8なら、queues は16以上。

queuesが小さいと、`Too few free TX rings available` になる。

```shell-session
# ip link set dev eth0 xdp object xdp_dummy.o
Error: virtio_net: Too few free TX rings available.
```

各種offloadをoffにする必要がある。
`csum='off' tso4='off' tso6='off' ecn='off' ufo='off'`

offloadとは、IPパケットに関する処理をカーネルでするのではなく、NICで行う機能。

* `csum`: IPチェックサム計算のoffload
* `tso4`: TCP segmentation offload for IPv4
* `tso6`: TCP segmentation offload for IPv6
* `ecn`: ECN (Explicit Congestion Notification)付のTCP segmentation offload
* `ufo`: UDP Fragmentation offload

無効にしてないと、`Can't set XDP while host is implementing LRO/CSUM` になる。

```shell-session
# ip link set dev eth0 xdp object xdp_dummy.o
Error: virtio_net: Can't set XDP while host is implementing LRO/CSUM, disable LRO/CSUM first.
```

# 環境

## VM host

CentOS7 + kernel-ml
qemu-kvm-common-ev-2.12.0-44.1.el7_8.1.x86_64
qemu-kvm-ev-2.12.0-44.1.el7_8.1.x86_64


```shell-session
# uname -r
5.6.15-1.el7.elrepo.x86_64
```

## VM guest

CentOS7 + kernel-ml

```shell-session
$ uname -r
5.7.7-1.el7.elrepo.x86_64
```
Selenium で Canvasに自動クリックする方法(Java)

## SeleniumでCanvas上の指定した座標(x,y)に自動クリックする方法を明記します

ブラウザのクリック作業を自動化する際に、Canvas（描画）の自動クリックはどうすればいいのか？
ちゃんと用意されていました！
ありがたいですね。

LIVE映像の配信サイトとかはCanvasタグの中で映像が流れるので、動画配信系のサイトでの自動化では便利だと思います。

PCのマウス操作を自動化する方法もありますが、それだとマウス操作が奪われてその間PC使えないので、
これはとてもありがたいです。


```qiita:Java
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;

public static void CanvasClick(WebDriver driver, int x, int y) {
	WebElement canvas = driver.findElement(By.tagName("canvas"));
	Actions act = new Actions(driver);
	act.moveToElement(canvas, x, y).click().perform();
}
```

これでブラウザ上のCanvas領域へフォーカスして、指定した座標へクリックできます。
座標(x, y)はブラウザのhtml表示領域の左上からの距離です。 左上の隅が座標(0, 0)になります。

ただ、指定した座標が正しいかどうかを判定しにくいので、クリックした位置で何かマークを表示出来たらいいなと思います。
vscodeでmapを使っているc++のコードのデバックができない(未解決)

##発生している問題
下記コードの`map<int, int> ma;`にbreakpointを置きデバックを始め、`map<int, int> ma;`の位置で止まった際にデバックのコマンドが効かなくなる(step overやstep　inなどのコマンドが機能しない)ことです。

解決までに時間がかかりそうなので、やってきたことを書いてこうと思います。

##環境
visual stdio code 1.46.0
Mac OS 10.15.4
clang:Apple clang version 11.0.3 (clang-1103.0.32.29)

##コード
```c++
#include <iostream>
#include <map>

using namespace std;

int main()
{

    map<int, int> ma;

    return 0;
}

```

#####launch.json
```
{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "clang++ - Build and debug active file",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}/${fileBasenameNoExtension}",
      "args": [],
      "stopAtEntry": true,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": true,
      "MIMode": "lldb",
      "preLaunchTask": "clang++ build active file"
    }
  ]
}
```


##自分が考えたこと
```c++
#include <iostream>
#include <map>
#include <list>
#include <vector>

using namespace std;

int main()
{
    int i;
    cin >> i;

    vector<int> v(i);
    std::list<int> lst;
    map<int, int> ma;

    cout << "Hello" << endl;

    return 0;
}
```
のように、map以外の型でも試してみました。
上記の`test`コードで`cin >> i;`の行にブレークポイントを置いた時でも同じ挙動を確認しました。
上記のコードで`map<int, int> ma;`をコメントアウトしたところ問題なくデバックできたため`map<int, int> ma;`のみに問題があると考えています。
また、`clang++ -std=c++17`でビルドをし実行ファイルを起動しても問題がなかったことからデバックに問題があると考えています。
`clang++ -std=c++11`でも問題ありませんでした。

##やったこと(20/7/5)
・lldbが使えるか確認
terminal上からlldbを使ってデバックができるか確認してみた。
->できた。

・c_cpp_properties.jsonファイルを作ってみた。
->変わらなかった。
c_cpp_properties.json
```
{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "macFrameworkPath": [
                "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
            ],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}
```

・lldb-miが確認できない。
詳細に書くと、findコマンドでlldb-miを検索しても見つからないのに、問題が起きている状態でアクティビティモニタをみるとlldb-miが起動してる。
launch.jsonでも指定してるのlldbだし、なんでlldb-miが起動してるのかわからない。
mapを使ってない他のコードでdebugをしてみて確認してみたらlldb-miが起動してたから、実際使ってるのはlldb-mi?

##codelldbを入れてみた20/7/9 (->使えるか不明)
[参照](https://qiita.com/hiro2do/items/e3b114a22b5be755fbd9)
codelldbを入れてみて
ここにあるlaunch.jsonやtasks.jsonを作ったり公式ドキュメントのlaunch.jsonを作ったりしてみたが、codelldbのデバックがうまくいかない。
`unable to find excutable for ~`を怒られる。
lldb-miを調べた方が解決に近いと考えたので、放置。

##次回やること
lldb-miがどうなってるか確認
暇な時に追記していきます。
開発部門以外の同僚に伝える厳選 Markdown 記法 3選

会社の情報共有に esa を利用している、というように開発部門以外の方も Markdown を活用する機会もあると思います。
その際に、「Markdown？難しそうなのでさわりたくない・・・」というような反応が出ることもままあると思います。
例えば人事だと ATS（候補者管理システム）の [Talentio が Markdown 記法をサポート](https://intercom.help/talentio/ja/articles/1391593-%E5%BF%9C%E5%8B%9F%E3%83%9A%E3%83%BC%E3%82%B8-%E5%8B%9F%E9%9B%86%E8%A6%81%E9%A0%85%E3%83%9A%E3%83%BC%E3%82%B8-%E3%81%AE%E4%BD%9C%E6%88%90) しています。これを用いると「■●」などで見出しをつくるのに比べて見栄えのいい求人ページを作成することができます。

しかし、よくよく考えると開発者以外の方が必須で利用できないと困る、という記法は以下の3つくらいかと思っています。開発職以外の方でも、Office の Word や Google Docs で文書を作成する際のほうが覚える記法は多いと言えるくらいです。

ということで、以下が私が必須と考える記法 3選です。

1. [見出し](https://qiita.com/tbpgr/items/989c6badefff69377da7#%E8%A6%8B%E5%87%BA%E3%81%97)
1. [箇条書きリスト](https://qiita.com/tbpgr/items/989c6badefff69377da7#%E7%AE%87%E6%9D%A1%E6%9B%B8%E3%81%8D%E3%83%AA%E3%82%B9%E3%83%88)
1. [リンク](https://qiita.com/tbpgr/items/989c6badefff69377da7#%E3%83%AA%E3%83%B3%E3%82%AF)

とってもあっさりとした内容ですが、実際これがあれば十分文書を作成できるのですよね。
どちらかというと難しいのは記法よりも、見出しを用いた構造化された文書を作成することかもしれませんが。
それは、 Word / Google Docs で適切な見出しを作成できるか、とも同じなので Markdown に限った話ではないですけど。

## 関連情報
* [Markdown記法 サンプル集 - Qiita](https://qiita.com/tbpgr/items/989c6badefff69377da7)
画像の拡張子の比較

# プログラミングの勉強日記
2020年7月5日　Progate Lv.148
ポートフォリオ作成中
画像の拡張子について気になったので調べてまとめてみた。

#拡張子とは
　ファイル名の末尾の`.`（ピリオド）以降の部分のこと。PDFファイルはpdf、Word文書はdocなどである。拡張子はそのファイルが何のファイルであるかを判別して、ファイルをクリックしたときにそのファイルに対応するアプリケーションが開くようになる。

#画像の種類
　画像にはベクター画像（ベクトル画像）とビットマップ画像（ラスター画像）と呼ばれるものがある。

##ベクター画像（ベクトル画像）
　ベクター画像は画像の線や点、色をベクター計算という数式で描くものであり、拡大縮小しても画像がぼやけることがない。ベクター画像は点と点を結ぶ線が画像を構成している。
　なので、ベクター画像はロゴや文字、イラスト、図表などに最適である。しかし、無数の色が含まれる画像は再現が難しいので、風景などの複雑な画像には向いていない。（写真はベクター画像では再現することはできない。）

##ビットマップ画像（ラスター画像）
　ビットマップ画像は正方形の点（ピクセル）の集まりで構成される画像である。画質は解像度で決まる。ビットマップ画像はピクセルの塗りつぶしが画像を構成する。
　ピクセルの集まりなので、拡大していくとピクセルの細かさに限界がきて画像が荒くなってしまう。（拡大するとぼやけてしまう）
　しかし、きめ細やかな色表現ができるので、写真や絵画、グラデーション画像などに適している。
　
#画像の拡張子の種類
 拡張子には、JPG/PNG/GIF/SVGなどがある。

##JPG
　まず最初にJPGについて説明する。JPGはJoint Photographic Experts Groupの略であり、「ジェイペグ」と読む。形式はビットマップ画像である。用途は写真。

拡張子：.jpg/.jpeg/.JPG/.JPEG/.jpe/.jfif/.pjpeg/.pjp
特徴：データの容量が小さい。フルカラーなので色数の多い画像に最適。上書き保存で画質が損なわれる。拡張子の数が多い。透過処理はできない。

※ファイルを小さくすることはできるが、保存の回数とタイミングに注意が必要。
　色や景色、食べ物などの自然物の写真に適している

##PNG
　次にPNGについて紹介する。PNGはPortable Network Graphicsの略であり、「ピング」と読む。形式はビットマップ画像である。用途はイラストやロゴ。
　PNGは、可逆性圧縮なので画質が劣化せず、データを復元する際には完全に元通りにすることができる。

拡張子：.png
特徴：データを完全に復元できる。フルカラー。透過処理ができる。Web上で使える。

※画像のファイルサイズが重いと、転送量が増えるのでサーバーに負担がかかり、ページ表示速度に影響が出る。
　画像キャプチャや描き図版、概念図などの人工物に適している

##GIF
　次にGIFについて紹介する。GIFはGraphics Interchange Formatの略であり、「ギフ・ジフ」と読む。形式はビットマップ画像である。用途はイラスト、ロゴ、アイコン。
　GIは容量が小さく、Webページでの表示スピードが早いファイル形式であり、GIF87」、「GIF87a」、「GIF89a」の3種類ある。JPEGと違い「可逆圧縮」の画像形式なので、一度低画質で保存しても元の画質に戻すことができる。

拡張子：.gif
特徴：データ容量が小さい。最大256色。透過処理ができる。アニメーションを作ることができる。

※GIFはの最も大きな特徴は、アニメーション画像を作成できる点であり、色数の多くないシンプルなアニメーションを作成する際に最適。

##SVG
　最後にSVGについて紹介する。SVGはScalable Vector Graphicsの略であり、「エスブイジー」と読む。形式はベクター画像である。用途はシンプルなイラストやロゴ。
　SVGは、XML（eXtensible Markup Language:拡張可能なマークアップ言語）で記述する2次元のベクター画像のファイル形式。SVGは、画像でありながらマークアップ言語で記述されるテキストデータなので、テキストエディターで編集することができる。

拡張子：.svg/.svgz
特徴：テキストデータ。アニメーションを作ることができる。ロゴやアイコンやグラフなどは、SVGを使うと軽くてキレイに表現できる。

※ベクター画像なので、複雑なイラストではファイルサイズが大きくなるため、向いていない。

##参考文献
https://www.pc-master.jp/sousa/kakuchousi.html
https://saruwakakun.com/design/photoshop/image
https://webtan.impress.co.jp/e/2018/04/17/28977
https://www.innovation.co.jp/urumo/jpg_png/
How to Integrate Google reCAPTCHA in PHP 7 Contact Form

Google reCAPTCHA is the best solution to protect web forms from spam. The reCAPTCHA is a powerful spam protection tool that makes sure you are a real human, and Google reCaptcha checkbox also provides the best user experience in a few lines of codes. 


click here to read more:

https://www.positronx.io/how-to-integrate-google-recaptcha-in-php-contact-form/
How to Get Google reCaptcha v3/2 Site Key and Secret key

Google reCAPTCHA is a free and well-known service which secures your website from abuse and spam. To get the site key and security key, your application or domain name must be registered with Google reCaptcha.

click here to read more:

https://www.positronx.io/how-to-get-google-recaptcha-site-key-and-secret-key/
liタグの中のaタグを親要素いっぱいにし、かつテキストを上下左右中央にする方法。

liタグの中のaタグを親要素いっぱいにし、かつテキストを上下左右中央にする方法について説明します。

【お願い】
自分も同じ内容で困っていたため、たくさん調べてようやくこの方法にたどり着き、解決することはできました。しかし、理論？はいまいち分かっていません。理論や仕組みが分かる方教えてください。また、問題点等もあれば教えていただきたいです。

【手順】
① liタグの中のaタグを親要素いっぱいにする。
② liタグの中のaタグのテキストを上下左右中央にする。


4つのボタンが横に並んでいるメニューのようなデザインにしました。
名前はシンプルにTest1...Test4です。

```html:test.html

    <ul>
      <li>
        <a href="#">Test1</a>
      </li>
      <li>
        <a href="#">Test2</a>
      </li>
      <li>
        <a href="#">Test3</a>
      </li>
      <li>
        <a href="#">Test4</a>
      </li>
    </ul>
```

```css:test.css
ul {
  display: flex;
}

li {
  list-style: none;
  width: 200px;
  height: 100px;
  background-color: #ffdab9;
  border: 1px solid #515151;
}

a {
  text-decoration: none;
  background-color: #ffc0cb;
  color: #515151;
}

```

liタグとaタグの違いをわかりやすくするために色を変えました。
liタグがオレンジでaタグがピンクです。

上記のコードだとこの状態です。↓

<img width="887" alt="スクリーンショット 2020-07-05 19.19.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651030/8e2a8d7b-211d-3ddd-9681-5bada4a0363a.png">


【① liタグの中のaタグを親要素いっぱいにする。】

liタグの中に
display: table;
aタグの中にdisplay: table-cell;を書きます。

<img width="891" alt="スクリーンショット 2020-07-05 19.23.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651030/ea7cd775-2c22-42da-4712-6087b90f8ac4.png">

aタグ（ピンク）が親要素いっぱいになりました。


【② liタグの中のaタグのテキストを上下左右中央にする。】

liタグにvertical-align: middle;
aタグにtext-align: center;を書く。

<img width="893" alt="スクリーンショット 2020-07-05 19.32.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651030/3cdb7de3-79a8-a6c0-1fa2-09548bded5a7.png">


完成です。

```css:test.css
ul {
  display: flex;
}

li {
　list-style: none;
  width: 200px;
  height: 100px;
  background-color: #ffdab9;
  border: 1px solid #515151;
  display: table;
  text-align: center;
}

a {
　text-decoration: none;
  background-color: #ffc0cb;
  display: table-cell;
  vertical-align: middle;
　color: #515151;
}

```

display: table;はレスポンシブデザインで自由がきかないと出てきたので試してみました。
<img width="331" alt="スクリーンショット 2020-07-05 19.54.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651030/ac1fcbe4-4fd6-2805-8d03-6efd32b123c1.png">


どなたかこの方法をつかってレスポンシブデザインに対応させる方法か、liタグをa要素いっぱいにしてテキストを上下中央にし、レスポンシブデザインに対応させる方法を教えてください🙇🏻‍♀️
高専キャリアとマイクロソフトがコラボしたクラウドAI開発講座進捗報告[1]

# クラウドAI開発講座進捗報告- 1週目
## 講座の軽い紹介
Azureを使ってAIbotを作成することを目指す。

## 参加理由
これからのIT業界ではクラウドに強いエンジニアが重宝されると聞いたから。
自分がクラウドにほとんど触れたことがなかったから。Herokuでデプロイしたことあるくらい。

## 目標
自然言語処理が得意なのでそれを使って何かしたい。
自粛期間中に買ったラズパイを有効活用出来たらいいなと思ってる。

## ここまでの進捗
まだ会議を受けただけで実際の進捗は出せていない。

## 来週の目標
紹介された講座を受けてAzureの軽いbotを作成することを目指す
Create Pagination in PHP 7 with MySQL and Bootstrap


This tutorial explains how to create pagination in PHP 7 and MySQL using the Bootstrap 4 Pagination UI component. Also, learn how to set the dynamic limit in pagination with the session, create prev, next feature, active class in pagination to display results fetched from MySQL database.

click here to read more:
https://www.positronx.io/create-pagination-in-php-with-mysql-and-bootstrap/
Laravel 7 Pagination  with Bootstrap Tutorial

Construct a simple pagination in laravel 7 application from scratch. Setting up a laravel app, creating model and migrations, creating a controller and connecting controller to routes, and fetch records from the database and bind with pagination() method to show results in smaller sizes using paginate() and links() function.

click here to read more:
https://www.positronx.io/laravel-pagination-example-with-bootstrap-tutorial/
How To Create and Validate Form in Laravel 7

In this tutorial, i am going to show you how to install and use Bootstrap 4 in the Laravel 7 project instantly. If you are new to Laravel and looking to learn how to install Bootstrap 4 in Laravel 7 then you are at the right place we will help you install laravel ui through composer package in less than 5 minutes.

click here to read more:
https://www.positronx.io/how-to-properly-install-and-use-bootstrap-in-laravel/
SELinuxを有効にした状態でperl(CGI)からsqliteファイルを読み書きする

#はじめに
SELinuxはずっと無効にしてつかっていましたが、試しに有効にしてみたらCGIからSQLiteのデータベースに書き込めなくなったので、書き込める設定を試行錯誤しました。

#前提
環境はCentOS 6(古...)
CGIのスクリプトとSQLiteのデータベースファイルは同じディレクトリにあります。
ディレクトリのパーミッションは

```
drwx---rwx. 2 root   root   4096 Jul  2 11:35 data
```

ファイルのパーミッションは

```
-r-x---r-x. 1 root root  632 Jun 30 04:43 test.cgi
-rw----rw-. 1 root root 2048 Jul  2 11:35 test.db
```

こんな感じで、test.cgiがCGIスクリプト　test.dbがデータベースファイルになります。

#ログ
SELinuxでアクセス拒否されると/var/log/audit/audit.log
にメッセージが出力されます。
うまくいってないとこんな感じ

```
type=AVC msg=audit(1593723989.189:261): avc:  denied  { write } for  pid=1870 comm="test.cgi" name="test.db" dev=dm-0 ino=7149 scontext=unconfined_u:system_r:httpd_sys_script_t:s0 tcontext=unconfined_u:object_r:httpd_sys_script_exec_t:s0 tclass=file
type=SYSCALL msg=audit(1593723989.189:261): arch=c000003e syscall=2 success=no exit=-13 a0=1f51280 a1=42 a2=1a4 a3=7ffe0545f870 items=0 ppid=1365 pid=1870 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="test.cgi" exe="/usr/bin/perl" subj=unconfined_u:system_r:httpd_sys_script_t:s0 key=(null)

```
とりあえずはtype=AVCの行を見れば良いそうです。
denied{write}とあるので、書き込みが拒否されているのが想像されます。
comm="test.cgi" name="test.db" は test.cgiからtest.dbへのアクセスを示してるのかな・・・

着目したのが
scontext=unconfined_u:system_r:httpd_sys_script_t:s0 tcontext=unconfined_u:object_r:httpd_sys_script_exec_t:s0
です。
scontextのsはsourceのs
tcontextのtはtargetのt
・・・なのだろう。



これは、ファイルのSELinux上での属性（ラベルといいます）を示しているとのことです。
ls -lZコマンドで見ることができます。

```

[root@localhost data]# ls -lZ
-r-x---r-x. root root unconfined_u:object_r:httpd_sys_script_exec_t:s0 test.cgi
-rw----rw-. root root unconfined_u:object_r:httpd_sys_script_exec_t:s0 test.db
```

tcontextのとおりですね。
何に変えるべきなのだろう

参考にしたのはこのページ
https://fedoraproject.org/wiki/SELinux/apache

読み書きだと
httpd_sys_script_rw_t
っぽいなあ。
変更はこんなコマンドでできるようです。

```
chcon -t httpd_sys_script_rw_t test.db
```
変更を確認

```
[root@localhost data]# ls -Z
-r-x---r-x. root root unconfined_u:object_r:httpd_sys_script_exec_t:s0 test.cgi
-rw----rw-. root root unconfined_u:object_r:httpd_sys_rw_content_t:s0 test.db
```

これで再度実行すると/var/log/audit/audit.logにこんなメッセージが

```
type=AVC msg=audit(1593724615.013:262): avc:  denied  { write } for  pid=1877 comm="test.cgi" name="data" dev=dm-0 ino=7025 scontext=unconfined_u:system_r:httpd_sys_script_t:s0 tcontext=unconfined_u:object_r:httpd_sys_script_exec_t:s0 tclass=dir
type=SYSCALL msg=audit(1593724615.013:262): arch=c000003e syscall=2 success=no exit=-13 a0=291229e a1=42 a2=1a4 a3=1a4 items=0 ppid=1367 pid=1877 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="test.cgi" exe="/usr/bin/perl" subj=unconfined_u:system_r:httpd_sys_script_t:s0 key=(null)
```

name="data" とあるので、フォルダ(dataフォルダ)の権限も同様に設定が必要のようです。

```
[root@localhost data]# cd ..
[root@localhost cgi-bin]# chcon -t httpd_sys_script_rw_t data
```

これで書き込めるようになりました。
Unityでベクターファイル（SVG）を扱う（導入編）

# はじめに。
いつもラスター（ドットデータの）画像を使用しているので、ベクター画像は扱えないの？と思い調べたところ、プレビュー版ながら使用できることがわかりましたので、ちょっと触ってみました。
#  動作環境
2018.1以上の環境が必要です
# 導入
Window >> Package Managerから、Advancedを押して、Show preview packagesを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321577/4dfcb13f-9598-3ef6-1c88-34e68b404ba7.png)
VectorGrapicsを検索して、インポート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321577/33b361c8-4433-ed98-6666-133b08c13eb6.png)

以上。

次回は実際にSVGファイルをインポート＆表示してみます。

[Unityでベクターファイル（SVG）を扱う２（お試し編）](https://qiita.com/inpax23/items/764e0578045e9f0aa187)
# 参考
- VectorGrapics  
https://github.com/Unity-Technologies/vector-graphics-samples/blob/master/Documentation/vectorgraphics.md
- 【Unity道場】VectorGraphicsで作る エモい表現  
https://www.slideshare.net/UnityTechnologiesJapan/62-152340248
Laravel 7 JWT Authentication Tutorial: User Login & Signup API

Comprehensive Laravel 7 JWT Authentication example tutorial. In this article, we will learn how to create secure REST APIs in Laravel using JSON Web Token (JWT). To protect user authentication API in Laravel 7 we will use tymondesigns/jwt-auth a third-party jwt-auth library.

click here to read more:
https://www.positronx.io/laravel-jwt-authentication-tutorial-user-login-signup-api/
How to Send Email in Laravel 7 with Mailable and Mailtrap

In this Laravel 7/6 tutorial, we will learn how to send emails from the Laravel application using the Mailtrap SMTP server. Generically, we will comprehend the working process of markdown mailable class and simultaneously work with every aspect required to send email securely, faster, and efficiently.

click here to read more:
https://www.positronx.io/how-to-send-email-in-laravel-7-with-mailable-and-mailtrap/
iOSの webview で"ほぼ"絶対にSafariで開くnpm package "go-to-safari"

# iOS 上の WebView から Safari で開く

iOS の Facebook や Messager アプリで開いたページのリンクを Safari で開くことができるようになる npm package を公開しました。

以下のようにすると iOS 上の WebView から Safari で指定した URL を開くことができます。

```html
<a href="https://example.com/" class="outer-link">link</a>
<script src="https://unpkg.com/go-to-safari@1.0.2/lib/g2s.js"></script>
<script>
g2s(".outer-link"); // querySelector で対象のリンクを指定
</script>
```

## sample
https://youheinakagawa.github.io/go-to-safari-js/

## npm package
[go-to-safari](https://www.npmjs.com/package/go-to-safari)

## 参考にしたページ
How open link in safari mobile app from webview
https://stackoverflow.com/a/53028249

# どういうときに使うのか？

Facebook アプリなどでページを開いたときにアプリの制限で使えない機能があります。
とくに [AR Quick Look](https://developer.apple.com/jp/augmented-reality/quick-look/) が使えないため、Facebook で AR Quick Look が埋め込まれているページを開いても AR の体験ができない現象が発生します。

Facebook という共有の場で体験ができないという機会損失をできる限り少なくするために開発しました。

Stack Overflow にあるように ftp:// スキーマーなら Safari が開くという仕組みになります。
自前で ftp サーバーを立てているため不安定な時もあるかもしれません。
npm の package を作ることも公開することも初めてなので至らぬ点が多々あるかと思います。
UA で判定しているため Safari と全く同一の UA で WebView を設定されていると開くことはできません。
それでもよろしければ是非お使いください。
UiPath英語のワークフローを一瞬で日本語版に自動変換

# はじめに

みなさん、こんにちわ！

この記事では、英語のワークフローを日本語版に変換する方法を紹介したいと思います。
この機能は、既にUiPathのマーケットプレースに公開してあるので、よろしければご利用ください。
変換するワークフローファイルが１つだと一瞬で変換されます。
プロジェクトまるごと変換する機能も提供していますが、ファイル数が多くなると変換に時間を要します。
ReFrameworkぐらいの規模だと、２～３分ぐらいなので、カップラーメンができるより早いかな。

実行するとアクティビティ表示名、注釈、コメントアクティビティの説明文が翻訳変換されます。
![翻訳.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/5b5e6e9b-0d95-1b5b-cb48-f6ae55d340f3.png)

# 用途
用途としては非ネイティブ言語（例えば英語）のワークフローを理解する時に、自国語（例えば日本語）に翻訳したワークフローを出力して利用できます。また、自国語のワークフローを他国語に変換して海外に提供したい時にも活用できます。
翻訳する言語指定は自由です。
ただ、機械翻訳なので、おかしな文章があったら修正した方が良いかも知れません・・・

# ダウンロード方法
ダウンロードは、UiPathマーケットプレイスから行います。
下記のページで使用方法の解説、マニュアルも入手可能です。

[Workflow Translatorのダウンロードページ](https://marketplace.uipath.com/ja/listings/workflow-translator)

# 簡単に仕組みを解説
ワークフローのXAMLファイルを直接編集し、実現しています。
プログラムは正規表現を使用し、翻訳する文字列を抽出し、翻訳APIで翻訳してから置き換えてます。
翻訳APIは、以前投稿した[UiPathで無料のGoogle翻訳機能を作る方法](https://qiita.com/Jun96427231/items/d405d7922c61a39d4739)を見て頂ければイメージできると思います。

```ruby:注釈の文字列を抽出する正規表現
Annotation.AnnotationText="(.*?)"
```
```ruby:表示名の文字列を抽出する正規表現
DisplayName="(.*?)"
```
```ruby:コメントアクティビティの文字列を抽出する正規表現
WorkflowViewState.IdRef="Comment_[0-9]+" Text="(.*?)"
```

# おわりに
私は、UiPathのマーケットプレースで公開されているワークフローがほとんど英語だったので、この方法を使用し理解を深めました。
英語が苦手な方は、利用するのもありだと思います！
UiPathワークフローのアクティビティ表示名を一括してユニークにする方法

# はじめに

みなさん、こんにちわ！

この記事では、UiPathワークフローのアクティビティ表示名を一括してユニークにする方法を紹介したいと思います。
この機能は、既にUiPathのマーケットプレースに公開してあるので、よろしければご利用ください。
ファイルを指定し、実行するとアクティビティの表示名にユニークIDとして[]で囲まれた8桁の半角英数字（小文字）が付加されます。
フォルダを指定し、プロジェクトに格納されているファイルをまるごと変換する機能も提供しています。
![ID.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/2af02b74-6cf0-75f9-5d8a-9c7fb44400e1.png)

アクティビティを追加した後に再実行することも考え、２重でID付加されない様、IDが付加されていない表示名にのみIDを付加する仕様としています。

# 注釈
言語を[日本語] に設定したStudioで作成したワークフローではID付加が機能しますが、 [English]に設定したStudioで作成したワークフローでは一部のアクティビティ(Assign等)でIDが付加されません。[English]の場合、デフォルトでXAMLにDisplayNameが挿入されないアクティビティがあり、今は未だ、そこまでサポートしていません。
ただ、一度、DisplayNameを編集するとXAMLにDisplayNameが挿入されるので機能します。
[日本語]では、デフォルトで全てDisplayNameがXAMLに書き込まれていたので問題ないと思います。

# ダウンロード方法
ダウンロードは、UiPathマーケットプレイスから行います。
下記のページで使用方法の解説、マニュアルも入手可能です。

[DisplayNameにユニークなIDを付加のダウンロードページ](https://marketplace.uipath.com/ja/listings/hxhp7a639mmrrbufwdh8go)

# 簡単に仕組みを解説
単なるファイル操作なので、これを実現する上で、特に解説する程のものはないです。
ワークフローのXAMLファイルを直接編集し、実現しています。
プログラムは正規表現を使用し、アクティビティの表示名を抽出し、ユニークなIDを付加したものと置き換えてます。
抽出したアクティビティの表示名に、既にユニークなIDを付加されているか確認する正規表現も記載しておきます。

```ruby:表示名の文字列を抽出する正規表現
DisplayName="(.*?)"
```


```ruby:抽出した表示名の文字列に既にIDが付加されているか確認する正規表現
\[([a-z0-9]{8})\]$
```


# おわりに
一意の処理番号としてユニークなID付与すると、トラブルシュート時に問題個所の特定が容易になります。
一括で、尚且つ一瞬で付加できるので、利用するのもありだと思います！
何はともあれArduinoでLチカ

ここ最近は組み込み案件はご無沙汰していたのですが、
せっかく経験したので、ここらでいっぺん周辺知識（と言うとかっこいい）をおさらいしておき、
電子工作ちょっと出来る人、組み込みちょっと分かる人っぽくなっておこうと思い、
Arduinoでまずはお決まりのLチカから挑戦してみました。

#用意したもの

・ノートPC（Windows10）

・Arduinoをはじめよう 第3版（以下、「書籍」）
https://www.amazon.co.jp/Arduino%E3%82%92%E3%81%AF%E3%81%98%E3%82%81%E3%82%88%E3%81%86-%E7%AC%AC3%E7%89%88-Make-Massimo-Banzi/dp/487311733X

・Arduinoをはじめようキット（以下、「キット」）
https://www.amazon.co.jp/%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9-SSCI-GettingStartedArduinoKit-Arduino%E3%82%92%E3%81%AF%E3%81%98%E3%82%81%E3%82%88%E3%81%86%E3%82%AD%E3%83%83%E3%83%88/dp/B0025Y6C5G


#作ったもの

・赤色LEDが200ms間隔で点滅するシステム。


#手順

１．ここ ↓ からArduino IDEをインストールする。
    https://www.arduino.cc/en/main/software
２．ArduinoとノートPCをキット付属のUSBケーブルで接続する。
３．COMポートと使用ボードを設定する。
　　※参考：書籍P23
４．抵抗（今回は1kΩ）と赤色LED（8番ピンに）を接続する。
　　抵抗無しでも一応大丈夫みたいですが、
　　「LEDを長時間点灯させたい場合は、（中略）抵抗器を使用して下さい」
　　とあったのと、ブレッドボードと抵抗を早く使いたかったので、笑
　　抵抗も使いました。
　　※参考：書籍P50
５．スケッチ（プログラム）を作成する。
　　※参考：書籍P28
６．スケッチをコンパイルし、ボードにアップロードする。
７．期待通りLEDが点滅しました:relaxed:Yeah

#回路図

※準備中

#スケッチ

```
// Blinking LED

const int LED = 8; // LEDはデジタルピン8に接続

void setup() {
  pinMode(LED, OUTPUT); // デジタルピンを出力に設定
}

void loop() {
  digitalWrite(LED, HIGH);  // LEDを点ける
  delay(200);              // 200ms待つ
  digitalWrite(LED, LOW);   // LEDを消す
  delay(200);              // 200ms待つ
}
```

#気になったこと

手順４まで終わった時点（まだボードに自作の点滅プログラムをアップロードしていない）
で、ボード上で「L」とプリントされているすぐ横のオレンジ色のLEDと、
自分で接続した赤色LEDの両方が1秒おきぐらいで点滅しており、
いやいやなぜ…？:thinking:としばし疑問に思っていたのですが。
（※なおこの時点では出力ピンを13番ピンとしていました、ここがポイント）

調べてみると、Arduinoにはデフォルトで「13番ピンのLEDを1秒おきに点滅させる」プログラムが
焼かれていて、さらにこの「L」というオレンジ色LEDは13番ピンと繋がっているようです。
つまり、デフォルトのプログラムによって、13番ピンと繋がっている
「L」LEDと赤色LEDの両方が1秒おきに点滅していたのでした。
※参考URL ↓
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12160063962

その後出力ピンを8番ピンに、点滅間隔を200msとしたプログラムに変えると
無事にその通りっぽく動いたので、
自分の書いたプログラム通りに動いていることが無事に確認出来たというわけでした。

#感想

初めてArduinoを触りましたが、
環境構築からLチカまでとにかく速く（20分程度）出来てしまったので、
ああこれはとっつきやすいな…！と思いました。
「とりあえず自分の手で何か完成させる」という体験までが爆速なので、
入り口がとても広いし、続けるモチベーションも俄然保たれそうでいいですね。

次は一段レベルアップしたものを作るぞ！！！:sun_with_face: