OmniAICreator/Qiita-1.07M huggingface dataset:
【Spring Data JPA】 Repositoryのdeleteで自動生成メソッドが呼び出せないエラーの原因と対処方法

## 概要
とあるTBLからレコードを削除したいので、Repositoryに以下のようにユーザーIDで削除するメソッドを定義した
ちなみにプライマリーキーはユーザーIDではないので、元から用意されている `deleteById` は使えない

```repository.java
@Repository
public interface UserListRepository extends JpaRepository<UserEntity, Long> {
  List<User> deleteByUserId(String userId);
}
```

そして、呼び出し元で削除を実行

```service.java
@Service
public class AttachmentOwningService {

  @Autowired
  UserListRepository userListRepository;

    public void deleteUser(String userId) {

      // ユーザー削除
      userListRepository.deleteByUserId(userId);

  }

}
```

とすると、、、以下のようなエラーが発生

```
No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call
```

> 現在のスレッドで使用可能な実際のトランザクションを持つEntityManagerがありません-「削除」呼び出しを確実に処理できません

## 原因

メソッドに`@Transactional`アノテーションをつけることで解決した

```repository.java
@Repository
public interface UserListRepository extends JpaRepository<UserEntity, Long> {
  @Transactional
  List<User> deleteByUserId(String userId);
}
```

`find`なら同じように書いても普通に動くのに、deleteだとなぜこんなことに、、、と思ったのだが、

`@Transactional`は、DB トランザクション処理をよしなにやってくれる便利なやつである。

例外発生時にロールバックをしてくれたりと心強い上のだが、おそらくJPAがdeleteメソッドを自動生成する場合に`@Transactional`が付いてないと弾くようにしているのだと思う

確かにdeleteする際に自前でロールバック処理を書く必要性はないしな、、と感じた
[Laravel]ファサード is 何

##はじめに##

初投稿です。

掌田 津耶乃さん著「PHPフレームワークLaravel入門」を学習中、しばしば意味の分からないワードが出てきていました。

「ファサード」

ワイ「なんだお前(思考停止)」

調べてみると、どうもLaravelに限った用語ではないそうなので、自分なりにまとめてみます。
記事を書く練習にもなるし。

##ファサードの語源##

語源というかそもそもの意味ですが、建築用語で「建築物の正面部分（デザイン）」を意味するフランス語だそうです。

建物の顔、入り口部分といった感じのイメージですかね。

確かに、フランスの古い建築物をググって調べてみると、正面からの見栄えが重視されてる気がします。

##ITにおいてのファサード##

正確には「ファサードパターン(Facade pattern)」と呼ばれており、コンピュータソフトウェアのデザインパターンの一つとのこと。

デザインパターンとは、wikiに乗ってる情報をまとめると、経験則に基づく典型的なパターンに名前を付け、再利用しやすいようにカタログ化した物、という理解で良いと思います。

話を戻すと、ファサード・パターンとは、単純な操作だけを持ったFacadeクラスを実装し、(メインシステムと異なる)サブシステムを結びつける事を言います。

建物(サブシステム)に対し正面玄関(ファサード)を実装するイメージですね。

これにより、サブシステムの詳細を知らなくてもファサードからサブシステムの機能を呼び出せます。

##ファサードパターンのメリット##

ファサードを用いることで、ユーザーが必要な機能のみに絞ってサブクラスから呼び出すことができます。
また、ユーザーはサブクラスの詳細を知る必要がないため、サブクラスの実装から解放されます。

要はサブクラスの中身は知らないけど、ファサードがあるから簡単に使えるよねって所でしょうか。
この辺は感覚としては分かりますが、言語化するのが難しいです。

ユーザー毎に使用するクラスを絞れるというのは明確なメリットだと思います。
ファサードクラスを見るだけでよく使う機能が分かりますし。

ちなみに、ファサードパターンはサブクラスの機能を直接呼び出すことを特に制限はしていません。
これは少し意外でした。

必要ならファサードで定義されていない機能も使っていいよってことですね。
サブドメイン間でセッションを維持できなくする方法

ネット上で見たらサブドメイン間でセッションを維持できる方法ばかりだったために少し困ったから自分の忘備録として記入

やること自体は非常に単純で、SameSite属性を設定する。
SameSite属性には3段階あって
None
Lax
Strict
の3つが設定できる。その内サブドメインでもセッションを維持できるというかセキュリティ的に一番甘いのがNone
激重がStrictである。
これをStrictに設定すればとりあえずサブドメイン間でのセッション維持はできなくなる

形としては
cookie = "Info="+token+"&"+"何か適当にその他"+ "&"+domainName +";path=/;SameSite=Strict;Secure;HTTPOnly;expires="+exDate;

StrictをNoneに変えれば逆にほかのサブドメインでもセッション維持できるのでそれで切り替えるのが一番楽（コーディングで修正しようとして困りかけた）

このような形で自分は書いた
他のやり方等の方が遥かに参考になると思うのでSametimeに関するお話は以下のURLを見るとわかりやすい
https://www.future-shop.jp/magazine/info-samesite

HTTPOnlyはcookieに格納されたIDをJSで取り出せなくするためにも大事
SecureはつけるとHTTPSでしか送信できなくなるため必須でつける
基本形はこんな形でいいんじゃないかな…？
ほぼ自分へのメモ帳なので説明する気０ですが…
DNS, DNSSEC の仕組み

## はじめに
なんとなく知ってるような知らないようなDNSについて、知っていることを共有します。本資料は2020年8月6日、オンライン社内勉強会で発表したものです。

紹介する内容は、以下です。

- DNSの仕組みについて
- DNSSECってなんぞ
- ドメインがどのように管理されているか
- などなど


## 目次

- DNS名前解決の流れ
- digコマンドの使い方
- DNS名前解決の流れを確認
- DNSレコードタイプ
- DNSSECとその仕組み
- ドメインの管理
- QT-DNS(仮)のご紹介


## DNS勉強会
[![thumbnail](https://files.speakerdeck.com/presentations/c497fcc1c67f4683a6a634f780aadd22/slide_0.jpg?669054)](https://speakerdeck.com/hirachan/dns-dnssecfalseshi-zu-mi)

*本資料は @qualitia_cdevの中の一人、@hirachanさんに書いていただきました。
git v2.28でデフォルトブランチをmainに変更する

ご存知の方も多いと思いますが、2020年10月1日よりGitHubではプロジェクト作成時点でのデフォルトのブランチ名が `master` から `main` に変更されました。
また、7月27日にリリースされた git バージョン 2.28 からはデフォルトブランチの変更オプションが実装されているので、これにより `main` ブランチに対応できるようになっています。
本記事ではこちらの設定手順についてご説明します。

## TL;DR
 + git 2.28 (GitHubの変更時点での最新版) では**デフォルトブランチはmasterのままである**
 + デフォルトブランチを変えるには、まず**gitを 2.28 に更新**する
 + その後 `git config --global init.defaultBranch main` をCLIで実行するか `.gitconfig` を変更すれば対応完了

## 変更の背景
Git関連の複数のコミュニティではGitのデフォルトブランチ名 `master` について変更すべきではという議論があります。詳しくはここで語りませんが、もともと業界では master/slave といった用語が一般的に使われていて、この言葉のニュアンス（master:主人 slave:奴隷）が差別的だから変えようという流れがあり、GitHubとgitもそれぞれの方法で対応を行った形となります。

## 対応方法
前述の通りGitHubでは10月1日よりプロジェクトのデフォルトブランチを `master` から `main` に変更しており、gitそのものもmasterブランチがデフォルトしてハードコードされてはいるものの、 7月27日のバージョン2.28から `init.defaultBranch` というオプションを追加することによって対応できるようになりました。

対応方法についてはブランチ名変更について記載している[GitHubの資料](https://github.com/github/renaming)でも触れられています。

> (中略)
Git 2.28 added a similar setting to control the default branch used when you run git init on the command line. Learn more about the new init.defaultBranch setting in the Git 2.28 blog post.



`init. defaultBranch` オプションでデフォルトブランチを変更できるということで、以下のコマンドを実行することで対応できます（全く同じコマンドが[Git 2.28 のブログポスト](https://github.blog/2020-07-27-highlights-from-git-2-28/#introducing-init-defaultbranch)にも記載されています）

```bash
git config --global init.defaultBranch main
```

またはグローバルの `.gitconfig` に以下を追記しても対応できます。
個人的に設定を管理されている方はこちらのほうが便利かと思います。

```
[init]
    defaultBranch = main
```

## まとめ
今回はGitHubがプロジェクトデフォルトのブランチ名の変更したということで、git側での対応方法について記載しました。
ただ現時点ではBitbucketではデフォルトのリポジトリ名は `master` のままですし、ベンダーによって対応が変わってくるので一概にプロジェクトデフォルトを `main` に合わせていくのがが正解とは言えず、会社の判断やそれぞれの環境に合わせて適切な設定をしていくのが良いかと思われます。
C言語　可変長引数関数について 【初心者向け】

# 可変長引数

可変長引数関数は異なる個数の引数を用いて呼ぶことができる関数です。

以下の形で宣言できます。

```c
void foo(char *fmt, ...);
```

仮引数リストの最後かつ少なくとも1個の名前付き引数の後でなければなりません。

関数呼び出しの際、可変長引数リストの部分に当たる実引数には、`デフォルト引数昇格`と呼ばれる特別な暗黙の変換が適用されます。


**可変長引数の個数を取得することは出来ません。**そのため、関数側には何らかの形で引数の個数や終わりを知らせる必要があります。

## 引数へのアクセス方法

可変長引数を使用する関数の本体では、それらの引数の値は <stdarg.h> ライブラリの機能を用いてアクセスできます。

関数 | 詳細
--- | ---
va_start | 可変長引数関数の引数にアクセスできるようにします。
va_arg | 可変長引数関数の次の引数にアクセスします。
va_copy | 可変長引数関数の引数をコピーします。
va_end | 可変長引数関数の引数の巡回を終了します
va_list | va_start, va_arg, va_end, va_copyで使用される情報を保存します。

va_startがopen関数、va_endがclose関数にようなイメージです。

#### SYNOPSIS

```c
#include <stdarg.h>

void va_start(va_list ap, last);
type va_arg(va_list ap, type);
void va_copy(va_list dest, va_list src);
void va_end(va_list ap);
```

## サンプルコード

```c
#include <stdarg.h>
#include <stdio.h>

void foo(char *fmt, ...)
{
	va_list ap;

	va_start(ap, fmt);
	while (fmt != NULL)
	{
		printf("%s\n", fmt);
		fmt = va_arg(ap, char*);
	}
	va_end(ap);
}

int main()
{
	foo("aiueo", "test", "aaaaaa", NULL);
	return 0;
}
```

## va_copyのサンプルコード

[C言語関数辞典 - va_copy](http://www.c-tipsref.com/reference/stdarg/va_copy.html)のコードを参考にしています。

```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdarg.h>

void	sum_product(double *sum, double *product, int n, ...)
{
	va_list	ap;
	va_list	dest;
	int		i;

	/* nからスタートさせているのがポイントです */
	va_start(ap, n);
	va_copy(dest,ap);

	*sum = 0.0;
	*product = 0.0;

	/* 総和 */
	for ( i = 0; i < n; i++ )
		*sum += va_arg(ap, double);

	/* 総乗 */
	*product = va_arg(dest, double);

	for ( i = 1; i < n; i++ )
		*product *= va_arg(dest, double);

	va_end(ap);
	va_end(dest);
}

int main(void) {
	double sum, product;

	sum_product(&sum, &product, 4, 1.0, 2.0, 3.0, 4.0);

	printf("総和: %.1f\n", sum);
	printf("総乗: %.1f\n", product);

	return EXIT_SUCCESS;
}
```

## 参考

[可変長引数 - cppreference.com](https://ja.cppreference.com/w/c/language/variadic)
基本的なターミナルコマンド

基本的なターミナルコマンドについてまとめました。

# コマンド

### grep
grepはファイル中の文字列を検索するコマンド

https://eng-entrance.com/linux-command-grep

### awk
テキストの加工とパターン処理を行う

色々なことができそうではあるが使いこなすにはちょっと時間がかかりそう。

https://codezine.jp/article/detail/7912

### sed
データ加工が行える

https://qiita.com/hirohiro77/items/7fe2f68781c41777e507

### lsof
プロセスが開いているファイルを表示するコマンド

https://qiita.com/hypermkt/items/905139168b0bc5c28ef2

### curl
サーバから、もしくはサーバへデータ転送を行うコマンド

https://qiita.com/ryuichi1208/items/e4e1b27ff7d54a66dcd9

### wget
URLを指定してファイルをダウンロードする

https://www.atmarkit.co.jp/ait/articles/1606/20/news024.html

### tail
ファイルの最終行から数行を表示するコマンド

https://eng-entrance.com/linux-command-tail

### head
ファイルの先頭から数行を表示するコマンド

https://eng-entrance.com/linux-command-head

### less
テキストファイルを1画面ずつ表示するコマンド

https://www.atmarkit.co.jp/ait/articles/1702/09/news031.html

### find
ファイルやディレクトリを検索する

https://eng-entrance.com/linux-command-find

### ssh
リモートマシンにSSHでログインし、リモートマシン上でコマンドを実行するコマンド

https://webkaru.net/linux/ssh-command/

### kill
実行しているプロセスを終了するコマンド

https://eng-entrance.com/linux-command-kill

# おまけ

Linuxのコマンドで使う縦線「|」の意味と使い方
https://uxmilk.jp/8568

コマンドを連結して行う｢;｣｢&｣｢&&｣｢||｣の違い
https://jehupc.exblog.jp/15729095/

ただリンクを貼っただけですが、この辺のコマンドはサクッと使いこなせるようになりたいです。
Spotify APIについて

# Spotifyって？
> Spotifyは4000万以上もの曲へのアクセスを提供するデジタル音楽配信サービスです。
https://www.spotify.com/jp/

# Spotify APIについて
Spotify APIはpremium会員以上だと利用できます。

https://developer.spotify.com/

サクッと概要知りたい方はこちらの記事がおすすめです。

[Spotify Web APIの使い方
](https://dev.classmethod.jp/articles/about-using-of-spotify-api/)

# APIを叩く際に必要となるもの
client_id
client_secret
redirect_uri

最低限こちらの3つが必要になります。
Spotify for Developersにて作成したアプリより取得、設定できます。

# 手順
###1.codeを取得
client_id、client_secret、redirect_uriが必要
リンクに上記を含めて叩きます。
指定したURLにリダイレクト後クエリパラメータからcodeが取得できます。

###2.access_tokenを取得
curlで叩いた際は簡単だったのですが、axiosから取得する際にハマりました。。

###3.色々なAPIを叩いて遊んでみる

ようやくaccess_tokenが取得できたので、こちらをheadersに含めて色々なendpointを叩いてみましょう！
Gem ~ active_model_serializers ~

公式

[https://github.com/rails-api/active_model_serializers/tree/v0.10.6/docs](https://github.com/rails-api/active_model_serializers/tree/v0.10.6/docs)

## Serializer の作成

```ruby
be rails g serializer api::v1::articles_preview_serializer
```

## 作成されたファイル

app/serializers/api/v1/articles_preview_serializers.rb

```ruby
class Api::V1::ArticlesPreviewSerializer < ActiveModel::Serializer
  # 出力したい値を指定
  attributes :id, :title, :updated_at
end
```

id, title, updated_at を出力するよう指定。

## コントローラ

app/controllers/api/v1/articles_controllers.rb

```ruby
module Api::V1
  class ArticlesController < BaseApiController
    def index
      articles = Article.all.order(updated_at: "DESC")
			# レスポンスの値が複数の場合、 each_serializer を使用する。
      render json: articles, each_serializer: Api::V1::ArticlesPreviewSerializer
    end
  end
end
```

serializer と同じ階層構造にすること。

作成した article を updated_at 順に昇順にするよう指定。

同階層に base_api_controllers.rb

```ruby
class Api::V1::BaseApiController < ApplicationController
end
```

## Request spec

とりあえずダミーデータを作成して参照する。

spec/requests/api/v1/article_request_spec.rb

```ruby
require 'rails_helper'

RSpec.describe "Api::V1::Articles", type: :request do
  describe " GET /api/v1/article " do
    subject { get(api_v1_articles_path) }

    before { create(:article, updated_at: 3.days.ago ) }
    before { create(:article) }
    before { create(:article, updated_at: 1.days.ago ) }
    it "記事の一覧が取得できる" do
      subject
    end
  end
end
```

Request spec についてはまた後日。

実行結果

```ruby
[1] pry(#<RSpec::ExampleGroups::ApiV1Articles::GETApiV1Article>)> res = JSON.parse(response.body)
=> [{"id"=>56, "title"=>"Consequuntur quia corporis perspiciatis.", "updated_at"=>"2020-10-17T22:19:32.120Z"},
 {"id"=>57, "title"=>"Molestiae tempore recusandae qui.", "updated_at"=>"2020-10-16T22:19:32.122Z"},
 {"id"=>55, "title"=>"Consectetur nam odio voluptatibus.", "updated_at"=>"2020-10-14T22:19:31.192Z"}]
```

## UserSerializer の追加

```ruby
class Api::V1::UserSerializer < ActiveModel::Serializer
  # 出力したい値を指定
  attributes :id, :name, :email
end
```

ArticlesPreviewSerializer の修正

```ruby
class Api::V1::ArticlesPreviewSerializer < ActiveModel::Serializer
  # 出力したい値を指定
  attributes :id, :title, :updated_at
  belongs_to :user, serializer: Api::V1::UserSerializer
end
```

実行結果

```ruby
[1] pry(#<RSpec::ExampleGroups::ApiV1Articles::GETApiV1Article>)> res = JSON.parse(response.body)
=> [{"id"=>59,
  "title"=>"Esse facere cum rerum.",
  "updated_at"=>"2020-10-19T00:06:27.375Z",
  "user"=>{"id"=>69, "name"=>"Eduardo Kohler Haley", "email"=>"2_janella@renner-dach.org"}},
 {"id"=>60,
  "title"=>"Cumque aut repudiandae numquam.",
  "updated_at"=>"2020-10-18T00:06:27.377Z",
  "user"=>{"id"=>70, "name"=>"Collen Stark Brakus", "email"=>"3_hung@wintheiser.org"}},
 {"id"=>58,
  "title"=>"Corporis molestiae dolor odit.",
  "updated_at"=>"2020-10-16T00:06:26.556Z",
  "user"=>{"id"=>68, "name"=>"Fr. Pauline Sporer Greenfelder", "email"=>"1_wendy@goldner.net"}}]
```
ReactiveProperty v7.5.0 をリリースしました

最近、ビルド・単体テスト・パッケージング・NuGet への公開・GitHub Releases へのひな型作成まで GitHub Actions で自動化できたのでリリースが楽になりました。リリースノートに追加した機能や変更の一覧を自動で書いてくれるようなのも作りたいけど、どうにかできるんだろうか…

ということで v7.5.0 をリリースしました。

[リリースノート](https://github.com/runceel/ReactiveProperty/releases/tag/7.5.0)
[NuGet Gallery | ReactiveProperty](https://www.nuget.org/packages/ReactiveProperty/7.5.0)

今回は 2 つ機能を追加しています。

## ObserveProperty, ToReactivePropertyAsSynchronized, FromObject の機能強化

今までは `ObserveProperty` や `ToReactivePropertyAsSynchronized` でプロパティを指定するときに `x => x.Name` のような指定した変数の直接のプロパティしか対象にできませんでした。今回の更新で `x => x.Child.Name` のようなネストしたプロパティも指定可能になりました。

<strike>これを書いてて `ReactiveProperty.FromObject` だけ、これに対応するのを忘れていたので近いうちに v7.5.1 で対応します orz</strike>

2020/10/20 にリリースした v7.5.1 で `ReactiveProperty.FromObject` にも対応しました。

## IFilteredReadOnlyObservableCollection に ObserveElementPropertyChanged などを追加

コレクションの要素のプロパティの変更を監視するための `ObserveElementPropertyChanged` と `ObserveElementProperty` と `ObserveElementObservableProperty` を `IFilteredReadOnlyObservableCollection<T>` にも対応させました。

## まとめ

<strike>`ReactiveProperty.FromObject` は、ネストしたプロパティにまだ対応していないので気を付けてください orz</strike>

ネストしたプロパティへの対応は久しぶりの割とメンドクサイ系の機能追加でしたが、無事実装出来たのでぜひ使ってみてください。問題点等ありましたら GitHub の issues までお願いします。日本語でも OK です。

https://github.com/runceel/ReactiveProperty
AWSのALBにAzure AD(OIDC)を使ったときに欲しい情報が取れなくてハマった話

AWSのApplication Load Balancerには、OIDCを設定して簡単に認証を組み込むことができます。
詳細は公式ドキュメントを参照ください。
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/listener-authenticate-users.html

そのときにAzure ADをOIDCのIDプロバイダーとして使ったのですが、Azure ADはID Tokenやアクセストークンに様々な情報を付与することができます。
詳細は公式ドキュメントを参照ください。
https://docs.microsoft.com/ja-jp/azure/active-directory/develop/active-directory-optional-claims

# どうハマったのか

公式ドキュメントの引用ですが、ALBは認証した時の情報をヘッダーに付加してくれます。
> ロードバランサーは以下の HTTP ヘッダーを追加します。
x-amzn-oidc-accesstoken
トークンエンドポイントからのアクセストークン (プレーンテキスト)。
x-amzn-oidc-identity
ユーザー情報エンドポイントからの件名フィールド (sub) (プレーンテキスト)。
x-amzn-oidc-data
ユーザークレーム (JSON ウェブトークン (JWT) 形式)

ユーザークレームは`x-amzn-oidc-data`から取ることができるようなので、こちらから必要な情報を取るように実装しました。
ただ、`x-amzn-oidc-data`のJWTをデコードしても、上記にAzureのドキュメントに書いてある様々な情報が全く設定されておらずかなりハマりました。

# どう解決したのか

Azureのドキュメントをよく読むと、『ID Tokenやアクセストークンに様々な情報を付与する』と書いてあります。
アクセストークンは`x-amzn-oidc-accesstoken`に入っています。
こちらは使わないと思い、当初は確認していなかったのですが値を見てみたらJWTが入っていました。
`x-amzn-oidc-accesstoken`から取得できたJWTをデコードしたらきちんとAzureが設定した様々な情報を取得することができました！！

# JWTの検証でもハマった

JWTが正しく生成されたものかは署名を検証することで確認することができます。
ここでも少しハマりました。

`x-amzn-oidc-data`のJWTはAWSが生成したものなのでAWSが提供している公開鍵で検証することができます。
手順は最初に記載したAWSのドキュメントに記載されています。

一方、`x-amzn-oidc-accesstoken`に設定されているJWTはAzureが生成したものなのでAzureが提供している公開鍵を使って検証する必要があります。
Azureの方は公式ドキュメントを探しても検証の仕方が全然見つからなかったのですが、下記のページがかなり役に立ちました。
https://tsmatz.wordpress.com/2015/02/17/azure-ad-service-access-token-validation-check/
【PHP】日付の簡単な比較

PHPer の皆さん、日付の比較どうしてますか〜？

おそらく

・strtotime関数
・DateTimeクラス
・Carbonライブラリ

などを使用されてるかと思います。

しかし、簡単な比較であれば、
文字列のまま比較演算子を使用できるのをご存知でしょうか。

自分もたまたまできることに気づいたので、
どの形式まで日付を比較できるのかを試してみたので、ご紹介します。

まずは **YYYY-mm-dd** 形式の比較です。

```php
'2020-09-09' > '2020-09-08', //true
'2020-09-09' >= '2020-09-08', //true
'2020-09-09' > '2020-09-09', // false
'2020-09-09' >= '2020-09-09', //true
```

期待通り、比較結果がえられました。

続いて上記から 0 を省いてみます。

```php
'2020-9-9' > '2020-9-8', //true
'2020-9-9' >= '2020-9-8', //true
'2020-9-9' > '2020-9-9', // false
'2020-9-9' >= '2020-9-9', //true
```

大丈夫そうです。

続いて **YYYY/mm/dd** 形式で比較してみましょう。（0 を省くのも一緒にやっちゃいます）

```php
'2020/09/09' > '2020/09/08', //true
'2020/09/09' >= '2020/09/08', //true
'2020/09/09' > '2020/09/09', // false
'2020/09/09' >= '2020/09/09', //true
'2020/9/9' > '2020/9/8', //true
'2020/9/9' >= '2020/9/8', //true
'2020/9/9' > '2020/9/9', // false
'2020/9/9' >= '2020/9/9', //true
```

問題ないですね。

さらに日時で比較してみましょう。

```php
'2020-09-09 09:09:09' > '2020-09-09 09:09:08', //true
'2020-09-09 09:09:09' >= '2020-09-09 09:09:08', //true
'2020-09-09 09:09:09' > '2020-09-09 09:09:09', // false
'2020-09-09 09:09:09' >= '2020-09-09 09:09:09', //true

'2020-9-9 9:9:9' > '2020-9-9 9:9:8', //true
'2020-9-9 9:9:9' >= '2020-9-9 9:9:8', //true
'2020-9-9 9:9:9' > '2020-9-9 9:9:9', // false
'2020-9-9 9:9:9' >= '2020-9-9 9:9:9', //true

'2020/09/09 09:09:09' > '2020/09/09 09:09:08', //true
'2020/09/09 09:09:09' >= '2020/09/09 09:09:08', //true
'2020/09/09 09:09:09' > '2020/09/09 09:09:09', // false
'2020/09/09 09:09:09' >= '2020/09/09 09:09:09', //true

'2020/9/9 9:9:9' > '2020/9/9 9:9:8', //true
'2020/9/9 9:9:9' >= '2020/9/9 9:9:8', //true
'2020/9/9 9:9:9' > '2020/9/9 9:9:9', // false
'2020/9/9 9:9:9' >= '2020/9/9 9:9:9' //true
```

すべて問題ありませんね！

## まとめ
・簡単な比較であれば日付を文字列のまま比較できる
・形式は「Y-m-d」「Y/m/d」どちらも OK
・時間が含まれていても OK
・0 が省かれていても OK
Docker + Django + Reactの環境構築

## Dockerfile(Django用)

```
FROM python:3.9.0
ENV PYTHONUNBUFFERED 1
RUN mkdir /backend
WORKDIR /backend
ADD requirements.txt /backend/
RUN pip install -r requirements.txt
ADD . /backend/
```

## Dockerfile-nodejs(React用)

```
FROM node:12.19.0
RUN mkdir /frontend
WORKDIR /frontend
RUN npm install -g create-react-app
```

## requirements.txt

```
Django==3.1
psycopg2
```

## docker-compose.yml

```
version: '3'

services:
  db:
    image: postgres
    environment: 
      POSTGRES_PASSWORD: password
  django:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - ./backend:/backend
    ports:
      - "8000:8000"
    depends_on:
      - db
  
  react:
    build:
      context: .
      dockerfile: "./Dockerfile-nodejs"
    volumes:
      - .:/frontend
    command: >
        cd frontend && yarn start
    ports:
      - "3000:3000"
```
Pardot Lightning アプリケーションを使用した対ビジネスマーケティングの自動化 ⇒ Pardot のリード生成 (Pardot Lightning アプリケーション)  ⇒ Pardot キャンペーンの設定 (Pardot Lightning アプリケーション)

１．Pardot でプロスペクトのグループにメールを送信する場合、送信先となるのはどれですか?
２．Pardot キャンペーンと Salesforce キャンペーンの違いは何ですか?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634241/e9bf9506-f28a-42f1-9eb5-12a19de3e1da.png)
【StereoDepth】stereo vs mono どっちが精度が良いのか？

<h1>On the Importance of Stereo for Accurate Depth Estimation:An Efficient Semi-Supervised Deep Neural Network Approach</h1>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/fb9fbf18-b73e-f7a4-feca-508fc8c7e0a6.png)

NVIDIAさんのリサーチでstereo depth estimationとmono depth estimationのどっちの方が精度が良いのか調べたら、stereoの方が良かったのでmonoは諦めて、stereoのalgorithmの紹介をしますという論文だった。

今回の寄与は
・Unspervised => Unspervised(Image)+Supervised(LiDAR)
  特に新しい事では無いが、LiDARとImageの両方をLossに使えば精度が上がる。

・ReLU+Bachnorm => ELU
  BatchNormをなくす事でネットワークが早く学習出来るようになったらしい。
 *詳細は[ELU](https://arxiv.org/pdf/1511.07289.pdf)の論文に記載があった。

・soft-agmax => machine-learned-argmax
 意思決定を行う前に、ネットワークがコンテキストをより適切に組み込むことができる

<h1>結果</h1>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/238287ba-3b26-9cc7-949e-294fe3e2d1c7.png)
精度はまあまあ良いが、凄みがあるわけでもない

<h1>結論</h1>
monoよりstereoの方が精度が良い。
machine-learned-argmaxを使うことによって精度がどうなるか実験してみたい。

<h1>参考文献</h1>
On the Importance of Stereo for Accurate Depth Estimation:An Efficient Semi-Supervised Deep Neural Network Approach
https://arxiv.org/pdf/1803.09719.pdf
【zsh】絶対やるべき！ターミナルでgitのブランチ名を表示&補完【git-prompt / git-completion】

# :star2: この記事でできること
- ターミナルのプロンプトにgitのブランチ名を常に表示させる（git-prompt）
- gitコマンドをTab補完できるようにする（git-completion）

![スクリーンショット 2020-10-17 22.36.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178077/2df951f9-5ef9-2eac-0267-9f0c20b16d4e.png)


# :star: はじめに
- もともとbashを使っていた時は次の記事を参考に同様の設定をしていました
  - [「Git補完をしらない」「git statusを1日100回は使う」そんなあなたに朗報【git-completionとgit-prompt】](https://qiita.com/varmil/items/9b0aeafa85975474e9b6)
- しかし、macOSがCatalinaにアップデートされてからはzshがターミナルのデフォルトとなり、zshへと移行が進んでいると思います
- 自分も新しいPCでいいかげんzshを使い始めた&意外と情報がまとまっていなくて手間取ったため、今更感はありますが備忘録がてら書きました

# :computer: 確認環境
- macOS Catalina 10.15.7

# :pencil2: git-prompt / git-prompt の用意
- ソース元
  - https://github.com/git/git/tree/master/contrib/completion

```zsh
mkdir ~/.zsh
cd ~/.zsh

curl -o git-prompt.sh https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh
curl -o git-completion.bash https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
curl -o _git https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh
```

- `git-completion.zsh` は `_git` という名前にする
  - https://stackoverflow.com/questions/28028740/git-tab-completion-in-zsh-throwing-errors

# :pencil: .zshrc に設定追記

```:~/.zshrc
# git-promptの読み込み
source ~/.zsh/git-prompt.sh

# git-completionの読み込み
fpath=(~/.zsh $fpath)
zstyle ':completion:*:*:git:*' script ~/.zsh/git-completion.bash
autoload -Uz compinit && compinit

# プロンプトのオプション表示設定
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
GIT_PS1_SHOWSTASHSTATE=true
GIT_PS1_SHOWUPSTREAM=auto

# プロンプトの表示設定(好きなようにカスタマイズ可)
setopt PROMPT_SUBST ; PS1='%F{green}%n@%m%f: %F{cyan}%~%f %F{red}$(__git_ps1 "(%s)")%f
\$ '
```

# :rocket: 以上！
- より良いgitライフを！
スマホのウインドウの高さぴったりにする（アドレスバー分をちゃんと考慮）


100vhがうまく行かないというのがよく知られている部分ですが

```js:area.js
setInterval(function(){
        $(".area").css({"height":window.innerHeight,"min-height":$(window).innerHeight()});
},100)
```
横向きにした時など回転直後など、window.innerHeightの値が異様に小さくなる。
スクロールをしてアドレスバーのエリアが小さくなった時には、$(window).innerHeight()が伸びた分を検知してくれない。

でこれをした時にposition:fixed;をしているときにtop:0だと、隠れたりしてしまうので、オススメはbottom:0;
【備忘録】LaravelでAuthを導入

##Laravelのバージョンを確認

```:ターミナル
$ php artisan -v
```

##Laravel Framework 7.x もしくは 6.xの場合

① ```$ cd ~/[プロジェクトの階層]```まで移動して、
Composerでlaravel/uiパッケージをインストール

```:ターミナル
$ composer require laravel/ui
```

<br>
② Authの認証に必要なルートとビューをスカフォールド
（スカフォールド（scaffold）...必要なフォルダ構成やソースなどを自動的にセットして、すぐに試せる状態までもっていってくれる）

```:ターミナル
$ php artisan ui vue --auth
```

<br>
③ 必要なJavaScriptパッケージをインストール

```:ターミナル
$ npm install
```

```:ターミナル
$ npm run dev
```

```npm install``` → package.jsonに書かれた設定に基づいて、必要なJavaScriptパッケージをダウンロード・インストールするコマンド。
```npm run dev``` → それらをコンパイルして実行可能な状態にするコマンド。

<br>
④ マイグレーションしてAuthの導入完了！

```:ターミナル
$ php artisan migrate
```

<br>
<details>
<summary>Laravel Framework 5.xの場合</summary><div>
下記のコマンドを実行していくだけ！

```:ターミナル
$ cd ~/[プロジェクトの階層]
$ php artisan make:auth
$ php artisan migrate
```

</div></details>


##参考記事
><a href="https://readouble.com/laravel/7.x/ja/authentication.html">【公式】Laravel 7.x 認証</a>
Node.js のバージョン管理は nodebrew と nodenv のどちらを選択すべきか？

# nodebrew と nodenv とは？

Node.js のバージョンを管理するツールになります。

# nodebrew と nodenv の違い

`nodenv` はディレクトリごとにバージョンを指定することが可能ですが、`nodebrew` ではそのような設定はできません。

しかし、`nodebrew` で任意のタイミングで使用するバージョンを切り替えることができるので、そこまで困ることはないはずです。

# nodebrew と nodenv のどちらを選択すべき？

**まず、初心者であれば `nodebrew` をお勧めします。**

`nodebrew` で困ることが発生してから `nodenv` に乗り換えるという流れでいいと思います。

ちなみに `nodebrew` と `nodenv` の 2 つを使ってバージョンを管理していくのはあまりお勧めできないので、片方だけを使用したほうがいいと思います。

# 参考

[・ MacにNode.jsをnodebrewでインストールして環境構築【決定版】](https://qiita.com/7110/items/efe0be1be11bed1db143)
[・ MacにNode.jsをインストール](https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09)
[・ MacにNode.jsをインストール（anyenv + nodenv編）](https://qiita.com/kyosuke5_20/items/eece817eb283fc9d214f)
package-lock.json ってなに？

# 初心者に向けての答え

package-lock.json について、とりあえず以下を守ればプロジェクトに迷惑をかけません。

- **直接編集してはいけません**
- 基本的に無視していいファイルです
- 削除してはいけません
- `npm install` コマンド実行時に変更されることもありますが、そのときに発生する変更は気にしなくて大丈夫です
- マージリクエスト（プルリクエスト）する際に package-lock.json に変更があった場合は、その変更も含めて提出します

※ これは package.json についても同じことが言えます。

# もうちょっと知りたい人に向けての答え

- package-lock.json は `npm install` 実行時に新規作成・更新される
- package-lock.json には `npm install` で実際にインストールしたパッケージ情報が記載されている
- package-lock.json を使用してパッケージをインストールする際には `npm ci` コマンドを実行する
- `npm ci` コマンドを実行する主なユースケースとしては CI 実行時や `git clone` 後の動作確認などで使用する
- 上記の用途があるので package-lock.json は Git で管理したほうがいいファイルである

# 解説

## 新規作成・更新されるタイミング

package-lock.json は `npm install` 実行時に作成・更新されるファイルです。

`npm install` 実行時は以下のような挙動をしています。

1. package.json の内容を更新する
2. package.json の内容をもとに node_modules のディレクトリにパッケージをインストールする
3. node_modules に実際にインストールされたパッケージのバージョン情報が package-lock.json に記述される

## package.json との比較

以下のように記述内容に差があります。

- package.json
  - **インストールすべきパッケージのバージョンの範囲**
  - その他もろもろ（npm-scripts など）
- package-lock.json
  - **`npm install` によって実際にインストールしたパッケージのバージョンのみ**


## package-lock.json を使用する方法

`npm install` の代わりに `npm ci` というコマンドを実行すると package-lock.json を元にパッケージをインストールして node_modules を作成してくれます。

```shell
# package-lock.json のバージョンで node_modules を作成するとき
$ npm ci
```

**裏を返すと、`npm ci` というコマンドを実行しなければ package-lock.json は使用されません。**

## npm install と npm ci の違い

`npm ci` と `npm install` の要点をまとめると以下のようなことがあげられます。

- `npm ci` は `npm install` と同じように全ての依存パッケージをインストールする
- `npm install` コマンド実行によって package-lock.json を更新することがある
- `npm ci` コマンド実行によって package-lock.json は更新されない
- `npm ci` コマンド実行すると node_modules をすべて削除してからパッケージをインストールする

## npm ci の使い所

**`npm ci` の使用頻度の高いユースケースとしては CI 実行時があげられます。**

理由としては、package-lock.json が勝手に更新されるのを防いだり、package-lock.json を参照することでインストールするバージョンを固定して node_modules の内容を同じにするためです。

同様の理由から、新規参画者が `git clone` して動作を確認する場合なども `npm ci` が用いられます。

（※ ただし CI の速度を求めるなら `npm ci` は実行時間がやや長いため node_modules をキャッシュして `npm install` を用いることもあるらしいです。ですが、最初からキャッシュする仕組みを作るよりは、実行時間が長くて困るというような問題が発生してから、そのような対応をすればいいと思います。）


よくある使われどころは以下の通りになります。

- **CI 実行時**
- **`git clone` 直後の動作確認**
- 何かのトラブルで node_modules を空にしてやり直すとき
- 過去の状態を復元するとき

## Git で管理すべきファイル？

**答えは Yes です。**

上記のように `npm ci` コマンドを使用して、パッケージをインストールする用途があるので、package-lock.json は Git で管理すべきファイルになります。

ちなみにインストールするパッケージに何か変更があると、マージリクエスト（プルリクエスト）時に、package-lock.json に大量の差分が出てくるかと思いますが、それが、`npm install` 時に自動的に更新された変更であれば、基本的に無視して大丈夫です。

# まとめ

- package-lock.json は `npm install` 実行時に新規作成・更新される
- package-lock.json には `npm install` で実際にインストールしたパッケージ情報が記載されている
- package-lock.json を使用してパッケージをインストールする際には `npm ci` コマンドを実行する
- `npm ci` コマンドを実行する主なユースケースとしては CI 実行時や `git clone` 後の動作確認などで使用する
- 上記の用途があるので package-lock.json は Git で管理したほうがいいファイルである
【Vim】初めてのVim

# 概要
この記事ではVim入門的な内容となっており、自身の備忘録や初学者の役に立てればと思い執筆しました。
主にVimを用いた基本操作が中心です。

# 環境
OS:macOS Catalina
Terminal:iterm2

# 基本操作

### 編集
【編集モード】
ファイルを開いた段階では編集が行えないので、キーボードのiを入力することで編集モードに切り替わります。

上記は基本操作で以下が応用になります。

【カーソルの後ろから編集】
iではなくキーボードのaを押下

【行末から編集】
シフトキーとaを押下

【行頭から編集】
シフトキーとiを押下

### 終了
※escキーを押下し編集モードから切り替わっていることが前提※

【保存せずに終了】
:q!

【ファイルを開き直す】
:e!

【保存して終了】
:wqもしくは:ZZ

# ノーマルモードでの編集操作
1.削除

【デリート】
x

【バックスペース】
シフトキー+X

【行全体を削除】
dd

【カーソル移行を削除】
シフトキー+D

2.移動
hjklを使う

h 左へ移動
l　右へ移動
j　下へ移動
k　上へ移動

応用として数字+キー操作で行数を指定移動することも可能

例:3kとした場合3行上へ移動出来る


w　単語が,で区切られていた場合、単語単位で右へ移動
＄　行末へ移動
gg　行の先頭へ移動
シフト+G ファイルの最終行へ移動
:+数字 指定した行へ移動

# その他
【読み取り専用モード】
view ファイル名とすると読み取り専用モードで開く。そのため保存は行えません。
また、vim -R ファイル名で同様の操作が可能です。

【行番号を表示】
:set nu

【一括置換】
例：カーソル行のaをbに置換→:s/a/b
例1：ファイル全体のaをbに置換→:%s/a/b
例2：ファイル全体のaをbに置換→(置換前に確認をする場合):%s/a/b

# 最後に
今回執筆したコマンドはごく一部なので今後も追加と修正をしながら本記事をブラッシュアップしていこうと思います。
お読みいただきありがとうございました。
【npm】 パッケージのインストール先の確認（npm list）

# `npm list`

`npm list` によってパッケージのインストール先の確認をすることができます。

**ローカルインストールの場合**

```shell
# ローカルインストールされたパッケージの確認
$ npm list --depth=0
```

**グローバルインストールの場合**

```shell
# グローバルインストール先の確認
$ npm list -g | head -1

# グローバルインストールされたパッケージの確認
$ npm list -g --depth=0
```

# 実行例

## ローカルインストールの場合

```shell
# typescript のインストール
$ npm install typescript
+ typescript@4.0.3

# node_modules に typescript のパッケージが存在していることの確認
$ ls node_modules
typescript

# ローカルインストールされたパッケージの確認
$ npm list --depth=0
typescript-node-base@1.0.0 /Users/sugurutakahashi/git/typescript-node-base
└── typescript@4.0.3

# node_modules のない適当なディレクトリに移動
$ cd ../
$ ls node_modules
標準出力なし（＝ node_modules が空）

# ローカルインストールされたパッケージの確認
$ npm list --depth=0
/Users/sugurutakahashi/git
└── (empty)
```

このようにローカルインストールされたパッケージはカレントディレクトリの node_modules の内容を確認していることがわかります。


## グローバルインストールの場合

```shell
# （前提その1）nodebrew で複数のバージョンの Node.js のバージョンを管理している状態（v14.13.1 を使用）
$ nodebrew ls
v12.6.0
v14.13.1

current: v14.13.1

# グローバルインストール先の確認（npm list -g | head -1）
$ npm list -g | head -1
/Users/sugurutakahashi/.nodebrew/node/v14.13.1/lib

# グローバルインストールされたパッケージの確認（npm list -g --depth=0）
$ npm list -g --depth=0
/Users/sugurutakahashi/.nodebrew/node/v14.13.1/lib
├── npm@6.14.8
├── typescript@4.0.3
└── yarn@1.22.10

# v12.6.0 に切り替え
$ nodebrew use v12.6.0
$ nodebrew ls
v12.6.0
v14.13.1

current: v12.6.0

# グローバルインストール先の確認
$ npm list -g | head -1
/Users/sugurutakahashi/.nodebrew/node/v12.6.0/lib

# グローバルインストールされたパッケージの確認
$ npm list -g --depth=0
/Users/sugurutakahashi/.nodebrew/node/v12.6.0/lib
├── @vue/cli@4.4.6
├── @vue/cli-service-global@4.4.6
├── express@4.17.1
├── firebase-tools@8.6.0
├── gatsby-cli@2.12.66
├── gitbook-cli@2.3.2
├── multi-file-swagger@2.3.0
├── npm@6.14.8
└── yarn@1.22.10
```

このように Node.js のバージョンを切り替えるとグローバルインストールされたパッケージの内容が異なることがわかります。

つまり、グローバルインストールしても `nodebrew` などで複数の Node.js のバージョンを管理している場合は、`npm install -g <package>` したパッケージが、それぞれのバージョンで別のものとして管理されるということになります。
Laravel 6.x 【エラー】 Base table or view not found: 1146 Table 対応方法

#制作環境

Windows 10
Laravel : 6.18.35
Laravel/ui : 1.0
Laravel-mix : 5.0.1
Bootstrap : 4.0.0
MDBootstrap : 4.19.1
chart.js : 2.9.3
XAMPP
PHP : 7.4.3
Visual Studio Code


#はじめに

この記事はプログラミングをはじめたばかりの素人が、できたことをメモするのに利用しています。
内容には誤りがあるかもしれません。

#Base table or view not found: 1146 Table

|発生のタイミング|内容・症状|
|:---|:---|
|php artisan コマンドでオリジナルコマンドにてテーブルの作成をした時に発生。|テーブルの作成がエラーでできない。|

###原因
参照しにいったテーブルが見つからない為。

###解決方法
作成したテーブルのモデルに以下を追記。

```PHP
protected $table = 'テーブル名';
```
Laravel 6.x 【エラー】 500 | Server Error 対応方法

#制作環境

Windows 10
Laravel : 6.18.35
Laravel/ui : 1.0
Laravel-mix : 5.0.1
Bootstrap : 4.0.0
MDBootstrap : 4.19.1
chart.js : 2.9.3
XAMPP
PHP : 7.4.3
Visual Studio Code


#はじめに

この記事はプログラミングをはじめたばかりの素人が、できたことをメモするのに利用しています。
内容には誤りがあるかもしれません。

#500 | Server Error

##現象①

|発生のタイミング|内容・症状|
|:---|:---|
|Laravelインストール初期に発生。|簡易サーバーに接続できず、ページが表示されない。|

###原因
.envファイルが存在しない為。

###解決方法
.env.exampleファイルを複製し、.envファイルを作成後、ターミナルで以下を実行する。

```PHP
php artisan key:generate
php artisan cache:clear
php artisan config:clear
```

##現象②

|発生のタイミング|内容・症状|
|:---|:---|
|php artisan serveで簡易サーバーを起動すると発生。|急に簡易サーバーに接続できなくなり、ページの確認ができなくなる。前日までは問題なく確認できている。|

###原因
ルートの記述に問題がある。

###解決方法
web.php(ルート情報)の記述を以下に変更する。

```PHP:web.php
use Illuminate\Routing\Route;  =>  use Illuminate\Support\Facades\Route;
```
【Laravel】ユニットテストのファイルを生成した時 にDatabase [mysql] not configured. が出た時の対処法

##エラー状況
Laravelのユニットテストを実行するためにターミナルからテストファイルを生成しようとした時にエラーが出てしまい、生成ができずに行き詰まる。

以下のコマンドでテストファイルの生成を実行しようとする。

```
$ php artisan make:test SampleTest
```
But!!

Database ［mysql］ not configured. と表示され、生成ができない状態。
<img width="40%" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671576/3781123e-cb31-6622-225e-f448fd7c2e44.png">
##原因
vender/laravel/framework/src/illminate/Database/DatabaseManager.php
の該当lineを覗いてみるが、問題なさそう。というかよくわからない。

ここでさっきCirclCIを設定した時にconfig/database.phpを変更した事を思い出したので
そのファイルを確認したみると、一番下にこの記述をしている。

```php:database.php
    'connections' => [
        'circle_test' => [
            'driver' => 'mysql',
            'host' => '127.0.0.1',
            'port' => '3306',
            'database' => 'circle_test',
            'username' => 'ubuntu',
            'password' => '',
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
    ]
```
CircleCI用に設定したコードですが、また新しく'connections'作って記述してました、、、
一旦このコードを全て消して、再度ターミナルからテストファイルを生成したら
普通にうまくいきました！！

##総括
今回は単純な記述ミスによるエラーでした。
ただ同じエラーが発生した場合はconfig/database.php内の記述を疑ってみてください。
ググっても答えが出てこなかったので、参考になればと思います。
Laravel 【初心者】 PHPフレームワーク Laravel入門 第2版 の内容を一部図式化してみた件 ⑥ビューコンポーザクラス

#はじめに
この記事はプログラミングをはじめたばかりの素人が、メモするのに利用しています。
内容には誤りがあるかもしれません。

#PHPフレームワーク Laravel入門 第2版 について
Laravelを独学で学ぶにあたり、評判がよかったのでAmazon Kindleで購入しました。
**内容も色々な方法が書いてあるので、Laravelをはじめて勉強される方にはおすすめの本です。**

Amazon リンク
https://www.amazon.co.jp/gp/product/B08625YD7H/ref=ppx_yo_dt_b_d_asin_image_o09?ie=UTF8&psc=1

#図式化について
学習中に、文字だけだとイメージが掴みづらかったので、自分の為に作成したものです。
また方法が色々あり過ぎて混乱したので、整理する意味もあります。
ディレクトリを覚えるのにも使いました。

コードは必要なものだけ抜粋しているので、全てではありません。
これだけ見ても勉強にはならないので、**PHPフレームワーク Laravel入門 第2版**を是非購入してみて下さい。

※ちなみに著者の方とは何の関係もありません。

素人が作成した物なので、参考程度に使ってください。

#ビューコンポーザクラス

![viewcom.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/6ee25652-d8cb-4031-4509-289131a45207.jpeg)
Laravel 【初心者】 PHPフレームワーク Laravel入門 第2版 の内容を一部図式化してみた件 ⑤コレクションビュー

#はじめに
この記事はプログラミングをはじめたばかりの素人が、メモするのに利用しています。
内容には誤りがあるかもしれません。

#PHPフレームワーク Laravel入門 第2版 について
Laravelを独学で学ぶにあたり、評判がよかったのでAmazon Kindleで購入しました。
**内容も色々な方法が書いてあるので、Laravelをはじめて勉強される方にはおすすめの本です。**

Amazon リンク
https://www.amazon.co.jp/gp/product/B08625YD7H/ref=ppx_yo_dt_b_d_asin_image_o09?ie=UTF8&psc=1

#図式化について
学習中に、文字だけだとイメージが掴みづらかったので、自分の為に作成したものです。
また方法が色々あり過ぎて混乱したので、整理する意味もあります。
ディレクトリを覚えるのにも使いました。

コードは必要なものだけ抜粋しているので、全てではありません。
これだけ見ても勉強にはならないので、**PHPフレームワーク Laravel入門 第2版**を是非購入してみて下さい。

※ちなみに著者の方とは何の関係もありません。

素人が作成した物なので、参考程度に使ってください。

#コレクションビュー

![collection.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/b38dadd2-5258-ed1d-b78e-54c0fff9c05b.jpeg)
人生初 コンテスト NNC-challenge vol.2 に参加しました。

# 人生初コンテスト、NNC challenge vol.2 

Qiitaに初めて投稿します、よろしくお願いいたします。

### Neural Network Consoleを用いてAudiostockの音声（BGM）データを解析
NNC-challenge vol.2は以下を参照。
https://nnc-challenge.com/

### 参加の背景
AIに関する知識が身につけばと思い参加しました。

### 今回のテーマ
B．自由な発想で音声データを解析するにしました。
"プログレの音声を分類する。"

### 学習データ提供
学習用データ提供：Audiostock

### やったこと
1．提供されたデータにタグ付けを行う。
今回、手動での設定になりますがプログレと分類してあるデータに1を、
それ以外のデータに0を設定しました。

- 学習データ 315個
- 検証データ 100個

内プログレタグ付きデータ

|学習用|検証用|
|:----:|:---:|
|3/315個|6/100個|

2. サンプルデータ、wav_keyboard_soundを元に音声データ分析を行うNNCを組みました。
![ネットワーク.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/800345/db662b7e-2eda-7a58-7f3f-4af0c5399fed.png)

### 結果
学習結果は以下になりました。
![学習結果.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/800345/b720e915-bb06-8e5c-1724-72ded22f3d0a.png)
かなり信憑性の薄い...というか最悪のグラフになりました...

リソース　　　　　　　　　　　学習時間
cpu　　　　　　　　　　　　　 --:--:-- （測定不能でした）
NVIDIA® Tesla® K80 GPU x 1　　00:04:41
NVIDIA® Tesla® V100 GPU x 1　 00:01:54
やはり高性能なGPUほど処理時間が早いです。

※参考に　サンプルデータwav_keyboard_soundによるCPU、GPU処理速度の結果
リソース　　　　　　　　　　　学習時間
cpu　　　　　　　　　　　　　 00:07:57
NVIDIA® Tesla® K80 GPU x 1　　00:00:32
NVIDIA® Tesla® V100 GPU x 1　 00:00:14
CPUと比べるとGPUの使用はとても速いと感じました。

以下、評価結果です。
![分類マトリックス.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/800345/35ea0f3c-bcba-08f3-df61-24384ec75bf5.png)

![尤度グラフ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/800345/bc11aa15-0de4-8a20-04f6-4db70fcd7662.png)

すべてがプログレと評価されてしまった事態に...
判断基準が曖昧、前準備が不足しすぎているためこういう結果になってしまったのではないかと推測します。

### 感想
初めてのコンテストおよびディープラーニング参加でした。
とても難しかったですが、動作できたことに何よりの喜びを感じます。
ほかの方を見てみるとpythonを用いて前準備を行っていたりと音声加工技術がすごいと思いました。 
これを機に様々なツールに手を加えたいと思います。
Laravel 【初心者】 PHPフレームワーク Laravel入門 第2版 の内容を一部図式化してみた件 ④サービスとビューコンポーザ

#はじめに
この記事はプログラミングをはじめたばかりの素人が、メモするのに利用しています。
内容には誤りがあるかもしれません。

#PHPフレームワーク Laravel入門 第2版 について
Laravelを独学で学ぶにあたり、評判がよかったのでAmazon Kindleで購入しました。
**内容も色々な方法が書いてあるので、Laravelをはじめて勉強される方にはおすすめの本です。**

Amazon リンク
https://www.amazon.co.jp/gp/product/B08625YD7H/ref=ppx_yo_dt_b_d_asin_image_o09?ie=UTF8&psc=1

#図式化について
学習中に、文字だけだとイメージが掴みづらかったので、自分の為に作成したものです。
また方法が色々あり過ぎて混乱したので、整理する意味もあります。
ディレクトリを覚えるのにも使いました。

コードは必要なものだけ抜粋しているので、全てではありません。
これだけ見ても勉強にはならないので、**PHPフレームワーク Laravel入門 第2版**を是非購入してみて下さい。

※ちなみに著者の方とは何の関係もありません。

素人が作成した物なので、参考程度に使ってください。

#サービスとビューコンポーザ

![service.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/743cf3ec-f598-c36f-5a93-13582ada5e7e.jpeg)
Laravel 【初心者】 PHPフレームワーク Laravel入門 第2版 の内容を一部図式化してみた件 ③サブビュー

#はじめに
この記事はプログラミングをはじめたばかりの素人が、メモするのに利用しています。
内容には誤りがあるかもしれません。

#PHPフレームワーク Laravel入門 第2版 について
Laravelを独学で学ぶにあたり、評判がよかったのでAmazon Kindleで購入しました。
**内容も色々な方法が書いてあるので、Laravelをはじめて勉強される方にはおすすめの本です。**

Amazon リンク
https://www.amazon.co.jp/gp/product/B08625YD7H/ref=ppx_yo_dt_b_d_asin_image_o09?ie=UTF8&psc=1

#図式化について
学習中に、文字だけだとイメージが掴みづらかったので、自分の為に作成したものです。
また方法が色々あり過ぎて混乱したので、整理する意味もあります。
ディレクトリを覚えるのにも使いました。

コードは必要なものだけ抜粋しているので、全てではありません。
これだけ見ても勉強にはならないので、**PHPフレームワーク Laravel入門 第2版**を是非購入してみて下さい。

※ちなみに著者の方とは何の関係もありません。

素人が作成した物なので、参考程度に使ってください。

#サブビュー

![sub.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/cb30f5bf-c95a-3fc1-e31a-ab2f6a445113.jpeg)
Laravel 【初心者】 PHPフレームワーク Laravel入門 第2版 の内容を一部図式化してみた件 ②コンポーネント

#はじめに
この記事はプログラミングをはじめたばかりの素人が、メモするのに利用しています。
内容には誤りがあるかもしれません。

#PHPフレームワーク Laravel入門 第2版 について
Laravelを独学で学ぶにあたり、評判がよかったのでAmazon Kindleで購入しました。
**内容も色々な方法が書いてあるので、Laravelをはじめて勉強される方にはおすすめの本です。**

Amazon リンク
https://www.amazon.co.jp/gp/product/B08625YD7H/ref=ppx_yo_dt_b_d_asin_image_o09?ie=UTF8&psc=1

#図式化について
学習中に、文字だけだとイメージが掴みづらかったので、自分の為に作成したものです。
また方法が色々あり過ぎて混乱したので、整理する意味もあります。
ディレクトリを覚えるのにも使いました。

コードは必要なものだけ抜粋しているので、全てではありません。
これだけ見ても勉強にはならないので、**PHPフレームワーク Laravel入門 第2版**を是非購入してみて下さい。

※ちなみに著者の方とは何の関係もありません。

素人が作成した物なので、参考程度に使ってください。

#コンポーネント

![component.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/60a483e1-709b-197e-fdbb-bced1489bb1a.jpeg)
Laravel 【初心者】 PHPフレームワーク Laravel入門 第2版 の内容を一部図式化してみた件 ①セクション

#はじめに
この記事はプログラミングをはじめたばかりの素人が、メモするのに利用しています。
内容には誤りがあるかもしれません。

#PHPフレームワーク Laravel入門 第2版 について
Laravelを独学で学ぶにあたり、評判がよかったのでAmazon Kindleで購入しました。
**内容も色々な方法が書いてあるので、Laravelをはじめて勉強される方にはおすすめの本です。**

Amazon リンク
https://www.amazon.co.jp/gp/product/B08625YD7H/ref=ppx_yo_dt_b_d_asin_image_o09?ie=UTF8&psc=1

#図式化について
学習中に、文字だけだとイメージが掴みづらかったので、自分の為に作成したものです。
また方法が色々あり過ぎて混乱したので、整理する意味もあります。
ディレクトリを覚えるのにも使いました。

コードは必要なものだけ抜粋しているので、全てではありません。
これだけ見ても勉強にはならないので、**PHPフレームワーク Laravel入門 第2版**を是非購入してみて下さい。

※ちなみに著者の方とは何の関係もありません。

素人が作成した物なので、参考程度に使ってください。

#セクション
![section.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/10b3ccf3-79a5-6bb4-676e-dea99c025c06.jpeg)
スマホで写真撮る人は必読？スマホのフラッシュライト進化させます。

#目的
スマホのフラッシュライト活用してる人いますか？
落とし物探すときに隙間照らすぐらいしかないですよね。

でも、写真を撮るときに光って大切なんです。（知らんけど）
なので、被写体との距離でライトの明るさを自動で調整できるようにしました。

#この記事でできること
・node.jsでobnizを操作
・超音波測距センサ（HC-SR04 ）で物体との距離を測る
・LEDライト（WS2811）を光らせ、明るさを調節する
・スマホがガジェット感出てかっこよくなる（気がする）

#完成したらこんな感じ

スマホはこんな感じ
![スマホ写真.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737363/50e11ed9-53c6-901d-e00a-d32d518310ec.jpeg)

動かしたらこんな感じ
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">くまの距離に合わせて明るさ調整します。最高の明るさで写真撮れます。<br>ちなみにこのくまはマウスパッドで、嫁さんとお揃いです。<a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a><a href="https://twitter.com/hashtag/obniz?src=hash&amp;ref_src=twsrc%5Etfw">#obniz</a><a href="https://twitter.com/hashtag/%E3%81%A8%E3%82%82%E3%81%A0%E3%81%A1%E3%81%AF%E3%81%8F%E3%81%BE?src=hash&amp;ref_src=twsrc%5Etfw">#ともだちはくま</a> <a href="https://t.co/l9wJk8KsII">pic.twitter.com/l9wJk8KsII</a></p>&mdash; sawa (@sawakoshi_yy) <a href="https://twitter.com/sawakoshi_yy/status/1317870089488584705?ref_src=twsrc%5Etfw">October 18, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


#コード

```javascript
const Obniz = require('obniz');
const obniz = new Obniz(''); // Obniz_IDに自分のIDを入れます

obniz.onconnect = async function () {
    // RGB LEDを利用
    const rgbled = obniz.wired('WS2811', { gnd: 0, vcc: 1, din: 2 });
    // 超音波測距センサを利用する
    const hcsr04 = obniz.wired('HC-SR04', { gnd: 8, echo: 9, trigger: 10, vcc: 11});
    // ディスプレイ表示（初期画面）
    obniz.display.clear();
    obniz.display.print('Hello obniz!');

    // setIntervalで間隔を作る
    setInterval(async function () {
        // 距離を取得
        let distance = await hcsr04.measureWait();
        // 温度をコンソールに表示
        console.log(distance + ' mm');
        // obnizディスプレイに表示
        // 一度消してから距離+mmの単位を表示
        obniz.display.clear();
        obniz.display.print(distance + ' mm');
        if(distance > 2550){
            distance = 255;
        }
        rgbled.rgb(distance/10, distance/10, distance/10);
    }, 1000); // 1000ミリ秒 = 1秒
}
```

#考察
スマホのフラッシュライト使ってない。

光センサも使って「周りの明るさ」＋「被写体との距離」でライトの明るさを調整しようと思いましたが、光センサ断念してしまいました。

被写体との距離ですが、どことの距離を計測しているか視覚的に分かるようになれば、もっと正確に明るさを調整できそうです。

嫁さんとの心の距離も測れないですかね。
５分で出来るアウトライン付きトゥーン(Mantra)

## 前提(困った現状)
時は西暦２０２０年、Houdini18.5がそろそろ来ようかというご時世。

[なんとToonOutlineShaderが滅びてました。](https://www.sidefx.com/ja/docs/houdini/nodes/shop/toonoutlineshader.html)
**This node type is hidden. It is no longer supported.**

しかし滅びたという割にTabメニューから呼び出せてしまいます。
なんてこった。

[そしてToonColorShaderはアウトラインを描いてくれません。](https://www.sidefx.com/ja/docs/houdini/nodes/shop/tooncolorshader.html)
ドキュメントの絵にはアウトラインが描いてありますがこんな絵はレンダリングしてくれません。
またこれは３トーン固定です。

ネットでHoudiniのトゥーンを検索かけるとたいていアウトライン用の別ジオメトリを
マージするなり別オブジェクトにするなりするのでレンダリング資源を食います。

といった感じの大変美味しくない状況です。

## モチベーション
正直レンダリング時間もかけたくないしシーンが重くなって欲しくないし
そもそも簡単にやれる手段が現状無いのをなんとかしたい。
Houdiniのアウトライン付きトゥーンのとっかりが欲しい。

## 最もシンプルで簡単で手っ取り早い解決方法
３トーンで良いなら最もシンプルで簡単で手っ取り早い解決方法があります。
ものの５分で現状のToonColorShaderにアウトラインを足すことが出来ます。
まずは普通にToonColorShaderを作ります。

![2020-08-12 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/499e3382-9c51-b231-55cd-e8dcbe744c3e.png)

でDistantLightを作ってブタさんにアサインするとこうなりますわな。
アウトラインは無いです。

![2020-08-12 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/9fe8684f-c477-e7b0-995e-c9441ada829b.png)

このToonColorShaderを右クリックメニューからAllowEditingContentsしてやってダブルクリックでマテリアルの中に潜ります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/82fcde8c-12a6-a881-4ea9-e0f8e17246c4.png)

* **Global Variables**
* **Edge Falloff**(カメラベクターとアイベクターの為す角度を０～１で返す。フレネルやベルベットで使う)
* **Vector to Float**
* **Ramp Parameter**(Nameは必ず指定！)
* **Multiply**

の５つのノードを作って図の様にマテリアルノードネットワークに差し込みましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/513df1dd-0b7b-68b8-5cc9-875c8706e153.png)

図の様にRampパラメータが追加されるので左側の隅っこにだけ黒を設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/dbedcc1e-565a-188c-5791-46fb831aedde.png)

するとこの様に法線が視線に対して垂直な法線の面がアウトラインとして描画される。
更に外側の輪郭線だけ太く出したいということであればPeakで少し太らせた別モデルを用意して反転させて
黒のコンスタントをアサインすれば
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153910/38f3f534-18c2-21c3-49aa-e9d459df2eb0.png)

この様な力強い輪郭線を持ったトゥーンをレンダリングする事が出来ます。
あと一様な太さのアウトラインが欲しいということであればWrenというものがありますので
北口さんのこのページ
https://qiita.com/kit2cuz/items/0acc5b6352129db587cb
をご覧になると良いでしょう。

他にも部分部分でアウトラインの強弱を調整したいとかいろいろあると思いますが
とりあえず今回は手っ取り早くアウトライン付きトゥーンをMantraで出すだけに留めておきたいと思います。

では。
消し損ねたマイグレーションファイルを完全に消す

### 謎のマイグレーションファイルがあって気持ち悪いので消し方を調べてスッキリしたことを書いていこうと思います。
## 現在のマイグレーションファイルの状況

```
rails db:migrate:status
```

###マイグレーションファイルを確かに消したはずなのに
![20200929181946.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/743908/6bad0b9e-53ee-828f-8400-5dafc935059d.png)
### こんな感じでNO FILEが残ってる。
NO FILEはマイグレーションファイルは消したはずなのにコンピューター上に残ってしまっているということです。気持ち悪いので消します。

```
rails db:rollback
```

- これでstatusの部分がupからdownになります。（編集できるということ）
-  この空のファイルを名前をつけて復活させる

## touchコマンド

```
touch db/migrate/20200929050736_hoge.rb
```
![aa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/743908/d9936e1c-6dfe-8319-b1a1-35a9e454dbdb.png)
これによってhogeというマイグレーションファイルが復活します。しかしこのファイルには何も書かれていないので適当に記述します。以下の文を丸々追加

```ruby

class Hoge < ActiveRecord::Migration[6.0]
  def change
  end
end
```
### rails db:migrateを実行する

```
rails db:migrate
```
### ここまできたら消す準備OK。しかしステータスがupのままなので消すためにはdownにする必要がある。

```
rails db:rollback
```
![iiii.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/743908/80b98352-efa5-0014-57ef-af52f6b4cdd3.png)

downになりました。ここで消すコマンド

```
rm -rf db/migrate/20200929050736_Hoge.rb
```
もう一度rails db:migrate:statusで確認してみましょう

### これで消し損ねたファイルを完全に消すことができました。
Laravel 6.x @section と @yield の関係を図式化してみた件 セクション、コンポーネント、サブビュー、コレクションビュー 

#はじめに

この記事はプログラミングをはじめたばかりの素人が、メモするのに利用しています。
内容には誤りがあるかもしれません。

#セクション

![section.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/2cff8b33-7efa-0e95-258f-927040339e48.jpeg)

#コンポーネント

![componet.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/31901a30-e691-c216-c598-4fb58d6ff42b.jpeg)

#サブビュー

![sub.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/29060335-7657-0927-d5bb-9098cd342e94.jpeg)

#コレクションビュー

![colection.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/6accabfe-6d0c-d493-3c80-185e49c030b1.jpeg)
Laravel 5.6/6.x/7.x エラーメッセージの日本語化

#はじめに
この記事はプログラミングをはじめたばかりの素人が、メモするのに利用しています。
内容には誤りがあるかもしれません。

#Laravel 5.6

リファレンス
https://readouble.com/laravel/5.6/ja/validation-php.html


プロジェクトのディレクトリでターミナルを起動し、上から順にコマンドを実施する。

```PHP
php -r "copy('https://readouble.com/laravel/5.6/ja/install-ja-lang-files.php', 'install-ja-lang.php');"

php -f install-ja-lang.php

php -r "unlink('install-ja-lang.php');"
```

#Laravel 6.x

リファレンス
https://readouble.com/laravel/6.x/ja/validation-php.html

プロジェクトのディレクトリでターミナルを起動し、上から順にコマンドを実施する。

```PHP
php -r "copy('https://readouble.com/laravel/6.x/ja/install-ja-lang-files.php', 'install-ja-lang.php');"

php -f install-ja-lang.php

php -r "unlink('install-ja-lang.php');"
```

#Laravel 7.x

リファレンス
https://readouble.com/laravel/7.x/ja/validation-php.html

プロジェクトのディレクトリでターミナルを起動し、上から順にコマンドを実施する。

```PHP
php -r "copy('https://readouble.com/laravel/7.x/ja/install-ja-lang-files.php', 'install-ja-lang.php');"

php -f install-ja-lang.php

php -r "unlink('install-ja-lang.php');"
```
tmux（2.6以降）のコピーモードについてまとめた（for vimmer）

tmuxのコピーモードについていろいろwebに情報が散逸しているので、自分用にまとめる。

なおキーバインドの設定はvim使い向けです

※2020/10/21追記　一部キーバインドの設定が間違っていたので修正

# 環境
- Mac OSX　10.14.5
- tmux 3.1b

# コピー時の流れ
この記事に書いてある設定をすると、以下のような流れでコピーを行える

1. prefixキー + [ でコピーモードに入る
2. コピー開始したい位置に移動（hjklなどviキーバインド）
3. vで選択開始（Vで行ごと選択開始）
    1. コピーしたい場合：yまたはEnterを押してコピー（Macのクリップボードにもコピーされてる🎉）
    2. 矩形選択との切り替えをしたい場合：Ctrl+vを押す
    2. 選択解除したい場合：Escを押す
    3. コピーモード自体を終了したい場合：qを押す

# .tmux.confの設定
## viキーバインドの設定
```
set-window-option -g mode-keys vi
```
tmuxの操作をviキーバインドでできるように。
今回に関係するところだと、コピーの選択範囲を指定するときに、hjklで移動したりやCtrl+vで矩形選択が使えるようになる。

## 選択開始キーの設定
```
bind -T copy-mode-vi v send-keys -X begin-selection
```
vimライクに「v」でコピーしたい範囲の選択を開始する

## クリップボードへのコピー
```
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"
```
`bind-key`でコピーをするキーバインドを指定。Enterの他に、vimライクに、yでコピーする設定をする人が多いみたい。

`send-keys -X copy-pipe-and-cancel "pbcopy`が、クリップボードへのコピーを行う設定
ネットで調べると`reattach-to-user-namespace pbcopy`を指定する的な内容が出てくることがあるが、tmux 2.6以降では不要なようです。参考：https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/issues/66

※pbcopyはターミナルの出力をクリップボードにコピーしてくれるもの

## 矩形選択の切り替え設定
```
bind -T copy-mode-vi C-v send-keys -X rectangle-toggle
```
あくまで選択方法の切り替えを行うだけなので、コピーモードに入ってすぐ「Ctrl+v」を押してもvimのようにすぐ選択開始はされないので注意。（あくまで選択開始できるのは「v」）

## Vで行ごと選択
```
bind -T copy-mode-vi V send-keys -X select-line
```
これは矩形選択と違って、Vで行ごと選択開始される。

## Escで選択範囲を解除させる設定
```
bind -T copy-mode-vi Esc send-keys -X clear-selection
```
vimライクに、Escで選択範囲解除

# 参考
https://github.com/tmux/tmux/issues/754
Laravel 6.x Route::resource で追加されるルーティングとポリシーのメソッドとの対応をまとめてみた

#はじめに

この記事はプログラミングをはじめたばかりの素人が、メモするのに利用しています。
内容には誤りがあるかもしれません。

#Route::resource( 'URI', 'コントローラ名' );
ルーティングをひとまとめにしたメソッド。
引数１ で割り当てるアドレスを指定する。
引数２ でそれによって呼び出される処理(コントローラー)を指定する。

#追加されるルーティングとポリシーとの対応

|ルーティング|内容|ポリシーのメソッドとの対応|
|:--:|:---|:---:|
|index|一覧表示|viewAny|
|create|登録画面表示|create|
|store|登録処理|create|
|show|個別表示|view|
|edit|更新画面表示|update|
|update|更新処理|update|
|destroy|削除処理|destroy|