OmniAICreator/Qiita-1.07M huggingface dataset:
FreeBSDでもflashrom

いつもはMacOS Xの雪豹かEl Capitanで使っているflashromですが、今は手元にMacがないのでFreeBSDで使ってみました。

flashromはpkgであります。

```
% sudo pkg install flashrom
```

試してみます。

```
% flashrom 
flashrom v1.2 on FreeBSD 13.0-RELEASE-p4 (amd64)
flashrom is free software, get the source code at https://flashrom.org

Please select a programmer with the --programmer parameter.
To choose the mainboard of this computer use 'internal'. Valid choices are:
internal, dummy, nic3com, nicrealtek, gfxnvidia, drkaiser, satasii, atavia,
it8212, serprog, buspirate_spi, dediprog, developerbox, rayer_spi, pony_spi,
nicintel, nicintel_spi, nicintel_eeprom, ogp_spi, satamv, pickit2_spi,
ch341a_spi, digilent_spi, stlinkv3_spi.
% sudo flashrom -p serprog:dev=/dev/cuaU0:57600
flashrom v1.2 on FreeBSD 13.0-RELEASE-p4 (amd64)
flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 4, resolution: 1ns).
serprog: Programmer name is "ATMegaXX8 SFR"
Found Eon flash chip "EN29F002(A)(N)T" (256 kB, Parallel) on serprog.
No operations were specified.
```

昔秋月にあったPLCC32 5VなFlashですが、もうなくなってしまったようですね。

FTDIのサポートはオプションになっていたので、FT232HなどでSPI Flashを焼きたい場合はportsでオプションを設定してビルドしてください。

```
% ./flashrom 
flashrom v1.2 on FreeBSD 13.0-RELEASE-p4 (amd64)
flashrom is free software, get the source code at https://flashrom.org

Please select a programmer with the --programmer parameter.
To choose the mainboard of this computer use 'internal'. Valid choices are:
internal, dummy, nic3com, nicrealtek, gfxnvidia, drkaiser, satasii, atavia,
it8212, ft2232_spi, serprog, buspirate_spi, dediprog, developerbox, rayer_spi,
pony_spi, nicintel, nicintel_spi, nicintel_eeprom, ogp_spi, satamv,
usbblaster_spi, pickit2_spi, ch341a_spi, digilent_spi, stlinkv3_spi.
```

デフォルトではFTDIのモジュールはシリアルデバイスして認識されてしまうので、これを解除しないとflashromでは使えません。

https://qiita.com/yamori813/items/338b641874db7fbfa1a0

https://qiita.com/yamori813/items/28c3fe71840c3277e409

新しいパッケージではftdiのサポートが入っていません。

```
 % flashrom
flashrom v1.3.0 on FreeBSD 13.1-RELEASE (amd64)
flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 4, resolution: 70ns).
Please select a programmer with the --programmer parameter.
To choose the mainboard of this computer use 'internal'. Valid choices are:
internal, dummy, nic3com, nicrealtek, gfxnvidia, raiden_debug_spi, drkaiser,
satasii, atavia, it8212, serprog, buspirate_spi, dediprog, developerbox,
rayer_spi, pony_spi, nicintel, nicintel_spi, nicintel_eeprom, ogp_spi, satamv,
pickit2_spi, ch341a_spi, digilent_spi, stlinkv3_spi, dirtyjtag_spi.
```

USBも相性が悪いみたいで、FreeBSDでは使えないと思ったほうが良いようです。どうもプロジェクトの中にFreeBSDで使っている人がいなくなった感じがします。
ラビットチャレンジ　- 応用数学編 -

## はじめに
本記事は、E資格受験のためのレポートになります。
ラビットチャレンジの講義より、今回は、応用数学編です。

## 目次
・線形代数学（行列）
・線形代数学（固有値）
・統計学
・情報理論学

## 1.線形代数学（行列）
## 1.1　行列の計算
コンピューター計算の基礎となっている行列。
データを行列に変換してやり取りを行っている。

行列の加算や減算は、対応要素ごとに算出を行う。
積については、下記の通り。

```math
\begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} ×　\begin{pmatrix} x \\ y\end{pmatrix}
= \begin{pmatrix} x + 2y \\ 3x+4y \end{pmatrix} 
```
→XとYに関する２つの連列方程式になっていることが確認できる。

ちなみに行列の積については、掛ける順番が異なる場合、値が異なる場合が
あるので要注意。


## 1.2 固有値と固有ベクトル
・固有値
n次正方行列Aに対し


```math
   Av = λv  (v \neq0)

```
を満たすRnのベクトルvと実数λが存在するとき、λをAの固有値、vを固有値λに属する固有ベクトルと定義する。

例を以下に示す。

```math
\begin{pmatrix} 2 & 5 \\ 3 & 4 \end{pmatrix} ×\begin{pmatrix}  1\\ 1\end{pmatrix}
=  7  × \begin{pmatrix} 1  \\ 1\end{pmatrix} 
```


## 2. 統計学
データの性質を見るための統計学。
統計学を使うことによって抽出したデータから元の大きなデータの傾向をみたり予測を行うことが可能になる。

## 2.1.1　確率
統計学の大きな柱になっている確率論。
確率という考え方を取り入れることで、天気予報や当選確率等、現象の「発生しやすさ」を
説明することが可能になる。
確率には、頻度確率（ex:当選確率、発生する頻度）とベイズ確率（ex:インフルエンザ診断、信念の頻度）がある。

## 2.1.2 確率変数と確率分布
・確率変数
様々な値を取る（ex:サイコロ 1~6の目）変数Xがあって、それぞれの値をとる確率（ex:1/6)が決まっているXを確率変数と定義する。

・確率分布
確率変数xの取りうる値とそれらの確立との対応関係をさす。
とびとびの値を取るとき（離散型）の場合、表に示すことができる。


## 2.1.3 様々な確率分布
・ベルヌーイ分布
→「0　or  1」や「勝ちまたは負け」等、２種類しか得ることのできない試行をさす。
イメージはコイントス（裏or表）

```math
 P(x|μ)　= μ^x(1-μ)^{1-x}
```

・マルチヌーイ（カテゴリカル）分布
→変数が３種類以上得られる試行をさす。
得られる変数の割合が等しくなくても使える。

・二項分布
→ベルヌーイ試行を複数回行う試行。

```math
 P(x|λ,n)　= \frac {n!}{x!(n-x)}λ^x(1-λ)^{n-x}
```

・ガウス分布
→別名：正規分布。連続的な変数に関する確率分布の一つ。
釣鐘型の連続分布

```math
 P(x:μ,σ^2)　=\sqrt{\frac{1}{2πσ^2}}exp(-\frac{1}{2σ^2})(x-μ)^2
```
## 3.情報理論学
## 3.1　自己情報量
→確率が低いほど情報量は大きく、確率が高いほど情報量は小さい。
つまり珍しいほど、情報量は多い。

```math
 I(x)　=　-log(P(x)) = log(w(x))

```
Pは確率を示し、Wをイベントを示す。
※P(x)でlogを取る場合、マイナスの符号がつくので要注意。

## 3.2 カルバック・ライブラー・ダイバージェンス
→２つの確率分布の違いを数量化したもの

```math
 D_{kL} =E_{k~p}\Bigg[log\frac{P(x)}{Q(x)}\Bigg]
        =E_{k~p}\Bigg[logP(x) -logQ(x)\Bigg]
```

P、Qはそれぞれ、離散確率分布を示している
パーミッションとは



プログラミングスクール卒業生です。
スケジュールがとてもハードで理解が浅いままになっている部分があります。
少しでも理解を深めたいと思い、この投稿を始めました。
第2回目は「パーミッション」についてです。
間違っている部分があれば指摘していただけると助かります。よろしくお願いいたします。

早速本題についてですが、まずパーミッションとはなんなのか定義から復習していきます。


##パーミッションとは？
パーミッションとは、ファイルやフォルダまたはディレクトリに対するアクセス権限についてです。

###アクセス権限とは
ファイルやフォルダまたはディレクトリに対して読み込み、書き込み、実行をすることができる権限のことです。

また、それぞれアクセス権限が与えられるユーザーが3パターンありましてオーナー、オーナーと同じグループのユーザー、その他のユーザーとなります。それを１つずつ説明していくと、、、

１、オーナーの読み込み権限
２、オーナーの書き込み権限
３、オーナーの実行権限

４、オーナーと同一グループのユーザーの読み込み権限
５、オーナーと同一グループのユーザーの書き込み権限
６、オーナーと同一グループのユーザーの実行権限

７、その他ユーザーの読み込み権限
８、その他ユーザーの書き込み権限
９、その他ユーザーの実行権限

以上の９つを表現したものを「パーミッション」と呼びます。

##パーミッションの表記について

まず、パーミッションを出力方法についてです。

```
ls -la
```
他に保何種類かあります。興味がある方は調べてみてください。
そして、このコマンドを実行するとファイルやフォルダまたはディレクトリの一覧が表示されます。

![スクリーンショット 2021-12-12 16.48.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686037/bbd8f7e9-3570-3a34-36c1-9cd8a5f4944f.png)
スクリーンショット 2021-12-12 16.48.57


実行結果の例を添付しておきました。
一番左にdrwx-の羅列が確認できると思います。これがパーミッションです。
下記のパーミッションを例に見ていきましょう。

```
drwxr-xr-x
```

「d」 → はその項目がフォルダ又はディレクトリであることを表しています。
「r」 → は読み込み（read）の権限があることを示しています。
「w」 → は書き込み(write)の権限があることを示しています。
「x」 → は実行(execute)の権限があることを示しています。
「-」 → は権限がないことを示しています。

また、この例で言うところの「d」から右へ3つが、オーナー。その次の右３つがオーナーと同一グループのユーザー。最後の３つがその他ユーザーの権限です。

##パーミッションの8進数表現
ここまで、パーミッションは「r」、「w」、「x」で表すと説明してきましたが、場合によっては3桁の8進数の数字で表すことがあります。8進数とは0~7までの数字の組み合わせのことです。
こちらは次回の投稿にしようと思います。

お疲れ様でした。
blastengineを使ってターミナルからメールを送信する

[blastengine](https://blastengine.jp/)は手軽に利用できるエンジニア向けのメールサービスを提供しています。何かと面倒なメール配信をシンプルに、かつ確実に送信先に届くようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/7c03af2b-5fc4-8185-223d-986ef2a6e21c.png)


今回はblastengineでメールを送信するまでの流れを順番に解説します。

## ユーザ登録する

blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします（ユーザIDは後で使います）。

![getting-started-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/835a30e9-2c6e-5257-65e5-dd319d3d8b05.jpeg)


## APIキーをゲットする

ログイン後、管理画面の右上にある設定メニューに移動します。

![getting-started-6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/5f2e8cce-3ddd-8fc9-74ac-b1e09842f470.jpeg)


そして設定の中で、APIキーを取得します。

![getting-started-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/6be209e7-f49d-bfa3-6933-1d35d05ff6bc.png)


## 送信元ドメインのSPFを設定する

送信元として利用するドメイン（自分で持っているもの）の設定をします。これは任意のドメイン管理サービスで設定しますが、TXTレコードに以下のSPFを追加します。

```
txt @ v=spf1 include:spf.besender.jp ~all
```

## トークンを生成する

APIリクエストするためのトークンを生成します。手順としては次のとおりです。

1. ユーザIDとAPIキーを連結する
2. SHA256のハッシュを生成する
3. ハッシュを全て小文字にする
4. 3の文字列をBASE64エンコードする

例えばユーザIDとAPIキーが以下だったとします。

| 項目 | 値 |
|------|------|
| ユーザID | blastengine |
| APIキー | ABCDEFG |

まずユーザIDとAPIキーを連結します。

`blastengineABCDEFG`

この文字列のハッシュ値を取ります。

```
$ echo -n "blastengineABCDEFG" | shasum -a 256
1f0eee8fc120676fc589492f15228efb3d021f0aee4b006efb27c7ee33f5d6c9  -
```

この値をすべて小文字にし、BASE64エンコードします。

```
$ echo -n "1f0eee8fc120676fc589492f15228efb3d021f0aee4b006efb27c7ee33f5d6c9" | base64 
MWYwZWVlOGZjMTIwNjc2ZmM1ODk0OTJmMTUyMjhlZmIzZDAyMWYwYWVlNGIwMDZlZmIyN2M3ZWUzM2Y1ZDZjOQ==
```

この生成された `MWYwZWVlOGZjMTIwNjc2ZmM1ODk0OTJmMTUyMjhlZmIzZDAyMWYwYWVlNGIwMDZlZmIyN2M3ZWUzM2Y1ZDZjOQ==` がトークンになります。

## JSONを用意する

APIにリクエストするためのJSONを用意します。今回は簡単な例として、次のJSONになります。JSONキーについては別な記事で解説する予定ですが、おそらく見ればどこに用いられるものなのかはすぐ分かるかと思います。fromのemail、toのメールアドレスは必要なものに書き換えてください。

```json
{
  "from": {
    "email": "no-reply@example.jp",
    "name": "送信者サンプル"
  },
  "to": "test@example.com",
  "subject": "テスト件名",
  "encode": "ISO-2022-JP",
  "text_part": "テスト配信",
  "html_part": "<!DOCTYPE html><html><header></header><body>__code1__ sample html</body></html>"
}
```

## リクエストを組み立てる

blastengineの即時配信（トランザクション）用のエンドポイントは以下になります。

```
POST https://app.engn.jp/api/v1/deliveries/transaction
```

トークンとJSONの準備ができたらcurlリクエストを組み立てます。

```
$ curl -XPOST \
  -H "Authorization: Bearer MWYwZWVlOGZjMTIwNjc2ZmM1ODk0OTJmMTUyMjhlZmIzZDAyMWYwYWVlNGIwMDZlZmIyN2M3ZWUzM2Y1ZDZjOQ==" \
	-H "Content-Type: application/json" \
	-d '{
			"from": {
				"email": "no-reply@example.jp",
    			"name": "送信者サンプル"
  			},
  			"to": "test@example.com",
  			"subject": "テスト件名",
  			"encode": "ISO-2022-JP",
  			"text_part": "テスト配信",
  			"html_part": "<!DOCTYPE html><html><header></header><body>sample html</body></html>"
	}' \
	https://app.engn.jp/api/v1/deliveries/transaction
```

これで `{"delivery_id":4}` といったレスポンスが返ってくれば完成です。

## まとめ

blastengineは次の3ステップでメール送信できます。

1. SPFレコードをセットする
2. APIキーをゲットしてトークンを生成する
3. APIを実行する

日本で提供しているサービスだけあって、日本のキャリアやユーザへの到達率も高いのが特徴です。ぜひblastengineをお試しください！

[エンジニア向けメール配信システム「ブラストエンジン」](https://blastengine.jp/)
【備忘録】先輩から学んだ仕事術


https://craftsman-software.com/posts/56

分報じゃないけど、好きなときに好きなこと
（仕事上でもプライベートでもの課題や感情）を書いていい場所があってよかった🐾

>書く義務もなければ読む義務もないので気軽にどぞ

これくらいのゆるさで作るとほんとに便利かも






##開発の心得
テストがしにくい場合は、おそらく
>実装のクラス設計や関数の分け方がわるい
<input>のonChangeで半角数字以外の入力を弾く


```javascript
const [inputNum, setInputNum] = useState("");

const REGEX_NUMBER = /^[0-9]*$/g;

export const onChangeFilterNumber = (event, setterFunction) => {
    let input = event.target.value;
    if (input.match(REGEX_NUMBER)) {
        setterFunction(input);
        return true;
    } else {
        return false;
    }
};

...
...

{/* type="number"にすると"e","E"が入力できてしまう挙動になりハマった */}
<input
 type="text"
 value={inputNum}
 onChange={changeEvent => onChangeFilterNumber(changeEvent, setInputNum)}
 placeholder="半角数字で入力してください"
/>
```
◆フロントエンドのすべて◆


フロントエンドのロードマップ

https://roadmap.sh/frontend



https://zenn.dev/kkeeth/scraps/dd30ae9d48f092

↑解説記事
× 「こんなにやらなきゃいけないことあるんだ」
○ 「ふーん、こんな広い世界なんだ」
LINE WORKSとらくしふの連携方法

## 自己紹介
LINE WORKSでカンタンにシフト提出ができる、シフト管理DX「らくしふ」で
COOをしている河合です。

誰でも簡単にLINE WORKSとらくしふを連携するための方法について、
今回は案内させていただきます。

## らくしふについて
12,000店舗が利用するシフト管理DX「らくしふ」
https://rakushifu.jp/

最近、CMを放映したり、数理最適化を用いたシフトの自動作成などにもチャレンジしています。

◇CM
・ダイヤモンドダイニング編
https://www.youtube.com/watch?v=rBI21yqMpwY

・ピザハット編
https://www.youtube.com/watch?v=04p3S4cOz2Q

◇シフト自動作成
https://prtimes.jp/main/html/rd/p/000000033.000051115.html

## step1　らくしふの利用開始 & LINE WORKSのアカウント作成
らくしふを利用開始するには問合せの上、契約が必要となります。

## step2　LINE WORKSのdeveloper consoleより必要情報の取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218914/8b30e81a-8638-1cb8-fc7f-3c5f3d922949.png)

必要な情報はこちらにある6項目となります。それをそのままらくしふの担当にご共有ください。

## step3　ID連携
らくしふ担当がLINE WORKSの各idを、らくしふに登録します。

## step4　スタッフ様単位で実際にLINE WORKSを通じてシフトを提出
らくしふ上にてLINE WORKSの各idの登録が無事に終えると、各LINE WORKSアカウントへらくしふのbotが表示されるようになります。

以下の流れでbot登録を追えれば、もうシフト提出が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218914/e917ee35-0e7c-31bc-9f48-67aed89c6dfa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218914/c44b7d70-3a3a-a7a3-e6df-25b92cc9c3de.png)




## 参考
https://ascii.jp/elem/000/004/066/4066994/
Pyinstaller を自作ライブラリ/サービスに対して使用するときのチュートリアル② (pip モジュールの参照)

**@kenmaro**です。
普段は主に**秘密計算、準同型暗号などの記事について投稿しています**。
秘密計算に関連するまとめの記事に関しては以下をご覧ください。

> - [秘密計算エンジニアを始めて１年が経った。](https://qiita.com/kenmaro/items/416657efca2ff296169b)
-  [秘密計算エンジニアを始めて２年半が経った。](https://qiita.com/kenmaro/items/48059dd60f79e80f5ef8)
- [最先端の秘密計算技術、格子暗号スタディロードマップを公開！！（エンジニア、リサーチャー必読）](https://qiita.com/kenmaro/items/f2d4fb84833c308a4d29)


## はじめに

このチュートリアルは２本立てです。

前回の記事はこちらから

- [Pyinstaller を自作ライブラリ/サービスに対して使用するときのチュートリアル① (階層構造モジュールの参照)](https://qiita.com/kenmaro/items/5a3ecc2073500653b625)

## 概要


https://www.pyinstaller.org/


python で書かれたスクリプト、ライブラリなどをバイナリ化し、ソースコードが見えないようにした状態で配布することはよくあると思います。
そんなときにpyinstallerを使うと便利であり、いろいろな解説記事なども転がっているため比較的取り組みやすいと思います。

しかしながら、解説記事などではあくまでも簡単なhello_world的なプログラムをバイナリ化するような記事が多く、

- 実際に割と大きめのライブラリ（階層構造などを持ったもの）をバイナリに書き出したい。
- pip install したライブラリを使用しているプログラムをバイナリに書き出したい。

と言うような実運用上必ず通るようなケースでどのようにpyinstallerを用いればよいか、
まとまっているものがあまり無いように感じたため、今回は運用の仕方についてまとめてみます。


## この記事でわかること
pyinstaller を用いてpython プログラムをバイナリ化して配布する際、

- プログラムがpip install したライブラリを使用しているときにそれらも含めてバイナリ化するにはどうしたらいいか


がわかります。

### 階層構造

前回の記事で使った`myproject`というライブラリをpyinstallerでバイナリ配布するシナリオを引き続き考えていきます。
階層構造は以下のようでした。

```
main.py
myproject/
  core.py
  server/
    controller/
      controller.py
    service/
      service.py
```

### pip モジュールを使っているとき

ここで、例えば、`service.py` の中において、

```service.py
import numpy as np
```

と言うような記述があったとします。
pipモジュールを何も使わずにサービスを作ることは考えにくいので、このような記述はいろいろなところにあると想定されます。

このとき、pyinstallerの実行のときに、このバイナリが`numpy`に依存している、ということを明示することで、
pyinstaller はその依存関係をきちんとリンクした状態でバイナリを生成してくれます。

以下ではその依存関係の記述の仕方をまとめます。


### hook にpip の依存関係を記述する

以前の記事でもhookについて言及しましたが、pipモジュールについても、hookにどのモジュールを使っているか記述することになります。
以前のhookは以下のようでした。


```pyinstaller/hooks/hook-myproject.py
hiddenimports = [
"myproject.core",
"myproject.server.controller.controller",
"myproject.server.service.service",
]
```

これに対して、`numpy`が依存関係として存在しているのであれば、

```pyinstaller/hooks/hook-myproject.py
hiddenimports = [
"numpy",
"myproject.core",
"myproject.server.controller.controller",
"myproject.server.service.service",
]
```

とするだけです。

### hookに書くモジュールの名前を取得する

このとき、`numpy`のようにそのまま書きましたが、
実際はpython がpip install したあとの　`site-packages` の中で、ライブラリがどの名前で参照されているかを
きちんと確認する必要があります。

この参照の仕方ですが、以前記事にしていたのでぜひご覧ください。

https://qiita.com/kenmaro/items/d589d32115154dcd26b2

結論だけ言うと、使っているpython環境の`site-packages`の場所は、

```bash
python -c "import site; print (site.getsitepackages())"
```
でパスを参照することができます。
このパスにcdしたあと、ls -l
を行い、どのモジュールをpyinstallerが参照するべきか書く必要があります。


もしpyinstaller がこのモジュールの名前を参照できない場合、

pyinstaller を走らせたときに、

```
WARNING: Hidden import "numpy" not found!
```

と言うようなワーニングが吐き出されますので、きちんとログを確認する必要があります。
ワーニングですので、そのままバイナリ自体は吐き出され、
バイナリを実行しようとすると、ランタイムにおいて、

```
no module found numpy
```

のようなエラーとなるのでご注意ください。


## まとめ

今回は、前回の記事に引き続き、
Pyinstallerを実際に運用するときにあったら便利だと思われる項目を

- pip でインストールしたモジュールの参照の仕方

というテーマで書いてみました。

前回の

- 階層構造を持ったモジュールに対して、実行ファイル(main.py)のバイナリ化

のやり方と合わせると、かなり汎用的にPyinstallerを使いバイナリ化が行えるようになります。

もし、Python のプログラムをそのまま配布するわけにはいかず、バイナリ化などの工夫が必要だ、
でもPyinstaller どうやって使えばいいんだろう、

となった際は是非参考にしてみてください。


今回はこの辺で。


@kenmaro
Vue Test Utilsでmountedフックをテストする方法

Vue Test Utilsでmountedフック内にある関数をstub化し、テストする方法です。

## 実装方法
mountedフックにある関数をstub化し、実際に呼ばれることを確認します。

### テスト対象のコード
```javascript:testComponent.vue
export default {
  mounted() {
    this.testFn();
  },
  methods: {
    testFn() {
      console.log('test');
    }
  }
};
```

### テストコード

```javascript
import testComponent from '~/testComponent.vue';

describe('mounted', () => {
  it('testFn should be called once', () => {
    const testFn = sinon.stub();
    const { mounted } = testComponent;
    const Component = {
      mounted,
      testFn
    };
    Component.mounted();
    assert.deepEqual(test.callCount, 1);
  });
});
```

## 参考
https://github.com/vuejs/vue-test-utils/issues/1027
【計算と哲学】計算の位置付け

#はじめに
私たちの日常生活では，あらゆる場面のあらゆる段階で様々な計算が行われています．電子計算機で溢れた現代ではその計算量も急激に増加しています．お釣りの計算，電車の乗り換え検索，通販サイトのレコメンド，考え始めるときりがありません．私たちは，明示的に計算が行われる場面の方が少ない，膨大な計算量に支えられた世界で生きています．
一方で，種々の計算に囲まれたこの世界で，計算について考え直すことは少ないのではないでしょうか．計算とはそもそも何らかの目的と意味を持った営みであり，目的達成に向けた位置付けを理解していおく必要があります．今回の記事ではそもそも計算とは何かについて，私見を含めてまとめていきます．

#身の回りの計算
まずは計算を行う場面について考えてみましょう．先ほど挙げた例を取ると，例えばお釣りの計算，電車の乗り換え検索，通販サイトのレコメンドなどがあります．お釣りの計算の場合は，値段と支払額を元に差を取ることでお釣りの額を定めます．電車の乗り換えの場合は各種時刻表や乗り換え時間を元に様々な演算を行うことで最適なルートを決定します．通販サイトのレコメンドの場合は過去のデータを元に統計的・機械学習的な処理を行い適切な商品を提示しています．そもそも，スマホなどの電子計算機自体，画像処理やネットワークなど，背後には膨大な計算が潜んでいます．

#計算の利用
ここで，対象と計算の関係について見てみましょう．今回の記事は計算についてのみ取り上げるため，数理的な処理が可能な対象を想定します．
一般に，①対象を抽象化することでモデルとして表し，②モデルに定式化を行うことで数式として表し，③数式への計算結果をモデルにフィードバックすることでモデル上での適切な結果を定め，④モデルから対象に適用可能な解釈を与えます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/511606/e4a51374-4e94-4261-4c8c-e5632a276456.png)

このフレームワークを元に先ほどの問題をそれぞれ考えてみます．お釣りの計算であれば，対象は実際のお金を指し，モデルは金額の値の集合を指し，数式は差の式などを指します．電車の乗り換えであれば（例えば純粋な最適化計算を行うのであれば）対象は実際の電車に関する様々な要素，モデルは時刻表と乗り換え時間と運賃の数値の集合，数式は目標となる式（最適化計算における目的関数，金額最小化や時間最小化）と各種数値の関係式（最適化計算における制約条件，乗車時間と乗り換え時間の関係など）を指すことが想定されます．通販サイトのレコメンドであれば，対象は通販サイトや各ユーザの購入商品や様々な情報，モデルはユーザの購入履歴を表す大規模な行列などの数値の集合，数式は類似ユーザの購入履歴を利用した各種統計的な関係式などが考えられます．スマホなどの電子計算機における暗黙的な計算も，対象が直観的に人が理解できるレベルからできないレベルまで様々ですが，それぞれ意図をもった処理として行われています．

他にも各種問題を思い浮かべてもらうと，誰もが経験的に，対象のうち着目すべき数値的な要素を抜きだして抽象的なモデルと見なし，モデルにおいて成立する十分な数式を用意して適切な計算を行い，結果や解釈を現実の意思決定に利用していることが分かると思います．

#計算の位置付け
それではお題を回収しておこうと思います．計算とは，何らかの対象に所望の振る舞いを期待した意思決定に利用するための，背後の数理的な処理を指します．計算については様々な手法の選択が考えられ，計算結果の量や質，導出時間などに大きく影響するため，実用を考える上での非常に重要な要素となっています．

#おわりに
普段は意識しない，計算の位置付けについてまとめました．計算を現実に生かす際の流れについて体系的に整理しておくことで，複雑な問題を捉える際の一助になれば良いなと思います．

#感想
アドベントカレンダーに参加してみたかったので，記事を書いてみました．かなり急いで書いたので間違った記述もあるかもしれないです，指摘いただけると修正します．本来であればモデルについてしっかり書くべきところなんですが，時間かかりそうだったので諦めました．計算は所詮手続きであって，実際，モデル化の方が遥かに大切です．気が向いたらまたいつか書くかもしれません．興味がある方はワイスバーグの科学とモデルが面白いと思います．

最後までお読みいただきありがとうございました．
本来webサーバーは『構築するもの』


以下はDLするだけでWebサーバを構築する必要がない
XAMPP：Apache
SpringBoot：Tomcat、Jetty、UnderTow


```
「XAMPP」の名称由来
・「X」←クロスプラットフォーム対応(Windows、Linux、Mac)
・「A」←Apache
・「M」←MySQL/MariaDB
・「P」←PHP
・「P」←Perl
```
CakePHP Laravel 違い  メリットデメリット

>前提：どちらもPHPのフレームワーク


CakePHP：規約が基本で爆速の開発スピードが魅力だが、基本的にはシンプルに開発を進める
Laravel    ：便利でとても賢いフレームワーク、比較的に最新の技術や流行に対して対応力が高い


##CakePHP メリット　デメリット
メリット
>初心者でも理解しやすい
キャッシュ機能で表示の高速化が可能
生成されたSQLのデバッグ機能やバリデーション機能付き
活発なコミュニティがある(意見がもらいやすい)
複数人で行う開発に向いている

高速に一定のセキュリティが担保されたプロジェクトを、
経験のない方でも比較的手軽に開発できるのが最大のメリット


デメリット
>規約が厳しい=柔軟性に欠ける

規約が厳しいということは、誰がプログラミングしても規約通りにコーディングされるため、一貫性が出てコードの可読性も向上します。
要望が増えてくると、CakePHPだと対応に時間がかかってしまうことも。






##Laravel メリット　デメリット
メリット
>頻繁に行われるバージョンアップ（新機能追加されやすい）
人気度の高さ故のコミュニティ
比較的簡単に習得可能
開発スピードもはやい

デメリット
>複数人での開発をするには注意が必要
CakePHPと比べると処理速度が遅め(気にしなくてOK)

Laravelの柔軟性の高さ故の問題。
人によっては同じ処理でも全然コーディングの仕方が変わることもあるため、大きめなプロジェクトの場合やコーディングに携わる人が複数人に渡る場合は、コーディング規約やルールを先に決めておくのがおきましょう。




#現在のPHPフレームワークでは,圧倒的にLaravelが人気
新規開発→Laravel
少し前に開発→CakePHP
Red Hat Middleware Core Services Collectionについて

Red Hat JBoss Enterprise Application Serverのサブスクリプションを購入すると、付いてくるRed Hat Middleware Core Services Collectionというものがあります。
この記事ではRed Hat Middleware Core Services Collection(以下、Core Services)について整理したいと思います。

#### Red Hat Middleware Core Services Collectionについて

Core Servicesは、ざっくり言うと下記のコンポーネントたちの集まりになります。
・Apache HTTP Server and Jsvc
・Web Connectors
・Red hat Single sign-on (SSO) server
・Red Hat Operations Network

公式のデータシートは下記になります。

https://www.redhat.com/en/resources/jboss-core-services-collection-datasheet

よく使われるコンポーネントとしては、下記があげられます。
・Windows上で使うApache HTTP Server
・Web Connectorsのmod_jkやmod_cluster
・Red Hat Single Sing-on

Red Hat Single Sing-onを利用する場合は、JBoss EAPサーバのサブスクリプションでなく、
Red Hat Runtimesのサブスクリプションの方が、分散KVSのRed Hat Data Gridも利用可能になるのでオススメです。
(Red Hat Single Sing-onのセッションフェールーオーバをRed Hat Data Gridの外部プロセスに持っていけるので)

#### どのサブスクリプションに付帯するかについて
下記にどのサブスクリプションにどのコンポーネントが含まれているかの一覧があります。
Core Servicesで検索すると、大体のサブスクリプションに含まれているのがわかります。

https://www.redhat.com/en/resources/application-services-subscription-guide-detail

### 名称について
過去の名称は、Red Hat JBoss Core Services Collectionでしたが、
現在は、Red Middleware Core Services Collectionとなっています。
また、Red Hat JBoss Core Services Collection(JBCS)の表記を使っている場合もあります。

### Core ServiceのApache HTTP Serverについて

Core ServicesのApache Apache HTTP Serverは、RHELとは別のレポジトリで管理されています。
Windows版があるので、それはそうだなという感じなのですが、サポートライフサイクルなどがRHELと異なるため、
サポート期間などの保守設計する場合には、注意が必要となります。

Core ServicesのApache HTTP Serverのサポートライフサイクルは以下に記載があります。

https://access.redhat.com/ja/support/policy/updates/jboss_notes#p_httpd

Core ServicesのApache HTTP Serverのコンポーネント詳細は以下に記載があります。

https://access.redhat.com/articles/2993901

### マニュアルの場所

Core ServicesのApache HTTP Server、mod_jkやmod_clusterのインストール方法は、下記のマニュアルにあります。

https://access.redhat.com/documentation/ja-jp/red_hat_jboss_core_services/
Figmaのヒラギノ系のfont-weightが狂っている!?

## 対象読者

- Figmaを使うデザイナー
- Figmaを見ながらスタイルのコーディングをするエンジニア

## なぜこの記事を書いたのか

弊社ではデザインシステムを構築しています。
テキストもコンポーネント化しているのですが、ある日エンジニアから上がってきたPull Requestを見ると `font-weight: 700;` となっていたのです。
デザイナーとしては、太文字は `font-wight: 600;` になる用にコンポーネントを作っていたので、なぜ700と指定されてしまったのか不思議でした。

原因を調査した結果、他でも嵌る可能性があるかもしれないと思ったので、今回記事に残そうと思いました。

## すべての答えはFigmaにある

弊社で使っているFigmaの文字設定は下記のようにしています

font-familly|Figmaでのfont-weight|ブラウザでのfont-weightとして出力したい値
---|---|---
Hiragino Kaku Gothic ProN|W3|normal
Hiragino Kaku Gothic ProN|W6|600

※iOSの `Hiragino Sans` ではW3,W6,W8に絞られているので、この構成にしています。
※iOS13 Safariで `font-weight: bold` が W8に割り振られるようになったため、弊社では明示的に `font-weight: 600;` にしています。参考 [2021年に最適なfont-familyの書き方 - ICS MEDIA](https://ics.media/entry/200317/)

一部は下記で公開していますので、該当のテキストのコンポーネントも見ることができます。

https://blog.qiita.com/increments-design-system/

### FigmaのInspectで見てみると原因がわかった

font-familly|Figmaでのfont-weight|ブラウザでのfont-weightとして出力したい値|FigmaのInspect
---|---|---|---
Hiragino Kaku Gothic ProN|W3|normal|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215239/2e23fa53-a684-a505-c3dd-f30a1a5fe715.png)
Hiragino Kaku Gothic ProN|W6|600|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215239/c8b84ed2-0b64-4d87-4cb4-81c8017f5dc5.png)

そう、 `Hiragino Kaku Gothic ProN` のfont-weightが**１段階太く**表示されていたのです。

## FigmaとFontの変換がうまくいっていないのでInspectが狂っているように見える

ググってみたところKiteさんのTweetを見つけました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">CSS の場合フォントウェイトは100〜900の9段階ですが、Hiragino Sans は W0〜W9 の10段階あるので、そもそもすべてを CSS で再現することはできませんが、W0 = 100 からスタートしてしまったため、1つずつズレたんでしょう。</p>&mdash; 𝐊𝐢𝐭𝐞 / KITERETZ inc. (@ixkaito) <a href="https://twitter.com/ixkaito/status/1362678095816232965?ref_src=twsrc%5Etfw">February 19, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Hiragino Sans とは日本語では「ヒラギノ角ゴシック」のことで、macOS の新しい日本語システムフォントです。</p>&mdash; 𝐊𝐢𝐭𝐞 / KITERETZ inc. (@ixkaito) <a href="https://twitter.com/ixkaito/status/1362686272427286528?ref_src=twsrc%5Etfw">February 19, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### 整理するとこうなります :arrow_down: 

`Hiragino Sans` でまとめるとこうなります。

CSSのfont-weight（デフォルト）|Hiragino Sansのfont-weight|理想のCSSのfont-weight|FigmaのInspectの表示
---:|---:|---:|---:
-|W0|-|100
-|W1|100|200
-|W2|200|300
-|W3|300|400
normal|W4|400|500
-|W5|500|600
-|W6|600|700
bold|W7|700|800
-|W8|800|900
-|W9|900|900

他のヒラギノ系のフォントでInspectを見てみたら下記の結果になりました。

Figmaで調べたフォント|FigmaのInspectで見たときの数値
---|---
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215239/7d3595a8-d315-7e86-2729-f14b4057df20.png)|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215239/e0fce830-501a-f767-c390-b909cc3e4dd1.png)

ヒラギノ角ゴシック系のInspectが思った以上に狂っていたことがわかりました。

## まとめ

FigmaのEditor権限があるデザイナーならば、InspectではなくDesignを見れば意図通りのfont-weightを見つけられますが、Viewer権限しかもっていないエンジニアの場合、Inspectを見て1段階太いfont-weightを指定していることがわかりました。

対策として、弊社ではナレッジ記事を作成し `font-weight` の指定の意思統一をしました。
みなさんもヒラギノ系のフォントをご使用の場合はご注意ください。
Chrome開発者ツールを利用して、Confluence REST APIを使用してConfluenceの登録ユーザーのプロフィール一覧を出力する方法（Server/DataCenter）

Confluenceへログイン後、Confluenceの画面（どこでも良い）を開いた状態で、Chrome開発者ツール(Developer Tool)を開き、コンソール上で以下のコードを実行します。

## CSVとして出力したい場合
delim（デリミタ）の値を `\t` とすると、タブ区切りで出力が可能です。

```
let baseUrl = 'https://<ConfluenceのURL>/wiki';
let delim = ",";
let limit = 10000;
let users = (await (await fetch(baseUrl + '/rest/api/group/confluence-users/member?limit=' + String(limit))).json()).results;
let result = 
   '"userName"' + delim
   + '"userKey"' + delim
   + '"fullName"' + delim
   + '"avatarUrl"' + delim
   + '"url"' + delim
   + '"phone"' + delim
   + '"email"' + delim
   + '"position"' + delim
   + '"department"' + delim
   + '"location"' + delim
   + '"about"';


for (let i = 0; i < users.length; i++) {
   let profile = (await (await fetch(baseUrl + '/rest/mobile/1.0/profile/' + users[i].username)).json());
   result =
      result + "\n"
      + '"' + profile.userName + '"' + delim
      + '"' + users[i].userKey + '"' + delim
      + '"' + profile.fullName + '"' + delim
      + '"' + profile.avatarUrl + '"' + delim
      + '"' + profile.url + '"' + delim
      + '"' + profile.phone + '"' + delim
      + '"' + profile.email + '"' + delim
      + '"' + profile.position + '"' + delim
      + '"' + profile.department + '"' + delim
      + '"' + profile.location + '"' + delim
      + '"' + profile.about + '"';
}

console.log(result);
```

## その場で表形式で結果を確認したい場合
```
let baseUrl = 'https://<ConfluenceのURL>/wiki';
let limit = 10000;
let users = (await (await fetch(baseUrl + '/rest/api/group/confluence-users/member?limit=' + String(limit))).json()).results;
let result = [];
for (let i = 0; i < users.length; i++) {
   let profile = (await (await fetch(baseUrl + '/rest/mobile/1.0/profile/' + users[i].username)).json());
   result.push({
      userName: profile.userName,
      userKey: users[i].userKey,
      fullName: profile.fullName,
      avatarUrl: profile.avatarUrl,
      url: profile.url,
      phone: profile.phone,
      email: profile.email,
      position: profile.position,
      department: profile.department,
      location: profile.location,
      about: profile.about
   });
}

console.table(result);
```
ERROR 2003の原因　AWS

#　はじめに
EC2からRDSに接続しようとしたところ

```
Can't connect to MySQL server on ・・・・
```

**接続できないぞ**とエラーが出たのでその対処をメモしておきます。

##実行したいこと
EC2にログイン後、RDSに接続する。

##前提
AWSでEC2インスタンスとRDS（MySQL）を作成済

##接続のコマンド

```
$ mysql -u マスターユーザー名 -p -h エンドポイント名
```
で接続できるので、実際に実行してみると

```
[ec2-user@ip-172-31-42-6 ~]$ mysql -u root -p -h database-1.cgsamwlp7h5d.ap-northeast-1.rds.amazonaws.com
Enter password: 
ERROR 2003 (HY000): Can't connect to MySQL server on 'database-1.cgsamwlp7h5d.ap-northeast-1.rds.amazonaws.com' (110)
```
とエラー発生

##原因
####セキュリティグループのインバウンドルールの不備
対処
**AWSコンソール**>**RDS**>**データベース**>**DB識別子**の対象DBをクリック>**セキュリティグループのルール**から設定のセキュリティグループをクリック>**インバウンドのルール**>**インバウンドのルールを編集**![2021-12-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2222596/4b81d56b-a357-ed06-6523-a3336ae0f1d2.png)
タイプをMySQL/Aurora、
ソースをカスタム、虫眼鏡にEC2で指定したセキュリティグループを設定
してルールを保存。

すると、、

```
[ec2-user@ip-172-31-42-6 ~]$ mysql -u root -p -h database-1.cgsamwlp7h5d.ap-northeast-1.rds.amazonaws.com
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 111
Server version: 8.0.23 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 
```
MySQLに接続できました。


あくまで自分用備忘録です。
セキュリティグループの認識がまだ曖昧なので、間違いがあれば今後編集します。
Tkinterで簡易カリグラフィー生成器を作ってみた

##はじめに
クリスマスが近くなってきましたね🎄
デコレーションやパワーポイントの作成に、クリスマス使用のカリグラフィーが簡単にできたらいいなとか思いませんか？(自分は思いました)
というわけで、Tkinterを利用した簡易生成器を作ってみました。

##環境
* windows10
* python3.8.10
* pillow8.3.1
* tkinter8.6

##内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1259951/5bdce0b7-7917-5c61-e5fb-ac405b38d42d.png)
　　　　　　デザイン用画像　　　　　　　　　　　　　カリグラフィー用画像

デザイン用画像からカリグラフィー用画像を使ってくり抜くイメージです。
コードは https://note.nkmk.me/python-pillow-putalpha/ を参考に。

```python
import tkinter as tk
from PIL import Image,ImageTk

#画像の読み込みとサイズを取得
im = Image.open('red.png') #デザイン用画像
w = int(im.width)
h = int(im.height)

#キャンバスオブジェクトの作成
root = tk.Tk()
root.title("pixture")

canvas = tk.Canvas(root,width=w+50, height=h+50)

#キャンバスに画像を表示させる
tk_im = ImageTk.PhotoImage(image=im)
canvas.create_image(0,0, anchor='nw',image=tk_im)

#ボタンの操作、処理
def logo():
    im1 = im.copy()
    im2 = Image.open('logo.png').convert('L') #カリグラフィー用画像画像
    im1.putalpha(im2)
    im1.save('calligraphy.png')

button = tk.Button(text='作成',command=logo)

#ウィジェットの配置
canvas.pack()
button.pack()
canvas.mainloop()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1259951/22708b84-fbd9-c778-5576-84adfecd5a3b.png)

スクリプトを実行すると、上記の画面が表示される。
作成をボタンを押すことで、カリグラフィー画像が作成される。

![calligraphy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1259951/3e567bb5-b465-b64a-0e24-2e441656dad3.png)

きれいにくり抜けました。

##まとめ
**これでクリスマスの飾りつけもばっちり。**

※追記
コードや写真は下記に
https://github.com/dem-kk/File/tree/main/calligraphy
Ubuntu21にAlfresco7.1をインストール

基本的には以下のサイトの手順の通り

https://rohhie.net/install-ubuntu-18-04-alfresco/

ただ，デフォルトでTLSがonなので，invalid keystores とかで怒られます。
ここを参考に JAVA_TOOL_OPTIONSを追加設定したら動きました。

https://hub.alfresco.com/t5/alfresco-content-services-forum/invalid-keystores-from-tomcat/m-p/307224/highlight/true#M24318

あってるのか分からないですが，

```sh:/usr/libexec/tomcat9/tomcat-start.sh
...
export JAVA_OPTS
#ここに追加
export JAVA_TOOL_OPTIONS="-Dencryption.keystore.type=JCEKS -Dencryption.cipherAlgorithm=DESede/CBC/PKCS5Padding -Dencryption.keyAlgorithm=DESede -Dencryption.keystore.location=/usr/share/alfresco/keystore/metadata-keystore/keystore -Dmetadata-keystore.password=mp6yc0UD9e -Dmetadata-keystore.aliases=metadata -Dmetadata-keystore.metadata.password=oKIWzVdEdA -Dmetadata-keystore.metadata.algorithm=DESede"
...
```

```sh:/usr/share/alfresco/conf/alfresco-global.properties
dir.root=/usr/share/alfresco/alf_data
dir.keystore=/usr/share/alfresco/keystore/metadata-keystore

```
【Javascript】cloneNode()で入力フォームを複製してみた


割り勘額を計算してくれる簡易Webアプリを作成中に学習したことを書き留めておく。
当方、初学者のため記事の内容に間違いや改善点などございましたら、ぜひコメントでご指摘ください。

#要件
「追加」ボタンをクリックし、名前、年齢、性別を入力するフォームを複製したい。(最大8人)
![スクリーンショット (175).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2388451/94e3a91a-f10c-7b02-ca15-3e3aed9a22ab.png)
　　　　　　　　　　　⇓
![スクリーンショット (177).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2388451/db272ac3-384f-7e50-dce1-94b7bc750f7f.png)

##フォームのHTML
フォームから値を受け取って計算をする予定なので、inputタグのname属性にインデント番号を付与し、
複製するタイミングで1ずつ足していく。

```HTML:index.html
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">

<script type="text/javascript" src="addForm.js"></script>

</head>

<body>
<div class="input-form" id="input-form">
	<div class="member" id="member">
<!--入力した値を計算したいのでname属性にインデント番号を付与-->
		<input type="text" size="20" name="name-1" placeholder="名前">
		<input type="text" size="3" name="age-1" placeholder="年齢">
		<label for="male">
		<input type="radio" value="男性" id="male">男性
		</label>
		<label for="female">
		<input type="radio" value="女性" id="female">女性
		</label>
	</div>
</div>
<div class="bt_addForm">
<!--ボタンをクリックしたらJavascriptファイル内の関数addForm()を実行する-->
	<input type="button" value="追加" onclick="addForm()">
</div>
</body>
</html>
```





#createElement()を使って要素を複製

##createElement()とは
JavaScript で HTML 要素を複製するメソッド。引数にtrueを指定すれば、子ノードごと複製できる。

```Javascript:使い方
//複製する要素を取得
const element = document.getElementById("id");
//要素を複製
const newelement = element.cloneNode(true);
```

##実装
```Javascript:addForm.js
// cloneNodeで要素を複製し、追加する

//インデント番号を設定
let i = 2
function addForm() {
    // 8人以上なら処理を終了する
	if (i > 8) {
		return true;

	} else {
        // 複製するHTML要素を取得
		const element = document.getElementById("member");

        // 要素を複製
		const newelement = element.cloneNode(true);

        // 子要素を指定しname属性の値を変更
		const newelement_name = newelement.children[0];
		newelement_name.name = 'name-'+i;
		
		const newelement_age = newelement.children[1];
		newelement_age.name = 'age-'+i;

        //親要素を取得し 複製した要素を追加
		const parent = document.getElementById("input-form");
		parent.appendChild(newelement);

       //インデント番号を更新
		i++;
	}
}

```

#まとめ
当初はcreateElement()で一つずつ要素を作成し、DOMを組み上げてからHTMLに追加する方法をとっていたが、その方法ではコードが冗長になる上に、複製したい要素に変更が加わった場合Jsファイルも書き換えなければいけなくなる。

一方、cloneNode()を使用した場合は元のHTML要素を構造を保ったまま複製し、必要な部分だけ書き換えればよいので、書くコードが短くなり、複製したい要素に変更を加えた場合もJsファイルをほとんどいじらなくてよい。


###※(2021年12月24日追記)
上記コードは一番最初のフォームをそのままcloneNode()で複製する処理になっているので、最上部のフォームにテキストを入力してから「追加」ボタンを押した場合、追加されたフォームにも入力したテキストが入ってしまう。
複製したフォームを関数内で初期化してから追加してもよいが、それだと無駄な処理が増えてしまいそう。

なので、HTMLのtemplateタグを使用して初期化されたフォームのテンプレートを作成し、それを複製、追加する方法に書き換えました。
[templateタグを使ってフォームを複製]

[templateタグを使ってフォームを複製]: https://qiita.com/cookiesand1023/items/d7e25d51e3a9143879f6
[初心者向け]"Git"と"GitHub"の違いがわからない

**[目標]**
"Git"と"GitHub"の区別ができない人へ説明ができるようになる。

**[きっかけ]**
デザイナーの人たちと話してて「GitとGitHubって一緒だと思ってた。」という話をしていた。


----------------------------

#「GitHubを略してGitって言ってるんじゃないの？」


:::note alert
A.違います！
:::

####例えば



#####友達と連絡を取りたい時、電話か、メッセージか、手紙かという手段があります。

電話なら→携帯電話、公衆電話、LINE通話など。
メッセージなら→Gmail、LINE、instaのDMなど。
手紙なら→便箋、ポストカード、ハガキなど。


####"友達と連絡を取りたい"という目的のために様々なツールやサービスがあります

それがwebサイト制作やアプリ開発において

####"ファイルや画像を共有したい"という目的があったとします。

共有するための手段は、[Git]か、[mercurial]か、[GoogleDrive]などの**手段**があります。

:::note info
そこで、一番扱いやすく、メジャーなのが
"Git"になります。
:::

↓

**[Git]**を使うときに、
簡単で、UIなどの様々な機能を追加したものが**"Gitプラットフォーム"**です。

**[Gitプラットフォーム]**→[GitHub]や[Bitbucket]、[GitLub]など


![git.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2388076/09f4e3e4-a12d-6cff-8869-3fd784f3b4ea.png)


:::note info
そこで、ユーザー数が一番多く、有名なのが
"GitHub"になります。
:::

最も知名度があり、多くのサービスと連携することが出来るのが1番の強みなので、
**"GitHub"**を使ってる会社が多いです。


```
[手段]→Git
[サービス]→GitHub
```

ざっくりとした説明でしたが、なんとなくGitとGitHubの違いをわかっていただけたら嬉しいです！


#
【TailwindCSS】ボタンをホバーしたとき中身の要素も連動させて変化させる

# 何がしたいか
マウスをホバーしたとき、ボタン内のSVGと文字も連動して白くしたい
![](https://storage.googleapis.com/zenn-user-upload/1a64c2f67b99-20211123.gif)

```html
<div class="flex w-screen h-screen justify-center items-center">
    <button
      class="
        flex
        justify-center
        items-center
        w-32
        p-1
        border border-black
        rounded-md
        hover:bg-blue-300
      "
    >
      <svg class="w-4 h-4" viewBox="0 0 512 512">
        <g>
          <path
            class="st0"
            d="M490.013,171.964H340.031V21.992C340.031,9.845,330.177,0,318.032,0h-124.08c-12.146,0-22,9.845-22,21.992
		v149.973H21.987c-12.146,0-21.983,9.845-21.983,21.992v124.096c0,12.145,9.837,21.983,21.983,21.983h149.966v149.981
		c0,12.138,9.853,21.983,22,21.983h124.08c12.146,0,21.999-9.845,21.999-21.983V340.036h149.982
		c12.146,0,21.983-9.838,21.983-21.983V193.956C511.996,181.81,502.159,171.964,490.013,171.964z M92.897,293.499l-59.072-37.496
		l59.072-37.503V293.499z M256,478.179l-37.495-59.072h74.974L256,478.179z M218.505,92.9l37.479-59.08l37.495,59.08H218.505z
		 M419.103,293.499v-74.998l59.072,37.496L419.103,293.499z"
          ></path>
        </g>
      </svg>
      <span class="mx-3">Button</span>
    </button>
  </div>
```

# 結論
`group-hover`と`fill-current`を使う

![](https://storage.googleapis.com/zenn-user-upload/8b5c9eedfcf2-20211123.gif)

```diff_html
 <div class="flex w-screen h-screen justify-center items-center">
    <button
      class="
+       group
        flex
        justify-center
        items-center
        w-32
        p-1
        border border-black
        rounded-md
        hover:bg-blue-300
      "
    >
-     <svg class="w-4 h-4" viewBox="0 0 512 512">
+     <svg class="w-4 h-4 fill-current group-hover:text-white" viewBox="0 0 512 512">
        <g>
          <path
            class="st0"
            d="M490.013,171.964H340.031V21.992C340.031,9.845,330.177,0,318.032,0h-124.08c-12.146,0-22,9.845-22,21.992
		v149.973H21.987c-12.146,0-21.983,9.845-21.983,21.992v124.096c0,12.145,9.837,21.983,21.983,21.983h149.966v149.981
		c0,12.138,9.853,21.983,22,21.983h124.08c12.146,0,21.999-9.845,21.999-21.983V340.036h149.982
		c12.146,0,21.983-9.838,21.983-21.983V193.956C511.996,181.81,502.159,171.964,490.013,171.964z M92.897,293.499l-59.072-37.496
		l59.072-37.503V293.499z M256,478.179l-37.495-59.072h74.974L256,478.179z M218.505,92.9l37.479-59.08l37.495,59.08H218.505z
		 M419.103,293.499v-74.998l59.072,37.496L419.103,293.499z"
          ></path>
        </g>
      </svg>
-      <span class="mx-3">Button</span>
+      <span class="mx-3 group-hover:text-white">Button</span>
    </button>
  </div>
```

親要素に`group`を付けるのを忘れがちなので注意してください！

# 参考
https://tailwindcss.com/docs/hover-focus-and-other-states#group-hover
弊社名を文法解析してみた(できるとは言ってない)

はじめまして。この記事は株式会社Works Human Intelligence Advent Calendar 2021の22日目の記事です。

##自己紹介
今年の4月に弊社に新卒入社し、今はTech Leadという部署で働いています。
英文学科卒で、プログラミングはドのつく初心者です。

ちなみにアイコンは青年期のヘンリー8世です。

##本題
それでは本題に入ります。

皆さんは弊社名・Works Human Intelligenceがどういう意味かご存知ですか。私は知りません。

ということで、弊社名をどうにかこうにか英文法を用いて解釈していこうと思います。
暫しお付き合いください。


##'Works Human Intelligence'を文法解析すると？
文構造を分析するとき、たいていまず単語に区切り、語同士のつながりを明らかにしていくのが正攻法ではないでしょうか。
以下その手順で進めます。

###ステップ1:単語に区切る
'Works Human Intelligence'は、'works'、'human'、'intelligence'の3単語に分けることができます。
'intelligence'の品詞は名詞以外ないために確定できますが、'human'は名詞と形容詞、'works'は動詞と名詞、それぞれ2パターン考えられます。

###ステップ2:考えられる語のまとまりを語同士の関係や文法のルールから精査する

まず'human'から見ていきましょう。
'human'が名詞とした場合、'intelligence'が直後に来ていることから、名詞と名詞が接続詞や前置詞なしに隣り合っていることになります。
こういったとき、名詞の形容詞化が考えられます。前の名詞が後の名詞を形容詞的に修飾していることを、名詞の形容詞化といいます。
それにあてはめて訳すと「人間の知能」となり、意味が通りますね。
つまり、「'human'が'intelligence'を修飾している」ということです。
（これは'human'を形容詞として捉えても同じ結論に至ります。）

それではついに'works'を見ていきます。'works'は以下の2通りの解釈ができます。
ケース1:'works'が動詞の三人称単数形である場合
ケース2:'works'が名詞の複数形である場合

####ケース1:'works'が動詞の三人称単数形である場合
この時、さらに以下2つのパターンに分けることができます。
①'human intelligence'が'works'の主語のとき
②'human intelligence'が'works'の目的語のとき

まず①から考えていきます。
①の場合、主語と動詞の語順が平叙文と逆です。
すると倒置が起きていると考えられます。倒置が起きるのは大まかに以下のパターンです。順に見ていきます。

・疑問文
動詞の三人称単数形を用いた疑問文の場合は「does + 動詞の原形」という形になり、doesが文頭に出るはずなので、今回はあてはまりません。

・副詞や否定語句が文頭にくるとき
副詞も否定語句もないのであてはまりません。

・仮定法の条件節
今回仮定法の主節がないこと、もしあったとしても倒置が起きるのは条件節内部で'had''should''were'などが使われている場合なのであてはまりません。

※'human'が主語、'intelligence'が目的語と考え、'works'と'human'の語順が逆になる倒置と考えることもできますが、こちらも結局上の倒置のパターンにあてはまりません。



次に②を考えていきます。
②の場合、主語が存在しません。
主語がないときは以下のパターンが考えられます。

・命令形
命令形は二人称の場合に用いられるのであてはまりません。

・主語が書かずとも明らかなとき
もし前に文章などあれば別ですが、'works human intelligence'という文だけ提示されています。
主語は特に明らかにされていないのであてはまりません。

結果として、'works'を動詞として解釈するのは難しいということになります。

####ケース2:'works'が名詞の複数形である場合
ここでは'human'と'intelligence'の関係を見ていくのと同じやり方をします。
'works'と'human intelligence'が接続詞や前置詞なしに隣り合っているので、ここでも名詞の形容詞化を疑います。
この場合、前の名詞（ここでは'works'）は後の名詞（ここでは'human intelligence'）の目的や材料、種類を表すことが多いです。
複数形の名詞が形容詞化するのは、その名詞が常に複数形の名詞である場合のみです（'glasses'や'trousers'など）。
'works'が常に複数形であるとき、「機械の仕組み」という意味になります。
「機械」が'human intelligence'の目的・材料・種類かどうかは、これ以外の情報が提示されていない以上、一目で明らかとは言えません。
したがって、こちらのパターンも解釈しきれません。

結論として、'Works Human Intelligence'を文法的に納得のいく説明をすることは難しいということになります。（え）

##まとめ
突然ですがこれって、プログラミングとやっていることがほぼ同じだとは思いませんか？
上記の英文解析プロセスを見ていると、今書いているソースコードが頭に浮かんできませんか？

変数のスコープを小さくしたり命名を分かりやすいものにしたりすることは、英語において指示語や代名詞が何を指しているのか明快にすることと同じようなものだし、ロジックを飛ばしたらプログラムが動かなくなることは、ひとつの語の解釈で意味が全く変わってしまうこととなんだか似ています。

半年ほどプログラミングを経験して感じたことは、たとえプログラミングとは無関係と思えることであっても、これまでの学びは決して無駄にはならないということです。自分がこれまで学んできたことに引き付けて新たなことを学んでみると、いくらか理解しやすくなるように思います。

就活生時代の私のように「これから初めてプログラミングに触れるけどやったことないから不安だわ」という皆さん、今の私と同じように始めたばかりの初心者の皆さん、なかなか思うようにいかず悔しい思いをすることもありますが、一緒に頑張っていきましょうね。

と、それっぽくまとめたところで終わりにしたいと思います。

長々とお付き合いいただきありがとうございました。
とりあえずのGit入門

初心者がとりあえずGitを扱うためのページ

# Gitとは？

> Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

https://git-scm.com/

# Githubって？

- Github
- GitLab
- Bitbucket

**参考ページ**

https://backlog.com/ja/git-tutorial/

# とりあえずやってみよう

`$`はターミナルやコマンドラインで入力するコマンドであることを表しています。
実際に入力するときは`$`の後から入力してくださ。

## 1回目

Gitを初期化

```
$ git init
```

インデックスに変更を追加

```
$ git add .
```

コミット

```
$ git commit -m "initial commit"
```
コミットメッセージ（`initial commit`）はなんでもよい

リモートリポジトリを追加

```
git remote add origin git@github.com:~~~
```

リモートにpush

```
$ git push origin master
```

## 2回目以降

インデックスに変更を追加

```
$ git add .
```

コミット

```
$ git commit -m "second commit"
```

リモートブランチにpush

```
$ git push origin master
```

## 慣れてきたら…

```
$ git clone
```

```
$ git pull
```

```
$ git fetch
```

## 今の状態を知りたい

```
$ git status
```

```
$ git log
```

# HTTP or SSH

ローカル環境とリモート環境の間でやりとりするときにhttpとsshのどちらのプロトコルでも行うことができます。

**HTTP**
`https://github.com/username/repository-name.git`

アカウント名とパスワードを使ったベーシック認証で通信を行います。

**SSH**
`git@github.com:username/repository-name.git`

予め設定したSSH公開鍵を使って通信を行います。


どちらもパスワードが求められますが、個人的にはSSHをおススメします。
SpringBoot アノテーション 備忘録

##<span>@</span>Bean

https://dev.classmethod.jp/articles/springboot-what-is-bean/

|項目|説明|使い方|
|----|----|----|
|<span>@</span>Bean|<span>@</span>beanと書いたメソッドでインスタンス化されたクラスが<b>シングルトンクラス</b>としてDIコンテナに登録される。任意のクラスで<span>@</span>Autowiredで注入してアクセスできる。| <b><span>@</span>Configuration</b>と記述したクラス内のメソッドに<span>@</span>Beanを記述することで<span>@</span>Beanを定義することができ、任意のクラスで<b><span>@</span>Autowired</b>で注入することで定義したBeanを使うことができる|

|ポイント|
|----|----|----|
|<span>@</span>Beanを記述したメソッドでインスタンス化したクラスを返して、DIコンテナに登録します。そして任意のクラスで<span>@</span>Autowired</b>で変数に注入して使うようです。|
IICS でOracle Cloud のAutonomous Database に接続してみる

この記事は [インフォマティカ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/informatica) Day 23 の記事として書かれています。

# はじめに
Oracle Cloud Infrastructure(OCI) のAlways Free で提供されているAutonomous Database にInformatica Intelligent Cloud Services(IICS)から接続する際の設定方法について説明します。

Always Free枠でなくても、基本的には同じです。

# Oracle Cloud で実施すること
下記の方法で、クライアント資格証明(ウォレット)を取得します。

1. Autonomous Databaseの詳細画面から、「DB接続」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346482/97d5aa48-66c6-58eb-2ca6-b7808fa60abb.png)

1. データベース接続の画面で、「ウォレットのダウンロード」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346482/ec375f54-65d2-d402-3959-b0b50f721837.png)

1. 任意のパスワードを設定して、「ダウンロード」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346482/5803ef84-0dcb-1941-b95d-9125e564fe69.png)

これで、Wallet_ADB01.zipが生成されます(ADB01はデータベース名)。

# IICS で実施すること
1. SecureAgentサーバーの任意のディレクトリに解凍したウォレットを配置します。今回は、C:\IICS\Oracleの下に解凍しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346482/8cb47877-06e6-53f6-aa3a-ba727ec2c8d6.png)

1. 解凍した中からtnsnames.oraを開いて、下記の情報を取得します。
    * host
    * port
    * service_name

1. IICSの管理者画面から「接続」を選択し、「新しい接続」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346482/f6522e3b-ad49-2fcf-6949-13e08978f76c.png)

1. 下記の情報を入力します。

| 項目 | 値 |
|:-:|:-:|
| 接続名 | 任意の名前 |
| タイプ  | Oracle  |
| ランタイム環境  | 使用するSecureAgentを選択  |
| ユーザー名  | DBのユーザー名  |
| パスワード  | DBのパスワード  |
| ホスト | DBのホスト名(tnsnames.oraから取得) |
| ポート  | DBのポート番号(tnsnames.oraから取得)  |
| サービス名  | DBのサービス名(tnsnames.oraから取得)  |
| コードページ | UTF-8 |
| 暗号化方法  | SSL自動  |
| 暗号プロトコルバージョン | TLSｖ1.2 |
| サーバー証明書の検証  | False  |
| キーストア  | SecureAgentサーバーに解凍したewallet.p12ファイル  |
| キーストアのパスワード  | ウォレットを作成する際に使用したパスワード  |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346482/e78b67e6-b529-cdf8-ec06-3200021381fa.png)

「接続のテスト」ボタンを押して、成功したら完成です。保存して、終了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346482/92e0ecfe-f9d3-68ef-7639-e780a0d1f1c2.png)


# まとめ
最初にやったときに設定方法が分からずとてもハマったので、記事にしました。

IICSも[Free Service](https://blogs.informatica.com/jp/2021/12/09/fast-track-your-elt-and-etl-use-cases-with-free-cloud-data-integration-on-aws-html/)を提供してますので、OCIのAlways Free環境と組み合わせると、無料で環境構築することができます。しかもどちらも商用利用が可能です。ぜひご活用ください。
【PowerShell】PnP.PowerShell を使用して SharePoint Online のドキュメントライブラリに一括でダミーファイルを作成する

ドキュメントライブラリに PnP.PowerShell を使って一括でダミーファイルを作成するサンプルが上がっていたので、改良してみました。

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">&quot;Create bulk dummy documents in SharePoint Document library&quot;<br><br>New sample added! 🎉 on <a href="https://twitter.com/hashtag/PnPScriptSamples?src=hash&amp;ref_src=twsrc%5Etfw">#PnPScriptSamples</a> - by <a href="https://twitter.com/siddh_me?ref_src=twsrc%5Etfw">@siddh_me</a> using PnP PowerShell. Check it out:<a href="https://t.co/v4R5HTINmr">https://t.co/v4R5HTINmr</a><a href="https://twitter.com/hashtag/SharePoint?src=hash&amp;ref_src=twsrc%5Etfw">#SharePoint</a> <a href="https://twitter.com/hashtag/M365PnP?src=hash&amp;ref_src=twsrc%5Etfw">#M365PnP</a> <a href="https://twitter.com/hashtag/PnPPowerShell?src=hash&amp;ref_src=twsrc%5Etfw">#PnPPowerShell</a> <a href="https://twitter.com/hashtag/CommunityRocks?src=hash&amp;ref_src=twsrc%5Etfw">#CommunityRocks</a> <a href="https://twitter.com/hashtag/Microsoft365?src=hash&amp;ref_src=twsrc%5Etfw">#Microsoft365</a></p>&mdash; Paul Bullock | MVP (@pkbullock) <a href="https://twitter.com/pkbullock/status/1471922789296787463?ref_src=twsrc%5Etfw">December 17, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# ソースコード

サイトに接続する方法は以下を参照してください。
[【PowerShell】PnP.PowerShell を使用して SharePoint Online のリストを操作する - Qiita](https://qiita.com/MakotoIshikawa/items/bdad2292c9078f1709fa#%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B)

ダミーとして使用するファイルと対象のライブラリ名と作成するフォルダ名、フォルダとファイルの作成する数を指定してダミーファイルを作成します。

```powershell
[System.IO.FileInfo] $File = 'C:\PowerShell\DummyFiles\Dummy.docx'
$LibraryName = 'Shared Documents'
$FolderName = 'DummyFiles'
$FolderCount = 5
$FileCount = 10

$DummyFolders = 0..$FolderCount | % { "${FolderName}_$_" }
$DummyFiles = 0..$FileCount | % { ("{0}_${_}{1}" -f $File.BaseName, $File.Extension) }

$NewFolders = $DummyFolders | % { Add-PnPFolder -Name $_ -Folder $LibraryName }
$NewFolders | % {
    $NewFolder = $_
    $DummyFiles | % {
        Add-PnPFile -Path $File -Folder $NewFolder -NewFileName $_
    }
}
```

# 参考サイト

- [Create bulk dummy documents in SharePoint Document library | PnP Samples](https://pnp.github.io/script-samples/create-dummy-docs-in-library/README.htm)
DataGridの外側のScrollViewerでマウススクロールを機能させる

#問題

DataGridの外側にScrollViewerを配置した場合、DataGrid上でマウスホイールを動かしても外側のScrollViewerが機能しない。

#原因
DataGrid 自身が持つ ScrollViewer がマウスホイール操作を奪うため。

#対策

DataGrid上でのマウスホイールイベントが発生した際に、親のScrollViewerを探してスクロールさせる。

##実装

XAML側実装
DataGridにPreviewMouseWheelイベントを設定

```XML
<DataGrid
    ScrollViewer.VerticalScrollBarVisibility="Disabled"
    PreviewMouseWheel="DataGrid_PreviewMouseWheel">
```

コードビハインド側実装
XAML側のPreviewMouseWheelイベントを処理するイベント実装

```C#
private void DataGrid_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    UIElement element = sender as UIElement;
    while (element != null)
    {
        element = VisualTreeHelper.GetParent(element) as UIElement;
        if (element is ScrollViewer scrollViewer)
        {
            //scrollViewerでスクロールする
            scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset - (e.Delta / 3));
            e.Handled = true;
            return;
        }
    }
}
```

#参考
（XAML#20）「DataGrid と ScrollViewer」
https://blogs.itmedia.co.jp/mohno/2013/12/xaml20datagrid--92ef.html
ラズパイコマンド/インストール後の設定

#インストール
公式のインストーラーが出たらしい。
https://www.indoorcorgielec.com/resources/raspberry-pi/raspberry-pi-os%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/

古い機種だとLegacyOSのイメージをいれた方がよさそう。

# SDカード
 32GB UHS-I U1 A1 Class10
 ⇓
 32GB UHS-I    U1             A1           Class10
 容量 inteface UHS-Speedclass AppPerformace SD-Speedclass	 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/e5977656-a271-01fe-cce5-ccf0ef2b2ec2.png)
# 基本
機種名を確認
cat /proc/device-tree/model

OSを確認: uname -a
エディタ : nano （CUIエディタ）
https://qiita.com/snct_hu/items/971d512c26dd8b3a3b3c

conda : miniconda　か　BerryConda
https://qiita.com/bouningen98/items/720c327642f934ad29a5

condaのコマンド：Anaconda でよく使うコマンド一覧
https://qiita.com/naz_/items/84634fbd134fbcd25296

ssh:　
windows10はデフォルトでsshコマンドが使える。
ssh pi@192.169.0.xx -p 22 
ポートは２２

sudo apt-get update
sudo apt-get upgrade

ROOTパスワードの変更
sudo passwd root

lsの文字色を変える。
https://raspi.ryo.sc/ls_color/

# コマンド
シェルの再起動　exec $SHELL -l

# pythonメモ
# モジュール検索パス
import sys
import pprint

pprint.pprint(sys.path)

# pipでインストールしたパッケージの場所を調べる
pip show [パッケージ名]

# crontab
pythonスクリプト等、コード中は絶対パスを使う事。

cronサービスが動いているか確認
sudo apt-get install chkconfig
chkconfig cron

cronを有効化
sudo systemctl enable cron

logを確認
less /var/log/cron.log

# conda 
https://github.com/jjhelmus/berryconda

wget https://github.com/jjhelmus/berryconda/releases/download/v2.0.0/Berryconda3-2.0.0-Linux-armv7l.sh
chmodして.shを実行する、
conda create -n hogehoge
source activate hogehoge

# cron設定
https://www.kagoya.jp/howto/it-glossary/server/cron/
【例3】毎月10日の午前4時59日にコマンド「/home/test01/test.sh」を実行する場合
59 04 10 * * /home/test01/test.sh

例１　１０分ごとに実行する。２行目は省略した書き方。
0,10,20,30,40,50 * * * * ruby hello.rb
*/10  *  *  *  * ruby hello.rb

再起動　sudo systemctl restart cron

# samba
参考）
https://qiita.com/neomi/items/645e2c7184210f989828

一度つながったが繋がらなくなった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/d56233fe-3cc9-4989-ee14-f3690cace5ec.png)

#telnet port23
https://spaghettiprogramming.blog.jp/archives/7193766.html

# ラズパイ固定IP( wifi)

https://qiita.com/shin1kt/items/e2f57fcff95f5196cd4d