OmniAICreator/Qiita-1.07M huggingface dataset:
Ubuntu2004でPhpStormをインストールするまでの道のり。 

# はじめに 
Ubuntu2004でPhpStormをインストールするまでの道のり。 


# 最終更新日 
2022年8月10日 

# 環境の情報 
OS 
Ubuntu2004 

# 注意 
最新の状態を確認して下さい。 

# 参考さま 
https://linuxhint.com/install_phpstorm_ubuntu_2004/ 
https://launchpad.net/~ubuntu-desktop/%2barchive/ubuntu/ubuntu-make
  

# 作業 

aptをアップデートします。 
```
$ sudo apt update 
[sudo] userのパスワード:  
ヒット:1 http://archive.ubuntulinux.jp/ubuntu focal InRelease 
取得:2 https://dl.yarnpkg.com/debian stable InRelease [17.1 kB]           （省略） 
```
↓ 
Ubuntu Makeを取ってきます。 
```
$ sudo apt install ubuntu-make 
[sudo] userのパスワード:  
パッケージリストを読み込んでいます... 完了 
依存関係ツリーを作成しています 
（省略） 
```
↓ 
Ubuntu Makeを確認します。 
```
$ umake --version 
18.09 
```
↓ 

phpstormを取ってきます。 
```
$ umake ide phpstorm 
Choose installation path: /home/user/.local/share/umake/ide/phpstorm 
Downloading and installing requirements                                        | 
100% |#########################################################################| 
Installing PhpStorm 
/home/user/.local/share/umake/ide/phpstorm/bin/phpstorm.sh                | 
|##############################################################################| 
Installation done 
```
↓ 
再起動していきます。 
```
$ sudo reboot 
```
↓ 
再起動が終わったら、左下にある、アプリケーションを表示をクリックします。 
![Screenshot from 2022-08-10 11-31-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/5cdab972-7108-dbeb-632d-4162c8c9ceaa.png)
↓ 
検索から「phpstorm」と調べて、アプリが出てきましたら、無事にインストールができています。 
![Screenshot from 2022-08-10 11-26-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/be4c200a-cac0-58b4-1a62-81e65ef221f1.png)
↓ 
お好みでお気に入りなど登録すると便利です。 
↓ 
Phpstormを開きます。 
↓ 
Agementは取扱の説明ですので、さーっと読んで、チェックを入れて同意します。 
![Screenshot from 2022-08-10 11-08-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/d26f7982-126b-0d46-12fb-618a96d502d7.png)
↓ 
JetBrainsのアカウントがあればログインします。 
新しく作っても良いでしょう。 
![Screenshot from 2022-08-10 11-09-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/46585f66-54c6-00c8-a3d5-bd1fd9913bfb.png)
![Screenshot from 2022-08-10 11-18-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/1f3ae063-06bd-9175-b689-c0f065c7f48e.png)
↓ 
終わります。 
↓ 
再び開くと、「Welcome」になっています。 
これで使えるようになりました！ 
![Screenshot from 2022-08-10 11-24-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148394/a75d99a9-68f1-62a6-9db8-5dec7fffcafd.png)
M2 MacでGolangをインストールする。

## はじめに
表題通り、M2のMacでGolangをインストールします。HelloWorldが出るまでを確認する記事です。

### 環境構築
[リンク](https://go.dev)より、Golangのインストーラをダウンロードする。
![スクリーンショット 2022-08-10 19.04.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/cb0b6fd7-9ccd-5ec7-7220-3de19a00c221.png)

![スクリーンショット 2022-08-10 19.05.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/9f0bff6f-32eb-943f-9a3b-11b0cab6dde8.png)
→Apple MacOS(ARM64)をダウンロードする。

インストーラーでインストールする。

```shell:インストールの確認
~$ go version
go version go1.19 darwin/arm64
```

```shell:GoのPathを通す
vi ~/.zshrc ← zshrcを開く
#go言語
export GOPATH=$HOME/go 
export PATH=$GOPATH/bin:$PATH
```

```shell:Goのディレクトリを作成する
~$ mkdir go
~$ cd go 
~/go$ mkdir src
~/go$ mkdir bin

~/go$ ls
bin	src
```

### サンプルプログラムを実行する

```go:go.modを作成する
~/go/src$ go mod init hello
```
※注意：GoPath配下のsrc内で実行してください！！

```go:サンプルプログラムを作成する
package main

import "fmt"

func main(){
    fmt.Println("HelloWorld!! Golang!!!")
}
```

```go:サンプルプログラムを実行する
~/go/src$ go run hello.go 
HelloWorld!! Golang!!!
```
はい、完成！！！
【JavaScript】Math

# 概要
JavaScriptを学習、理解を深めるため「[JavaScript Primer 迷わないための入門書](https://jsprimer.net/)」を読み、
理解した内容等を記載していく。

「[【JavaScript】JavaScript入門一覧](https://qiita.com/andota05/items/22fae452225b785fd405)」に他の記事をまとめています。

# この記事で理解できること
* Mathオブジェクトとは
* Mathオブジェクトを利用した数値の生成や比較方法(一部)

# Mathオブジェクト
* Mathオブジェクトは`数学的な定数`と`関数`を提供するプロパティとメソッドを持つ、ビルトインオブジェクト。
* 詳細なプロパティ、メソッドは「[こちらのMDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math)」に表記されている。

# 乱数を生成(randomメソッド)
```js
// 最小値
const min = 1;
// 最大値
const max = 10;

// 1 ~ 10のランダムな浮動小数点数が出力される
console.log(Math.random(min, max));
// => 0.06483136694976332
```

# 数値の大小を比較
* `Math.max`メソッドは引数に渡した値のうち`最大の値`を返す。
* 対となるメソッドとして`Math.min`メソッドが存在する。
* これらのメソッドは可変長の引数を取るため、任意の個数の数値を比較できる。

```js
const min = 1;
const max = 10;

// 最大値を出力
console.log(Math.max(min, max));   // => 10
// 最小値を出力
console.log(Math.min(min, max));   // => 1

// 任意の値から最大値を取得(spread構文の例)
const numbers = [0, 10, 100, 1, 30];
console.log(Math.max(...numbers)); // => 100
```
他にもたくさんプロパティやメソッドが用意されている。
WebGLに興味があるので、探ってみたい...
【JavaScript】条件分岐

# 概要
JavaScriptを学習、理解を深めるため「[JavaScript Primer 迷わないための入門書](https://jsprimer.net/)」を読み、
理解した内容等を記載していく。

「[【JavaScript】JavaScript入門一覧](https://qiita.com/andota05/items/22fae452225b785fd405)」に他の記事をまとめています。

# この記事で理解できること
* 条件分岐とは
* if文、switch文による条件分岐の方法

# if文
* 条件式の結果によって、「もし変数strがAであれば〇〇をする」のような条件によって`処理を切り替え、分岐`できる。
* 条件式として、比較演算子などを用いた結果(真偽値:`true`、`false`)によって処理を分岐させることもできる。
* また、真偽値以外も指定できるが暗黙的型変換が行われ、その結果によって処理を分岐する。<br>(参考:[falsyな値](https://qiita.com/andota05/items/1bd440d07660bda0558e)は`false`、それ以外は`true`となり条件分岐を行う) 

```js
// ブロック{}と組み合わせることが多い(組み合わせることでyif文内に複数の処理が書ける)
if (条件式) {
  // 条件式がtrueの場合に行われる処理
}

// ..後続の処理
```

```js
// 条件式に比較演算子を使用
const num = 5;
if (num > 0) {
  console.log("変数numが0より大きい場合に実行される");
}
// => 変数numが0より大きい場合に実行される

// falsyな値で試す
const str1 = "not falsy";
if (str1) {
  console.log("str1の値がfalsyではない場合、すなわちtrueの場合に処理される");
}
// => str1の値がfalsyではない場合、すなわちtrueの場合に処理される と出力される

const str2 = ""; // 空文字はfalsyな値に含まれる
if (str2) {
  console.log("str2の値がfalsyではない場合、すなわちtrueの場合に処理される");
}
// str2はfalsyな値(false)なので何も出力されない
```

# else if文
* 複数の条件分岐を書くことができる。
* 「もし変数strがAであれば〇〇、変数strがBであれば△△」のように条件分岐ができる。

```js
const str = "B";

if (str === "A") {
  console.log("strはAでした");
} else if (str === "B") {
  console.log("strはAではなく、Bでした");
}
// => strはAではなく、Bでした
```

# else文
* if文、else if文の条件のどれにも一致しなかった場合の処理を書くことができる。
* 「もし変数strがAであれば〇〇、変数strがBであれば△△、それ以外は××」のような条件分岐ができる。
```js
const str = "C";

if (str === "A") {
  console.log("strはAでした");
} else if (str === "B") {
  console.log("strはAではなく、Bでした");
} else {
  console.log("どの条件にも当てはまりませんでした");
}
// => どの条件にも当てはまりませんでした
```

# switch文
* `式`の評価結果が`case`に指定した値と一致した場合に処理を分岐できる。
* break文と組み合わせ、各case内の処理を終えた後にswitch文を抜けることができる。<br>※break文が無いと、後続のcase内の処理が条件関係なく実行される
* caseの`どれにも当てはまらなかった`場合、もしくは`式`が`false`の場合
    * `default`内に記載した処理を行う。


```js
switch (式) {
    case 指定値1:
        // `式`の評価結果が`指定値1`と一致する場合に実行する文
        break;
    case 指定値2:
        // `式`の評価結果が`指定値2`と一致する場合に実行する文
        break;
    default:
        // どのcaseにも該当しない、もしくは式がfalseの場合の処理
        break;
}

// ..break後の後続処理
```

```js
const name = "TARO";
switch (name) {
    case "TARO":
        console.log("TAROさんお待ちしておりました");
        break;
    case "MAI":
        console.log("MAIさんお待ちしておりました");
        break;
    case "HANAKO":
        console.log("HANAKOさんお待ちしておりました");
        break;
    default:
        console.log("初めてお会いする方ですね");
        break;
}

console.log("お席へご案内します");

// => TAROさんお待ちしておりました
// => お席へご案内します
```
【JavaScript】文と式

# 概要
JavaScriptを学習、理解を深めるため「[JavaScript Primer 迷わないための入門書](https://jsprimer.net/)」を読み、
理解した内容等を記載していく。

「[【JavaScript】JavaScript入門一覧](https://qiita.com/andota05/items/22fae452225b785fd405)」に他の記事をまとめています。

# この記事で理解できること
* JavaScriptにおける文、式
* ブロック文の用途

# 式
* 式を評価すると結果の値(`評価値`)を得られる。
* `評価した結果を変数に代入できるもの` = `式`という理解で問題ない。

```js
// (数値、文字列などの)リテラルも式
1;
"これも式";

// リテラル(式)と演算子の組み合わせも式
1 + 1;

// 「関数を呼び出す」という処理も式
function returnNumber() {
  return 7;
}
returnNumber();

// これらは全て変数に代入できる
const one = 1;
const discription = "これも式";
const result = 1 + 1;
const returnVal = returnNumber();

console.log(one);           // => 1
console.log(discription);   // => これも式
console.log(result);        // => 2
console.log(returnVal);     // => 7
```

# 文
* 処理の1ステップ1ステップのこと。
* 文の中に`式`を含むことができる。
* 文の末尾にセミコロン(`;`)を置くことで文の区切りを付けられる。
* 文は式になれず、変数にも代入できない。

```js
// 「変数に値を代入する」という処理(文) ※正確には「変数宣言」という文
const foo = "変数fooに文字列を代入"; // 文に式(文字列リテラル)が含まれている

// if文やfor文なども文に該当する(この例は正式にはif文とブロック文の組み合わせ ※後述)
if (true) {
  console.log('文の中の式');
}

for (let i = 1; i <= 3; i++) {
  console.log(`${i}回目のループです。`);
}
```

# 式文
* 文になった式のこと(`式は文になれる`が`文は式にはなれない`)

```js
// ①式:関数呼び出し(log関数)、演算(1 + 1)、②文:コンソールに出力するという処理 = 式文
console.log(1 + 1);
```

## ブロック文
* 文を`{`と`}`で囲った部分を`ブロック`という。
* ブロック内には、複数の文が書ける。
* 基本的には`if文`や`for文`と組み合わせて処理を記載する。
* ブロックで終わる文の末尾には、`セミコロンが不要`。

```js
/* ブロック内には複数の文を書ける **/
{
 const blockVal = 'ブロックのスコープ内';
 console.log('ブロック文1');    // => ブロック文1
 console.log('ブロック文2');    // => ブロック文2
 console.log('ブロック文3');    // => ブロック文3
 console.log(blockVal);      // => ブロックのスコープ内
}
console.log(blockVal);
// => ReferenceError: blockVal is not defined(変数blockValはブロックのスコープ外のため)
```
```js
/* ブロック文は、if文などと組み合わせることが多い **/

// 非組み合わせ
if (true) console.log('if文です。');
// => if文です。

for (let i = 1; i <= 3; i++) console.log(`${i}回目のループです。`);     
// => 1回目のループです。
// => 2回目のループです。
// => 3回目のループです。

// ブロックとの組み合わせ
if (true)  {
  console.log('ブロックと組み合わせたif文です。');
  console.log('おかげで文を複数書くことができます。');
}

for (let i = 1; i <= 3; i++) {
  console.log(`${i}回目のループです。`);
  console.log('こちらも複数行書くことができます。');
}
```
ImageMagickでpdfを透過なしpngにする

タイトル通り。今回使ったoptionの説明は…省略。
```bash:command
$ convert hoge.pdf \( +clone -alpha opaque -fill White -colorize 100% \) +swap -geometry +0+0 -compose Over -composite -alpha off hoge.png
```
丸括弧の前に```\```が必要なので、お気をつけて。

https://oc-technote.com/%E6%9C%AA%E5%88%86%E9%A1%9E/imagemagick%20%E9%80%8F%E9%81%8Epng%E3%82%92%E9%9D%9E%E9%80%8F%E9%81%8E%E3%81%AA%E7%94%BB%E5%83%8F%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B/

https://qiita.com/iwiwi/items/fdec3466c4dea5818b3a
[ゲノム解析] マルチFASTAから任意の配列を切り取ろう

# FASTAファイルから配列を切り取りたい！！
マルチFASTAから特定のscaffold中の配列と抽出したい！
そんな時ありますよね。その場合、`seqkit`が便利ですよ。

## scaffoldの配列を全部取得したいとき
例えば、このようなゲノムファイルがあるとします。
```before.fasta
>chr1
AAAGGGTGTCCGTCGT
>chr2
GGTAGTCCCGCGTCAG
>chr3
AAGTCCCTCTCTGACT
```
ここからchr2の配列を取得したいときは、`seqkit grep`が有効です。
```
seqkit grep -p chr2 before.fna > after.fasta
```
すると以下のように取得できます。
```after.fasta
>chr2
GGTAGTCCCGCGTCAG
```
`seqkit grep`による、ヘッダー抽出方法でした。

## scaffoldの配列を一部取得したいとき
`before.fasta`のchr2から4番目から8番目の塩基を取得し、以下の`after.fasta`を作成するとします。
```after.fasta
>chr2:4-8
AGTCC
# chr2の4番から8番までを抽出
```
#### こんな時は`seqkit faidx`を使いましょう
```
seqkit faidx before.fasta chr2:4-8 -o after.fasta
```
インプットさせるファイル名の後に「scaffold:start-end」を入力することで、その範囲を抽出することができます！！

## seqkitが便利すぎるだろ！
使えば使うほど、万能さがわかっていきますね！！
今後も紹介していきます！
Ruby技術者認定試験 Silver 合格しましたが。

## 概要
Ruby技術者認定試験 Silver version 2.1 に合格しました。
ですが得点は80点で勉強時間をしっかり取った割にはぎりぎりでした。
これから試験を受ける方の役に立てばと思います。
## 過去問周回を特に頑張った人向け
過去問を解くのは点数が上がっていくのが楽しいですし
勉強方法としてシンプルなので楽ですが程々にした方が良いと思います。
点数を取るためだけの勉強になりがちなので、
間違えた部分に関してはテキストなりwebの記事を読む。
また公式リファレンスのメソッド一覧等を眺めて見た事が無いメソッドの
ページを読んで引数の確認などをした方が良いと思います。

それでも自分は過去問(Rex、ミニツク、対策問題集、模擬問題)
に時間を費やし過ぎてしまいました。
その上で解けずに失点したかも知れない問題を似た様な形式で残しておきます。
## web過去問で対策したが解けなかった問題

```Ruby
# 次のコードを実行するとどうなりますか
p "6B12".to_i
```
- 12
- 6
- 61112
- 612
- エラーが発生する

数字以外が入っている場合の挙動が分かりませんでした。
612かエラーか迷いましたが…。
<br>
<br>


```Ruby
# 次のコードを実行するとどうなりますか
"Ruby".each_char {|c| print c}
```
- "R","u","b","y"
- ["R","u","b","y"]
- Ruby
- ruby
- エラーが発生する

過去問周回を頑張ったのに１回も見た事が無い、という事は
存在しないメソッドだ！　ではずしました。
メソッド一覧をもっと眺めておけば…と感じた問題でした。
<br>
<br>

```Ruby
# 次のコードを実行するとどうなりますか
p "hello" + 5
```
- hello
- hello5
- hellt
- hellohellohellohellohello
- エラーが発生する

"hello%d" % 5  #=>  "hello5"
"hello" * 5  #=> "hellohellohellohellohello"
この二つは過去問で見た事が有りましたが、＋記号!?ってなりました。
<br>
<br>

```Ruby
# 次のコードを実行するとどうなりますか
p "0123456789".delete("^2-46-8")
```
- 0123459
- 234678
- 0159
- 234
- エラーが発生する

"-0123456789-".delete("2-48-")  #=>  "015679"
こんな感じのひっかけ問題は見た事あったのですが
^の除外有効範囲まで知りませんでした
("^2-4^6-8") ←こう書かないといけないものだとばっかり…。
<br>
<br>
```Ruby
# 現在時刻から1時間後の時刻を出力するコードを選択しなさい
```
- Time.now.add(60)
- Time.now.add(3600)
- Time.now + 60
- Time.now + 3600

こちらは急にaddメソッドが出現して混乱してしまいました。
似た過去問は有るんですが動きそうなコードが有ると釣られてしまいますね。
<br>
<br>

```Ruby
# 次のコードを実行すると何が出力されますか
case height = 170
when 100..150; p "short"
when 150..170; p "normal"
when 170..190; p "tall"
else           p "etc"
end
```

確か (1..9) の様にドットが2個の場合は終点の 9 は含まれるはず…
あれ、でも 170 を含む when が2個あるぞ!? となりました。
case~when式の特徴として上に記述される式が優先されるみたいですね。
<br>
<br>

```Ruby
# 出力と同じになるコードを二つ選択しなさい
# 出力
[1, "a"]
[2, "b"]
[3, "c"]


# コード部分
a = [1, 2, 3]
b = ["a", "b", "c"]

# 選択肢 1
a.zip(b) do |x, y|
  p [x, y]
end

# 選択肢 2
a.zip(b) do |i|
  p i
end

# 選択肢 3
(a, b).transpose.each do |x, y|
  p [x, y]
end

# 選択肢 4
(a, b).transpose.each do |i|
  p i
end
```
.zip  .transpose  .flatten  .product この辺りのArrayメソッドは抑えていましたが
ブロックが付くと途端に額に汗マークです。
選択肢で zipから1つ transposeから1つ 選びましたが見事にハズしました。

## まとめ
あくまでwebで過去問周回をし過ぎた人向けの記事で
合格するために役に立つ記事を投稿している方は
他にもたくさんいらっしゃいます。

少し捻った問題対策だと思ってください。

読んで頂き ありがとうございました。
Salesforceで積み上げ集計の金額項目が表示されない原因と解決策

Salesforceの積み上げ集計があり、通常は取引先から商談の金額項目の設定などが可能です

![積み上げ01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/91e26c6a-487c-d8d5-8ab1-2b5959ab0a83.png)


しかしながら、高度な通貨管理が有効の場合、金額の項目の選択ができなくなります
![高度な通貨管理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/29edcff0-f583-7d67-6031-968fcdc387af.png)


![積み上げ02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/f182e4a0-3a20-396f-a7a8-3ec8117483c1.png)

回避策として、自動化を作成して対応することがヘルプで記載されています。

Display Roll-Up Summary currency fields on Accounts and Opportunities with Advanced Currency Management enabled
https://help.salesforce.com/s/articleView?id=000334299&type=1
【npm】Nodejsプロジェクトの準備

## 想定する環境

- OS: Windows10
- コードエディターに`Visual Studio Code`を使用している
- `Nodejs` インストール済み

## 1. 作業用ディレクトリの作成

最初に、プロジェクトで使用するディレクトリを、任意の場所に作成します。

```cmd
> cd /d D:\NpmProjects
> mkdir Sample
> cd Sample
```

## 2. プロジェクトの初期化

作成したディレクトリで`npm init`コマンドを実行することで、`package.json`ファイルを作成できます。また、`--yes`オプションを追加することで、REPLによる入力要求をスキップできます。

```cmd
> npm init --yes
```

以下のように、`package.json`ファイルが作成されていれば成功です。

```json:package.json
{
  "name": "sample",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
```

## 3. 便利なツールのインストール

開発を効率よく進めるため、いくつかの便利なパッケージをインストールします。

### `rimraf`

クロスプラットフォームな環境で UNIX コマンドの`rm -rf`と同等の機能を実現します。

```cmd
> npm i -D rimraf
```

これを利用して、`typescript`などでビルドした結果を都度削除することで、再ビルドを容易にします。

```json:package.json
{
  ...,
  "scripts": {
    "pre<scriptName>": "rimraf <出力先>",
    "<scriptName>": "<コマンド>"
  }
}
```

この例は、**[Pre & Post Scripts](https://docs.npmjs.com/cli/v8/using-npm/scripts#pre--post-scripts)** 機能を利用して、ビルド時に出力先が存在した場合、削除します。

### [`npm-run-all`](https://www.npmjs.com/package/npm-run-all)

複数のNPMスクリプトを、並列または順番に実行するためのCLIツールです。

```cmd
> npm i -D npm-run-all
```

標準の`npm run`コマンドは、複数のスクリプトを実行する場合に記述が冗長になります。

`npm-run-all`を使用すると、`glob`のようなパターンでコマンドを記述できるようになります。

- `run-s`: 順番に実行
- `run-p`: 並列に実行

```json:package.json
{
  "scripts": {
    "build": "run-p build:*",
    "build:cjs": "<コマンド>",
    "build:esm": "<コマンド>"
  }
}
```
Fortigateの設定をTeratermマクロで取得する

## 1.ttlファイルをttmacro.exeに紐付けてください。
　みんなこのぐらいはできると思いますが、[親切な方が画面を取ってくれていました。](https://syutaku.blog/teraterm-macro-login/)

## 2.次のようなttlファイルの中身で動きます。

```
username = 'fortinet'         ;任意で変更
hostname = '192.168.100.1'     ;任意で変更
userpasswd = 'fortipass'      ;任意で変更
portnum = '22'               ;任意で変更
prompt = 'fortigate-100E $'   ;任意で変更
logfile = 'c:\users\fortinet\documents\fortigate.log'  ;任意で変更

msg = hostname

strconcat msg ':portnum /ssh /auth=password /user='
strconcat msg username
strconcat msg ' /passwd='
strconcat msg userpasswd
strconcat msg inputstr

connect msg

wait prompt

logopen logfile 0 0 ;binaryとoverwrite
;0がtext, 1がbinary 0が上書き、1が追加

sendln 'show'

wait prompt

logclose

sendln 'exit'

```

いつも通り、あくまでサンプルなので、そのままコピペでは動きません。
[個人用] 用語整理

---
- **JPA Query log**
JPAで行われるSQLログがSpringで確認できる
設定方法はsrc-main-resourcesのapplication.propertiesにspring.jpa.show-sql=trueとspring.jpa.properties.hibernate.format_sql=trueを追加するだけ。
---
- **@GeneratedValue**
JPAで主キーを自動的に生成するアノテーションで、@Idと@GeneratedValueを一緒に使用する必要がある。主に使用するのはIDENTITYオプション。主キー生成をデータベースに委任する方法で、id値を割り当てなくてもデータベースが自動的にAUTO_INCREMENTして主キーを生成する。このように使用する。
```
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
```
---
- **JPA Repository deleteとdeleteById**
DBのデータを削除させる。deleteはfindByIdと一緒に使用することが多い。IdでDBからデータを読み込んでnullかどうか確認のうえ、データ削除の順で。そして、delete＋findByIdと同じ機能をするのがdeleteById。
---
- **RedirectAttributes**
RedirectはHTTP GETメソッドであるため、URLに情報が公開されるという欠点が存在する。この欠点を補うため、SpringはURLに情報を公開しないRedirectAttributesクラスを提供する。RedirectAttributesはRedirectの時URLに情報が見えないだけで、Postメソッドではない。addFlashAttribute()はRedirectAttributesが提供するメソッドで、リダイレクト後には消える。
---
- **Bootsrtap alert**
Bootsrtapはウェブサイトを簡単に作成できるようにするもので、各種レイアウト、ボタンなどのデザインを提供するフレームワーク。Bootsrtap alertは警告メッセージの出力を設定する。
---
- **@Controller、@RestController** 
@ControllerはClientのRequestを受け取り、viewを返す。データ（JSON)を返したい場合は@ResponseBodyを使用する必要があるが、これら2つの機能を組み合わせたのが@RestControllerアノテーション。
---
- **@ReqeustBody**
JSONで入ったClientのRequestをJavaで読み込むとき使用するアノテーション。
---
- **JSON**
データを簡単に交換して保存するためのテキストベースのデータ交換標準で、さまざまなプログラミング言語で使用されています。
---
- **ResponseEntity**
開発者が結果データとHTTPステータスコード(404や500 ERRORなど)を直接制御できるクラスで、HTTPステータスコードを、転送したいデータとともに転送できる。
---
- **Mapping Annotation**
(1) @GetMapping : GETリクエストをするアノテーションで、CRUDのRead。
(2) @PostMapping : POSTリクエストをするアノテーションで、CRUDのCreate。
(3) @PutMapping : PUTリクエストをするアノテーションで、CRUDのUpdate。
(4) @PatchMapping : PATCHリクエストをするアノテーションで、CRUDのUpdate。<dd>Putはリソースのすべてを更新するが、PATCHはリソースの一部を更新する。</dd>(5) @DeleteMapping : DELETEリクエストをするアノテーションで、CRUD の Delete。
---
- **Domain model**
オブジェクト指向の例としてよく学ぶ形式のモデルで、各オブジェクトにオブジェクトが実行すべき仕事を分担させるもの。
---
- **Transaction cript**
1つのトランザクション内で必要なすべてのロジックを実行するモデルで、処理過程で一度でもエラーが発生すると全ての処理が取り消され、全ての処理が成功しなければ初めて処理が完了する（All or nothing）。
---
- **HTTPメソッド**
ClientがWebサーバにRequestの目的や種類を知らせる手段で、GET、POST、PUT、DELETEが代表的なhttpメソッドである。
---
- **HTTPステータスコード**
クライアントから送信されたHTTP Requestに対するサーバの応答コードで、ステータスコードに従ってRequestが成功したか失敗したかが判断できる。
（1）1xx（情報）：Requestを受け取り、プロセスを続行する時
（2）2xx（成功）：Requestが成功した時
（3）3xx（Redirect）：Requestを完了するために追加の作業が必要な時
（4）4xx（Client Error）：Requestが正しくないか、処理できない時
（5）5xx（Server Error）：Serverが有効なRequestに対してResponseできなかった時
---
- **httpメッセージ構造**

| httpメッセージ | 
|:-------------:|
| Start Line (Request Message : Request Line, Response Message : Status Line )    |
| Header        |
| Blank Line (HeaderとBodyを分ける）   |
| Body　（Request Message, Response Message)          |


---
- **MVC vs REST API**
Responseをする時、MVCはViewを返し、REST APIはJSONデータを返す。
---
【VBA】Excelでショートカットから複数条件フィルターをかけることができるマクロ

# 複数条件フィルターをかけるマクロを紹介します

Excelの表で例えば「10件くらいのIDだけフィルターかけて表示させたいなぁ・・・」

みたいなケースが結構あると思うんですが、そんなときに便利なマクロを紹介します。

下記で紹介するコードをPersonalの標準モジュールにコピペしてショートカットキーを設定すれば好きな時に使用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/6231d0fd-8d15-2cc5-c731-e991646e8700.png)



＜使い方＞
**上記のような表でIDの「123,125,129,131,132」をフィルターかけて表示したい場合**

①フィルターをかけたい複数条件が記入されているセルを範囲選択
（フィルターをかける列と条件指定用の範囲は同じ列になるようにしてください）
②マクロ実行

でフィルターがかかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/0c47002e-f1dc-d216-fdc8-f586af20ee72.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/bd18d9f0-a4f9-980f-9114-810124922383.png)


今回は表の下部に条件を記入して範囲選択しましたが、別に同じ列であればどこの範囲を選択してもいいです（表上でも可）

これくらいのデータならあまり恩恵が感じないかもしれないですが、例えば何万行もある表から「この20件のIDのデータ調べて」
みたいに言われたときに効果を発揮します。

フィルターをかけたい列の下に条件をパパっと入れてマクロ実行で瞬殺です。

---

## Personalコピー用

開発タブ → マクロの記録 
→ マクロ名：OrFilter、ショートカットキー：任意、保存先：個人用マクロブック → OK → 記録終了

Alt + F11でVBEを開いて左のプロジェクトから
VBAProject（PERSONAL.XLSB）
の標準モジュール「Module1」の中身に下記のコードをペースト


```
Sub OrFilter()

    Dim startRow, startCol, endRow, endCol, i, num As Integer
    Dim LoopArea As Range
    Dim SelectArea As String
    Dim filterAry() As String

    Set LoopArea = Selection
    
    startRow = LoopArea.Cells(1).Row
    startCol = LoopArea.Cells(1).Column
    
    endRow = LoopArea.Cells(LoopArea.Count).Row
    endCol = LoopArea.Cells(LoopArea.Count).Column
    
    
    If startCol <> endCol Then
        MsgBox "複数列で範囲選択されている場合は実行できません"
        Exit Sub
    End If
    
    
    num = endRow - startRow
    ReDim filterAry(num)
    
    For i = 0 To num
    
        filterAry(i) = Cells(startRow, startCol)
        startRow = startRow + 1
        
    Next
    
    
    Range("A1").AutoFilter startCol, filterAry, xlFilterValues

End Sub

```

かなりざっくり書いてるのでもし試してみたい方で気になるところは直してください。

あとフィルターをかける位置うんぬんとかも変えたい方はコードを調整してください。
（汎用的に使えるように今後修正するかもです）
【Rails】Devise ゲストユーザーログイン機能


ポートフォリオにゲストユーザーログイン機能を下記の記事で無事に実装できました。
本当に詳しく書かれていて本当に助かります。。。
この記事では、復習を兼ねて少し解説していきます。

https://qiita.com/take18k_tech/items/35f9b5883f5be4c6e104

ルーティング
---

```ruby:config/routes.rb
devise_scope :user do
 post 'users/guest_sign_in', to: 'users/sessions#guest_sign_in'
end
```
:::note
**devise_for**と**device_scope**の違いは？
:::
**devise_forについて**
>Includes devise_for method for routes. This method is responsible to generate all needed routes for devise, based on what modules you have defined in your model. 

**devise_scopeについて**
>You can pass a block to devise_for that will add any routes defined in the block to Devise's list of known actions. This is important if you add a custom action to a controller that overrides an out of the box Devise controller. 

[引用元](https://www.rubydoc.info/github/plataformatec/devise/ActionDispatch%2FRouting%2FMapper:devise_for)

devise_forは、モデル(今回はUser)がログイン、新規登録などに必要なルーティングを生成し、
devise_scopeは、deviseに新規アクションを追加した際にルーティングを設定するために使用します。

コントローラー
---
```ruby:app/controllers/users/sessions_controller.rb
class Users::SessionsController < Devise::SessionsController
  def guest_sign_in
    user = User.guest
    sign_in user
    redirect_to root_path, notice: 'ゲストユーザーとしてログインしました。'
  end
end
```

:::note
sign_in とは？
:::
**sign_in** はdeviseのメソッドです。
すでに登録済みユーザーのログインをするメソッドになります。

>Sign in a user that already was authenticated. This helper is useful for logging users in after sign up. All options given to sign_in is passed forward to the set_user method in warden. If you are using a custom warden strategy and the timeoutable module, you have to set `env = true` in the request to use this method, like we do in the sessions controller: 
[引用元](https://www.rubydoc.info/github/plataformatec/devise/Devise%2FControllers%2FSignInOut:sign_in)

モデル
---
```ruby:app/models/user.rb
def self.guest
  find_or_create_by!(email: 'guest@example.com') do |user|
    user.password = SecureRandom.urlsafe_base64
    user.name = "Guest"
  end
end
```

:::note
**find_or_creat_by!** メソッドとは？
:::

ユーザーが存在すれば、ユーザーを取得し、なければ作成します。
なので、仮にゲストユーザーが削除されても新規で作成されるのでログインは可能ということですね。
初心者向け Goの学習方法 改良版

## はじめに
別の記事でGoの学習方法について記載しました。↓
[Goの学習方法](https://qiita.com/bear05/items/cea61cd116ef94f14e07)

しかし、前回の学習だけでは個人でアプリ開発をするのに不十分だったと感じ、追加で学習しました。
前回の記事の内容と、追加して学習したこと、効率がいい学習方法は何か、考えたことを記載します。

## 学習方法　改良
### 1.Goについて調べる
　複数のサイトを読んで、そもそもGoはどんな言語かについてざっくりと調べました。

参考記事
・[Go言語とはどんなプログラミング言語？特徴やできることを解説](https://hnavi.co.jp/knowledge/blog/go/)
・[Go言語とは - 作れるものや特徴を知ろう](https://www.pasonatech.co.jp/workstyle/column/detail.html?p=7489)
・[Goのエキスパートが教えるGoの魅力、プログラミング基礎入門](https://flxy.jp/media/article/10744)

### 2.学習する
　様々な学習サイトがありましたが、私は公式のリファレンス「A Tour of Go」を一通り学習しました。
　様々な学習サイトをすべて網羅するとキリがないため、
基本だけ学習して、わからないことは開発時に調べながら学習していこうと考えました。

[A Tour of Go](https://go-tour-jp.appspot.com/welcome/1)

### 3.動画研修を受講して簡単な開発演習を行う
　キノコードさんのyoutube動画研修を受講しました。
　動画研修を受講した理由は、アプリを作成するときに2だけだと環境構築、ディレクトリ構成をどのようにすればいいかイメージがつかないことに気が付いたからです。
　作成予定のWebアプリと同様の開発環境(使用予定のエディタなど)で練習するといいと思います。
　実際に手を動かしながら詳しい解説を聞けるので、理解が進みます。
　2を飛ばして3からでもいいかと思いました。

[【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座](https://www.youtube.com/watch?v=kPXfMFJ0oIE)


### 4.フレームワークで開発練習してみる
　自分が使用予定のフレームを用いて少しだけ開発練習をしました。
　フレームワークについて詳しく学習するのは実際の開発時でいいと考えたので、フレームワークの概要を理解する程度にしました。


## まとめ
　新しい言語を学習するときは、実際に手を動かしながら学習することが一番だと感じました。
　他のプログラミング言語を経験した方であれば、リファレンスに目を通すだけで理解できると思いますが、
　経験が浅い方は動画研修で解説を聞きながら環境構築、簡単な開発を行って学習していくと挫折せず取り組めるかと思います。
Django モデルの変更を実施するための3ステップ

モデルの変更を実施するための3ステップ覚えておく！

・モデルを変更する (models.py の中の)

・これらの変更のためのマイグレーションを作成するために python manage.py makemigrations を実行します。

・データベースにこれらの変更を適用するために python manage.py migrate を実行します。

参考元：https://docs.djangoproject.com/ja/2.2/intro/tutorial02/
Homebrewについて調べたので忘れないようにメモ

Homebrewの`Formula`や`Cellar`などのbrew語について理解が及んでいないため、基礎から理解していく過程で知ったことをメモしていく。

# Homebrewとは

Homebrewは、macOS、Linux、Windows Subsystem for Linuxで動作するパッケージ管理システムのひとつです。

https://ja.wikipedia.org/wiki/Homebrew_(%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0)


Homebrewは自家醸造という意味で、内部で使われる用語も醸造に合わせた用語となっています。酒好きにはたまらないです。ですが、パッケージの管理はできても、ご自身のお酒の管理まではできないので、ご注意願います。

公式

https://brew.sh/

# 環境

os: macOS Monterey 12.5
machine: MacBook Air(Retina, 13-inch, 2018)
cpu: 1.6GHz デュアルコアIntel Core i5

# インストール

すでにインストール済みだったため、今回homebrewのインストールについては割愛させていただきます。
下記にドキュメントがあるためこちら参照願います。

https://docs.brew.sh/Installation

# 全体像

パッケージインストールした際の全体像を簡単に絵にしてみました。
自家醸造をモチーフとしてますので、Homebrew内の流れは醸造をイメージした絵としました。（醸造は詳しくないので、醸造という観点で見た際におかしいところあるかもしれませんが、ご容赦を。）
各用語は後述します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38724/f93f6ddf-aaa9-48e2-b659-d196ba3ad545.png)

# 用語解説

Homebrewで使われる用語について解説します。
公式の一覧には他にもありますが、気が向いたら補完します。

| 用語 | 説明 | ディレクトリ |
|:-|:-|:-|
| Tap（蛇口）  |  パッケージのインストールスクリプトを含むgitリポジトリ | `${Repositoryホーム}/Library/Taps/`<br>`${ユーザ}/${リポジトリ}`  |
| Formula（レシピ）  |  パッケージのインストールスクリプト |  `${Repositoryホーム}/Library/Taps/`<br>`${ユーザ}/${リポジトリ}/Formula` |
| Cellar（酒蔵）  |  インストールされたバージョンごとのパッケージを管理する場所 | `${Cellarホーム}`  |
| Keg（酒樽）  |  インストールされたバージョンごとのパッケージ | `${Cellarホーム}/${パッケージ名}/${バージョン}`  |
| Bottle（ボトル）  |  パッケージのビルド済みバイナリ |  - |

`${Repositoryホーム}`は`brew --repository`で確認できます。
`${Cellarホーム}`は`brew --cellar`で確認できます。

公式では下記ページに解説があります。

https://docs.brew.sh/Formula-Cookbook

## Tap

パッケージのインストールスクリプト（Formula）を含むgitリポジトリです。

Tapの一覧は`brew tap`で確認できます。
```zsh
% brew tap
homebrew/core
```
Tapの追加も可能です。今回は割愛します。

## Formula

パッケージのインストールスクリプトです。Tapに含まれます。

Formulaは`brew search ${キーワード}`で検索し確認できます。インストール済みにはチェックマークがつくようです。
```zsh
% brew search git
==> Formulae
git ✔   git-imerge   git-tracker   legit
（省略）
```

パッケージは、パッケージをビルドしてインストールされるか、ビルド済みバイナリ（Bottle）を展開しインストールされます。

## Cellar

インストールされたバージョンごとのパッケージ（Keg）を管理する場所です。

Kegは`brew list`で確認できます。
```zsh
% brew list
==> Formulae
git xxx yyy zzz
```

## Keg

インストールされたバージョンごとのパッケージです。Cellarに含まれます。
`/usr/local/bin`等からからシンボリックリンクで参照し利用されます。

## Bottle

パッケージのビルド済みバイナリです。

# よく使うコマンド
- brewアップデート
```zsh
% brew update
```
- パッケージインストール
```zsh
% brew install package_name
```
<!--
- caskインストール
```zsh
% brew install --cask package_name
```
-->
- 更新可能なパッケージ一覧
```zsh
% brew outdated
```
- パッケージアップデート
```zsh
% brew upgrade package_name
```
- インストール済みパッケージのバージョンを調べる
```zsh
% brew list --version | grep package_name
package_name x.x.x
```
プログラミング初心者向けPython(JupiterNotebook)のコードをGithubにアップロードするMac PC環境構築

【メインの参考資料】
Python(JupiterNotebook)のコードをgithubのレポジトリにアップロードするまでの流れは次の記事を参考にしました。

初めてGitHubにファイルを上げる方法。【超初心者入門編】
https://yuma-studio.net/programming/github-first/

同様の流れは次の記事でも書かれています。

初心者用：GitHubにファイルをアップロードする方法（超基本）
https://qiita.com/under_chilchil/items/ec9d0050c1e3fb6576de

【サブの参考資料】
トラブルシューティングのために参考にしたサブの資料はこちらです。

①Githubの環境構築例

Progate、【Mac】Gitの環境構築をしよう！
https://prog-8.com/docs/git-env

②アップロードしたいファイルのパスの確認方法
ファイルを右クリックして、optionを押して、「パス名をコピー」をクリックするとパス名をコピーできます。

MacのFinderでパスを表示させる＋コピーする方法を解説！パスを使ってのディレクトリ移動も
https://aprico-media.com/posts/1578

③ターミナルの基本的な説明（cdとか）

ターミナル（コマンド）
https://qiita.com/yoshi-2015/items/90e463a264b041b4f5e3

④ターミナル上でのディレクトリの移動方法

【Mac】ディレクトリの確認・移動など、ディレクトリ操作のコマンドまとめ｜ターミナル
https://blog-and-destroy.com/34941

「cd: not a directory」のエラーの原因は、アップロードしたいファイルの入った”フォルダ”のパス名をターミナルで指定し、次に”ファイル”をターミナル上にドラッグ&ドロップして移動すると解決します。

ターミナル　cdコマンド入力してもcd: not a directoryが出る原因はコレ【macOS】
https://www.rakugochunen.com/failure-story/cd-not-a-directory

「Permission denied」のエラーが出ましたが、無視しても最終的にアップロードはできました。

許可が正しい場合でも、ディレクトリへのCDに対する「許可が拒否されました」
https://qastack.jp/server/283405/permission-denied-to-cd-into-a-directory-even-though-permissions-are-correct

⑤最後のgithubへのターミナルからのプッシュのエラーへの対処法

「Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.」でアップロードできなかったのですが、こちらはターミナル上でのユーザ名（githubでの自分のアカウントトップページのURLの最下層）とパスワード（ターミナル上で文字が表示されないのでコピペできてるか不安でもOK）のパスワードについて、githubのパスワードでなく個人のアクセストークンを個別に次の記事のように設定する必要があり、設定したアクセストークンを使ったらアップロードできました。

【GitHubにpushできない3連発】エラーと対処法～全部解決済
https://engineeryuka.com/github-cannot-push

（公式説明）Creating a personal access token
https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token

（与太話1、Twitter2に一年ぶりにログインしようとしたら、アクセストークン爆弾で消滅していてびっくりしました。）

Twitter2
https://dic.nicovideo.jp/a/twitter2

「起きたら全て消えていた」　Discordで横行する“サーバー凍結荒らし”、1万人参加サーバーが一夜で消えたその手口
https://nlab.itmedia.co.jp/nl/articles/2112/07/news166.html

（与太話2、最初のコードは「Hello World」が定番ですが「Welcome to this crazy Time」の方が現代っぽいのでそれに倣いました。）

エッセイ：今のインターネットで大切なものは全て「TOUGH BOY」に詰まっている
https://note.com/nyalra2/n/nf49e9cdd65ba?magazine_key=m9012811cf37e

TOUGH BOY
https://www.uta-net.com/song/462/

⑥githubからJupiterNotebookのコードを実行する方法も載せておきます。

JupyterNotebookにGithubを読み込む方法
https://teratail.com/questions/164720

⑦記事自体の書き方

デフォルトで紹介されていたQiitaでの記事の書き方を参考にしました。
（簡潔な記事を書くの難しいですね。環境をどこまで詳しく書けば良いかも分かりませんでした。）

良い記事を書くためのガイドライン
https://help.qiita.com/ja/articles/qiita-article-guideline

⑧自分のGithubアカウント

最後に自分のGithubアカウントも載せます。

まだまだ初心者ですが、他の初心者の方向けに学習過程などを共有していきます。

もっと効率の良い方法や参考になる情報などございましたらコメントなどいただけると嬉しいです。
.NET Framework 4.8.1が使えるようになってる


リリースは昨日(2022/8/9)
つい先日の話

https://opcdiary.net/net-framework-4-8-1%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9/

https://devblogs.microsoft.com/dotnet/announcing-dotnet-framework-481/


# Native support for Arm64

最新のVisual Studio 2022がArmネイティブ対応をしている辺り、
.NET FrameworkもArmネイティブに対応する必要性があったからという趣旨のアップデートであろう。


# WCAG2.1 compliant accessible tooltips

https://github.com/belre/CSharpCodeSamples/tree/main/ToolTip/ToolTipTest

ToolTipのAccessibityの改善が行われたようだ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/401a0f7c-20c5-07fc-894a-5293ceb041b3.png)

マウスポインタをボタンに合わせると「ToolTip1」というのが表示されるのだが、
これがマウスカーソルのフォーカスを外せば、これを外すことが出来る。

それだけでなく、ESCボタンを押すことでもToolTip1のフォーカスを外すことが出来るようになった。

あとは、キーフォーカスでもToolTip1が表示されたり。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/862df731-e356-8c79-83e2-95795ad1d589.png)

ToolTip上でマウスポインタが動いたとしても、フォーカスが維持されたりするようになった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281173/69ae20ff-b7cf-1224-4348-96b32cdaca1d.png)

というわけで、地味ながら.NET Framework 4.8とToolTipの挙動が変わったようなので気を付けよう。
なお、WinFormsではこの変更は見られなかったので、WPFでのみ注意が必要のようだ。

# Windows Forms – Accessibility Improvements

このほか、WinFormsにて、
TextBoxの文字列操作がやりやすくなっていたり、
DataGridViewにおけるスクロール関連の不具合を修正したようだ。
Firebase Realtime DatabaseとAuthenticationのデータをEmulator上に全部コピーする

Databaseに認証ルールとかがある場合にはAuthenticationもEmulator上に存在しないとうまく動かない

```sh
# 保存先のディレクトリ構造を生成させる
$ npx firebase emulators:exec "exit 0" --export-on-exit /tmp/firebase-test-export --project your-own-app

# Databaseの内容をEmulatorでimportするディレクトリに書き出し
$ npx firebase database:get / --export --output /tmp/firebase-test-export/database_export/your-own-app.json  --project your-own-app

# Authenticationの内容をEmulatorでimportするディレクトリに書き出し
$ npx firebase auth:export /tmp/firebase-test-export/auth_export/accounts.json --project your-own-app

# 上記で書き出されたディレクトリをimportしてEmulatorを起動
$ npx firebase emulators:start --import /tmp/firebase-test-export/database_export --project your-own-app
```
Laravelのエラーについてまとめ

# コマンドを実行したときのエラーまとめ

## マイグレーションコマンド

### Model already exists!

すでに同じ名前のモデルが作成されているために発生するエラー

appフォルダ直下に同じ名前のモデルファイルが存在する場合は
ファイルを削除すればコマンドを実行することができます。

```
php artisan make:model Test --migration
```

### Nothing to migrate.

マイグレーションファイルは一度実行すると
ファイルの名前をリネームしない限り再利用できないため
ファイルの一部分で良いので名前を変えれば実行できます。

例：YYYY_MM_DD_xxxxx_create_test_table

※日付の部分もしくは、xxxxxの箇所を変更する
I/Oデバイスまとめ（エンベデッドシステムスペシャリスト午前Ⅱ）

# 目的
アウトプットによる理解の促進と情報共有。

# シリアルインターフェース
1本のデータ線を用いて1ビットずつ順に送る方式のインターフェースである。
シリアルインターフェースの通信方式には、クロック同期型と調歩同期型がある。

### クロック同期型シリアルインターフェース
表の下2つ(CAN, FlexRay)は自動車用の規格である。
| 名称 | 信号線本数 | 最大転送速度 |
|:-|:-|:-|
| $I^2C$ | 2 | 100kbps/400kbps/3.4Mbps |
| Microwire | 3 | 250kbps |
| SPI | 3 | 5Mbps |
| SMBus | 2 | 100kbps |
| 1-Wire | 1 | 16kbps |
| CAN | 2 | 1Mbps |
| FlexRay | 2 | 10Mbps |

$I^2C$の読み方は「アイ・ツー・シー」「アイ・スケア・シー」（会社では後者で呼ぶことが多かった）。

### 調歩同期型シリアルインターフェース(UART)
クロック信号を持たず、データの先頭を示すスタートビットを基準にして同期をとる。
以下が代表。
* RS-232C
* RS-422

# 高速シリアルインターフェース
### 高速化手法
LVDSは信号電圧の振幅を小さくし、差動信号による伝送を行う方式である。
振幅を抑えることで周波数を上げ、速度を向上できる。
### エンベデッドクロック
クロック信号を持たずにデータにクロックを埋め込む手法。
受信側ではデータ信号から同期タイミングを抽出してデータを再現する(**クロックリカバリ**)。
### インターフェース
| 規格 | 最大通信速度 | 電源供給機能 |
|:-|:-|:-|
| USB1.1 | 1.5Mbps/12Mbps | 500mA, 5V |
| USB2.0 | 480Mbps | 500mA, 5V |
| USB3.0 | 5Gbps | 900mA, 5V |
| USB3.1 | 10Gbps | 900mA, 5V |
| USB Battery Charging v1.2 | - | 1500mA, 5V |
| USB Power Delivery Specification Rev3.0 | - | 5000mA, 20V |
| SATA | 4800Mbps | - |

# 無線インターフェース
| 名称 | 媒体 | 距離 | 速度 | 台数 |
|:-|:-|:-|:-|:-|
| IrDA | 赤外線 | 1m | 16Mbps |  |
| RFID | 無線 | 7m |  |  |
| NFC | 無線 | 10cm |  |   |
| Bluetooth | x0m |   |   |   |
| ZigBee  | 無線 |  |  | 65535 |

# 疑問に思ったこと
* インターフェース？　インタフェース？　個人的には前者の方がしゅき
写真から背景を削除する 5 つの方法

# 前提：
この記事は、写真から背景を削除したい人に適しています。
背景除去とは、写真の背景を除去し、人物を残すことを指します。
写真の背景を削除する機能は、今日では 2 時間もかかる複雑な操作ではありません。

# 1. オンラインの背景除去ツールを使用します。
現在、インターネット上には、便利な操作を提供する多くの画像除去背景ツールがあります。背景除去ページの 1 つを開いて画像をアップロードし、AI が[背景を除去する](https://www.fotor.com/jp/features/background-remover)のを待つだけです。迅速かつ簡単で、不正確なエッジを手動で調整できます。もちろん、無料ではありません。

# 2. パワーポイントを使用して背景を削除します。
PowerPoint に画像を挿入し、[ツールバー] を選択します。その後、ワンクリックで戻ります。 -- これは予想外です、背景除去効果はあまり正確ではありません

# 3. Python コードを使用して背景を削除します。

## 方法 1:
paddlehub という Python ライブラリがあります。インポートできます。
次に、コードを記述します。
```Python
import os
import sys
import paddlehub as hub
```

"モデルをロードする"
```Python
humaneg = hub.Module(name="deeplabv3p_xception65_humanseg")
```

"切り出す画像のディレクトリを指定"
```Python
path = './source/'
files = []
dirs = os.listdir(path)
for diretion in dirs:
    files.append(path + diretion)
```
"背景を削除する"
```Python
results = humanseg.segmentation(data={"image": files})
for result in results:
    print(result['origin'])
    print(result['processed'])
```

## 方法 2:

「バックグラウンド リムーバー」コードを含む Python パブリック ライブラリがあります。このライブラリをインポートできます。ソース：https://github.com/nadermx/backgroundremover

ライブラリをインストールします: 
```pip install backgroundremover```
デバッグ: 
```
backgroundremover-i "cg.jpg"-o"cg outopt.jpg"
import os
os.system('backgroundremover -i ""cg.jpg"-o"cg output.jpg"
```

ダウンロードしたライブラリを簡単に見つけられるディレクトリにインストールします。
Window：
```
c:/Windows/user/.u2net/u2net.pth
```
Mac:
```
/Users/lyc/.u2net/u2net.pth
```
Linux:
```
/root/.u2net/u2net.pth
```

次に、必要に応じてコードを実行します。

## 方法 3:
remove.bg 公式 Web サイトには、バックグラウンド削除 API があります。
この API を取得できます。

APIのキー値を取得したら、pythonプログラムを書き始めましょう。

ライブラリをインポート。
```Python
from removebg import RemoveBg
api_keys = "上記で取得したキー値"
rmbg = RemoveBg(api_key, "error.log")
#rmbg.remove_background_from_img_file("画像パス")
rmbg.remove_background_from_img_file("photo.jpg")
```
【MacOS】Amazon S3から一括でファイルをDLメモ

# 対象とする人、前提
- S3から複数のファイルをダウンロードしたい人
- AWS CLIを今まで使ったことない人

# 事前準備
- AWSのアカウント
- ターミナル
- DLしたいS3バケット

# 手順１：IAMユーザーの作成〜アクセスキー取得
今までルートユーザーのみ使用しており、IAMユーザーを使ったことがない人はこの手順を行なう
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-prereqs.html

# 手順２：CLIのインストール
以下のコマンドをターミナルに入力することで、カレントディレクトリに`.pkg`がダウンロードされる
```Linux:AWS CLIのパッケージのダウンロード
curl https://awscli.amazonaws.com/AWSCLIV2.pkg -o AWSCLIV2.pkg
```
カレントディレクトリにある`AWSCLIV2.pkg`をインストールする
```Linux:AWS CLIのインストール
sudo installer -pkg ./AWSCLIV2.pkg -target /
```

AWS CLIがインストールされたか確認
```
which aws
```
これでコマンドのパスが表示されるはず

# 手順３：AWS CLIにIAMユーザーを登録
以下をターミナルに入力。
```Linux
aws configure
```
`AWS Access Key ID`の入力を求められるため、`手順１`で取得したアクセスキーを入力する。
次に、`AWS Secret Access Key`の入力を求められるため同様に`手順１`で取得したシークレットキーを入力する。

次に、`Default region name`を求められるがおそらくリージョンはどこでもいい？（要調査）。僕はとりあえず`ap-northeast-1`にしました。

最後に、`Default output format`は`json`を指定。

これでAWS CLIから自身のAWSにアクセスできるようになりました。

# 手順4:S3からファイルをダウンロードする
S3にアクセスできるか確認しましょう。以下のコマンドでバケット名が一覧で表示されるはずです。
```
aws s3 ls
```
s3から特定のファイルをカレントディレクトリにダウンロードしたいときには
```
aws s3 cp s3://<バケット名>/<フォルダ名>/<ファイル名> ./
```
を使います。
例えば、
```
aws s3 cp s3://your-backet/folder1/test.txt ./
```
といった感じです。

フォルダごとカレントディレクトリにダウンロードしたいときには
```
aws s3 cp s3://<バケット名>/<フォルダ名> ./ --recursive
```
でフォルダ内のファイルを一括で可能です。



　
以上です。お疲れ様でした。
vlc のコマンドラインでストリームを指定する

vlc で　ストリームを指定する方法です。
Ubuntu 22.04 に
内蔵カメラ
USB カメラ
がある状況でテストしました。

## 内蔵カメラを使う時

```bash
vlc v4l2:///dev/video0
```

実行結果

```text
$ vlc v4l2:///dev/video0
VLC media player 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2)
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
```

## USB カメラを使う時

```bash
vlc v4l2:///dev/video2
```

実行結果

```text
$ vlc v4l2:///dev/video2
VLC media player 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2)
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
```

## mp4 ファイルの再生

```bash
vlc sample-5s.mp4
```

実行結果

```text
$ vlc sample-5s.mp4 
VLC media player 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2)
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
```
Material UIのテーマ変更

### 成果物
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/ee8fe8f5-7778-022f-0eb9-bc58df7e07f4.png)

### 環境情報
```:nodeのversion
~/develop/react/react_study/login$ node --version
v16.16.0
```

```json:package.json
{
  "name": "login",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@emotion/react": "^11.10.0",
    "@emotion/styled": "^11.10.0",
    "@mui/material": "^5.10.0",
    "@testing-library/jest-dom": "^5.14.1",
    "@testing-library/react": "^13.0.0",
    "@testing-library/user-event": "^13.2.1",
    "@types/jest": "^27.0.1",
    "@types/node": "^16.7.13",
    "@types/react": "^18.0.0",
    "@types/react-dom": "^18.0.0",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-scripts": "5.0.1",
    "typescript": "^4.4.2",
    "web-vitals": "^2.1.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}
```

### ディレクトリ構成
```
~/develop/react/react_study/login$ tree -I node_modules 
.
├── README.md
├── package.json
├── public
│   ├── favicon.ico
│   ├── index.html
│   ├── logo192.png
│   ├── logo512.png
│   ├── manifest.json
│   └── robots.txt
├── src
│   ├── App.tsx
│   └── index.tsx
├── tsconfig.json
└── yarn.lock

3 directories, 13 files
```

### Hands-on
```実行コマンド
~/develop/react/react_study$ yarn create react-app login --template typescript
cd login
yarn add @mui/material @emotion/react @emotion/styled
```

不要なファイルを削除する。

```tsx:App.tsx
import CssBaseline from "@mui/material/CssBaseline";
import { ThemeProvider, createTheme } from "@mui/material/styles";
import Button from "@mui/material/Button";

function App() {
  const theme = createTheme({
    palette: {
      mode: "dark",
    },
  });

  return (
    <ThemeProvider theme={theme}>
      <CssBaseline />
      <Button variant="contained" color="primary">
        メインカラー(contained)
      </Button>
      <Button variant="outlined" color="secondary">
        セカンダリーカラー(outlined)
      </Button>
      <Button variant="text" color="success">
        サクセスカラー(text)
      </Button>
    </ThemeProvider>
  );
}

export default App;

```
これで完成。あとは`yarn start`で実行！！
EffcientNetの構造解説　(1)

# 初めに

EfficientNetは、いくつのモジュールで構成されるSub-blocksで構成され、このSub-blocksの繰り返し構造になっていることを説明致します。

ここのポストを基準に、少し自分の解説を追記します。
https://towardsdatascience.com/complete-architectural-details-of-all-efficientnet-models-5fd5b736142


# EfficientNetとは

論文は下記のリンクで確認できます。

https://arxiv.org/abs/1905.11946


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/a0723b37-1e74-ced8-3971-43d7c38381a2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/41ff1a3b-629d-5bba-bf6d-578fd7ba4127.png)

# EfficientNetの構造

EfficientNetはB0~B7の8種類があります。
下記の図にEfficientNet B0の構造を示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/b3b81ce4-0989-a463-2abb-829e298581b2.png)

EfficientNetの最初にはStemが、最後にFinal Layersがあります。
このStemとFinal layersの存在は、EfficientNet B0からB7に共通しています。

## Steam, Final Layers

StemとFinal layersの構造です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/e6d15bcc-5cb0-bd07-dfd4-f34be6d5d8c2.png)

## アーキテクチャを構成する基本Module(Module 1~Module5)

EfficientNetはModule1~Module5の基本モジュールで構成されています。
各モジュールの構成を下記の図に示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/5e271e5e-6017-1901-7435-50f68a54a502.png)

## 基本ブロックで構成されるSub-blocks

そして、Res-NetのようなSkip Connectionを構成するSub blocksがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/be3eefa9-be93-3a24-b2e0-cef9f7c653c1.png)

ここから、EfficientNetの構造を、上記の図を利用して表示します。

## EfficientNet-B0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/e26a7dde-1f9f-34da-9573-127f0a64b208.png)

## EfficientNet-B1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/9f4944ff-820d-1fa6-cee6-29acc584d5b9.png)

## EfficientNet-B2
EfficientNet-B2は基本的にB1と同じ構造です。ただし、Conv層のFeature mapsの数が異なります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/2b7b2a5c-0bf1-c5e2-31f4-f02bea47c353.png)

## EfficientNet-B3
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/cd2fa8d6-8b9a-80f3-919a-30bc1045b0fc.png)

## EfficientNet-B4
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/5d597d33-62ce-74f7-ca71-8f9b73944243.png)

## EfficientNet-B5
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/422e87be-e5da-3c05-1417-0eae2ecac6c0.png)

## EfficientNet-B6
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/5f781e7d-478b-7efb-511b-599d899982aa.png)

## EfficientNet-B7
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/5a53ec3e-95e3-8c4e-c808-f98d8823e61b.png)

ここで、EfficientNetの構造を整理してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/5f604a4f-734a-4c75-727e-c21389c41d02.png)

## KerasでEfficientNetを確認する。

https://deeplearning.cms.waikato.ac.nz/user-guide/model-zoo/#model-summaries

EfficientNet B0
https://deeplearning.cms.waikato.ac.nz/user-guide/model-zoo/keras/KerasEfficientNetB0/
SNMP でスクリプトの実行結果を表示する

「Ubuntu に SNMP をインストール」
https://qiita.com/nanbuwks/items/3632b3180e587152bfc7

では `rocommunity  public default` を snmpd.conf に設定していろんな値を読んでみました。

そこでは予め設定された項目が表示されていましたが、自分で測定した適当な値を表示するにはどうしたらいいでしょうか?

# 拡張 MIB

今まで読んできたのは標準MIBの`iso.3.6.1.2.1`配下でしたが、
拡張MIBとして`iso.3.6.1.4.1`があります。

拡張MIBは各メーカーが独自に内容を設定することができます。

例えば、ヤマハRTシリーズについて、
http://www.rtpro.yamaha.co.jp/RT/FAQ/SNMP/pilot-lamp-patlite.html
によると、
`pp link down` を `.1.3.6.1.4.1.1182.2.3.2` で検出することができるようになります。

ここで、`1182` がヤマハの OID となります。

# SMIネットワーク管理プライベートエンタープライズコード

ということは、 OID を自分で設定すればいいのでは?

 この OID は IANA で「SMIネットワーク管理プライベートエンタープライズコード」として管理されています。そして、このコードは IP アドレスの 192.168 ... のように自由に使って良いところはなく、登録された OID でないと使ってはいけません。

# ucdavis

勝手に OID を使うわけにはいきませんが、既存の OID の中でスクリプトを実行できるものがあります。そのうちの1つに `1.3.6.1.4.1.2021.8` があります。

ここで使われている OID は `2021` で ucdavis として登録されています。ucdavis とは一体何かなと思ったら U.C. Davis, ECE Dept. で カリフォルニア大学デービス校 (UCD) ECE部門 とのことでした。

# スクリプトを実行

これを使えるようにした仕組みが snmpd.conf にあります。

/etc/snmpd.conf 中、

```

exec numdata  /bin/echo 12345
exec multidata  /bin/echo 5 70
```

と記述して snmpd.conf を再起動します。


クライアントから以下のようにしてデータを取ると、
```
$ snmpwalk -v1 servername -c public 1.3.6.1.4.1.2021.8

```
以下のようにデータが取れます。

```
iso.3.6.1.4.1.2021.8.1.1.1 = INTEGER: 1
iso.3.6.1.4.1.2021.8.1.1.2 = INTEGER: 2
iso.3.6.1.4.1.2021.8.1.2.1 = STRING: "numdata"
iso.3.6.1.4.1.2021.8.1.2.2 = STRING: "multidata"
iso.3.6.1.4.1.2021.8.1.3.1 = STRING: "/bin/echo 5 12345"
iso.3.6.1.4.1.2021.8.1.3.2 = STRING: "/bin/echo 5 70"
iso.3.6.1.4.1.2021.8.1.100.1 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.100.2 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.101.1 = STRING: "5 12345"
iso.3.6.1.4.1.2021.8.1.101.2 = STRING: "5 70"
iso.3.6.1.4.1.2021.8.1.102.1 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.102.2 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.103.1 = ""
iso.3.6.1.4.1.2021.8.1.103.2 = ""
```
ここでは echo の結果を取りましたが、これを別のコマンドに変えればその結果が取れることになります。


# exec 以外の書き方

exec のほか、 sh や pass として書くこともできるらしいです。

pass は同様に iso.3.6.1.4.1.2021 内に、
sh と extend は 1.3.6.1.4.1.8072 内に配置されます。


例えば、 snmpd.conf 内に
```
extend extendresult echo 123 
```


$ snmpwalk -v1 localhost -c public 1.3.6.1.4.1.8072.1.3.2.2.1
で取れるようになりました。


# ドキュメント

exec, sh , pass ,extend の違いはここに説明がありました。

http://www.net-snmp.org/docs/FAQ.html#What_s_the_difference_between__exec____sh____extend__and__pass__


また、以下を読むと、exec や  sh は extend  に変更ということらしいです。

https://github.com/opencomputeproject/OpenNetworkLinux/blob/master/builds/any/rootfs/wheezy/common/overlay/etc/snmp/snmpd.conf

それぞれの snmpd.conf 内の記述方法は

http://www.net-snmp.org/docs/man/snmpd.conf.html
の
EXTENDING AGENT FUNCTIONALITY
あたりにあります。

# oid の名前でアクセスしたいが

MIBツリーの数字ではなく、名前でアクセスしたいと思い、以下のようにしてみましたがエラー、調査中です。

```
$ snmpwalk -v1 localhost -c public nsExtendOutputFull
nsExtendOutputFull: Unknown Object Identifier (Sub-id not found: (top) -> nsExtendOutputFull)
$ snmpwalk -v1 localhost -c publc NET-SNMP-EXTEND-MIB::nsExtendObjects
Timeout: No Response from localhost
```
【練習問題】HTMLタグ-1

# はじめに

この記事はクイズ形式で自身のHTMLの学習をアウトプットしていきます。
問題文の条件を満たすHTMLを記述してください。

:::note warn
お手元のエディタに解答を入力したうえで
「▶正解」をクリックして回答を確認してください
:::

## 練習問題
* 1番大きい見出しを追加する
* 見出しの文字列は「はじめに」とする

<details><summary><b>正解</b></summary>

```html
<h1>はじめに</h1>
```
</details>

# 問題
## 第1問
* 段落要素を追加する。
* 段落内の文章は任意とするが、２行とする。※改行用のタグを使用する事

<details><summary><b>正解</b></summary>

```html
<p>
    ここに段落内の文字が入ります。<br>
    brタグで改行も可能です。
</p>
```
:::note warn
2022/08/16追記
改行タグは\<br>または\<br />のどちらでも認識される。
但し、\HTML5が主流になっている現状\<br />を使用するメリットが存在しないため
\<br>と短く表記することが好ましい。
参考：https://qumeru.com/magazine/549
:::


</details>

## 第2問
* リンクを追加する
* リンクを押すとGoogleのトップページ( https://www.google.com/ ) に遷移する
* リンクとして表示する文字列は"グーグルへ遷移する"
* リンク先が別タブで開く用に指定する

<details><summary><b>正解</b></summary>

```html
<a href="https://www.google.com/" target="_brank">グーグルへ遷移する</a>
```
</details>

## 第3問
* 画像を追加する
* 画像の場所は相対パスでimgフォルダ内のabc.jpgを表示する
* 画像が表示できない場合は"画像が表示できません"の文字列を表示する

<details><summary><b>正解</b></summary>

```html
<img src="img/abc.jpg" alt="画像が表示できません"/>
```
</details>

## 第4問
* 順序無しリストを追加する
* 以下のリストを作成する
```text
・第１章
・第２章
・第３章
    ・前編
    ・後編
```

<details><summary><b>正解</b></summary>

```html
<ul>
    <li>第１章</li>
    <li>第２章</li>
    <li>第３章
        <ul>
            <li>前編</li>
            <li>後編</li>
        </ul>
    </li>
</ul>
```
</details>

## 第5問
* htmlタグ、headタグ、bodyタグを使用する
* ページで使用している言語が日本語であることを明示する
* ページのタイトルに「HTML学習ページ」にする
* このページの文字コードを「UTF-8」で指定する
* ページの中身は以下3行の文字列を表示します。<b>※カッコ内のスタイルになるタグを使用してください。</b>
```text
太字（太字）
Naname（斜字）
取消（「取消」に取消線を引く）
```

<details><summary><b>正解</b></summary>

```html
<!DOCTYPE html>
<html lang="ja">

<head>
    <title>HTML学習ページ</title>
    <meta charset="UTF-8" />
</head>

<body>
    <!--太字 -->
    <b>太字</b>
    <!--斜字 -->
    <i>Naname</i>
    <!--取消線 -->
    
取消

</body>

</html>
```
</details>

:::note alert
太字、斜字、取消線を適用させるために「正解」で使用しているタグは、HTML4.01以上では
スタイルを指定する用途での仕様は非推奨としています。
（スタイルを指定する場合にはCSSの利用が推奨されています。）
:::
Ubuntuパッケージをアップデートする方法

## はじめに
備忘録
タイトルの通りです。
Ubuntu 20.04 で確認しました。
どなたかのお役に立てれば幸いです。
## 手順
### Ubuntuの最新パッケージ一覧を取得
```bash
$ sudo apt update
```
### Ubuntuの最新パッケージの更新
```bash
$ sudo apt upgrade
```
:::note warn
$sudo apt dist-upgrade
というコマンドも存在します。
こちらでは不要なパッケージの削除やカーネル構成の変更まで行ってくれるようです。
:::
### 更新に伴い必要なくなったパッケージを削除
```bash
$ sudo apt autoremove
```
### Ubuntuの再起動
```bash
$ sudo reboot
```
## 補足
:::note warn
apt-getというコマンドも存在します。
Debian管理者ハンドブックによれば、aptはapt-getの設計上のいくつかの間違いを克服するとされており、また、apt-getではaptよりもアップグレードパッケージの選択規則の条件が厳しいようです。
詳しくは下のドキュメントを参照してください。
:::
https://debian-handbook.info/browse/ja-JP/stable/sect.apt-get.html

# ブログもあります
https://kyit.net/how-to-update-ubuntu-packages/