OmniAICreator/Qiita-1.07M huggingface dataset:
P5.js 日本語リファレンス(ellipsoid)

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

## ellipsoid()

### 説明文

指定された半径で楕円体を描く。

DetailX と detailY は, 円錐のx方向とy方向の分割数を指定します。分割数を増やすと楕円体がより滑らかに見えます。 150を超える値は避けてください。ブラウザがクラッシュする可能性があります。

### 構文

楕円体([radiusX], [raduisY], [radiusZ], [detailX], [detailY])

### パラメタ

- radiusX
Number：楕円体のx方向半径(オプション、デフォルト値は50)

- radiusY
Number：楕円体のy方向半径(オプション、デフォルト値はx方向半径)

- radiusZ
Number：楕円体のz方向半径(オプション、デフォルト値はx方向半径)

- detailX
Integer：円錐x方向の分割数。分割数が多いほど滑らかな楕円体になります(オプション、デフォルト値は24)

- detailY
Integer：円錐y方向の分割数。分割数が多いほど滑らかな楕円体になります(オプション、デフォルト値は16)

### 例

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

function draw(){
background(255);
  fill(205, 105, 94);
  rotateY(millis()/ 1000);
  // 楕円体を描画(x方向半径40、y方向半径60,z方向半径10、x方向分割数8、y方向分割数4)
  ellipsoid(40, 60, 10, 8, 4);
}
```

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


### 著作権

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) に従います。
Windows10でDocker + Laravel環境構築メモ

# Hyper-Vの有効化

# Docker for Windowsのインストール
- Shared Drive
- 作業フォルダ作成
- cd 作業フォルダ
- git clone https://github.com/laradock/laradock.git
- cd laradock
- env-example コピー作成してリネーム -> .env
- Dockerコンテナ起動 docker-compose up -d nginx postgres workspace
- コンテナに接続 docker-compose exec --user=laradock workspace bash

# Laravelプロジェクト作成
- composer create-project --prefer-dist laravel/laravel laravel-project
- 一旦コンテナから抜けます exit
- laradockディレクトリ内の.envファイルを開き、以下の通りに書き換えます。
  - APP_CODE_PATH_HOST=..  ->  APP_CODE_PATH_HOST=../laravel-project/ 
- docker-compose stop
- docker-compose up -d nginx postgres workspace

# localhostにアクセス
P5.js 日本語リファレンス(cone)

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

## cone()

### 説明文

指定した半径と高さで円錐を描画する。

detailX と detailY は、円錐の円周方向と高さ方向の分割数を決定します。分割数を増やすと円錐がより滑らかに見えます。 detailX の推奨最大値は24です。24より大きい値を使用すると警告が発生したり、ブラウザの速度が低下したりする場合があります。

### 構文

cone([radius], [height], [detailX], [detailY], [cap])

### パラメタ

- radius
Number：底面の半径(オプション、デフォルト値は50)

- height
Number：コーンの高さ(オプション、デフォルト値は半径)

- detailX
Integer：円周方向の分割数。分割数が多いほど滑らかな三角錐になります(オプション、デフォルト値は24)

- detailY
Integer：高さ方向の分割数。分割数が多いほど滑らかな三角錐になります(オプション、デフォルト値は1)

- cap
Boolean：円錐の底面を描くかどうか(オプション、デフォルト値は true)

### 例1

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

function draw(){
  background(200);
  fill(205, 102, 94);
  rotateX(frameCount * 0.01);
  rotateZ(frameCount * 0.01);
  // 三角錐を描画(半径40、高さ90、円周方向分割数10、高さ方向分割数3、底面描画しない)
  cone(40, 90, 10, 3, false);
}
```

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

### 著作権

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) に従います。
Zoom ブレークアウトルームを使うために必要なこと(意外な落とし穴)

#はじめに
　Zoomって便利ですよね？何が便利かというかというと、いくつも挙げられると思いますが、この記事ではその中の一つ「ブレークアウトルーム」にフォーカスを当てたZoom活用シリーズ第2弾です！この機能自体はすごく便利なのですが、使うための初期設定をするのに苦労したため、まとめてみました！
　ちなみに第1弾は、[Slack-Zoom連携でSlackをより便利に！(たった一行でビデオ通話)](https://qiita.com/crinoid/items/6501a9358c7662f29ed6)です。この記事と合わせて設定しておくと、よりzoomを活用することができると思います。

#ブレークアウトルームとは？
　簡単に一言でいうと、部屋を「小部屋に分ける機能」です。Zoomは大人数が一斉に集まって話すことができることが便利な反面、アイデアだしや交流をしたいときなど、少人数に分かれて話したいときに重宝する機能です。私自身も交流会をホストしたり、参加したりするときに使っている機能でもあります。

#ブレークアウトルームの使い方
　使い方は簡単！Zoomのミーティング時に出てくる、画面下部のバーの「ブレークアウトセッション」をクリックするだけ！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/06cf1f2e-211c-8346-8bfb-10cb6d2048f6.png)
と言いたいのですが(自分も最初はそれでできると思っていたのですが）、探してみても見当たらない。なぜか？
→それは、Zoomの設定でブレークアウトルームを「オン」にしなければいけないからです。
その方法が調べてもわかりにくかったので、記事にまとめてみました！


#初期設定
　この設定自体は、1回やってしまえば、それ以降はZoomのミーティングを開くと、自動的にブレークアウトセッションのマークが表示されるようになるので、使う予定がなくても設定しておくことをお勧めします。

➀ zoomアプリを起動
➁ 右上の設定ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/1b009513-4ddc-2994-d4eb-a2d50e011a9e.png)

➂画面下部の「さらに設定を表示」をクリックしてブラウザを表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/9ddd88a9-c631-d259-806b-6e5f21eb9274.png)


➃(この後、サインインを求められる可能性がありますが、そのときはサインインして)

➄ブラウザでこのような画面が出てくると思うので、下にスクロールして
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/17c2b416-6d74-9952-97fd-633756487e12.png)

下にスクロールすると、ブレイクアウトルームというものが出てくるので、それをオンにし、更新(save)すると、次にZoomを開いたときからブレイクアウトルームを使えるようになります！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/9e7a170d-d3a5-ff87-4323-94c0f99c0fac.png)

↑この最後の部分(位置)がすごくわかりにくかったので、右のスクロールの位置とか、前後の項目を参考に探してもらえれば良いかと思います。

# 初期設定が終わったら
注)もし、zoomを開きながら、上記の設定をしている場合は、一旦、そのミーティングを閉じて、開きなおしてください！
→もう一度開きなおしたら、下のように、ブレイクアウトセッションのボタンが現れているはずです！

ここまで、設定が終わったら、zoomのミーティングを開いてみると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/06cf1f2e-211c-8346-8bfb-10cb6d2048f6.png)
というように「ブレークアウトセッション」が追加されていると思います。
　これをクリックすることで、下の画面が出て、分ける小部屋(セッション)の数、分け方を自動で選ぶか手動で選ぶかの選択ができ、「セッションの作成」を押すと、ブレークアウトセッションが実装できます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474340/9207565e-2262-2c9b-561b-186313f22ccb.png)

#参照記事
ブレークアウトセッションの活用に関しては以下も参照するとより活用できると思います

- [ブレークアウトルーム入門](https://support.zoom.us/hc/ja/articles/206476093-%E3%83%96%E3%83%AC%E3%82%A4%E3%82%AF%E3%82%A2%E3%82%A6%E3%83%88%E3%83%AB%E3%8 3%BC%E3%83%A0%E5%85%A5%E9%96%80)

- [ZOOMブレイクアウトルームの使い方』2020年版Zoom使い方⑤ ](https://zoom-shukyaku.com/zoom-%E3%83%96%E3%83%AC%E3%82%A4%E3%82%AF%E3%82%A2%E3%82%A6%E3%83%88%E3%83%AB%E3%83%BC%E3%83%A0-%E4%BD%BF%E3%81%84%E6%96%B9-%E5%9C%A8%E5%AE%85%E3%83%AF%E3%83%BC%E3%82%AF/)

　Zoom活用シリーズ➀

- [Slack-Zoom連携でSlackをより便利に！(たった一行でビデオ通話)](https://qiita.com/crinoid/items/6501a9358c7662f29ed6)
8世代対応全ポケモンの.jsonファイルを作ってみた

##経緯
とあるサービスで新規でポケモン図鑑がどうしても欲しくなったのでそれっぽいデータを色々探したのですが7世代までの更新で途絶えてしまっているところしかなかったので今回自前で全部入りのJSONファイルを作成してみました。本当はPokeAPIとかが8世代まで対応してくれてたら嬉しかったのですがあいにく既にissuesで議論されている状態でどうにもPokeAPIのソース元が更新できないせいでPokeAPIがアップデートできてないみたいです。SwShの発売から半年が経つのにまだアップデートされないのでPokeAPIは諦めました。


[Github:pokemon-data.json](https://github.com/dayu282/pokemon-data.json)

##ソース元と今後の更新
ポケモンデータマイナーで有名な[SciresM氏](https://pastebin.com/u/SciresM)のデータをお借りしました。ここ数年は発売日ぐらいにポケモンのデータをマイニングしているのでここをソース元にしました。仮に次回作でデータマイニングがされなくてもShowdownなどの大規模なプロジェクトからデータを拝借しようかなと思っています。

##報告
何か不具合があればTwitterの[@dayu_282_](https://twitter.com/dayu_282_)までリプライまたはDMをください。要望はGithubにおねがいします。
FlutterでWebViewを用いた際にキーボードが入力フォームを隠してしまう問題

# 概要

FlutterでWebViewを用いるにあたり、以下のプラグインが柔軟性にあふれており、便利である。

[flutter_webview_plugin - pub.dev](https://pub.dev/packages/flutter_webview_plugin)

お問い合わせフォームをWeb側で作り、FlutterからそのフォームをWebViewで呼び出す、といった使い方をよく取り入れたりする。
しかしながら、ただWebViewで呼び出しただけでは、Web側の入力フォームを仮想キーボードが隠してしまう問題に直面する。（Android版のみ）

当該の問題を解決するには、`resizeToAvoidBottomInset`オプションを`true`にする必要がある。

# 実装
```dart
import 'package:flutter/material.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';

class SampleWebView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return WebviewScaffold(
      url: 'https://your-url',
      appBar: AppBar(
        title: Text(
          'your title',
        ),
      ),
      resizeToAvoidBottomInset: true,
    );
  }
}
```

あとは`SampleWebView`を`MaterialPageRoute`なりで呼び出す。
するとうまい感じにキーボードが入力フォームを隠さず、入力しやすくなる。

以上。
P5.js 日本語リファレンス(cylinder)

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

## cylinder()

### 説明文

与えられた半径と高さで円柱を描画する。

detailX と detailY は, 円柱のx方向とy方向の分割数を指定します。分割数を増やすと円柱がより滑らかに見えます。 detailX の推奨最大値は24です。24より大きい値を使用すると警告が発生したり、ブラウザーの速度が低下したりする場合があります。

### 構文

cylinder([radius], [height], [detailX], [detailY], [bottomCap], [topCap])

### パラメタ

- radius
Number：円柱の半径(オプション、デフォルト値は50)

- height
Number：円柱の高さ(オプション、デフォルト値は半径)

- detailX
Number：X方向の分割数(オプション、デフォルト値は24)

- detailY
Number：Y方向の分割数(オプション、デフォルト値は1)

- bottomCap
Boolean：円柱の底を描くかどうか(オプション、デフォルトは true)

- topCap
Boolean：円柱の上部を描画するかどうか(オプション、デフォルトは true)


### 例1

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

function draw(){
  background(205, 105, 94);
  rotateX(frameCount * 0.01);
  rotateZ(frameCount * 0.01);
  // 円柱を描画(半径20、高さ50、x方向分割数6、y方向分割数3、円柱の上部を描画しない)
  cylinder(20, 50, 6, 3, true, false);
}
```

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


### 著作権

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) に従います。
Tensorflow1.13.1->2.1へ　GPU復活

Tensorflow1.10で作成、1.13で作動確認できているプログラムが2.1で可能か検証する。
Anacondaブラウザからインストール。2.1にUpdateされているが、ターミナル`pip list`だとtensorflow-gpuは1.13のまま。
`pip3 install --upgrade tensorflow-gpu`で成功。
Tf2.1にて作動OK
ブラウザからインストール。3.6->3.7へアップデート
問題なく作動。（しかも超速い）
もしやGPUを認識したのでは？（tf1.13でGPUを認識しない問題もあり、このあと対処しようと思ってた）
その後諸事情からダウングレードをしたところ、`pip,pip3`でアップグレードできず。`conda`で`uninstall, install`実施。（5/11）
なんとか復旧。相変わらず混じってます。

```
$ python
>>>from tensorflow.python.client import device_lib
>>>device_lib.list_local_devices()

...中略　　　　↓↓↓↓　
device_type: "GPU"
memory_limit: 4128768
locality {
  bus_id: 1
  links {
  }
}
incarnation: 5351681574950931512
physical_device_desc: "device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1"
, name: "/device:XLA_GPU:0"
device_type: "XLA_GPU"
memory_limit: 17179869184
locality {
}
incarnation: 14229584366238013314
physical_device_desc: "device: XLA_GPU device"
]
```
直った直った。めでたし
メモ: phpビルトインサーバー、COMを使う

## 最小構成

### フォルダ構成

* https://windows.php.net/download から
    * VC15 x86 Non Thread Safe (2020-Apr-14 22:48:40) ※ 32bit版
    * Zip [23.09MB]

```sh:以下ファイルだけが必要
license.txt
php.exe
php7ts.dll
```

```sh
# フォルダ構成
server.bat

php\php.exe
php\php7ts.dll

docroot\index.php
```

### docroot\\.user.ini

```ini
[PHP]
; error
error_reporting = E_ALL & ~E_NOTICE
display_errors = On

; extensions
extension_dir = php\ext
;extension = com_dotnet
;extension = mbstring
;extension = pdo_sqlite

; mbstring
mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none
mbstring.func_overload = 0

[Date]
date.timezone = "Asia/Tokyo"
```

### ビルトインサーバーを起動

```dot:server.bat
php\php.exe ^
 -c docroot\.user.ini ^
 -S 0.0.0.0:8000 ^
 -t docroot
```

----

## sqlite3 を使えるように

以下のファイルが必要。

```
php\libsqlite3.dll
php\ext\php_pdo_sqlite.dll
```

## COM を使えるように

```
php\ext\php_com_dotnet.dll
```


### IEを起動

* [PHP: com - Manual](https://www.php.net/manual/ja/class.com.php)

```php:docroot\ie.php
<?php
$ie = new com("InternetExplorer.Application") 
      or die("Unable to instantiate ie");
$ie->Visible = 1;
$ie->Navigate("https://qiita.com");
```

* ocxの呼び出しは致命的エラーで出来なかった。(謎)
【Pythonista3を使ったみた】入門

#Pythonista3ってなに？
　**iOS, iPadOS上で動作する統合開発環境（IDE）**です。
　アプリ上でPython開発が出来ちゃう画期的なアプリなんです！

#モジュール作成
　まずは、ファイルを作成します。
　ScriptLibrary > iCloud 内に "Test"フォルダを作成し
　その中に”HelloWorld.py”を作成します。
　
<img width="328" alt="BB37F5A4-4493-4638-A998-37776BE4CF68_1_201_a.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170355/eef068fb-fa57-4d93-38d4-33e261f5b6e1.jpeg">
<img width="412" alt="D6CA011A-F146-47CB-B577-DEB39BC31F18_1_105_c.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170355/9715462f-8b2b-5b65-ec9f-49bc06b3e9f6.jpeg">

```python:HelloWorld.py
print( "Hello World." )
```

と入力して実行するだけでコンソールに出力されます

```console:コンソール
HelloWorld
```

めちゃ簡単ですね

#結論
　Pythonの勉強がPC無しでも行えて、環境構築する手間も無いので始めるのはかなり簡単！！！
　ただアプリは1220円と少々高価ですが、買い切りなのでまぁいいかなw
【HTML】ゼロをイチにする備忘録【(1)基本構文・テキスト】

##はじめに
高校大学と文系で生きてきた人間が、知識をゼロからイチにするために学んだことをアウトプットします。
まずはHTMLの基本中の基本を。

##基本構文
###つまり文書として成立するために必要なもの

```html:kihon1.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>HTML基本</title>
　　<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>

</body>
</html>
```


+ ``<!DOCTYPE html>``：「この文書はHTML5のルールに従って書かれています」という宣言。あるのがベターだがほぼ慣例。大文字小文字の区別はなし。
+ ``<html></html>``：HTML文書であることを示す。``lang="ja"``は日本語を使用するの意味。
+ ``<head></head>``：ページ上に表示させない、文書そのものの情報。
+ ``<meta>``：メタデータを指定。``charset="UTF-8"``は「文字エンコーディングをUTF-8に指定する」の意味。ほかに指定するメタデータとしては検索エンジン向けのキーワード、リダイレクトなどがある。
+ ``<title></title>``：タイトル。**文字エンコーディングとタイトルは最低限指定しておく。**
+ ``<link>``：リンクする外部リソースを指定。``href属性``（リンクする外部リソースのUPL）と``rel属性``（現在のファイルとリンク先の外部ファイルとの関係性を表すキーワード）が必須。``type属性``はリンクする外部リソースのMIMEタイプ[^1]。
+ ``<body></body>``：ページに表示する内容をこの中に記述していく。

*****
##テキスト
###見出し\<h1>～\<h6>

```html:kihon2.html
<h1>見出し１</h1>
<h2>見出し２</h2>
<h3>見出し３</h3>
<h4>見出し４</h4>
<h5>見出し５</h5>
<h6>見出し６</h6>
```

**結果**

><h1>見出し１</h1>
><h2>見出し２</h2>
><h3>見出し３</h3>
><h4>見出し４</h4>
><h5>見出し５</h5>
><h6>見出し６</h6>

見出し<h>タグを使うと一般的なブラウザでは

+ テキストのサイズが数字に応じて変化する
+ 太字で表示される
+ 前後に改行が入る

といった変化が自動的に発生する。
ただし「見出し」は「見出し」であるため、単純にサイズを変えたい（つまり**見栄えの観点で変化をつけたい**）ときはCSSで指定するのがベター。
*****

###太字\<b>
```html:kihon3.html
普通サイズ、<b>太字になる</b>
```

**結果**
>普通サイズ、<b>太字になる</b>

*****
###改行\<br>
```html:kihon3.html
コード上は続いていても改行タグが入ると<br>改行される
コード上は改行しても改行タグがないと
文字は続いてしまう
```

**結果**
>コード上は続いていても改行タグが入ると<br>改行される
>コード上は改行しても改行タグがないと文字は続いてしまう

*****
細かいものはもっともっとあるけどここで調べればなんとかなる。
[HTML5リファレンス](http://www.htmq.com/html5/ "HTML5リファレンス")


[^1]: 「タイプ名/サブタイプ名」の形式の文字列で、WEBサーバーとWEBブラウザの間でデータの形式を指定するために使われるもの。<br>拡張子ごとに決められたMIMEタイプが存在する。.cssならtext/css、.gifならimage/gifなど。
Linuxのパーミッションの意味

## パーミッションって？

```
# ls -la ~
dr-xr-x---. centos centos 4096 May   4 09:11 .
```

とかやったときの `dr-xr-x---` のところの記載がパーミッション。

- ファイルへのアクセス権限
- sh の実行権限や、PHPによる書き込み権限などを制御している

## 実はよく知らないで使ってる

長いことPGやってたけど、実はしっかり調べてない。
（野良PGだったのでちゃんと勉強したことがない）
イカンでしょ。
というわけで職場の人に聞いてみたので覚書する

## 各文字の意味

### 先頭の文字は `-`、`d`、`l` の3種類があるヨ

|文字|意味|
|:--|:--|
|-|ファイル|
|d|ディレクトリ|
|l|シンボリックリンク|

### 後続する9文字の `r`、`w`、`x` にはそれぞれ数値に置き換えができるヨ

|文字|数字|意味|
|:--|:--|:--|
|r|4|読み込み権限|
|w|2|書き込み権限|
|x|1|実行権限|
|-|0|権限なし|

### 文字の並びには意味があるヨ

- 3文字づつ区切りがあるヨ
- `Owner` `OwnerGroup` `Other` の順に並んでいるヨ
   - `Owner` オーナー自身に許可する権限だヨ
   - `OwnerGroup` オーナーが属するグループに許可する権限だヨ
   - `Other` その他のユーザーに許可する権限だヨ

### 数値には意味があるヨ

- 例えば `chmod 700 .` としたら `drwx------` になるヨ
- つまり 文字値を数値で指定しているヨ
- 例の場合だと `r + w + x` で合計が `7` になってて、後続は `00` で `-` にしてるヨ

## なるほどなぁ

ちゃんと覚えとこう。
NestJSのappをGCPにデプロイしたときに出たエラーの話

##はじめに
NestCLIで hello world! を表示するnestjsのappの雛形を作成した。ローカルで開くとしっかり表示されるが、GCPにデプロイしてサイトにアクセスすると、500 server errorが出てしまった。

## 解決策
```package.json
{
  "name": "attendance-server",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "engines": {
    "node": ">=8.0.0"
  },
  "main": "dist/main.js",
  "scripts": {
    "prepare": "npm run build",
    "pretest": "npm run build",
    "build": "tsc -p tsconfig.build.json",
    "deploy": "gcloud app deploy",
    "lint": "tslint -p tsconfig.json -c tslint.json",
    "start": "node ./dist/main.js",
    "start:dev": "nodemon",
    "start:debug": "nodemon --config nodemon-debug.json",
    "test": "repo-tools test app -- dist/main.js",
    "gcp-build": "npm run build"
  },
  "dependencies": {
    "@nestjs/common": "^7.0.9",
    "@nestjs/core": "^7.0.9",
    "@nestjs/mongoose": "^6.4.0",
    "@nestjs/passport": "^7.0.0",
    "@nestjs/platform-express": "^7.0.0",
    "@nestjs/typeorm": "^7.0.0",
    "express": "^4.17.1",
    "mongoose": "^5.9.11",
    "mysql": "^2.18.1",
    "reflect-metadata": "^0.1.13",
    "rimraf": "^3.0.2",
    "rxjs": "^6.5.4",
    "typeorm": "^0.2.24"
  },
  "devDependencies": {
    "@nestjs/cli": "^7.0.0",
    "@nestjs/schematics": "^7.0.0",
    "@nestjs/testing": "^7.0.0",
    "@types/express": "^4.17.3",
    "@types/jest": "25.1.4",
    "@types/node": "^13.9.1",
    "@types/supertest": "^2.0.8",
    "@typescript-eslint/eslint-plugin": "^2.23.0",
    "@typescript-eslint/parser": "^2.23.0",
    "eslint": "^6.8.0",
    "eslint-config-prettier": "^6.10.0",
    "eslint-plugin-import": "^2.20.1",
    "jest": "^25.1.0",
    "prettier": "^1.19.1",
    "supertest": "^4.0.2",
    "ts-jest": "25.2.1",
    "ts-loader": "^6.2.1",
    "ts-node": "^8.6.2",
    "tsconfig-paths": "^3.9.0",
    "typescript": "^3.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".spec.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}

```

上記のようにpackage.jsonを書き直したら治った。 "main"と"script"の中身が大事。
MacのGitをhomebrewで管理

Xcodeをインストールした際に、Gitが入ったのですが、Homebrewで管理されているGitを利用したいと思い、今回のアップデートを行いました。

# 今回実行した環境
macOS Catalina 10.15.4
Homebrew 2.2.15

## Gitのバージョン
Git 2.23.0 (Xcodeでインストールされたもの)
↓
Git 2.26.2 (Homebrew管理のもの)

# Homebrewがインストールされているか確認する
Homebrewがインストールされているかを確認します。
同時に、Homebrewのバージョンも確認しておきましょう。

```sh:Homebrewのバージョン確認
brew --version
```
```sh:実行結果
Homebrew 2.2.15
Homebrew/homebrew-core (git revision ad5dc0; last commit 2020-05-07)
Homebrew/homebrew-cask (git revision 558e5; last commit 2020-05-07)
```

# 現状のGitを確認する
現在、どのGitバージョンを利用しているかを確認する。

```sh:Gitバージョン確認
git --version
```
```sh:実行結果
git version 2.23.0
```
現在利用しているGitのパスを確認する

```sh:Gitのパス確認
which git
```
```sh:実行結果
/usr/local/bin/git
```
現在、HomebrewでGitをインストールしているかを確認します。

```sh:Homebrewでインストールされた
brew list | grep git
```
まだ、インストールしていない場合は、なにも表示されません。
既に、インストールした事がある場合は、`git`と表示されます。

```sh:既にインストールしている場合
git
```
既にインストールしている場合は、下記のインストールが正常に実行できない場合があります。

# HomebrewでGitをインストール
下記のコマンドでHomebrewを用いてGitのインストールを行います。

```sh:Gitインストール
brew install git
```

## インストールできているかを確認
下記のコマンドでHomebrewでインストールされているパッケージの中にGitがあるかを確認します。

```sh:Gitの確認
brew list | grep git
```
# Gitのシンボリックリンクのオーバーライトを実施

```sh:Gitのシンボリックリンク更新
brew link --overwrite git
```

# Gitのバージョン確認

```sh:Gitバージョン確認
git --version
```
```sh:実行結果
git version 2.26.2
```

# まとめ
自分の場合は、上記の方法でHomebrewでインストールしたGitを利用する事ができました。
P5.js 日本語リファレンス(sphere)

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

## sphere()


### 説明文

指定された半径で球を描画します。

detailX と detailY は、球のx方向とy方向の分割数を指定します。分割数を増やすと球がより滑らかに見えます。推奨される最大値は両方とも24です。24より大きい値を使用すると、警告が発生したりブラウザーの速度が低下したりする場合があります。

### 構文

sphere([radius], [detailX], [detailY])

### パラメタ

- radius  
Number：円の半径(オプション、省略時は50)

- detailX  
Integer：x方向の分割数(オプション、省略時は24)

- detailY  
Integer：y方向の分割数(オプション、省略時は24)

### 例1

```javascript
let detailX;
//スライダを動かして, x方向の分割数を増減します
function setup(){
  createCanvas(200, 200, WEBGL);

  // スライダの作成(最小値3、最大値24、デフォルト値3)
  detailX = createSlider(3, 24, 3);
  detailX.position(0, height + 5);
  detailX.style( 'width',  '200px');
}

function draw(){
  background(205, 105, 94); 
  rotateY(millis()/ 1000); // y軸回転
  // 球の描画(半径40、x方向の分割数はスライダ指定値、y方向の分割数は16
  sphere(40, detailX.value(), 16);

  console.log(detailX.value());
}
```


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


### 著作権

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) に従います。
@dynamicMemberLookupとKeyPathで不要なcomputed propertyを減らす

[こちらのプロポーザル](https://github.com/apple/swift-evolution/blob/master/proposals/0252-keypath-dynamic-member-lookup.md)により、Swift5.1から @dynamicMemberLookupとKeyPathを組み合わせることで、以前よりも安全にダイナミックなメンバーにアクセスすることができるようになりました。　


以下のサンプルでは、`Test`という構造体のcolorのcgColorを直接取得したい場合、これまではcomputed propertyを用意する必要があり、それごとにプロパティを用意してあげる必要がありましたが、KeyPathベースのdynamicMemberLookupを使うことにより、 `Test`構造体から直接 `color`の全てのプロパティにアクセスすることができるようになります。

```swift
@dynamicMemberLookup
struct Test {
    var color = UIColor.red

    subscript<T>(dynamicMember keyPath: KeyPath<UIColor, T>) -> T {
        color[keyPath: keyPath]
    }
}

// Equivalent
Test().color.cgColor
Test().cgColor
```

# 参考
https://developer.apple.com/videos/play/wwdc2019/415/ (20:24付近から)
https://github.com/apple/swift-evolution/blob/master/proposals/0195-dynamic-member-lookup.md
https://github.com/apple/swift-evolution/blob/master/proposals/0252-keypath-dynamic-member-lookup.md
Flutterのアップグレード（Windows）

本日2020/5/7にflutter 1.17がリリースされたましたので、アップグレードの方法を記載します。
# アップグレード方法
方法は2つありますが、どちらの方法をとるかは、flutterの初回導入時どのように環境を構築したかによります。
（環境構築方法は、[Flutter-Get started-1.Install](https://flutter.dev/docs/get-started/install/windows)を参照）

１：「flutter_windows_x.x-stable.zip」をダウンロードして環境を構築した場合
　　→　最新版のzipをダウンロードして入れ替えを行う。
２：gitのcloneコマンドで環境を構築した場合
　　→　flutter upgradeコマンドでアップグレードを行う。

# トラブル発生時対応方法
upgradeコマンドを実行した際に以下のエラーが発生した場合、原因は2つ考えられます。

```
C:\xxx>flutter upgrade
Checking Dart SDK version...
Downloading Dart SDK from Flutter engine xxxxxxxx...
Unzipping Dart SDK...
Building flutter tool...
Running pub upgrade...
Failed to write the version file to the artifact cache: "FileSystemException: Cannot open file, path =
'C:\xxx\flutter\version' (OS Error: アクセスが拒否されました。
, errno = 5)".
Please ensure you have permissions in the artifact cache directory.
Failed to write the version file
```

１：初回導入時、「flutter_windows_x.x-stable.zip」をダウンロードして環境を構築したにも関わらず、flutter upgradeコマンドでアップグレードを行った
　　→　flutterのzipを再度ダウンロードし入れ替えを行う。または、flutterフォルダを削除し、cloneコマンドでflutterを再導入する。
２：アクセス権がない
　　→　アクセス権のあるフォルダにcloneを行う。（コマンドプロンプトを管理者権限で実行可能ではあるが、以後の開発においてアクセス権がないことによって予期しないエラーが発生する可能性があるため）
pythonでローカルサーバ化


#概要
1. windows編
2. Mac編

##Windows

###pythonのダウンロード
[ここ](https://www.python.org/)からダウンロードする。
64bitなので以下のファイルをダウウンロード。
「Windows x86-64 executable installer」

###pythonのインストール
ダウンロードしたpython-3.8.2-amd64.exeをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215898/12d5f164-d375-7d94-d618-5aa425b9f52e.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215898/8a9caf45-c53f-f943-4086-08747599e1ba.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215898/9cff253a-1cc7-9cf0-7011-f2364d0f63ee.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215898/609331e7-bb37-eeb4-b7d5-48b7928be83f.png)
※[MAX_PATH の制限を除去する](https://docs.python.org/ja/3/using/windows.html#removing-the-max-path-limitation)を認めるようにメッセージが表記される。キャプチャを紛失しました。




###pythonの確認

```
>py -3 -V
Python 3.8.2
```

###ローカルサーバ配置
```
>py -3 -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...
```

「[http://127.0.0.1:8000](http://127.0.0.1:8000)」を叩くとディレクトリが表示されました。


###(ちなみに)pythonのアンインストール
インストーラからもアンインストールできます。

python-3.8.2-amd64.exeをクリック。


アンインストール完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215898/82951494-9911-59cc-e26b-46d1f04faa44.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215898/0a4c5a1f-c1b9-bcba-4c19-7465e84260b8.png)

##Mac

###pythonのインストール
下記の記事でインストール方法は記しています。
[mac vscodeでpythonをインストール
](https://qiita.com/Nagate/items/eb89c0ee61fa27b1094a)


###ローカルサーバ配置

```
$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
```

「[http://127.0.0.1:8000](http://127.0.0.1:8000)」を叩くとディレクトリが表示されました。

##参考

[ブラウザからローカルファイルへのアクセス方法](http://webbeginner.hatenablog.com/entry/2013/12/24/050716)
[Python 3.7.3のダウンロードとインストール
](https://www.javadrive.jp/python/install/index1.html)[Ajaxを使ってPythonとJavascriptでやり取りを行う方法](https://wynn-blog.com/ajax-python-javascript)
RaspberryPiでWindowsとファイル共有

1. Sambaをインストール
`sudo apt-get -y update`
`sudo apt-get -y upgrade`
`sudo apt-get install samba`

2. 設定ファイルを更新
`sudo vi /etc/samba/smb.conf`
設定ファイルの最後に追加
※共有名や共有パスは任意
[Share]
   comment = Raspberry Pi
   path = /home/pi/Public
   guest ok = yes
   read only = no
   browsable = yes
   force user = pi
3. Sambaを再起動
sudo systemctl restart smbd

これで、Windowsからネットワークを確認するとRaspberyPiが見れるはず
Markdownにリンク先内容をいい感じに表示するツールを作ってみました(React + Firebase Functions)

## 何を作ったのか？
[https://unfurler-markdown.netlify.app/](https://unfurler-markdown.netlify.app/)

URLからサイト情報取得して、マークダウン形式で出力するサービスを作ってみました。
Qiitaの投稿記事、GithubのissueやwikiやREADME、自分のマークダウンメモ等に参考リンクとか貼る際に味気ないな〜と思ったら使ってみてください！

URLを入れてGETを押して、表示されるマークダウンテキストをコピペしてください。出力されたテキストをQiitaに貼ってみた場合、次のようになります。

> **[Unfurler - Simple preview of a link info for markdown | Product Hunt](https://www.producthunt.com/posts/unfurler)**
> I created a service that retrieves site information from a URL and outputs it in a markdown format. If you're posting a reference link to a Github issue, wiki, or README, you might want to give it a try.
> ![](https://ph-files.imgix.net/6baa1875-e33d-4929-adc5-258eaee8e2d9?auto=format&fit=crop&h=512&w=1024)

## 技術的な話

ソースコードはこちらになります。
> **[GitHub - dorokei/unfurler: Unfurl link](https://github.com/dorokei/unfurler)**
> Unfurl link . Contribute to dorokei/unfurler development by creating an account on GitHub.

また、サイト情報を取得するAPIをコールしているのですが、APIはこちらです。
> **[GitHub - pildre/cutter: Cloud Function to get site informations from url.](https://github.com/pildre/cutter)**
> Cloud Function to get site informations from url. Contribute to pildre/cutter development by creating an account on GitHub.

### React + Typescript

APIをコールして返ってきたサイト情報を表示するだけのシンプルなサービスなので、プレーンなJavaScriptとかでもよいかなと思ったのですが、勉強も兼ねてReact + Typescriptで作りました。

マークダウンのテキストエリアは編集可能でリアルタイムプレビューになっているので、ここはReactで楽なので良かったです。

Typescriptの恩恵はあまり感じられませんでした、、まあサービス規模が小さいのでしょうがないですがあえてTypescriptを採用する必要はなかったかなという気がします。

ちなみに マークダウンパーサーには[markedjs](https://github.com/markedjs/marked)、APIのコールには[axios](https://github.com/axios/axios)を使用しています。

### Cloud Functions for Firebase

API側はFirebaseの[Functions](https://firebase.google.com/docs/functions)にアップしました。APIのfunctionだけ書いてそのままアップできるのはすごく楽でいいですね。

ただ、Firebaseはoutboundアクセスは無料枠では無理でした、、
本サービスは外部サイトをクロールするので外部アクセス必須、、今はなきFlameプランで月額25$かかってしまっています、、

外部URLをコールするサービスを実装する場合はこのあたりは要注意です。

## 最後に、、Product Huntでの失敗

蛇足ですが、本サービスをProduct Huntにも[アップしてみました](https://www.producthunt.com/posts/unfurler)。
Upvote数は2020年5月7日時点でなんと2！！ (うち1は自分)

これには理由がありまして、Product Huntは米国時間で当日の0:00からランキングが始まるので、このランキングの開始に併せて公開するのがよいとされています。日本時間では17時になります。

プロダクトのPOST時に、公開時間を予約できるのですが、そこで僕はPST時間0:00を選択しました。

そして17時くらいにランキングをチェックしてみました。

あれ、、ない、、

それからしばらく何度も画面をリロードしても自身のプロダクトが表示されません、、

なぜだ、、

もうおわかりかと思いますが、前日のランキングに入っていました。
前日のランキングの終了間近に滑り込みでプロダクトをアップしてしまったのです、、

一番最悪のタイミングでアップしてしまいました。

これなら一旦プロダクト削除して出し直したほうがいいな。と思いプロダクトの削除ボタンを探して見ましたが見つかりません。調べてみると、プロダクトの削除には運営に直接連絡しないといけないようです、、

もうこれは諦めるしかありませんでした、、
いろいろな人の目に触れる機会を自身の手でだめにしてしまいました。これは結構凹みました。


次にHacker Newsへの投稿を企んでいますが、こちらはまだkarmaが足りずに投稿できずにいます。
こちらも何か進展がありましたら記事を書こうかなと思います。
RaspberryPiのOS更新

RaspberyPiのOS更新時のコマンドメモ

1. ファームウェアとOSカーネルの更新  
`sudo rpi-update`
2. 再起動  
`sudo reboot`
3. アップデートとアップグレード  
`sudo apt update`  
`sudo apt dist-upgarade -y`  
→それなりに時間がかかるので放置  
※以下が出たら更新完了  
![UpdateCompleted.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207722/bcd5ea1c-c1e2-8fc7-54c0-454e3384f4f4.png)  
4. 不要ファイルの削除  
`sudo apt-get autoremove -y`  
`sudo apt-get autoclean`  
5. 再起動  
`sudo reboot`  

以上で完了
Twitterの凍結理由に関しての質問

質問：以下のtwitterの凍結理由は、どのような事が原因だと考えられるでしょうか？

投稿内容：とあるモノの相場情報を他のサイトから引用して、 API連携してbotとして毎日定時に投稿しておりました。

背景：異議申し立てしても、原因も運営から送られてこないため、解決方法や改善策が打てず、どうしようか悩んでおります。

考えられる凍結理由：
以下の2つかと思っております。
①外部の情報を連携投稿する自動ツイートする際、許可を得ていることを条件とするが、無許可で自動ツイートさせてると判断された可能性あり
②1つのアカウントから、重複するツイートやほぼ同内容のツイートを投稿することは禁止されているため、スパム行為と判断された可能性あり

以下、twitterの自動化ルールについて
https://help.twitter.com/ja/rules-and-policies/twitter-automation

もし、同じようなbotで凍結された事がある方いらっしゃったら教えていただけると幸いです。
よろしくお願い致します。
AngularFireでFirestoreのカウント　incrementを使う方法

#はじめに
AngularFireでincrementを使う方法を書きます。
Cloud Functionsでは使ったことあるけど、それ以外の場合ではどうなの？と思って調べたら使えたので:blush:

→Cloud Functionsを使ったカウントについては
[Firebase 要素の数をカウントするなら、最初からこの方法でいきましょう！（Cloud Functions）](https://qiita.com/kokogento/items/e4bc6eac6b8501ebcab7)
をみてね。

**incrementってのは、何かをカウントするのに便利なやつ。**

#前提
[angularfire](https://github.com/angular/angularfire)がすでにプロジェクトに導入されていること

#import * as firebaseで使えるようになる

```typescript:home.page.ts
import { AngularFireAuth } from '@angular/fire/auth';
import * as firebase from 'firebase/app';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss']
})

export class HomePage implements OnInit {

constructor(
    private afs: AngularFirestore,
  ) { }


 async addCount() {
    await this.afs.collection(`user`).add({
      eventCount: firebase.firestore.FieldValue.increment(1)
    });
  }

// マイナスの場合は-1とする
async deleteCount() {
    await this.afs.collection(`user`).add({
      eventCount: firebase.firestore.FieldValue.increment(-1)
    });
  }

// userコレクションの中の、特定のドキュメントのフィールド（eventCount）をincrement
 async addDocCount() {
    await this.afs
      .collection(`user`)
      .doc('gbsVZA5Kvj7LJhGvjOoX')
      .update({
        eventCount: firebase.firestore.FieldValue.increment(1),
      });
  }


}
```
EKSでAPIGatewayを使いたい場合の構成

# 1. はじめに
Amazon Elastic Container Service for Kubernetes（以下EKS）を本番運用するにあたって各要素について検討を行なっています。

今回はその中で、EKS で API Gateway を使用するにあたり、どのような構成を採用するかについて検討した内容をご紹介します。

もし指摘点等あればドシドシいただきたいです。

# 2. 構成パターン
色々調べた結果。下記の4つの構成パターンについて検討しました。

1. Terraform で API Gateway と NLB を構築後、nodePort で各サービスを立ち上げる
2. Terraform で API Gateway 構築後 Nginx Ingress Controller で NLB を利用する。また Nginx Ingress Controller と NLB は全サービス共用とする
3. Terraform で API Gateway 構築後、Nginx Ingress Controller で NLB を利用する。また Nginx Ingress Controller と NLB は各サービスごとに構築する
4. API Gateway Ingress Controller を使用する


## 2-1. Terraform で API Gateway と NLB を構築後、nodePort で各サービスを立ち上げる

![スライド1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306374/eb953660-1d48-9dd7-eac8-fcd6302affc4.jpeg)

### メリット
- Terraform と k8s の境界が明確。そのため k8s 初心者に優しい。
- Ingress が存在しないため障害点が少ない。

### デメリット
- ポートをかなり意識する必要がある。

### 所感
使用するリソースが少ないためシンプルな構成です。特に Nginx Ingress Controller を使用しなくてよいので、 負荷が増えてきたら Nginx のレプリカ数をどうしようか?とか考えなくてよいです。
ただ K8s は本来動的にリソースが決定され IP や Port は抽象化されるはずですが、この構成だと サービスと Port の紐付けを人力で管理する必要がでてきます。ちょっとかっこ悪い?

## 2-2. Terraform で API Gateway 構築後 Nginx Ingress Controller で NLB を利用する。また Nginx Ingress Controller と NLB は全サービス共用とする

![スライド2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306374/0055dba7-9a46-23b9-47c2-5e51fc365a57.jpeg)

### メリット
- 公式ドキュメントにもある導入方法
- Nginx Ingress Controller の豊富なオプションを利用できる
- サービスの振り分けを Ingress に任せられるため APIGateway 側はサービスをあまり意識しなくてよい。

### デメリット
- NginxIngressController の面倒を見る必要がある。

### 所感
一番 k8s っぽい。

## 2-3. Terraform で API Gateway 構築後、Nginx Ingress Controller で NLB を利用する。また Nginx Ingress Controller と NLB は各サービスごとに構築する

![スライド3.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306374/dccb0e19-77e7-da0f-ed88-b1b170c01a24.jpeg)

### メリット
- NLBまで含めてサービスごとに構築されるため、よりマイクロサービス化されていると言える。

### デメリット
- サービスごとにNLBが構築されるため費用がかさむ。
- Nginx Ingress Controller があまり意味を成さない。
- APIGateway でサービスの振り分けをする必要がある。

### 所感
マイクロサービス化されていると言えばそうだが、L4ロードバランサをサービスごとに用意する意味はあまりない気がする...。

## 2-4. API Gateway Ingress Controller を使用する

![スライド4.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306374/bdb0a27d-ac47-c126-055e-e41254017ed7.jpeg)

### メリット
- 初期構築や設定反映が簡単。
- サービスやAPIが増えたときも対応が簡単。
- 全てをk8sのマニフェストで管理ができる。

### デメリット
- API Gatewayの豊富なオプションを使用できない。できたとしても柔軟性が無い。
- API GatewayのバックエンドとしてEKS以外を使用できない。

### 所感
デメリットが致命的。例えばAWSの設定で、ある新規パスのバックエンドにLambdaを設定したとしても、k8sのマニフェストを適用した際に消えてします。K8sのマニフェストの設定内容で全て上書かれてしまう。

# 結論
検討した結果、 **『2-2. Terraform で API Gateway 構築後 Nginx Ingress Controller で NLB を利用する。また Nginx Ingress Controller と NLB は全サービス共用とする』** を採用することにしました。

またこの構成であれば、将来必要になった際に簡単に**『2-3. Terraform で API Gateway 構築後、Nginx Ingress Controller で NLB を利用する。また Nginx Ingress Controller と NLB は各サービスごとに構築する』**に拡張することができます。
サービス毎にNLBを分けることはしませんが、k8s の NodeGroup が複数できた際にも、 API Gateway が１つで対応可能となります。
Tkinterとpy2appでMac用appを作ってみる

# Mac用のアプリが作りたい。
ウェブページの製作などでお手伝いさせてもらっているお店から、コロナの影響でオンラインを中心に事前注文を受けるオンラインショップの注文内容をまとめるにはどうすればいいかという相談をいただいた。エクセルでまとめてもいいんだけど、簡単なアプリを作れないか思って、調べながら作ることにした。
##　Tkinter
https://python-textbok.readthedocs.io/en/1.0/Introduction_to_GUI_Programming.html
Introduction to GUI Programをコピペして実行してみる。ちなみにTkinterはpythonにもともと入っている場合が多いようで、Macで開発するのであれば特にインストールなどは必要ないらしい。
このページの最後にある電卓のサンプルプログラムを実行してみる。
<img width="219" alt="Screen Shot 2020-05-04 at 7.02.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165373/d545becf-a918-459d-37db-7d154046f4c5.png">
出ているはずの+と-が出ない。色々やってみたんだけど、tkinterと後述のpy2appがpythonのバージョンやインストール元の影響を非常に受けやすいらしく、pyenvとminiconda等色々インストール元を変えて試しましたが、結局OSをCatalinaにアップデートして、おそらく純正で入っていたPython3.8.2（違ったらすみません！）とvirtualenvで成功。この辺の失敗録かなんかを記録しておくといい記事になるんだろうけど、きちんと記録してないので、次回から何かするときは記録することにします。
<img width="201" alt="Screen Shot 2020-05-04 at 7.43.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165373/10e38878-2a58-f7f1-edc1-119a7b4e92d4.png">
一件落着。ここで、サンプルプログラムをみて、必要な部分を変えていきます。
##　作業
csvファイルを読み込み、集計結果を出力するプログラムなので、インターフェースはファイル名を表示する部分と、ディレクトリ呼び出しボタン、実行ボタンの三つでいいよねってことで、側だけ作ることにした。サンプルで定義されているクラスを、自分用のクラスに書き換えて、ボタンを一つけすだけの簡単な作業。
<img width="294" alt="Screen Shot 2020-05-04 at 7.58.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165373/b95702b2-1e56-42cf-444b-5751f2a87b44.png">
これで良さそう。次は中身を作ってみましょう。参考にしたのは[こちら](https://qiita.com/ddg171/items/c66f4a1bc7aa08fa4c64)と[こちら](https://qiita.com/ddg171/items/b95fa9abaebe55ce3daa)のqiitaの記事。（初心者なのでもっといい引用の方法があれば教えてください。）tkinterのfiledialogは[このチュートリアル](https://pythonbasics.org/tkinter-filedialog/)を参照しました。
データ整理はいつものPandas. ウェブサイトのCSVを読み込んで、商品名のデータフレームサブセットを作り、集計します。

```python
#固有の値だけをリスト化
self.itemlist=df["Item's Name"].unique()
#サブセットデータフレームから合計個数を計算
result={}
for item in self.itemlist:
  tempdf=df.loc[df["Item's Name"]==item]
  sumqty=tempdf["Qty"].sum()
  result[item]=sumqty
```

##Mac用バイナリ作成
Mac用のバイナリを作成します。[このサイト](https://ebi-works.com/python-desktop-app/)を参考に、py2appを使ってみましたが、Macが落ちたりappが開けなかったり、云々。
依存性の問題を色々クリアするために[こちら](https://www.metachris.com/2015/11/create-standalone-mac-os-x-applications-with-python-and-py2app/
)のサイトを参考に、virtualenv環境で必要なライブラリをpipでvirtualenvにいれ（今回はpandasとpy2appだけだったと思います）、ようやくアプリを作ることに成功しました。

py2appの使い方自体は非常に簡単で

```
py2applet --make-setup test.py
python setup.py py2app
```

これだけでできちゃいます。依存ライブラリはvirtualenvできちんと分けてあげないとうまくいかないようですが。
こうして、ようやくアプリ人生第一弾ができました。コードは1日でできても、アプリにするのに2日余計にかかりました笑
口調がコロコロ変わってすみません。またお会いしましょう。
Let's Encrypt の自動更新エラー

#Let's Encrypt のエラーに遭遇したとき

```bash
certbot-auto renew
```

これでエラーになる。エラーメッセージは以下。

```
Attempting to renew cert (ドメイン名) from /etc/letsencrypt/renewal/ドメイン名.conf produced an unexpected error: 'ascii' codec can't encode character u'\u306e' in position 790: ordinal not in range(128). Skipping.
```

position 790?

ぐぐってみるとPythonのエラーメッセージっぽい。


## エラーメッセージのascii codec can't encode character u'\u306e'

アスキーコードのu306eが問題だと！このコードはなんだ？

https://glyphwiki.org/wiki/u306e

#「の」！

「の」という文字ですよこれ。


/etc/letsencrypt/renewal/ドメイン名.conf
ここみても、「の」なんてないし、、、

？どうやら、certbot-autoは、nginxの設定を見ている模様。

/etc/nginx/

このあたりに書いてある日本語のコメントすべて削除するとcertbot-auto renew無事通過。
コメントなのに。。。
日本語、マルチバイトって厄介です。
PASEシェルAPIの違い

# PASEシェルAPIの使用方法について
これまで、活動化グループを分けてまで、CL実行することが無いため、同一活動化グループで実行される、`QP2SEHLL2`を盲目的に使用してきた。
しかし、`QP2SEHLL2` `QP2SEHLL` `sh` `-sh` 等が、意思がなく使用されている様に見受けられる、CLLE記述を見てしまったので、整理整頓と自身の備忘録の意味を込めて。

## IBM i の PASE SHELL 起動 API
詳細は 「[IBM Knowledge Center V7R5 QP2SHELL() を使用した IBM PASE for i プログラムの実行](https://www.ibm.com/docs/ja/i/7.5?topic=procedures-running-pase-i-program-qp2shell)」 を参照下さい。

実行されるのはコーン・シェル。
実態は **/QOpenSys/usr/bin/sh** → **../../QIBM/ProdData/OS400/PASE/bin/ksh** へのシンボリックリンク。

以下は、シェルの起動プログラムの種類。
- QP2TERM（対話式シェル）
- QP2SHELL（新しい活動化グループを作成し実行する）
- QP2SHELL2（呼び出し元の活動化グループ内で実行する）

``QP2SHELL2``は、同一活動化グループで実行されるため、5250対話式のコマンド・ラインで実行すると、STDOUTと対話式プログラムの出力とが重複している形になり、何も表示されない？
CLLEで活動化グループが、新たに作成される場合は、もちろん出力される。
CLLE内では、OVRXXXなどのスコープが、活動化グループ内（*ACTGRPDFN）だったりすると、`QP2SHELL2`は影響を受け、`QP2SHELL`受けない。  

### 使用例

```clle
CALL PGM(QP2TERM  ) PARM('/QOpenSys/usr/bin/sh' '-c' 'echo $PATH') 
CALL PGM(QP2SHELL ) PARM('/QOpenSys/usr/bin/sh' '-c' 'echo $PATH') 
CALL PGM(QP2SHELL2) PARM('/QOpenSys/usr/bin/sh' '-c' 'echo $PATH') 
```

## 環境変数について
以下の様に、PASEシェルでコマンドを実行することが可能だが、`sh`と`-sh`で起動時の環境変数に違いがある。  
**WRKENVVAR , ADDENVVAR** コマンドで設定済みの**ILE環境変数**は、`QP2TERM,QP2SHELL,QP2SEHLL2`、`sh,-sh`の組合せがどのパターンでも引き継がれる。  

- /QOpenSys/usr/bin/sh（環境変数がシステムの初期値になる）
- /QOpenSys/usr/bin/-sh（環境変数がユーザーの初期値になる。※起動時に **.profile** が実行される）

### 使用例
```clle
CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh'  '-c' 'echo $PATH') 
CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/-sh' '-c' 'echo $PATH') 
```
## kshのオプション
AIXを参考にすると、PASEのkshも基本的には、以下のオプションが使用可能だと思われる。
[IBM Knowledge Center AIX 7.2 kshコマンド](https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_72/k_commands/ksh.html)

- -c : コマンドの実行
- -v : 出力を表示
- -x : コマンドと引数を表示

```clle
CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh'  '-cvx' 'echo $PATH') 
```
Braveが最強のブラウザだと思う

# はじめに
bitflyerにBATが上場したとのニュースを見て、思い立ったようにBraveを入れてみると快適過ぎたので、記事を書きました。

# Braveとは
[Brave](https://brave.com/ja/download/)
[Braveブラウザは稼げる次世代高速ブラウザ！特徴・評判・使い方を徹底解説](https://crypto-times.jp/bravebrowser/)
# Braveを使うメリット
## 広告ブロックで爆速
<font color="Red">これが圧倒的メリット！！！</font>
余計な広告のダウンロードをブロックする事で、chromeの2~8倍の速度がでるらしい。体感でもそのくらい出てる気がします。
もちろん、Youtubeの動画広告も表示されません。
## Torが標準搭載
Torが標準搭載されている。ここに一番おどろきました。スマホ版も今後対応予定みたいです。
## 仮想通貨BAT(Basic Attention Token)がたまる
基本的にBraveは、標準で広告をブロックしますが、Rewards設定を行うことで、Braveが提供する広告が配信され、この広告を見る事でBATを報酬として受け取ることができます。
現在日本では、法規制の問題で、BATではなく、BAP(Basic Attention Tokenポイント)をもらうことができます。
2020年4月bitflyerが取り扱いを始めたのでBATがもらえるようになって欲しいです。
## chromeの拡張機能が使える
Chromiumベースのブラウザのなので、chromeの拡張機能が利用できる。
私は、chromeからの乗り換え組なので大変助かります。

# デメリット
1か月利用してみて、ほんの少しBAPがたまったので受け取ろうとするとエラーで受け取れない...
ネットサーフィンは、最高に快適なので、改善に期待します。
ブロック要素とインライン要素、簡単にまとめてみた。

ブロック要素とインライン要素がごちゃ混ぜになるので、まとめてみました。
今回は、

　１.　２つの要素の違い
　２.　ブロック要素、インライン要素の具体的な例
　３.　ブロック要素、インライン要素を変える方法
　４.　忘れてしまった時のための裏技
　５.　まとめ

の順で説明していきます。

###そもそもブロック要素とインライン要素って何？
って人のために、２つの要素の違いを簡単に書いておきます。
#２つの要素の違い
|　　             |改行|width, height|margin, padding, border|
|:---------------|--:|:----------:|:-----------------------|
|**ブロック要素**      |   ○    |   ○        |         ○           |
|**インライン要素**    |   ×    |        ×   |         **△**          |
    


この表を見れば一目瞭然です。

#####１. 　ブロック要素　
・自動的に改行される。
・widthとheightが効く。
・margin, padding, borderを指定することができる。


#####２. 　インライン要素
・自動的に**改行されない**。
・widthとheightが**効かない**。
・margin, padding, borderを追加で設定することはできるが、**他の要素の邪魔をすることがあるので注意が必要**である。
　（・上下のmarginは設定すること自体できない。）
　

#ブロック要素、インライン要素の具体的な例
| | | | | |
|:-----------|---------:|:-------:|:--------:|:--------:|
| **ブロック要素**      |  < p >  |  < div >  | < h1 >〜< h6 >| < table > |
| **インライン要素**    |    < a >    |     < span >     |    < img >  | 

など...

#ブロック要素、インライン要素を変える方法
そもそもの要素自体を変えることもできちゃいます。
つまりブロック要素をインライン要素に、またはインライン要素をブロック要素に変えることができます。

```css:css
/* pタグはもともとブロック要素です */
p {
     display: inline;
}

/* aタグはもともとブロック要素です */
a {
     display: block;
}
```
css上のdisplayプロパティを使うことによってブロック要素とインライン要素を逆にできます。

#忘れてしまった時のための裏技
Googleのデベロッパーツール（Google Chrome Developer Tools）を使えばブロック要素なのかインライン要素なのか簡単に知ることができます。
さらにwidthやmarginなどがちゃんと効いているかを確認できます。

  1. 検証でデベロッパーツールを開く。　　
　          
  2. stylesでdisplayが何になっているのか確認する。
  
  3. またstylesの中に width, height, margin, padding, border を一気に見ることができる図があるのでそこで確認する。

Googleが出しているデベロッパーツールの使い方のサイトを見つけたので貼っておきます。詳しく知りたい方はどうぞ。
>Chrome DevTools - Google Developers(https://developers.google.com/web/tools/chrome-devtools?hl=ja)

#まとめ
・ブロック要素とインライン要素では、width, height, margin, padding, borderの設定において違いがある。**特にインライン要素は要注意**。

・displayプロパティを使えば要素自体を変えることができる。

・Googleのデベロッパーツールの中にあるstylesを見ればwidthやmarginなどが効いているか簡単に確認することができる。
Fortranで動的割付した配列をcsv形式で出力したい場合

こんにちは。
この記事では、Fortranで動的割付け`allocate`されている場合の`csv`形式の出力でつまづいた点を共有させていただきます。

##Fortranでcsv形式で出力する場合
`x_out`をcsv形式を行う場合、下記の通りに記述します。

```fortran:csv.f90
real(4)        :: x_out(3)
character(256) :: linebuf

open (1, file='./your_outfile.csv', form='formatted', status='replace')
  write(linebuf, '2(f7.2, ","), f7.2)') ! *** (書式設定)
  call del_spaces(linebuf) ! *** (空白を詰めるサブルーチン)
  write(1, '(a)') trim(linebuf)
close(1)
```

`x_out(3)`と配列数が決まっている場合は、
Fortranの書式設定に`(f7.2, ",")`のように記述して、小数点数字とカンマを記述しています。

※書式設定について
`()`の前に数値を加えると書式設定が数値分反映されますが、配列数から一つ引いた分を記述しています。
配列数を全て加えると最後にカンマを残して出力されてしまうので、配列数から一つ引いた値を繰り返して、最後に独立して同じ書式を再び書いて、カンマをなくしています。

※サブルーチンについて
`call del_spaces`のサブルーチンは、下記に記述している参考サイトから引用しております。
内容は、通常の`write`では一つの出力の後に空白を出してしまうので、それを詰める機能となっています。


##本命の部分
以下、今回の状況になります。
[上記](##Fortranでcsv形式で出力する場合)と同様に、`x_out`をcsv形式で出力したいと考えています。

上記との違いは,
Fortran内で動的割付をしており、shで配列の大きさを指定して渡し、出力したい点です。

以下、上手く行ったコードです。

```bash:compile.sh(${prg}はコンパイル済みの.f90)
nx = 40
today=$(date "+%Y%m%d%H%M")
./${prg} > ./log/${today}.log << EOF
  &set_parm
    nx = ${nx}
  /
EOF
```

```fortran:allocate_csv.f90
real(4), allocate :: x_out(:)
integer           :: nx

character(4)      :: cfmt_num
character(24)     :: cfmt
character(256)    :: linebuf

namelist /set_parm/ nx
read(5, nml=set_parm)
allocate(x_out(nx))

write(6,*) '-------------------------------------------------------'
write(6,*) '+++ Check Writing output system,  '
cfmt = '(xx(F12.7, ","), F12.7)'
write(cfmt_num,"(I2)") nx-1
cfmt(2:3) = cfmt_num
open(2, file='./your_outfile.csv', form='formatted', status='replace')
  write(linebuf, cfmt) x_out
  call del_spaces(linebuf)
  write(2,'(a)') linebuf
close(2)
write(6,*) ' && Successfuly output !!!        '  
```

この場合で、少し手間取った点は下記に記述しました。

- 書式設定内に変数を入れ込みたい

csv形式を出力したいので、コンマを記述する必要があります。
その際に配列数は動的なので、書式設定内も逐一変更しないで、変数を入れることで解決したいです。

```fortran
cfmt = '(nx-1(F12.7, ","), F12.7)'
! *** →もちろん、ダメだった。

cfmt = '(' + str(nx) + '(F12.7, ","), F12.7)'
! *** →イメージとしては、こんな感じにしたい。
```
※ 書式設定内は文字列なので、配列数の整数型の数字を文字列に変換させて結合したいです。

この時、壁は二つあります。
1. shから受け取った整数を、文字列に変換する。　
→その際には、[@implicit_none](Fortranで整数を文字列に変換する)さんの記事を参考にさせていただきました。
2. 文字列を結合する。
→fortranの文字列結合には、`//`がありますが2つ以上の連結では使用できませんでした。

そのため、あらかじめ数字が入るところに`xx`を入れて、そこに`cfmt(2:3) = cfmt_num`受け取った整数を文字列化した者を入れることで対応しました。

これらを行った結果、無事に今回のねらいを実装することができました。
より良い書き方などお気づきになった方はコメント等でご教授いただければ幸いです。

同じような点で困った人の手助けになれたら幸いです。
最後まで見ていただき、ありがとうございました。

##参考

・Fortran Tips集: csvファイルを書き出す方法
https://www.nag-j.co.jp/fortran/tips/tips_writeCSV.html
・Fortranで整数を文字列に変換する
https://qiita.com/implicit_none/items/39018f2848b5237fc3ea
golang でランダム文字列生成

Go では乱数を返すライブラリはあれど、ランダム文字列を返すライブラリがない（少なくとも今の所は）。
というわけで、パスワードなどでランダムな文字列を生成したい場合は自分で書く必要がある。

ちなみに乱数を生成するには [math/rand](https://golang.org/pkg/math/rand/) と [crypto/rand](https://golang.org/pkg/crypto/rand/) があり、本記事ではcrypto/randを使っているが、どちらでも良い。

# 方法１ 乱数を使って、定義しておいた定数からランダムに抽出する
以下のような定数 letters を定義しておいて、乱数を使ってランダムに取り出す方法。よく見る。
`"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"`
[この記事](https://qiita.com/srtkkou/items/ccbddc881d6f3549baf1)が詳しい。

```main.go
package main

import (
	"crypto/rand"
	"errors"
	"fmt"
)

func main() {
	random, _ := MakeRandomStr(10)
	fmt.Println(random)
}

func MakeRandomStr(digit uint32) (string, error) {
	const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

	// 乱数を生成
	b := make([]byte, digit)
	if _, err := rand.Read(b); err != nil {
		return "", errors.New("unexpected error...")
	}

	// letters からランダムに取り出して文字列を生成
	var result string
	for _, v := range b {
        // index が letters の長さに収まるように調整
		result += string(letters[int(v)%len(letters)])
	}
	return result, nil
}
```

# 方法２ 乱数を使って、ASCIIコードから文字に変換する方法
letters を定義するのダサくね？という人はこんな方法もある。
ただ、制御文字が入らないことをテストするのが実質無理なため、方法1の方が良さそう。


乱数を作るところまでは同じで、それをASCIIコードとみなし、stringにキャストする。

```main.go
package main

import (
	"crypto/rand"
	"errors"
	"fmt"
)

func main() {
	random, _ := MakeRandomStr(10)
	fmt.Println(random)
}

func MakeRandomStr(digit uint32) (string, error) {
	// 乱数を生成
	b := make([]byte, digit)
	if _, err := rand.Read(b); err != nil {
		return "", errors.New("unexpected error...")
	}

	// 乱数をASCII文字列に変換
	var result string
	for _, v := range b {
		// 制御文字が当たらないように調整
		result += string(v%byte(94) + 33)
	}
	return result, nil
}
```
P5.js 日本語リファレンス(box)

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

## box()

### 説明文

指定された幅、高さ、奥行きでボックスを描画します

### 構文

box([width], [height], [depth], [detailX], [detailY])

### パラメタ

- width
Number：ボックスの幅(オプション、省略時は50)

- height
Number：ボックスの高さ(オプション、省略時は幅と同じ)

- depth
Number：ボックスの深さ(オプション、省略時は高さと同じ)

- detailX
Integer：x方向の三角形分割数(オプション)

- detailY
Integer：y次元の三角形分割数(オプション)

### 例1

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

function draw(){
  background(240);
  fill(255, 0, 0);
  rotateX(frameCount * 0.01);
  rotateY(frameCount * 0.01);
  box(50, 50, 50, 0, 0);
}
```

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

### 著作権

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) に従います。
MacでScheme48を動かす

# 始めに
Scheme とは関数型言語 LISP の方言の1つであり、Scheme 処理系の1つに [Scheme48](https://s48.org/) がある。
Scheme48 を Mac で使うための情報が少なかったため、まとめておく。

# Homebrew のインストール
まず Homebrew をセットアップしておく。
<a href="https://qiita.com/krtsato/items/ba567acacb93a7a02dd9">Homebrewのインストールから操作まで</a>

# Scheme48 のインストール
ターミナルを立ち上げて、下記のコードを実行する。

```ruby:terminal
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null
```

完了したら、これでインストール。

```terminal:terminal
$ brew install scheme48
```
# プログラムの実行と終了
さっそく Scheme48 を動かしてみよう。

```terminal:terminal
$ scheme48
Welcome to Scheme 48 1.9.2 (made by brew on 2019-10-14)
See http://s48.org/ for more information.
Please report bugs to scheme-48-bugs@s48.org.
Get more information at http://www.s48.org/.
Type ,? (comma question-mark) for help.
> (define x 3)
; no values returned
> x
3
```

プログラムを終了するには ```,exit``` と入力する。
この記載が中々見当たらず、初めの頃は Ctrl+D とか exit() などあれこれ試していた。

```terminal:terminal
> ,exit
```

# 外部ファイルの読み込み
ターミナルで ```.scm``` や ```.sch``` といった拡張子の外部ファイルを読み込むには、scheme48 を起動した後に load関数の引数にファイルを指定する。

```terminal:terminal
$ scheme48
Welcome to Scheme 48 1.9.2 (made by brew on 2019-10-14)
See http://s48.org/ for more information.
Please report bugs to scheme-48-bugs@s48.org.
Get more information at http://www.s48.org/.
Type ,? (comma question-mark) for help.
> (load "hoge.scm")
```



# その他
Atom で Scheme48 を利用する上で便利なパッケージを紹介する。

## ターミナル
ターミナルを入れるとエディタ内でコーディングから実行までを完結させることができる。
代表的なものは <a href="https://atom.io/packages/platformio-ide-terminal">Platformio-ide-terminal</a> で、拡張性も高く便利。

## シンタックスハイライト
[language-scheme](https://atom.io/packages/language-scheme) というパッケージをインストールすると、 ```.scm``` や ```.sch``` などのファイルを開いた時にシンタックスハイライトが有効になる。
なお [schene-syntax](https://atom.io/packages/scheme-syntax) というパッケージもあるが、なぜかハイライトが有効にならない。

# 参考資料
 - Install scheme48 on Mac with Brew <br>https://brewinstall.org/Install-scheme48-on-Mac-with-Brew/
VMware Fusionエラーの備忘録

##はじめに
VMware Fusionのエラーで時間を費やしたので自分自身のための備忘録
<img width="424" alt="スクリーンショット 2020-05-07 10.54.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123755/2aecabd8-2bdd-54e4-a5cd-567c5219d6da.png">
##エラーの理由
エラーの理由は、仮想マシーンの「パッケージの内容を表示」から「vmware.log」を開いてみると
/tmp/vmware-hotge/mkscrtl
ってのが作成できないってことでエラーになってる。

つまりは、ディレクトリの作成権限がないってことだと思う。
##解決策
/tmp（正確には/private/tmp？）のディレクトリにユーザーの書き込み権限を与えるとエラーが解消した。
これが本当に正しい解決策かは？？？なので、行う時は自己責任で。。。