OmniAICreator/Qiita-1.07M huggingface dataset:
Raspberry Pi をAFPサーバーにする

# コレは何？

ラズパイの`/home/pi/share`フォルダを、Macに共有するための設定です。

ラズパイのフォルダーからMacへのファイルの移動は、rcpを使用していましたがさすがに面倒になったので共有フォルダを作成しました。
Sambaも試してみたのですが、ファイルのパーミッションまわりが気に入らなかったのでAFPにしました。


# 必要な準備 for Raspberry Pi

```sh:sh
$ sudo apt-get install netatalk
$ dpkg -l | grep netatalk
ii  netatalk                              3.1.12~ds-3                         armhf        Apple Filing Protocol servic
```

バージョンが、2と３で挙動が異なるようです。

3の場合は、`/etc/netatalk/afp.conf`の編集が必要です。

```sh:sh
sudo vi /etc/netatalk/afp.conf
```

```sh:sh
;
; Netatalk 3.x configuration file
;

[Raspi4]
 path = /home/pi/share
```

こんな感じです。

詳細は、[こちら](http://netatalk-doc-ja.osdn.jp/3.1/htmldocs/afp.conf.5.html)で確認して下さい。

再起動します。

```sh:sh
$ sudo systemctl restart netatalk
```


# Mac側の操作

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/6d80413a-4780-fbb8-02b6-3e850f9014a3.png)

から、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/f64f051a-b161-0b4a-8203-f111c57112b9.png)


Raspberry Piの接続先を設定します。

以上で終了です。

# サービスの停止

```sh:sh
$ sudo systemctl stop netatalk
$ sudo systemctl disable netatalk
Synchronizing state of netatalk.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable netatalk
Removed /etc/systemd/system/multi-user.target.wants/netatalk.service.
```
SNNを始める際に読んでおくと良いと感じた本、論文まとめ

## 概要

1年間SNNに関する研究してきての回顧ログです。

SNNは、簡単にではあるものの**神経工学**に関する知識が必要となります。そのため、神経工学やSTDPを理解、実装するために参考にした資料や論文を「この順番で読むと良さそう」的な形で紹介していきます。

## 1. メカ屋のための脳科学入門-脳をリバースエンジニアリングする-

神経工学の入門書。何より普通に面白い本(主観)。**最初に**読むと良さそう。

ニューロンの基本的な動きや、脳内での情報表現方法がわかりやすく書いてあります。

## 2. 続 メカ屋のための脳科学入門-記憶・学習/意識 編-

先ほどの本の続編。

ヘブ則やSTDP、長期増強や長期抑制についても説明があります。

## 2.5 [すごい学生のScrapbox](https://scrapbox.io/AGI/Spiking_Neural_Network)

京大から東大院に言ってるすごい人のメモ。

見つけたのがかなり後半だったこともあり、私は参考にできたかったもののドメイン知識の概形は綺麗に捕らえられている。

分からない用語の取っ掛かりとしては便利そう。

## 3. [スパイキングニューラルネットワークにおける深層学習](https://www.jstage.jst.go.jp/article/seisankenkyu/71/2/71_159/_pdf)

SNNについてのサーベイ論文。

様々な手法について**日本語**で記されている。

## 4. [SNNのGithub](https://github.com/Shikhargupta/Spiking-Neural-Network)

理論は、*スパイキングニューラルネットワークにおける深層学習*の*4.2	 二層 SNN における教師なし学習例*が使用されている。また、私の論文冒頭の先行研究に記している*Unsupervised learning of digit recognition using spike-timing-dependent plasticity*を一部実装したものでもある。

## 5. +α

分かりづらくて調べたものたち

### レートコーディング or テンポラルコーディング
### おばあちゃん細胞表現 or 分散表現
---
### [脳内情報表現に関する一般的な命題](https://www.jstage.jst.go.jp/article/jnns/9/1/9_1_16/_pdf)

日本語の論文だが、論点が時折ずれていて読みづらいので用語の意味理解などにどうぞ

### [Philosophy of the Spike: Rate-Based vs. Spike-Based Theories of the Brain](https://www.frontiersin.org/articles/10.3389/fnsys.2015.00151/full)

レートコーディングとテンポラルコーディングの違いやお互いの利点がよくわかる論文

### ニューロンモデル
---
### [Which Model to Use for Cortical Spiking Neurons?](https://www.izhikevich.org/publications/whichmod.pdf)

様々なニューロンについて~~批判している~~述べている論文

本論文で最良と言われているIzhikevich modelは、*作者の作ったモデル*なのでそういった意図がある論文とも言えるの参考程度に。

### [これからスパイキングニューラルネットワークを始める人へ1 : ニューロンのモデルについて](http://nonatonic.hatenablog.com/entry/2017/11/25/005515)

かなり簡単にニューロンモデルやSNNについてまとめられているブログ。ただ途中で筆を投げている。

### [Pythonによるスパイキングニューラルネットワークの実装](http://narow613.hatenadiary.jp/entry/2018/07/29/181029)

Izhikevich modelをpythonで実装している。
Ubuntu 18.04(Virtualenv)にKallitheaを構築する

# 概要
KallitheaはGit と Mercurial に対応したオープンソース(GPLv3)のリポジトリホスティングソフトウェアです．
今回はそのKallitheaをubuntu上のvirtualenvに構築していきます．

[Kallitheaとは](http://www.kallithea-users.jp/about/index.html)

# 環境
| Software | Version |
|-----|-----|
| ESXi | 6.7 |
| Ubuntu | 18.04 |

# パッケージのアップデート
```
sudo apt-get -y update
sudo apt-get -y upgrade
```

# インストール
## 1. パッケージのインストール
```
sudo apt-get install build-essential git libffi-dev python3-dev python3-venv npm mercurial
```

## 2. リポジトリを配置するディレクトリを作成
- 今回は/var/lib配下に作成してきます．

```
# ディレクトリ作成
sudo mkdir -p /var/lib/kallithea/repos
# 書き込み可能なパーミッションに変更
sudo chmod -R 777 /var/lib/kallithea/repos
```

## 3. Kallitheaをクローン
- 今回は/opt配下にクローンしてきます．

```
# パーミッションの変更
sudo chmod -R 777 /opt
cd /opt
# クローン
hg clone https://kallithea-scm.org/repos/kallithea -u stable
# kallitheaディレクトリに移動
cd kallithea
# パーミッションの変更
sudo chmod -R 777 /opt
```
## 4. VirtualenvにKallitheaの仮想マシンを作成
```
# 仮想マシンを作成
python3 -m venv ../kallithea-venv
# 仮想マシンにログイン
. ../kallithea-venv/bin/activate
```

## 5. 各種アップグレードとsetup.pyの実行

※ここから先はvirtualenv上で実施します．

```
pip install --upgrade pip setuptools
pip install --upgrade -e .
python3 setup.py compile_catalog
```

## 6. Kallitheaのセットアップ
- my.iniの作成

```
kallithea-cli config-create my.ini
```

- my.iniの編集

```
sudo nano my.ini

# 下記の部分を編集
## Entry point for 'gearbox serve'
[server:main]
host = <サーバのアドレス>
port = 5000
```

- DBのセットアップ
下記コマンドを実行すると古いDatabaseを削除するか，リポジトリを保存するディレクトリ，管理者アカウントのユーザ名，パスワード，メールアドレスを聞かれるので入力する．

- Are you sure to destroy old database ?
- Enter a valid absolute path to store repositories. All repositories in that path will be added automatically:
- Specify admin username:
- Specify admin password (min 6 chars):
- Specify admin email:

```
kallithea-cli db-create -c my.ini

#下記が聞かれる
Are you sure to destroy old database ? [y/n]y
Enter a valid absolute path to store repositories. All repositories in that path will be added automatically: /var/lib/kallithea/repos
Specify admin username:<管理者アカウントのユーザ名>
Specify admin password (min 6 chars):<パスワード>
Confirm password:<再度パスワード>
Specify admin email:<メールアドレス>
```

## 7. ビルドする
```
kallithea-cli front-end-build
```

## 8. 起動する
```
# Backgroundで実行する(--daemonを追記)
gearbox serve -c my.ini --daemon
# Virtualenvからログアウト
deactivate
```

## 9. Kallitheaにアクセス
下記URLにアクセスしKallitheaにアクセスできることを確認する

http://<サーバのアドレス>:5000

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583643/994f6450-5f6c-b4bc-c2d1-42da1b7e47ab.png)


## 10. 次回以降の起動手順
```
# kallitheaディレクトリに遷移
cd /opt/kallithea
# Virtualenvにログイン
. ../kallithea-venv/bin/activate
# kallitheaを起動
gearbox serve -c my.ini --daemon
# Virtualenvからログアウト
deactivate
```

# まとめ
今回はKallitheaをubuntu上のvirtualenvに構築した．
Web上のGUIで管理できるため非常に使いやすかった．

# 参考

##### Kallitheaのインストール手順
[Kallithea Installation on Unix/Linux](https://kallithea.readthedocs.io/en/stable/installation.html)
テーブル内の全てのテキストから特殊文字を除去する

[Text.Clean](https://docs.microsoft.com/ja-jp/powerquery-m/text-clean) のテーブル全体版みたいなことがやりたい。
[値の置換](https://support.microsoft.com/ja-jp/office/%E5%80%A4%E3%81%AE%E7%BD%AE%E6%8F%9B-power-query-28256517-f1e9-4dc3-832f-45786e9cf721) でGUIでできるが、テキスト型の列を選択するのがしんどいのと、いろんなクエリで共通で使いたいので、関数として作ってみた。

```matlab

(table as table) as table =>
let
    schema = Table.Schema(table),
    textColumns = Table.SelectRows(schema, each [TypeName] = "Text.Type")[Name],
    specialCharacters = {"#(tab)", "#(cr)", "#(lf)", "#(00A0)"},
    clean = (table as table, specialCharacter as text) as table =>
        Table.ReplaceValue(
            table,
            specialCharacter,
            "",
            Replacer.ReplaceText,
            textColumns
        ), 
    cleaned = List.Accumulate(specialCharacters, table, (state, current) => clean(state, current))
in
    cleaned
```

テキスト型の列であれば無差別に```specialCharacters```に列挙した文字を抹殺してしまうため、テーブル内にデータとして特殊文字が必要な列が存在する場合は、当然ながら使えない。

その場合は、第2引数で列のリストを受け取るバージョンを作ると良さそう。
trelloでカードの説明を誤って保存してしまった時、編集履歴から元に戻す

trelloのカードの説明を編集していた時に誤って保存してしまい、編集前のデータに戻したい時にどうすればいいかについてです。

例えば、カードのurlが下の場合（hpAcP7ISはカードID）、

```
https://trello.com/c/hpAcP7IS/814-multiple-log-in-credentials
```

下のurlでアクセスすれば、編集履歴が見れます。

```
https://trello.com/1/cards/hpAcP7IS/actions?filter=updateCard:desc
```

データはjsonで返ってくるので、chromeならJSONViewのような拡張機能を使うと見やすいです。

#####参考サイト

[trello公式 変更されたカードの説明またはタイトルを復元する](https://help.trello.com/article/783-recovering-the-description-of-a-card-that-has-been-changed)
シェルプログラミング入門 2

# シェル変数

[シェルプログラミング入門1](https://qiita.com/twrcd1227/items/b7d6e16aa4e9f895a831)の続き

## シェル変数の作り方

シェル変数の名前はアルファベッド、数字、_を使う。
ただし、１文字目に数字は使えない。
普通はアルファベッドの大文字を使う。

```sh
variable=variable

variable = variable #スペースを入れてはいけない
```

シェル変数の値を見たり操作したりする時は`$variable`のようにする。`${variable}`でも同じ。

```sh
% pwd
/
% DIR=/tmp
% cd $DIR
% pwd
/tmp
```

中括弧をつけるかつけないかの違いは

```sh
% FOO=abc
% echo $FOOBAR

% echo ${FOO}BAR
abcBAR
```

ただし、`$DIR/work`や`$ROOT.c`のようにアルファベット、数字,_以外の文字を使うとシェル変数の区切りとみなされるので、{}を付けなくてもよい。

## nullのシェル変数

```sh
VARIABLE=
VARIABLE=""
```

## シェル変数の初期設定

変数の設定方法は以下の4つがある。

```sh
${variavle:=value}
${variavle:-value}
${variavle:?value}
${variavle:+value}
```

`:`は省略可能。 `:`があると変数が未使用もしくはnullのとき変数を設定する。`:`がないときは変数が未使用のときのみ動作する。

## 位置パラメタ

```sh:nnn
#!/bin/sh
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
```

```sh
% chmod +x nnn
% ./nnn a b c d e f g h i j k l m n
./nnn a b c d e f g h i
%
% ./nnn *
./nnn abc append nnn xyz
```

`shift`を使えば、ずらすことができる。

```sh:nnn
#!/bin/sh
shift 3
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
```

```sh
% ./nnn a b c d e f g h i j k l m n
./nnn d e f g h i j k l
```

あるコマンドに渡される引数の数を示すには$#という変数を使う。
ただし、コマンド自身は数に入れない。

```sh:mmm
#!/bin/sh
echo $#
```

```sh
% chmod +x mmm
% ./mmm a b c
3
% ./mmm "a b c"
1
```

引数全体を表現するには`$*`、`$@`がある。

```sh:kkk
#!/bin/sh
echo $*
echo $@
```

```sh
% chmod +x kkk
% ./kkk a b c
a b c
a b c
```

ただし、`"$@"`としたいときは`"$1 $2 $3"`
`"$*"`としたいときは`"$1" "$2" "#3"`としなければならない。

ちなみに\\$0〜\\$9, \\$#, \\$*, \\$@ は全て書き込み禁止の変数である。

## 特殊な変数

`$?`,`$$`,`$!`,`$-`の4つの書き込み禁止の特殊な変数がある。

### $?変数

コマンド実行時の終了ステータスを表す。

```sh
command
if [ $? -eq 0]
then
  ・・・・・・・・
fi
```

### $$変数

現在動作しているコマンドの「プロセスID」がセットされている。

`ps`コマンドで動作しているプロセスが表示される。

```terminal
% ps
  PID TTY           TIME CMD
  750 ttys000    0:00.19 -zsh
```

このPIDがプロセスIDのことである。

`/tmp/tmp.$$`のようにしてテンポラリファイルを作るときに使用する。

### $!変数

`&`でコマンドをバックグラウンドで走らせたときのプロセスID
が$!にセットされる。

```sh
command &
　・・・・
wait $&
```

### $-変数

シェルの起動時のフラグやsetコマンドを使って設定したフラグの一覧がセットされている。

```sh
% echo $-
569XZilms
```

# 終わりに

続きは
[シェルプログラミング入門3](https://qiita.com/twrcd1227/items/f89467925634cc0988b8)

前回のは
[シェルプログラミング入門1](https://qiita.com/twrcd1227/items/b7d6e16aa4e9f895a831)
十進法と二進法の変換法

#十進法と二進法#
ふだん我々が日常で使っている数字は「0,1,2,3...7,8,9」までの10種類です
そして最大値の9を超えると10になり、桁が増えます

このような表現を「十進法」といいます

これに対し、「1」と「0」の二種類で表現する
たとえば「0」で始まるとすぐに最大値の1に行き当たり、十進法でいうところの「2」ではなく「10」と表現する
十進法の「3」は11、続く「4」は100となり再び桁が上がります
これを2進法といいます

|十進法の表現|0|1|2|3|4|5|6|7|8|9|10|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|二進法の表現|0|1|10|11|100|101|110|111|1000|1001|1010|

#「である」か「ではない」のデジタル情報#
コンピュータのデジタル情報は、「である = 1」か「ではない = 0」で表します
※この場合は0 = 無ではなく、「ではない」という情報があります

デジタル情報を入力し、主にCPUで演算したあと出力するわけです
「である」か「ではない」、オンかオフか、真(true)か偽(false)かの**2択**は、この情報の受け渡しや演算に伴うノイズを極力排するには都合がいいのです
もちろん、我々の前に出力される情報が生の「0や1」であるわけではないのですが

なお、様々なプログラムも
だいたいは

- 進む
- 「である」か「ではない」
- 繰り返し

から成り立っています

#変換法【二進数　→　十進数】#

「1」になっている桁固有の「重み」をすべて合算した数が、十進数の数値になります

##重みとは?##
2の0乗は1です
なんとなく納得がいきにくいかと思いますが、1です

2の1乗は2です
2の2乗は4...
2の3乗は8...
2の4乗は16...
2の5乗は32...
2の6乗は64...
2の7乗は128...
と倍々に増えていきます
これからは○○乗にあたる数値を、nという文字に当てはめます
nは位の順から１を引いた数になります

例えば、2進数の数値10110101は

|数値|1|0|1|1|0|1|0|1|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|位の順|8|7|6|5|4|3|2|1|
|n|7|6|5|4|3|2|1|0|
|重み|128|64|32|16|8|4|2|1|
|数値 × 重み|128|0|32|16|0|4|0|1|

1になっている桁の重みを合算すると
128 + 32 + 16 + 4 + 1 =
181

これが10進数における数値となります

#変換法【十進数　→　二進数】#
では、この181をまた二進数にしてみましょう

その方法は、
2で割った余りを並べるものです

そして商を2で割り続けて...
最後が1になったらそのまま1を表に入れ

|式|商|余り|
|:-:|:-:|:-:|
|181 / 2|90|1|
|90 / 2|45|0|
|45 / 2|22|1|
|22 / 2|11|0|
|11 / 2|5|1|
|5 / 2|2|1|
|2 / 2|1|0|
|1 |1|1|

下から並べると「10110101」
上の数値と同じになりました
AWS Amplify(Appsync)とtypescriptを選択したとき自作クエリのレスポンス型を簡単に手に入れる

# tl;dr
srcフォルダ内の.ts拡張子内に、graphqlのクエリをgqlで囲むと、そこを解析要素として返り値の型定義ができあがる。
下の例だとQの型定義が出力される。

src/graphql/myquery.ts

```typescript

import gql from 'graphql-tag'

const q = gql`
  query Q { 
    getBlog {
      id
      title
    }
  }
`;

```

## 解説

Amplify codegenは、内部的にgraphql-code-generatorを使っている。
このライブラリに備わっている gql\`\` をパースする機能によって、src内の.tsファイルに書いたクエリの型定義を作ってくれるのである。

```
amplify-cli/packages/amplify-codegen/package.json

...
dependencies: {
    "@graphql-codegen/core": "1.8.3",
    "graphql-config": "^2.2.1",

```
  

### Amplifyのgraphql設定ファイル、graphqlconfig.ymlとは

拡張としてamplify拡張が入っているが、一般的な`graphql-config`であ
しかし、バージョンが古いことが要注意。

graphql-configの現行バージョンは3系で構成されているのだが、このライブラリでは依然として`v2`を使っている
https://graphql-config.com/migration
  
そのため、２系の設定値を使っている。
ドキュメントは古い物を漁る必要があり、現在検索でヒットするものは大抵バージョンが違う。
https://github.com/kamilkisiela/graphql-config/tree/v2.2.1

graphqlconfig.ymlという設定ファイル名も、ちょっとレガシーみたいだ。    

### v2の設定値でこのファイルの意味を読み取ると

- schemaPath: でgraphqlの定義ファイルの場所を指定し、
- includes: でクエリが書かれるであろうファイルの場所を指定し、
- excludes: で除外設定をして
- generatedFileName: で出力される定義ファイルの場所を指定している。


## なぜgql``を使うとパースされるの？

ここはgraphqlの部分だよ！と示す標準がgqlタグなのだ。

https://www.npmjs.com/package/graphql-tag#gql

>
gql
This is a template literal tag you can use to concisely write a GraphQL query that is parsed into the standard GraphQL AST:
#Ruby Rspec expect with keyword args example

```rb
require "rspec"

class Foo
  def self.run(x:, y:)
    Bar.run(x: x, y: y)
  end
end

class Bar
  def self.run(x:, y:)
    false
  end
end

describe do
  subject { Foo.run(x: "X", y: "Y") }

  describe do
    before do
      expect(Bar).to receive(:run).with(x: "X", y: "Y").and_return true
    end

    it { is_expected.to be true }
  end

  describe do
    let(:param) { { x: "X", y: "Y" } }

    before do
      expect(Bar).to receive(:run).with(**param).and_return true
    end

    it { is_expected.to be true }
  end

  describe do
    let(:param) { { "x" => "X", "y" => "Y" } }

    before do
      expect(Bar).to receive(:run).with(x: "X", y: "Y").and_return true
    end

    it { is_expected.to be true }
  end

end
```

# Original by Github issue

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











<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
macOS Mojave の Bootable Installer を作成する

## インストーラーのダウンロード

```
softwareupdate --fetch-full-installer --full-installer-version 10.14.6
```
ダウンロードしたインストーラーは `/Applications` に保存される。


## Bootable Installer の作成

```
sudo /Applications/Install\ macOS\ Mojave.app/Contents/Resources/createinstallmedia --volume /Volumes/VOLUME_NAME
```

ターゲットボリュームは予め [Mac OS Extended](https://support.apple.com/en-us/HT208496) として初期化しておく必要がある。

## References

- [How to Download Full MacOS Installers from Command Line](https://osxdaily.com/2020/04/13/how-download-full-macos-installer-terminal/)
- [How to create a bootable installer for macOS](https://support.apple.com/en-us/HT201372)
fields_forについて

#背景
便利なメソッドではあるがイマイチ使いこなせてないと思い、概要を調べ備忘録としてまとめた。

##fields_forとは
親モデルに紐付いた子モデルのデータを編集するときに使用します。
もう少しわかりやすく言うと、form内で異なるモデルを編集することができるということです。
特に画像を扱うときに使うことが多いかと思います。。(多分)

##使い方

####コントローラー
「new」も「build」もインスタンスを生成するメソッドだが、Railsの慣習的にモデル同士の関連付けの際は「build」を使う。


```users_controller.rb
省略
  def new
    @user = User.new        #空のインスタンスが生成される
    @user.photos.build      #UserモデルとPhotoモデルの関連付け
  end
省略
```

####モデル
Userモデルの子に値するPhotoモデルを通して、photosテーブルに写真を保存する

```user.rb

class User < ApplicationRecord
省略
  accepts_nested_attributes_for :photos
end
```

####ビュー
モデルオプションに、@userをモデルオブジェクトとして扱う。こうすることで、URLとHTTPメソッドを自動推測してくれます。(今回の場合、@userは空なので、createアクションに飛びます)
また、fiels_forを使うことで、子モデル（今回ではPhotoモデル）に変更を加えることができる。

```new.html.erb

<%= form_with model: @user do |f| %>
  省略
  <%= f.fields_for :photos do |i| %>
    <%= image_tag(i.object.content) %>  #画像があれば表示する
    <%= i.file_field :image %>
  <% end %>
  省略
  <%= f.submit "投稿", class: "btn btn-primary" %>
<% end %>
```
npm install でエラー「gyp: No Xcode or CLT version detected」

# 前書き
備忘録として
macOS Catalina to version 10.15.2のエラーらしい。

# エラー
npm install するとエラー。

``` zsh
gyp: No Xcode or CLT version detected!
gyp ERR! configure error
```

# 対処方法
sudoしたらインストールが始まって、直った。

```
sudo rm -r -f /Library/Developer/CommandLineTools
```

# 参考
[gyp: No Xcode or CLT version detected macOS Catalina | Anansewaa](https://medium.com/flawless-app-stories/gyp-no-xcode-or-clt-version-detected-macos-catalina-anansewaa-38b536389e8d)
Larave + Vue で普通にFormを使う際のCSRF Token処理

Laravel 5.8
Vue 2.5.17

VueはSPAでやることが多いみたいですが、Ajaxではなく、単純にLaravelのControllerにPostをする場合の話

LaravelのBladeを利用する場合は以下をFormに埋め込めばいいですが、もちろんvueのコンポーネントで利用できないので手動で埋め込んでやる必要がある。

```
<form>
    @csrf
</form>
```

やり方はシンプル、blade上でcsrf tokenを取得して、コンポーネントに連携するだけ

```
//blade.php
<component :csrf="{{json_encode(csrf_token())}}"></component>
```

```
//Vue component

<template>
  <form>
    <input type="hidden" name="_token" v-bind:value="csrf">
  </form>
</template>

<script>
  export default {
    props:  {
      csrf: {
        type: String,
        required: true,
      }
    }
  }
</script>
```
React 学習のための環境構築

先日よりReactの学習を始めました。

今回はReactの公式ドキュメントでも推奨されているCreate React Appを導入します。
<a href="https://gyazo.com/2ba806da24d75f52d505e1db683b2345"><img src="https://i.gyazo.com/2ba806da24d75f52d505e1db683b2345.png" alt="Image from Gyazo" width="857"/></a>

## STEP1　Homebrewのインストール
Homebrewをインストールします。
Homebrewはファイルのインストール時にパッケージ間の依存関係を解決してくれる便利なツールです。
<a href="https://gyazo.com/46e05a6eaebc914987a79f6b538932cb"><img src="https://i.gyazo.com/46e05a6eaebc914987a79f6b538932cb.png" alt="Image from Gyazo" width="1242"/></a>

```
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
```
途中でインストールを続行するか聞かれるのでenterを押してください。

```
brew -v
```
インストールが正常に完了していればバージョンが出てきます。

## STEP2 Homebrewを使ってNodebrewのインストール
NodebrewはNode.jsのバージョンを管理するためのツールです。

```
$ brew install nodebrew
```
インストールできたか確認

```
$ nodebrew -v
```
インストールが正常に完了していればバージョンが出てきます。

## STEP3 Nodebrewを使ってNodeをインストール
一般利用に適した安定版をインストールします。

```
$ nodebrew install stable
```

この様なエラーができることがあります。

```
Fetching: https://nodejs.org/dist/v7.10.0/node-v7.10.0-darwin-x64.tar.gz
Warning: Failed to create the file 
Warning: /Users/whoami/.nodebrew/src/v7.10.0/node-v7.10.0-darwin-x64.ta
Warning: r.gz: No such file or directory

curl: (23) Failed writing body (0 != 941)
download failed: https://nodejs.org/dist/v7.10.0/node-v7.10.0-darwin-x64.tar.gz
```
こちらのコマンドで解決できました。

```
$ mkdir -p ~/.nodebrew/src
```
バージョンを確認

```
$ nodebrew ls
```

```
$ nodebrew use バージョン名
```

## STEP4 パスを通す
シェルがzshかbashかわからないときはターミナルの’環境設定’⇨開くシェルに記載されています。

macOS X 10.15 Catalinaからはzshがデフォルトになったので、zshでは以下になります。

```
$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zprofile
```

bashの場合は以下になります。

```
$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
```


※パスを通したらターミナルを再起動してください。

開発環境ができました！

##最後に

アプリを作るときはこちらのコマンドで作成ができます。
実行したいフォルダに移動して作ってみましょう。

```
$ npx create-react-app アプリ名
```

アプリフォルダのあるディレクトリに移動

```
$ cd アプリ名
```

本番環境に公開するフォルダの作成

```
$ npm run build
```

ローカルサーバーの起動

```
npm start
```



##参考

https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09
https://qiita.com/yn01/items/d1fa10dbe4850f7cd693
curlでfile.ioにファイルを簡単にアップロードしてみよう

# file.io とは
`file.io`とは無料ファイル共有サービス(当該ファイルは１回ダウンロードされると削除される)
https://www.file.io/

# curlでファイルをアップロードしてみよう

## ファイルを準備
```mytest.txt
This is a test text!
```

## curlでアップロード
```zsh
$ curl -F "file=@mytest.txt" https://file.io/?expires=20y
{"success":true,"key":"OqmLn3if","link":"https://file.io/OqmLn3if","expiry":"7300 days"}%  
```
キー`OqmLn3if`でアップロード成功した!

## curlから確認(ファイルキー:OqmLn3if)
```zsh
$ curl https://file.io/OqmLn3if                          
This is a test text!
```

----
よかったよかった
ServiceNow CSA Delta 試験について

# はじめに
ServieceNow の資格を維持するためには、半年毎に`Delta試験`という試験を受けなければいけません。
私が最初に資格を取得したのは、2020年1月なので、その時は `New York` というバージョンで取得しました。
ServiceNow は半年毎に大きな update があります。2020年5月時点で明らかになっているリリース予定は [こちら](https://infocenter.io/servicenow-implementation-guide/) です。

今回、`Orlando` への更新試験（`Delta試験`）を初めて受けるにあたって、ほぼ全く日本語での情報が見つからなかったので、その体験を記事にしておこうと思いました。

# 出題範囲
基本的にメールで案内が来る通りなんですが、出題範囲はリリースノートそのものです。
[Orlandoのリリースノート](https://docs.servicenow.com/bundle/orlando-release-notes/page/release-notes/family-release-notes.html)

自分がよく使っていた製品（私の場合は、`ITSM`, `ITOM`, `FlowDesigner` あたり）は読んで理解出来ますが、全く使ったことがない、例えば`HR`とか`ATF`とかは読んでも全くピンとこなかったです。

リリースノートを細かく読み込んで全てを理解する事は不可能です。
どの辺の機能が大きく強化されたのか？位を掴んでおく事が重要かと思います。
例えば、`Orlando` で言うと…

- Agent workspace 関連の数が多い。だいぶリソースを投じて追加開発した様だ。
- HR 関連の数も非常に多い。これは Knowleadge 2019 でも話題にしてたので、まぁ順当。
- Devops や CI/CD pipeline の部分は、私は初見でした。開発プロセス自体の改善にも力を入れ始めた様に見える。

# 出題数/時間
CSA の場合は、6 問 / 30分。
webassessor の申込画面では、10 問って書いてあるんですが、CSA は 6 問でした。
私は、15分くらいで終わりました。

# どの粒度の問題が出題されるのか？
問題を全部貼るわけにもいかないのですが…そうですね…例えば、
**新しく追加されたフィールドタイプのうち、4000文字書けるフィールドタイプはどれか？**みたいな問題です。
すでに`Textarea`はあるので、Orlandoでの変更ではありませんが、この粒度の問題レベルです。

この粒度で問題を出している以上、おそらく問題数は大量にあって、そこからランダムで出題しているんじゃないかと思われます。

# 解き方
なので、基本は、[こちらのリリースノート](https://docs.servicenow.com/bundle/orlando-release-notes/page/release-notes/analytics-intelligence-reporting/analytics-intel-report-rn-landing.html)を開きながら、出題された問題に応じてキーワード検索して調べる感じです。
正直、日本語版じゃなくて英語版で資格を取ればよかったな、って後悔しました。日本語の出題を自分で英訳して検索ワードを考えないといけませんから。

すでに英語圏の人は受けている人がたくさんいるので、google検索でキーワードを入れると、他の人が調べたっぽい検索ワードが引っ掛かります。
例えば、`servicenow orlando field` とか打つと、調べた形跡が出てきます。問題ズバリは分からないですけどね。

合格すると、すぐに証明書が添付されたメールが来ます。

# 合格基準
不明です…すいません…
難易度から考えて、おそらく全問正解が基準なんじゃないかと思っています。

# おわりに
とにかく落ち着いて受ければ大丈夫です。英文との格闘がある関係で、時間配分を焦ってしまいがちですが、落ち着いて1問ずつリリースノートを調べていけば、そんなに多くの時間を使わずに正解にたどり着ける様になっています。
それくらい、問題文とリリースノートのキーワードレベルの合致が多かったです。気軽に受けていきましょう！
PHP 日本の東京の今日の日時を表示する

# 目的

- PHPで日本の東京の只今の日時を表示する方法をまとめる

# 実施環境

- ハードウェア環境

| 項目 | 情報 |
| --- | --- |
| OS | macOS Catalina(10.15.3) |
| ハードウェア | MacBook Pro (16-inch ,2019) |
| プロセッサ | 2.6 GHz 6コアIntel Core i7 |
| メモリ | 16 GB 2667 MHz DDR4 |
| グラフィックス | AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB |

- ソフトウェア環境

| 項目 | 情報 | 備考 |
| --- | --- | --- |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |

# 実施方法概要

1. タイムゾーンの設定
1. コードを書いて確認

# 実施方法詳細

1. タイムゾーンの設定
    - php.iniに記載する方法
        1. 下記の投稿を参考にさせていただき、php.iniファイルの場所を探して開く。(筆者は下記コマンドを実行して確認した`php --ini`)
            1. [もういい加減覚えよう。php.iniはどこにあるのか](https://qiita.com/ritukiii/items/624eb475b85e28613a70)
        1. php.iniファイルの960行目から980行目付近に下記の記載がある事を確認する。

            ```php.ini
            [Date]
            ; Defines the default timezone used by the date functions
            ; http://php.net/date.timezone
            ;date.timezone =
            ```
        1. 下記のように追記を行う

            ```php.ini
            [Date]
            ; Defines the default timezone used by the date functions
            ; http://php.net/date.timezone
            ;date.timezone =
            date.timezone = Asia/Tokyo
            ```
    - PHPスクリプトファイルに直接記載する方法
        1. 日時を表示したいファイルに直接下記を記載する

            ```index.php
            <?php date_default_timezone_set ('Asia/Tokyo'); ?>
            ```
1. コードを書いて確認
    1. 任意のPHPスクリプトファイルに下記の内容を記載して現時刻が表示される事を確認する。

        ```index.php
        <?php echo date('Y-m-d H:i:s'); ?>
STM32CubeIDEでTouchGFXを使おう2 

STM32CubeIDEでTouchGFXを使おう1の続きです。
https://qiita.com/usashirou/items/4fdbeec5c7c154872b19

次は、外部出力を使ってみましょう。
画面をこんな感じで製作しました。
![3-1-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/d9bde30e-35c3-cacc-ec93-ff9255284025.jpeg)

ここで、シミュレーターと、実機で確認しましょう。
次は、Interactionを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/6fabc171-ed42-8ed3-6013-5ca9ff0c14b1.png)

今回のアクションは、Call new Virtual Functionになります。
FunctionNameは、ボタンと同じではいけないので後ろにPressedを付けておきます。
LED_ONPressed
LED_OFFPressed
Toggle_LEDPressed
の3種類になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/a70eb850-f544-ec4b-4172-067e7799a187.png)

ここまでで、再度、実機確認をしましょう
![3-1-8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/a7933a7e-c582-411f-1f79-21f552e8fb15.jpeg)

# コード作成
次は、コードを作っていきましょう。
STマイクロの資料では、Lab3になります。
STマイクロの資料では画面のボタンの遷移ですが、今回はLEDを点滅させていきます。

\TouchGFX\gui\src\screen1_screen\Screen1View.cpp
を開き
以下を追加します。

```
void Screen1View::LED_ONPressed()
{
    Screen1ViewBase::tearDownScreen();
}

void Screen1View::LED_OFFPressed()
{
    Screen1ViewBase::tearDownScreen();
}

void Screen1View::Toggle_LEDPressed()
{
    Screen1ViewBase::tearDownScreen();
}
```
ファイル名：Screen1View.cpp
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/7156e4af-c902-ca62-65e6-dd2ea4af5315.png)

# include <gui/screen1_screen/Screen1View.hpp>
を右クリックしOpenDeclarationをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/9ce8f0ed-355e-b48f-7184-01d6c0cb2b9c.png)

以下を追加します。

```
    virtual void LED_ONPressed();
    virtual void LED_OFFPressed();
    virtual void Toggle_LEDPressed();
```
ファイル名：gui/screen1_screen/Screen1View.hpp
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/b453b32f-3d1d-8979-f149-3f3870f71729.png)

次に、LEDのピンを設定します。
PG13,PG14をGOPIO OUTPUTにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/b7683ae2-e16f-b194-048c-439954f9453a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/9ec6e888-5659-46df-0a6f-bcc01739a2f0.png)
そして、ジェネレーションします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/044580d6-5d3f-70d1-802f-97e04e55ae22.png)
Screen1Presenter.cppにプログラムを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/1baa3826-bc59-1b58-a3f7-77a64d97115f.png)

```
void Screen1View::LED_ONPressed()
{
    //Screen1ViewBase::tearDownScreen();
	HAL_GPIO_WritePin(PG13_GPIO_Port,PG13_Pin,GPIO_PIN_SET);
}

void Screen1View::LED_OFFPressed()
{
    //Screen1ViewBase::tearDownScreen();
	HAL_GPIO_WritePin(PG13_GPIO_Port,PG13_Pin,GPIO_PIN_RESET);
}

void Screen1View::Toggle_LEDPressed()
{
    //Screen1ViewBase::tearDownScreen();
	HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_14);
}

```
このままでは、エラーが出てしまうのでトップにヘッダーファイルを追加します。

```
# include "main.h"
```
GPIOは1や0ではエラーとなり
GPIO_PIN_SETとGPIO_PIN_RESET
とします。

これで、LEDのオンオフが出来るようになったと思います。

以上で、TouchGFXを使用できるようになりましたね。
GEEK JOB 体験してきて　10連ガチャSSR確定をつくった

require 'json'

data = JSON.parse(gets)

gatya =[]

9.times do
    num = rand(100)

    if num < 10
        puts data["2"]
        gatya.push(data["2"])
    elsif num < 30
        puts data["1"]
        gatya.push(data["1"])
    else
        puts data["0"]
        gatya.push(data["0"])
    end
    
end

if gatya.include?(data["2"])
   num = rand(100)

    if num < 10 
        puts data["2"]
        gatya.push(data["2"])
    elsif num < 30
        puts data["1"]
        gatya.push(data["1"])
    else
        puts data["0"]
        gatya.push(data["0"])
    end
    else
    puts data["2"] 
end
Gitもまだ慣れていないけど、コロナ対策サイトに貢献してみた

イシューを立てるとか、プルリクとかなんか聞いたことあるけど実際にはやったことなかった、どうも[おの/るしわん](https://twitter.com/tkyko13)です。

GitHubもほぼ１人で使っていてエラーが起きたらいつも慌ててた自分が、これを機会にコロナ対策サイトへ貢献してみました。

## 今回出てくる用語集
- OSS
- イシュー、issue(Git)
- プルリク、pull request(Git)
- フォーク、Fork(Git)
- クローン、clone(Git)
- Github

## 参考サイト、リンク集
- [JKが東京都のコロナ対策サイトに貢献した話。OSSに貢献しよう！](https://qiita.com/Anharu/items/572f5f6c30c6edbec349)
- [東京都 新型コロナウイルス対策サイトへの貢献方法を解説](https://qiita.com/FPC_COMMUNITY/items/b9cc072813dc2231b2b2)
- https://www.stopcovid19.jp/
- [貢献の仕方](https://github.com/tokyo-metropolitan-gov/covid19/blob/development/CONTRIBUTING.md)
- [派生サイト一覧](https://github.com/tokyo-metropolitan-gov/covid19/blob/development/FORKED_SITES.md)
- [twitterにメモしながらやってみた](https://twitter.com/search?q=(%23COVID__19)%20(from%3Atkyko13)&src=typed_query&f=live)

## 1.issueを立てる
今回自分は出身地である新潟県のサイトへプルリクを目指します
https://github.com/CodeForNiigata/covid19

日付別グラフに土日祝がわかるように色分けしたいと思い立ててみました
https://github.com/CodeForNiigata/covid19/issues/287

他の人の立てたissueを解決するのもいいかもですね

## 2.やります宣言！
自分が立てたissueでも他人のissueでも、今から作業します！とコメントを書きます

## 3.自分のGithubへFork
これはcovid_19でのマナーっぽいです

参考：https://qiita.com/FPC_COMMUNITY/items/b9cc072813dc2231b2b2#github%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%82%92fork

## 4.自分の開発環境にclone
VSCodeで

```shell
git clone [自分のgithubのURL]
# 自分の場合は
git clone https://github.com/tkyko13/covid19.git
```

## 5.開発、編集

```shell
cd covid19

yarn install
# or
sudo npm i
```

yarnはnpmでもできますが、sudoを前につけなきゃな場合が多いです  
また結構速度も変わってしまうし、安定もしない場合があります

```shell
yarn dev
# or
sudo npm run dev
```

するとlocalhost:3000にサーバが立ち上がるので、これをブラウザで開きます  
VSCodeでちょっと編集してセーブすると勝手にブラウザがリロードされます  

Nuxt.jsで一部TypeScriptで書かれています  
自分は一部をコメントアウトして消えた部分を見て、コードと表示の一致をさせています  

ようやく見つけてコードを編集しました  

## 6.コミット

```shell
git add .
git commit -m 'こんな内容を編集しました'
git push [自分のgithubのURL] development
```

まだここでは自分のgithubへのコミットなので恐れず…  

## 7.プルリク

参考：https://qiita.com/FPC_COMMUNITY/items/b9cc072813dc2231b2b2#%E3%83%97%E3%83%AB%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%82%92%E9%80%81%E3%82%8B

自分のgithubからのプルリクも送れる  

### 派生サイトのプルリクを送るときの注意点
新潟だけかもしれないですが、[New pull request]ボタンの遷移先が東京のほうなので、しっかりとリクエスト先を自分の出したいところのリポジトリを選びます

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

左がしっかりと「CodeForNiigata/covid19」になっています

### 間違って東京に送ってしまっていた…
https://github.com/tokyo-metropolitan-gov/covid19/pull/3866

クローズ（プルリクを閉める）をやってもらっています。（お手数かけました…）

皆さんも間違えないように〜

## 8.承認待ち
すぐに本番サイトに反映されるわけではなく、確認してもらって反映されるようです  

参考：https://qiita.com/Anharu/items/572f5f6c30c6edbec349#%E3%83%97%E3%83%AB%E3%83%AA%E3%82%AF%E3%81%A7%E3%81%AE%E3%82%84%E3%82%8A%E3%81%A8%E3%82%8A

アドバイスもいただけるようですね  

### 【後日】承認してくれました
https://github.com/CodeForNiigata/covid19/pull/292

アドバイスもいただけました！
[![Image from Gyazo](https://i.gyazo.com/a8ad85d15bd4085606d937b22c88dd5b.png)](https://gyazo.com/a8ad85d15bd4085606d937b22c88dd5b)

たしかに…  
またこちらもissueを立ててどんどん改善していけるといいですね

アウトプットすることでまた次のアウトプットをしたくなる連鎖が起こっていい感じです！
【Python】randomとpandasを用いてDataFrameからのランダムなデータ抽出・結合

<h2>【自己紹介】</h2>
Qiita初投稿のプログラミング初学者です。
趣味でやっている音声配信アプリで、ハガキを読むコーナーをやっており、その中でユニークなラジオネームを勝手に出力してくれるコードがあればいいなと書き始めました。

<h2>【環境】</h2>
・言語:   python 3.6.5
・OS:    macOS Catalina 10.15.3
・IDE:   VScode

<h2>【概要】</h2>
エクセルに保存している単語データをpandasのDataFrameで読み込んでランダムで2個抽出。
ここでは元データとして、２個のエクセルを用意していますが、同一ファイル内でシートを分けてもいいですし、同一シート内で列を分けてもいいと思います。
単語の組み合わせは手入力した文字列に依存するため、それ以外の単語の自動取得などの昨日は実装されていません。（それ故にすごくシンプルなコードです。。）

<h2>データ例</h2>
|単語例1        |
|:-----------------|
| ○○の             |
| △△な             |
| □□でも            |
| ××と             |

|単語例2        |
|:-----------------|
| aaa             |
| bbb             |
| ccc            |
| ddd             |


<h2>【内容】</h2>

```python:radioname_maker

#必要ライブラリのインポート
#下記で作業用ディレクトリを指定しない場合はosは必要無し
import random, os
import pandas as pd

#作業用ディレクトリの指定(必要であれば)
path = "必要あれば作業用ディレクトリを入力"
os.chdir(path)

#pandas.Dataframeにエクセルを読み込む
df_f = pd.read_excel("first_part.xlsx", header=0, na_values=0)
df_f_part = [f_p for f_p in df_f.iloc[:, 0]]

df_s = pd.read_excel("second_part.xlsx", header=0, na_values=0)
df_s_part = [s_p for s_p in df_s.iloc[:, 0]]

#読み込んだ2つのエクセルから単語を一つずつチョイス
first_choice = random.choice(df_f_part)
second_choice = random.choice(df_s_part)

#結合
radio_name = first_choice + second_choice

#コンソールに出力
print(radio_name)
```

<h2>出力結果例</h2>
△△な ddd
○○の ccc
etc...
Unityゲーム内からエクスプローラーを起動する

###エクスプローラーの表示

ユーザーにStreamingAssetsなどの中身を見てもらったり編集してもらったりして欲しいときがあります。Untiyではゲーム内で決めたパスにエクスプローラーを表示することが可能です。



```C#
//StreamingAssetsのファイルパス
string path = Application.streamingAssetsPath;

//起動
System.Diagnostics.Process.Start(path);
```

`System.Diagnostics.Process.Start()`にただstring型を入れればできます。

###ファイルが存在しない場合

> Win32Exception: 指定されたファイルが見つかりません。

というエラーが出るので存在するかを確認させたほうがいいです。

```C#
    //ファイルの存在確認
   if (System.IO.File.Exists(path))
        System.Diagnostics.Process.Start(path);
```
ストリートビューでオンライン旅行できるサービスを作った

# サービスの背景
デザイナーの方とふたりで**旅行を楽しむ人が増えるwebサービス**を作ることになりました。
旅行が好きな20~30代の人にインタビューを行ったところ次のようなニーズが浮かび上がりました。

* 現地の知らないものを味わいたい
* 行き場所がわからないので簡単に調べたい
* １つの場所だけではなく、周辺のいい場所があれば回りたい

そこで**個人のモデルプラン共有**を行うwebサービスを提案しました。
また昨今の新型感染症で旅行に行きたいと思ってもいけない状況ですので、**極限まで行った気持ちになれる**ように**オンライン旅行**を取り入れてみました！
行きたい場所を見つけて事態が収束して安心して旅行に出かけれられるようになったら、実際に行きましょう。

# サービス概要
URL : https://travel-thru.online
サービス名 : トラベルスルー
サービス名の由来 : ドライブスルーのように手軽にトラベルする、という思いを込めまました

## 個人の実際に行った旅行プランを確認できる
<img width="275" alt=" 2020-05-02 16.44.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/1c795541-a65b-9e62-45d7-f0f0bf5bf3f5.png">
実際に投稿者が訪れた時間、場所が現地で撮影した写真とともに表示されます。
旅行会社が提案する旅行プランではなく、個人が実際に行ったプランを写真付きで見ることができるので、**旅行版クックパッド**のように使えます！
観光地だけでなく１日の工程をまるっと提案します。
写真の位置情報を保存しているので、道案内なども将来的にできそうです。


## オンライン旅行機能
<img width="271" alt=" 2020-05-02 16.45.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/1632c018-2fc0-f68b-1efe-9f588b630ef0.png">

[Google Street View API](https://developers.google.com/streetview?hl=ja)を利用しています。
指定した緯度経度の場所のストリートビューを表示したり、自動でストリートビューを動かしたりできます！
このAPIで実際に探検してもらい、旅行した気分になれます。

## コンテンツが簡単に作れる
<img width="410" alt=" 2020-05-02 17.15.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/5bbb2412-1160-a3f6-d96b-a5ae0ec32f29.png">

ユーザ投稿型なのでインスタグラムのように簡単に投稿できるようにしました。
投稿者は画像を選択してアップロードするだけで、その画像に紐づいている撮影時間と位置情報から日付と場所が設定されて簡単に投稿ができます。

# あとがき
デザイナと共同でwebサービスを作るのは初めてだったので新鮮でした。
技術的な内容がほとんどない内容で申し訳ないのですが、Google Street View APIの自由度の高さや写真に紐づいた位置情報を活用するところに技術的な面白さがありました。

アップロード機能は準備中(iOSアプリ申請中)です。
是非使ってみてください！
https://travel-thru.online
vue-cliを使ってプロジェクトを作成し起動するまでの手順

### vue cli(vue create)でプロジェクトの作成

```
vue create pjName
```
プロジェクト作成をチュートリアルに沿って選択していきます。
何をしているかは下記ページでざっと把握しました。
[Vue-CLI 4を使用したJavaScript開発環境構築(プロトタイプ版とプロジェクト版)](https://qiita.com/cube_3110/items/9b846ce027171d304066)

*  Please pick a preset: 
プロジェクトの作成方法を選択します。
Manually select features を選択して、設定を選択していきます。

*  Check the features needed for your project: 
プロジェクトへ導入するライブラリを選択します。
今回は「Babel」「Router」「Vuex」「Linter」

*  Use history mode for router? 
Vue RouterのHistoryモードを利用するかを設定します。
今回は利用する設定(Yes)をします。

* Pick a linter / formatter config: 
ESLintのプリセットを選択します。
[Build a Real-time Chat App with Pusher and Vue.js](https://www.sitepoint.com/pusher-vue-real-time-chat-app/)では、Basicとなっていますが、存在しないので「Standard」を選択しました。

* Pick additional lint features: 
ESLintの実行タイミングを選択します。
保存時に実行する設定(Lint on Save)を選択

*  Where do you prefer placing config for Babel, ESLint, etc.? 
ライブラリ(BabelやESLint)の設定ファイルの配置個所を選択します。
今回は「In dedicated config files(専用の設定ファイル内)」を選択。

* Save this as a preset for future projects? 
次回以降のcreate projectで利用できるプリセットに登録するか設定します。
今回は設定しません。

```
? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, Router, Vuex, Linter
? Use history mode for router? (Requires proper server setup for index fallback in p
roduction) Yes
? Pick a linter / formatter config: Standard
? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to
 invert selection)Lint on save
? Where do you prefer placing config for Babel, ESLint, etc.? In dedicated config fi
les
? Save this as a preset for future projects? (y/N) n
```

上記設定を完了させ、下記画面が出れば作成完了です。

```
Successfully created project vue-chatkit.
Get started with the following commands:

 $ cd vue-chatkit
 $ npm run serve
```

この状態で、プロジェクトを作成したフォルダへ移動し下記コマンドを実行すると、
ローカル内にサーバが起動されます。

```
npm run serve
```
localhost:8080でブラウザからアクセスすると、サンプルページが表示されます。

![vue.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137239/169719c9-43da-2fbc-4da9-c12c42daacb3.jpeg)

作成されているソース類をVSCodeで見るときにvueのファイルを開いて文字がすべて白になっている場合は、
VSCodeの拡張機能の「Vetur」をインストールすると構文ごとに色付けされます。
P5.js 日本語リファレンス(noErase)

このページでは[「P5.js 日本語リファレンス」] (https://qiita.com/bit0101/items/91818244dc26c767a0fe) の noErase関数を説明します。

## noErase()

### 説明文

erase() で開始された消去(差し引き)を終了します。 fill()、stroke()、blendMode() の設定は erase() を呼び出す前の状態に戻ります。

### 構文

noErase()


### 著作権

p5.js was created by Lauren McCarthy and is developed by a community of collaborators, with support from the Processing Foundation and NYU ITP. Identity and graphic design by Jerel Johnson.

### ライセンス

Creative Commons(CC BY-NC-SA 4.0) に従います。
【Linux】よく使う基本コマンドの復習２

前回の[よく使う基本コマンドの復習](https://qiita.com/soehina/items/b00a7e2fa55cd3a15266)の続きです。

#標準入出力
標準入力・標準出力・標準エラー出力を合わせて標準入出力と呼んでいる。
コマンドの入出力先を抽象化しているので入出力を柔軟に対応できる。
###標準入力
キーボードを使用したプログラムの入力。
###標準出力
ディスプレイに表示されるプログラムの出力。
###標準エラー出力
ディスプレイに表示されるエラーメッセージの出力。

##リダイレクト
入出力先を変更できるコマンド。

###入力のリダイレクト
キーボードの代わりにファイルから入力する機能。

```
#/etc/hostsを入力元にしてcatコマンドを実行する
cat < /etc/hosts
```

###出力先のリダイレクト
コマンドの実行結果を画面に表示するのではなく、ファイルに保存する機能。

```
#lsコマンドの出力先をls.txtにして保存する
ls > output.txt
cat > output.txt
```

###エラー出力先のリダイレクト
```
ls /hoge 2> erro.txt
cat error.txt
```

###リダイレクトを追記する
```
echo Hello! >> output.txt
```

##パイプライン
複数コマンドが打てる。
例えば以下のように使う。

```
ls/bin | less
```
binの内容をlessでスクロール表示できるようにする。

#パーミッション
ファイルの権利管理のこと。
ファイルごとに誰がどのような操作ができるか決められる。
###ファイルのオーナー
ファイルを作成した者がファイルのオーナーになる。

###グループ
オーナーが許可したアカウントとグループを作る。

```
ls -l
drwxr-xr-x@ 38 root  wheel  1216  4 12 14:39 bin
```
この場合、root wheel がそれぞれオーナー名とグループ名になる。

###所属グループの確認
```
id
uid=501(hukushima) gid=20(staff) groups=20(staff),12(everyone)
```

###全ユーザーidの確認
```
cat /etc/passwd
```

##権限管理（パーミッション）の方法
読み方、設定は以下の記事が参考になります。
[【一通り理解】Linuxパーミッションの基本とその設定方法](https://eng-entrance.com/linux-permission-basic)

###ファイルモードの変換（chmodコマンド）
chmodコマンドで変換する。
パーミッションを設定するコマンド。

```
chmod [ugoa][+-=][rwx] ファイル名
```
下記記号のいずれかを一つずつ選んで設定する。

|記号|意味| 
|:--|:--|
|u|所有者の権限|
|g|グループの権限|
|o|その他のユーザーの権限|
|a|全てのユーザーの権限|

|記号|意味| 
|:--|:--|
|+|権限を追加|
|-|権限の削除|
|=|記述した権限に変更する|

|記号|意味| 
|:--|:--|
|r|読み取り権限|
|w|書き込み権限|
|x|実行権限|

例

```
chmod u+r file
```

##スーパーユーザー
管理者権限を持つユーザー。
sudoコマンドを使うとスーパーユーザー権限で実行できる。

```
sudo ls
Password:*******
```

ユーザーパスワードが求められるので入力する。

#プロセスとジョブの管理
##プロセス
実行中のプログラムのこと。
psコマンドで確認できる。

```
ps
  PID TTY           TIME CMD
 2625 ttys000    0:00.07 /bin/zsh -l
 2839 ttys001    0:00.16 -zsh
```

auxオプションを使うと全ユーザーのプロセスが詳細表示される。(※-不要)

```
ps aux
```

バックグラウンドで走らせる場合は以下のように打つ。

```
コマンド &
```

##ジョブ
コマンドをバックグラウンド（⇄フォアグラウンド）でまとめて実行できるようになる。
下記コマンドで現在実行している処理が確認できる。

```
jobs
[1]  + suspended  man bash
```
[1]の部分がジョブID。

###fgコマンド
ジョブをフォアグラウンドに戻して対話的に操作する。

```
fg %ジョブID
```

###bgコマンド
長い時間かかる処理をバックグラウンドで実行することでコマンドが終了するのを待たなくて良くなる。

```
bg %ジョブID
```

ちなみにコマンドの一時停止は、**control + z**でできる。

###killコマンド
プロセスやジョブを終了させる。

```
kill （オプション） %ジョブID
kill （オプション） %プロセスID
```
強制終了は以下のオプションを使う。

```
kill -SIGKILL プロセスID
```

#まとめ
以上でLinuxの基本コマンド終了となります。

AWSいじってる間は辛すぎましたが、こういった勉強が結果的にできたことは良かったです。

砂上の楼閣にならないためにも、基礎の徹底は大事にしていきたいですね。
【SQL】集約関数にCASE式で条件をつける

#はじめに
このページは特殊なSQLを紹介しています。
SQLの[基本をまとめたページ](https://qiita.com/yatto5/items/4a2105318f6b2a8520bf)もあるので、参考にしてみてください。


集約関数つまりMAXやMIN、SUMといった関数は、WHERE句やGROUP句で指定した条件で集約することが一般的で、MAX()のカッコ内はカラム名がそのまま入ると思います。
しかし、カッコ内はカラム名だけではなく式を入れることもできるんです！CASE式も使うことができるんです！！

集約関数内に式が入っているのをはじめてみたのは、人が書いたSQLでした。
そして、先日自分も使う機会があったので、ここにまとめようと思いました。

#実装例
**本ケースに対して、@D-Threeさんがより可読性のあるSQLをコメント欄に記載いただけました、状況に応じて使い分けてください**
具体的な使用場面は後述しますが、とりあえず使い方はこんな感じです。
塾の特別講座の生徒IDと受講日を管理しているテーブル(STUDY_DAY)があるとします。

**STUDY_DAY**

| ID | Date |
|:---:|:---:|
|1001|2020-03-01|
|1002|2020-03-01|
|1001|2020-03-07|
|1002|2020-03-10|
|1001|2020-03-19|
|1002|2020-03-19|
|1001|2020-03-23|
|1002|2020-03-27|
|1001|2020-04-03|
|1002|2020-04-09|
|1001|2020-04-17|
|1002|2020-04-17|
|1001|2020-04-22|
|1002|2020-04-22|
|1001|2020-04-26|
|1001|2020-05-04|
|1002|2020-05-04|

このテーブルから各生徒の3月と4月の最終受講日を抽出したいとします。
最終受講日なのでMAX関数を使うことになりますが、3月と4月という条件をWHEN句だけで対応しようとすると、SQLを2回実行する必要があります。
しかし、MAX関数の中にCASE式を入れることでこれを1回で取得することができます。

```SQL:MAX(CASE)
SELECT
	ID, 
	MAX(CASE WHEN [Date] <= '2020-04-01' THEN [Date] ELSE NULL END) AS 'March_LastDay',
	MAX(CASE WHEN [Date] <= '2020-05-01' THEN [Date] ELSE NULL END) AS 'April_LastDay'
FROM
	STUDY_DAY
GROUP BY
	ID
```
これによって取得できるレコードは以下の2レコードでID別に3,4月の最終受講日を取得することができます。

|ID|March_LastDay|April_LastDay|
|---|---|---|
|1001|2020-03-23|2020-04-26|
|1002|2020-03-27|2020-04-22|
となります。

#解説
解説といってもたいそうなものではないです。技術的なものではないです。

`MAX(CASE WHEN [DATE] <= '2020-04-01' THEN [DATE] ELSE NULL END)'
このMAX関数がどんな動きをしているかというと、

~~1. CASE式により'2020-04-01'以降の日付は全て'1'(システム上の最過去日)に変換~~
1. CASE式により'2020-04-01'以降の日付は全てNULLに変換
2. IDで集約して最大値を取得

となります。
'2020-04-01'以降のデータがMAX関数にヒットすることはなくなるので、結果として3月の最終受講日を取得することができるというわけです。
(書いていて思いましたが、3月に受講履歴が無いと3月以前のデータが取れてしまうので、もう少し工夫が必要ですね。。。)

#用途例
私がこれを使ったのは、パフォーマンスの課題にぶつかったためです。
システム開発をしているとよくありますよね、機能は実装できたけどクソ重くて使い物にならない的なやつ。。

上記の月別最終受講日を取得しようとしたときに、単純なSQLでやろうとすると何度もDBサーバーにアクセスするか、テーブル全件をがっつりとってきてアプリでループを回して取得するなど、処理回数も多くなるのでパフォーマンスに難を抱え、プログラム量が多くなることでバグのリスクも高まります。

そんな課題にぶつかった時にこの方法に出会いました。
1つのSQLで取得することができるんです。DBへのアクセス回数も減らせますし、アプリでの処理もシンプルにすることができました。
P5.js 日本語リファレンス(erase)

このページでは[「P5.js 日本語リファレンス」] (https://qiita.com/bit0101/items/91818244dc26c767a0fe) の erase関数を説明します。

## erase()

### 説明文

erase() に続くすべての描画はキャンバスから差し引かれます。差し引かれた領域はキャンバスの下のWebページを表示します。erase() は noErase() でキャンセルできます。

image() および background() で行われた描画は erase() の影響を受けません。

### 構文

erase([strengthFill], [strengthStroke])

### パラメタ

- strengthFill  
Number：図形の塗りつぶしの消去の強さを表す数値(0〜255)。引数が指定されていない場合、デフォルト 255 になり完全な強度になります。(オプション)

- strengthStroke  
Number：図形のストロークの消去の強さを表す数値(0〜255)。引数が指定されていない場合、デフォルト 255 になり完全な強度になります。(オプション)

### 例1

```javascript
function draw() {
  background(100,100,250); // 背景を青色に設定
  fill(0, 255, 100); // 塗りつぶし色を緑色に設定
  rect(20,20,60,60);
  erase() ;  // 差し引き(くり抜き)を設定
  ellipse(25,30,30); // 円で差し引き
  noErase() ;
}
```

### 実行結果

![erase-1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43467/6d06420f-50a2-6aae-8097-59eab7577c9a.jpeg)

### 例2

```javascript
function setup() {
  createCanvas(100,100,WEBGL);
}

function draw() {
  background(250, 250, 150); // 背景を青色に設定
  fill(15, 195, 185);// 塗りつぶし色を緑色に設定
  noStroke() ;
  sphere(30);
  erase() ; // 差し引き(くり抜き)を設定
  rotateY(frameCount * 0.02); // Y軸を中心に回転
  translate(0, 0, 40);
  torus(15,5); // トーラス(ドーナッツ形状)で差し引き
  noErase() ;
}
```

 ### 実行結果
https://editor.p5js.org/bit0101/sketches/6P_GXx8gG


### 著作権

p5.js was created by Lauren McCarthy and is developed by a community of collaborators, with support from the Processing Foundation and NYU ITP. Identity and graphic design by Jerel Johnson.

### ライセンス

Creative Commons(CC BY-NC-SA 4.0) に従います。
Udemyで購入した教材のまとめ(主にインフラ)

こんにちは，yourilです．
今回は自分がUdemyで購入した動画教材について，簡単にまとめます．
なお，購入した教材はほぼインフラ関係です．

※Udemyは頻繁にセールを行っており，割引率も高いので，必ずセールの時に購入しましょう．

# きっかけ

2月に受験したAWSソリューションアーキテクトの試験対策として，「[これだけでOK！ AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座](https://www.udemy.com/course/aws-associate/)」を購入して勉強していました．
その際，Udemyの動画教材で勉強することのメリットとして

- ハンズオン形式で実際に手を動かしながら学べる
- 講師の説明に抑揚があり，どこが重要な点かが分かりやすい
- ハンズオン中に詰まった点は大概Q&Aに同じ内容があり，解決しやすい
    - Q&Aになく，調べて分からなかった場合も講師に質問できる
    - 最悪，ソースコード等は教材に付属しているのでコピペで動かせる
- 1つの動画が5~20分程度なので，まとまった時間がなくても見やすい

といったことを感じたので，気になる教材があれば他も購入してみようと思っていました．
その後セールを待って実際にいくつか購入し，ハンズオンもやってみたところ，良い教材が多かったので共有します．


# 購入した教材

## [これだけでOK！ AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座](https://www.udemy.com/course/aws-associate/)

[初回の記事](https://qiita.com/youril/items/6923d93de45057b5a3ee)にも書きましたが，試験範囲のサービスについての分かりやすい講義とハンズオン，さらに模擬試験も付いており，ソリューションアーキテクトアソシエイトを受験するなら間違いなく買った方が良い教材です．
しかも，試験の改定やAWSの画面の変更に合わせて，随時アップデートされているようです．
全部で22時間以上あるので，1.25倍速以上で見たり一部ハンズオンを飛ばしても良いかと思います．
末尾の模擬試験は繰り返し解いて復習することを強く勧めます．

## [AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集](https://www.udemy.com/course/aws-knan/)

こちらも初回の記事で書いていますが，個人的には本番よりも難しいと感じた教材です．
↑の教材で物足りなくなった時に，余力があれば追加でやるのも良いと思います．
ただ，こちらに時間を多くかけるくらいなら，↑を完璧にして早めに本試験を受けた方が良いと思います．

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

GitとGitHubについて，6時間程度の講義+ハンズオンで学べる教材．
説明のスライドが非常に分かりやすく，Gitの仕組みを理解した上で各種コマンドを実行し，Gitの操作を学ぶことができます．
1人で勉強しているとあまりやる機会のない，GitHub上でのプルリク→レビュー→マージの流れやコンフリクトの解消なども体験できます(やるのは自分1人ですが...)．

## [ゼロからはじめる Dockerによるアプリケーション実行環境構築](https://www.udemy.com/course/docker-k/)

タイトル通り，Dockerを基本知識ゼロから始めて仕組みや操作方法を学習し，DjangoやRailsの環境構築を行い，最後はクラスタ管理等の関連技術まで学ぶ教材．
正直ゼロから始めて後半のDocker Swarm等の内容まで理解するのは大変だったものの，Dockerの基本操作やネットワーク，データ管理については分かりやすかったと思います．
これまでDockerを触ったことがなければ，仮想マシンと比べた時の起動の速さ等は感動します．

## [Docker + Kubernetes で構築する Webアプリケーション 実践講座](https://www.udemy.com/course/web-application-with-docker-kubernetes/)

Dockerを学んだら次はKubernetesだろう，ということで購入した教材．
最初にDockerについて基本を復習した後，Kubernetesのリソースや操作の説明があり，最後にNginx + Node.js + Express + MongoDB(MEANスタックのAngularJS無し？)の環境構築を行います．
自分はKubernetesを触ったことが無かったのですが，繰り返しマニフェストファイルを書いて実行することで，知識ゼロ→完全に理解した()ところまではレベルアップできたかと思います．

ちなみに環境構築では，後半になるとDBの初期化やAPサーバの起動完了等が前提としてハンズオンが進みます．
なので，ハンズオンを途中でやめてリソースを削除すると，次にハンズオンをする際に再びDB初期化等を行う必要があり，地味に面倒でした．
また，Mac + VirtualBox + Centos7の環境だと，Macのスリープ解除時に何故かVirtualBoxがCPUを食い潰してしまい，ファンが唸りっぱなしになりました...原因は不明ですが，仮想マシンをrebootすれば一応治ります．


# まとめ

これまで自分が購入して視聴したUdemyの動画教材について，簡単に紹介しました．
実は上記以外にもいくつか購入しましたが，動画時間が20時間近くあるものもあり，積ん読状態です...
また完走したら追記していこうかと思います．

最後まで読んで頂きありがとうございました．
PythonでAtCoderの深さ優先探索(DFS)を解いてみた（結果：TLE...）

####目的
・Pythonの勉強がてら、最近競技プログラミングをよくやってます。過去問を解いて行く際に、深さ優先探索でつまづいたので解法をまとめました。
挑戦した問題は、Typical Contest 001のA問題の深さ優先探索です。
https://atcoder.jp/contests/atc001/tasks/dfs_a


### 解答

```python

class Dfs():
    def dfs(self, h, w, maze, init):
        search_stack = [init] # 初期座標を探索スタックに格納
        fin = [] # 完了スタックを定義
        while search_stack:
            latest = search_stack.pop() # 探索スタックから現在地を抽出
            if maze[latest[0]][latest[1]] == "g": # 現在地がGoalならYesを出力
                print("Yes")
                exit()
            else:
                fin.append(latest) # 探索済の座標を完了スタックに格納
                candi = [(latest[0]-1, latest[1]), (latest[0]+1, latest[1]), (latest[0], latest[1]-1), (latest[0], latest[1]+1)] # 座標候補を定義
                for (ny, nx) in candi:
                    if self.check_range(h, w, ny, nx): # 座標候補が範囲外に出ていないか判定
                        if self.check_wall(maze, ny, nx): # 座標候補が壁ではないか判定
                            if not (ny, nx)  in search_stack and not (ny, nx) in fin: # 検索スタック、完了スタックに座標候補が含まれていないか判定
                                search_stack.append((ny, nx)) # 探索スタックに格納
                                continue
        print("No")                    
        
    def check_range(self, h, w, y, x):
        if x > w-1 or x < 0:
            return False
        elif y > h-1 or y < 0:
            return False
        else:
            return True
    
    def check_wall(self, maze, y, x):
        if maze[y][x] == "#":
            return False
        else: 
            return True

if __name__ == "__main__":
    h,w = map(int,input().split())
    maze = [list(input()) for i in range(h)]
    for y, row in enumerate(maze):
        try:
            init = (y, row.index("s")) # スタート地点を探索
            d = Dfs()
            d.dfs(h, w, maze, init)
            break
        except ValueError:
            pass
```
P5.js 日本語リファレンス(stroke)

このページでは[「P5.js 日本語リファレンス」] (https://qiita.com/bit0101/items/91818244dc26c767a0fe) の stroke関数を説明します。

## stroke()

### 説明文

図形の周りに線や境界線を描くために使用する色を設定します。この色は現在の colorMode() に応じて RGB または HSB で指定されます。 デフォルトの色データは RGB で各値は 0〜255 の範囲です。デフォルトのアルファ範囲も 0〜255 です。

単一の文字列引数が指定されている場合 RGB、RGBA および16進数の CSS カラー文字列とすべての名前付きカラー文字列がサポートされます。このカラー文字列の場合、2番目の引数としてのアルファ値はサポートされていません。RGBA 形式を使用する必要があります。

ストロークの色を設定するためにp5 Colorオブジェクトも提供できます。

### 構文

stroke(v1, v2, v3, [alpha])

stroke(value)

stroke(gray, [alpha])

stroke(values)

stroke(color)

stroke(v1,v2,v3,α)

### パラメタ

- v1  
Number：現在の色の範囲を基準にした赤または色相の値

- v2  
Number：現在の色の範囲に関連する緑または彩度の値

- v3  
Number：現在の色の範囲に関連する青または明るさの値

- alpha  
Number：アルファ値(オプション)

- value  
String：カラー文字列

- gray  
Number：グレー値

- values  
Number[ ]：色の赤、緑、青、アルファ値を含む配列

- color  
p5.Color：ストロークの色



### 著作権

p5.js was created by Lauren McCarthy and is developed by a community of collaborators, with support from the Processing Foundation and NYU ITP. Identity and graphic design by Jerel Johnson.

### ライセンス

Creative Commons(CC BY-NC-SA 4.0) に従います。
P5.js 日本語リファレンス(noStroke)

このページでは[「P5.js 日本語リファレンス」] (https://qiita.com/bit0101/items/91818244dc26c767a0fe) の noStroke関数を説明します。

## noStroke()

### 説明文

図形の周りに線や境界線の描画を無効にします。 noStroke() とnoFill() の両方が呼び出された場合,画面には何も描画されません。

### 構文

noStroke()


### 著作権

p5.js was created by Lauren McCarthy and is developed by a community of collaborators, with support from the Processing Foundation and NYU ITP. Identity and graphic design by Jerel Johnson.

### ライセンス

Creative Commons(CC BY-NC-SA 4.0) に従います。
P5.js 日本語リファレンス(noFill)

このページでは[「P5.js 日本語リファレンス」] (https://qiita.com/bit0101/items/91818244dc26c767a0fe) の noFill関数を説明します。

## noFill()

### 説明文

塗りつぶしを無効にします。 noStroke() と noFill() の両方が呼び出された場合、画面には何も描画されません。

### 構文

noFill()


### 著作権

p5.js was created by Lauren McCarthy and is developed by a community of collaborators, with support from the Processing Foundation and NYU ITP. Identity and graphic design by Jerel Johnson.

### ライセンス

Creative Commons(CC BY-NC-SA 4.0 )  に従います。