OmniAICreator/Qiita-1.07M huggingface dataset:
IBM SPSS Statistics の各バージョンのSystem Requirements

System requirementsは以下で検索をしますが、複数のバージョンを調べるのは手間なので一覧にしました。

https://www.ibm.com/software/reports/compatibility/clarity/softwareReqsForProduct.html

IBM SPSS Statistics 28.0.1.0

https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=BF80B5B0B40D11EB98685B20C883A7C9&osPlatforms=Linux|Mac%20OS|Windows&duComponentIds=D002|S001&optionalCapIds=380|7|47|22|72|186|223|26


IBM SPSS Statistics 28.0.0.0

https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=B3805D80CDCF11EA93439F07A1E03C14&osPlatforms=Linux|Mac%20OS|Windows&duComponentIds=D002|S001&optionalCapIds=380|7|47|22|72|186|223|26


IBM SPSS Statistics 27.0.1.0

https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=332FF150ED0911EA83919FA7900833F8&osPlatforms=Linux|Mac%20OS|Windows&duComponentIds=D001|S002&optionalCapIds=380|7|47|22|72|186|223|26


IBM SPSS Statistics 27.0.0.0

https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=7649E400E94511E9AB56C277546C6E01&osPlatforms=Linux|Mac%20OS|Windows&duComponentIds=&optionalCapIds=380|7|47|22|72|186|223|26


IBM SPSS Statistics 26.0.0.0

https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=A94643D0C45811E78F8FA93481EF6122&osPlatforms=&duComponentIds=&optionalCapIds=380|30|7|47|22|72|186|223|26


IBM SPSS Statistics 25.0.0.0

https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=DAE86200D8CC11E7AD0EC24C9513D95F&osPlatforms=Linux|Mac%20OS|Windows&duComponentIds=D002|S001&optionalCapIds=30|7|47|22|72|186|223|26
Crystalでblock_given?を使いたい場合、オーバーロードすればいい

Crystalでも `block_given?` を使いたいという意見があるが、なかなか実現するのは難しいようである。

https://github.com/crystal-lang/crystal/issues/1013

しかし、上のissueに書いてあるようにオーバーロードを使えば、`block_given?` でやりたい内容は実現できる場合がある。

```ruby
def initialize(a)
  @a = a
  if block_given?
    yield a
  end
end
```

みたいなコードは

```crystal
def initialize(@a)
end

def initialize(@a)
  yield @a
end
```

みたいな感じで書けばいいようだ。おもしろいのは、特にdefの宣言の行には変化がなくても、yeildがあるかなしかだけでCrystalがブロックの有無を判定してコンパイルしてくれるっぽいところである。

この記事は以上です。
GPIO とは

## 勉強前イメージ

ラズパイでよく見るやつ・・・だが？よくわかってないw
GPIOピンとかあった気がする

## 調査

### GPIO とは

General Purpose Input/Output の略で、日本語では汎用ポートと呼ばれています。
Raspberry Pi であれば40本のピンがあり、以下のいくつかの種類に分かれています。

- 電源供給用ピン : 電源の共有のためにピン
- GNDピン : グランドピン
- DNCピン : ユーザが使用できないピン
- I/Oピン : 汎用入出力用のピン

広い意味でいうと `GPIO` は上記のピンのことを指し、
狭い意味でいうと `GPIOピン` として、3番ポートのGPIO2ピン や 5番ポートのGPIO3ピン などがそれに該当します。
入力にも出力にも使えるので汎用として使用されています。

GPIOはRaspberry Pi 以外でも使われる一般的な名称になります。

## 勉強後イメージ

Arduino調べたときに出てきたから見てみた。
雰囲気知ってたけど、 `何でも使えるよピン` だったのか。

## 参考

- [GPIOとは？機能や使用例は？組み込み式プログラムでも利用](https://www.dospara.co.jp/5info/cts_str_pc_gpio)
- [ラズパイ（Raspberry Pi）のGPIOを再確認！　まずは汎用入出力からマスターしよう](https://deviceplus.jp/hobby/raspberrypi-gpio/)
OracleDBスキーマ内のテーブルをすべて消したい

# スキーマの中身をexpしておいたたものでそっくり入れ替えたい
impでデータをインポートするのだが、その前にスキーマの内容クリアが必要で、そのためにDrop UserしてCreate Userをよくしていた。
実はテーブルを消したほうが行儀が良いのでは？と思ってSQL作成。

```SQL:dropuserstable.sql
--set serveroutput on size 99999;
begin
	for cur in (select table_name from user_tables)
	loop
		--dbms_output.put_line(cur.table_name);
		execute immediate 'drop table ' || cur.table_name || ' cascade constraints purge';
	end loop;
end;
/
```

:::note warn
12cでやってたときに、データファイルのサイズが肥大する現象が発生した。原因は不明。ひょっとすると、上記のお行儀の影響があったのかな？と今では思うけど、未検証
:::
[備忘録]Laravel8系にMiniOを導入する際に躓いた

個人的な備忘録です。

## やりたいこと
Laravel8のsailにMniOを導入

## 躓いたこと
1. docker-compose.yml記述
1. ポート自動設定
1. リダイレクトループ

## 解決策
1. docker-compose.yml記述
    - `environment`の記述は下記の通り
        - `MINIO_ROOT_USER: ${自身で設定}`
        - `MINIO_ROOT_USER: ${自身で設定}`
1. ポート自動設定
    - docker-compose.yml内のminio定義で、`command`記述を下記にする
        - `["server", "/data", "--console-address", ":9001"]`
            - `/data`は以前、`/export`だった
            - `--console-address`オプションを付けないと自動でポートが設定される仕様に変更があった
1. リダイレクトループ
    - ポート自動設定と被るが、`/data`にしないといけなかった模様
    - 合わせてポート定義を1つから2つに増やした
        - `"9000:9000"`
        - `"9001:9001"`
    - 上記2つを同時に行うことで、リダイレクトループは無くなったが、どちらか片方だけでもいけたかもしれない。(未検証

## MiniO使い方
1. `http://localhost:9001`アクセス
1. ログイン
    - ログイン情報は自分で定義している(.envの`AWS_ACCESS_KEY_ID`等
1. メニューからバケット選択
1. Create Bucket+ボタン押下
1. 任意のバケット名を入力後Create Bucketボタン押下
1. バケットを作成後、laravel側で取得などの処理を記述
    - 取得例：

```
$directories = Storage::disk(self::STORAGE_DISK_S3)->directories();
```

## 参考
- [MinIOの管理画面にアクセスすると別ポートにリダイレクトされる件の解消](https://qiita.com/kawazu255/items/9b5104abf983514f2344)
- [MinIO のバージョンアップに伴い変更点があった](https://qiita.com/potdig/items/601aa883d87efbbbdc65)
- [LaravelでStorageでS3(minio)へアクセスする](https://qiita.com/reflet/items/44faf217efd66d83c4a7)
Nuxt.jsのstoreで他のモジュールのstateやmutationsを使用する方法

# はじめに
Nuxt.js storeをモジュールで使用するときに別のモジュールのmutationsやらstateを利用したくなって調べたのでメモを残します。
# 目次
<!-- タイトルとアンカー名を編集 -->
1. [AモジュールでBモジュールの値を参照する(state)](#Chapter1)
1. [Aモジュールから別モジュールのMutationsを使用](#Chapter2)
1. [参考文献](#reference)

<!-- 各チャプター -->
<a id="#Chapter1"></a>
# AモジュールでBモジュールの値を参照する(state)

**別のモジュールのstateを参照するパターン**

rootStateを使用

```js
// AモジュールからBモジュールを参照
export const actions = {
  add ({ rootState　}, hoge) {
    const bMosule = rootState.b.bState
    this.$axios.$patch(url+ 'post/' + selectedBook.id, {
      post: {
        // 送る値
      }
    })
      .then((response) => {　// レスポンス

```

addにrootStateでrootを読み込ませてroot経由でBモジュールの値を参照します。
直接Bモジュールを読み込むことはできないが、rootを経由すると参照可能になる。

× A → B.state

○ A → root → B.state



<a id="#Chapter2"></a>
# Aモジュールから別モジュールのMutationsを使用
**別モジュールのMutationsを使用**

**commitの第３引数に ``{root: true}``　を使用**

① rootのMutationsを使用

```js
// index.jsのalertを使える
commit('alert', true, { root: true })
```
第２引数にはいつも通り渡したい値をセットします。
今回の場合はrootのMutationsである``alert``を使用しています。


② BモジュールのMutationsを使用

```js
// BモジュールのbAlertMutationsを使える
commit('B/bAlert', true, { root: true })
```
root経由でBモジュールのMutationsを使用できます。


<a id="#reference"></a>
# 参考文献
- https://www.lancard.com/blog/2019/04/04/vuex_call_other_module_method/
- [Nuxt.js公式 モジュール](https://vuex.vuejs.org/ja/guide/modules.html)
- [Nuxt.js: storeモジュールから別のstoreモジュールのstateを参照する方法](https://qiita.com/hisashi_matsui/items/7cd872186a2b16e37ae1)
JavaでとりあえずWeb APIを叩く方法

## JavaでAPIを叩く方法でつまづいたので書き記す
とりあえず公開されているAPIを叩きたい人向け
もっといい方法ありそうですが書いておきます

## importするライブラリ
```java
import java.net.URL;
import java.io.*;
```

## コード
```java
        final String endpoint = "任意のURL";

　　　　　　　　　　　　　　　　// ここではkeyとidのパラメータが必要な場合を書きます。必要ない人は飛ばしてください。
        final String key = "パラメータ必要な人は";
        final String Id = "任意で";

　　　　　　　　　　　　　　　　// パラメータが複数ある人はidのように&で繋げてください。
        String url = endpoint + "?key=" + key + "&id=" + Id;
        URL obj = new URL(url);
        InputStreamReader　streamReader = new InputStreamReader( obj.openStream() );
        BufferedReader　bufferedReader = new BufferedReader( streamReader );
        String content = bufferedReader.readLine()
        System.out.println(content);
```
AWSクラウドプラクティショナーの存在を知ってから5日間で合格したので勉強法をメモ。

# はじめに
## この記事の対象
 - これからAWSの勉強をしようかなって方
 - 基本的なITの知識のある方（基本情報技術者レベル)  

## 受験時の筆者の状態
 - AWS?なにそれ美味しいの？
 - 転職活動中のニートです。
 - 基本情報技術者には合格しています。
 - 応用情報技術者には2点足りなくて一回落ちています。(まだ未取得)
 - ITエンジニア歴2年半の駆け出し。
 - 前職は組み込み系の開発会社に勤務していて、次はWEB系の会社に転職したい。

## 受験のきっかけ
転職活動中にさまざまな企業様とのカジュアル面談を通して、自身にWEB系の知識が少ないため、その足がかり兼転職への意欲アピールとして取得を勧められたのがきっかけです。
カジュアル面談前まではAWSの存在については知っていましたが、詳しい資格試験の内容については知りませんでした。
ちなみにプラクティショナーを選んだのは現在離職中であり、早く就職しないと生活できないので受験までに時間をかけられないためです。あと、私自身AWSの知識が皆無でしたが、ネット上で合格体験記を調べるとお仕事をされながら1週間程度で合格している方が多く、無職の私なら勝てると思いました。

## 試験の概要
 - 試験費用...11000円(税抜)(高い)
 - 試験日...試験を受けたい日の大体4日前くらいだと予約できる。(ありがたい)
 - 難易度...かなり低い。AWS関連資格の入門編に位置する。(詳しくは https://aws.amazon.com/jp/certification/)
 - 試験場所...全国のテストセンター、ピアソンVUE会場、もしくはリモート受験。(私はピアソンVUE会場で受験しました。)

## 教材
 - AWS認定資格試験テキスト　AWS認定 クラウドプラクティショナー Kindle版(以下テキストと記載します。)  
https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-AWS%E8%AA%8D%E5%AE%9A-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%BC-%E5%B1%B1%E4%B8%8B-%E5%85%89%E6%B4%8B-ebook/dp/B07QX45RXM/ref=tmm_kin_swatch_0?_encoding=UTF8&qid=&sr= 
 - 【2022年版】この問題だけで合格可能！AWS 認定クラウドプラクティショナー 模擬試験問題集（7回分455問）(以下Udemyと記載します。)   
 https://www.udemy.com/course/aws-4260/  

## 勉強方法について
 - 1~2日目　テキストを一周読む。章末問題も軽く読んで即答できるようにする
 - 3~4日目 Udemyの基礎、応用を全部テスト→復習→再テストして90点目安にする
 - 5日目 Udemyの基礎、応用を再度全てテストし、忘れている部分を再確認。96点くらいまで仕上げた(全コース)
 - 勉強時間は1日2時間程度+移動時間に教材見る程度

## 所感
- 試験範囲自体はそこそこ広いが、各サービスの内容さえ覚えておけばなんとかなる。
- 情報処理試験とは違い、全く同じ過去問はほぼ出ないため、ちゃんと本質を理解した方がいい(問題文覚えるのは良くない)
- 難易度はそこそこ低い。(65問出題で70%取れれば合格。大体46問正解すればいいはず。点数の内訳が不明のため配点に偏りはあるかも。)
- 学習はデジタルで完結させたいため、iPadとPCで行った。PCでテキスト(Kindle)やUdemyを表示して、iPadで手書きノートを作成。出先や試験会場までの移動中はiPadで確認するなどした。

# 今後について
次はAWSソリューションアーキテクトアソシエイトに挑戦します。
お仕事が決まればですが。
2022年は応用情報技術者試験のリベンジと、DBスペシャリストも受験予定です。
趣味でやってる競プロ(Atcoder)にハマりそうなのでそちらもまずは緑になりたい。
またそれぞれ達成できれば記事にできればと思います。
ここまで読んでくださってありがとうございました！
docker-composeコマンドでdockerをxserverに繋げる

#1. 問題

単純にdockerで環境を作成すると、当然のことながらxserverも何も入っていないので、docker内部でエディタを起動したりGUIを起動しても表示されない。そこでdockerでx11-forwardingを行って、自分の画面にdocker上で動いているアプリケーションの画面を出力させたい。

#2. 方法

答えは以下のページの通り。

https://stackoverflow.com/questions/54524747/connect-to-x11-server-from-docker-without-xhost-but-with-xauth

docker-compose.ymlを次のように書けばよい(引用、versionのみ変更)

```yml
version: '3'
services:
  test:
    build: .
    command: /bin/bash
    environment:
      DISPLAY: $DISPLAY
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix
      - ~/.Xauthority:/root/.Xauthority
    network_mode: "host"
``` 

volumesでx関連のものを指定し、network_modeで"host"を指定すればよい。

#3. dockerへのアクセス方法

上記のような場合、docker内部へアクセスするには次のようにうてばよいと思われる。

```sh
docker-compose exec ${container_name} /bin/bash
```

コンテナの名前を指定すればよいので、上記の例では、例えば```container_name="test"```のようになる。またこの例ではbashが開かれる。
覚えたことシリーズ２

Migrations are pending. To resolve this issue, run: bin/rails db:migrate RAILS_ENV=development
のエラーが出たら、migrationが保留中という意味
→ rails db:migrate をターミナルで実行
これでダメなら
→rails db:create
rails db:migrate
rails s を実行

このエラーの理由：rails g model ~の後にmigrationを実行していない
マイグレーション：データベースのテーブルを設計すること
モデルを作ったら、マイグレーションもセット
普通科から専門学校に進学したら

入学して
題名通り私は普通科の高等学校からIT系の専門学校に入学しました。
入学して最初の頃はとてもワクワクしていて授業についても基礎的な知識を学んでいたので勉強面では余裕もありました。
しかし、入学して二ヶ月が過ぎる頃から次第にワクワクが不安に変わり始めました。
プログラミング、アルゴリズムという大きな壁にぶつかりました。周りのクラスメイトとの差を実感するようになりました。
学校から課される試験には合格し国家試験の午前免除などは得られるようにはなりますが、技術的な面は周りに離されていきました。不安なまま夏休みに突入しました。
案の定、課題は思うようにはかどらず、自分の勉強はあまりできないまま、国家試験まじかになりました。
かなり手探りなまま国家試験の午後勉強をしました。
勉強方法は過去問道場を活用しました。
プログラミングやアルゴリズムに関しては考えるのに時間をかけすぎず回答や学校の先生の解説を参考にし流れを掴むやり方で、他は基本的には暗記で、それに関しても効率重視でペンは使わないで、音読の反復で勉強しました。その結果不合格。
自分自身でも当然のことだと思いました。勉強期間が短くそれに加え、計画通りにも勉強ができていませんでした。
勉強法の改善
暗記系に関してはこれからも基本は変えるつもりはなく、それに加えて、メモを取り自分なりに分かりやすくまとめようと思いました
プログラミングとアルゴリズムに関してはまだ、手探りですが根本を分かるようにならなければ、類似や過去問は解けても初見問題は全く歯が立たなかったので理解に時間を割こうと思いました
これからは
クラスメイトと同じ勉強量では離されていくばかりなので、これからは少しでも多く勉強量を増やし効率よく勉強できるようにしなければらない。それに加えて勉強しない日を作ってはいけないんだなと改めて実感した。
しっかり知識が定着するように疲れていても息抜きしているときも勉強に励みたいと思う。
最後に
まず、専門学校に意図しなく入学が決まった時はその学校の情報を集め、予習した方がよい。
次に、勉強面に余裕ができても慢心せず次のステップに進むことが大事だと思った。
そして、例え試験に合格でも不合格でもしっかり勉強に励むこと、これが大事だと思った
firestoreをエクスポートしてjsonに変換する

##　注意

Apple Silicon Mac Venturaで実行したところエラーとなる😭
Windows WSL+Ubuntuで実行したところうまくいった
2023/4/21追記

## firestoreをCloud Storageにエクスポートする

以下を参照
https://firebase.google.com/docs/firestore/manage-data/export-import?hl=ja#export_data
GCPのコンソールでボタンポチが簡単。

## Cloud Storageをローカルにコピーする
![スクリーンショット 2022-01-13 8.54.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82563/9dfb0567-bacb-0f95-b1a2-c314a85cc8d5.png)
チェック入れて「ダウンロード」を押下すると、↓コマンドが表示される

```
gsutil -m cp -r [Cloud Storageバケット] .
```

## ローカルにダウンロードしたleveldbをJSONに変換する

これを使う↓

https://github.com/labbots/firestore-export-json

#### ZeroDivisionError: division by zero が発生した
ただの経過ログのところだったので、とりあえず

```
    print(
        f"progress: {num_files_processed.value}/{num_files.value} {num_files_processed.value/num_files.value*100}%"
    )
```
↓

```
    if num_files.value > 0:
        print(
            f"progress: {num_files_processed.value}/{num_files.value} {num_files_processed.value/num_files.value*100}%"
        )
```

Issue書いておいた
https://github.com/labbots/firestore-export-json/issues/10

すると、こんな感じで出力される

![スクリーンショット 2022-01-13 9.07.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82563/c794c289-b665-a3ec-6f68-e59cb12433e4.png)
【Laravel8】DBクラスとクエリビルダとEloquentの違いについて

# 概要と当初の疑問
SQL歴10年以上、Laravel歴半年くらいです。
Laravel（に限らずWebフレームワーク全般）でSQLを操作するときに一番最初に思った疑問が
**なんでSQL直接書かないの？** でした。
個人的な所管を書いておこうと思います。

## 結論
データベースから取得したデータは結局PHPで処理するので
最初からPHPで扱いやすいようにクラスが用意されている。

## DBクラス
- DBクラスとはLaravelで用意されている最も手軽にDB操作するためのクラスである。
- 以下の様にselect/update/deleteメソッドを使い、SQLをほぼそのまま書く。SELECTの戻り値はテーブルのカラム名が名前になった連想配列。

    ```php
    $items = DB::select('select * from posts where id = :id', $param);
    DB::update('update posts set title = :title , body = :body where id = :id',$param );
    DB::delete('delete from posts where id = :id', $param);
    ```
- DBクラスはSQLを直接書くため、1文字でも間違えているとエラーになったり、パラメータ結合だと実行してからでないとエラーが分からないなどバグが多くなるらしい。またセキュリティ的にもパラメータを直接埋め込むためSQLインジェクションの危険性も高い。
- 開発的にはphp内にSQLという別の言語が混じるのもコーディングしずらいらしい。（私はSQL直の方が全然分かりやすかったですが、郷に入っては郷に従えということで…）

## クエリビルダ
- SQLクエリをphpチックに書くDBクラスの中のメソッドたち。
- 以下の様にtableメソッドに様々なメソッドをチェーンして(つなげて)書く。
- SELECTの戻り値はコレクションであり、Laravelの１つのクラスオブジェクトである。なのでメソッドをチェーンして書くことができる。

    ```php:
    $items = DB::table('posts') // ←SQLクエリをビルドしている
        ->where('title', 'like', '%' . $request->word . '%') // ←SQLクエリをビルドしている
        ->orwhere('body', 'like', '%' . $request->word . '%') // ←SQLクエリをビルドしている
        ->get(); // ←クエリをExecuteしている
    ```

## Eloquent
- DBクラスよりもっとphp内で使いやすくしたのがEloquentという。
- ORMとはObject-Relational-mapppingの略で、DBとphpのクラスという異なる構造のデータをphp的にするための仕組みのこと。PythonとかRubyの各言語でも同様の仕組みがある。
- LaravelのORMはEloquentというクラスを使用する。
- Eloquentではモデルというクラスを使ってDBを操作する。
- テーブル＝モデルの関係であるため、phpのインスタンスを操作する感覚でテーブルを操作でき、SQLも作成できる。
- こいつのなにがいいのかというと、例えば`post::all()`などで返ってくる値は配列ではなくモデルクラスのインスタンスなので、クラスを拡張することで独自メソッドを追加することができる。
- 固定で取得してくる項目などを独自メソッドとして定義しておけばそのメソッドを呼ぶだけで固定の複数項目を取得できる。**いろんなところで同じロジックを書かなくてよくなるため再利用性が高まる。**

これからも疑問に思ったことを自分の備忘録的に書いていこうと思います。
django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")

# 目的
djangorestframeworkを利用してAPIを作成しようとした.
既存のsqliteではなく、MySQLを使ってみようと思い、```python manage.py runserver```を実行してみた。

すると下記のエラーに苦しめられた。

```
Can't connect to local MySQL server through socket '/tmp/mysql.sock
```


# 結論
```
Can't connect to local MySQL server through socket '/tmp/mysql.sock
```
このエラーは

```console
$ mysql.server start
```
で解決できた。

# 実施環境
### ハードウェア環境
| 項目 | 情報 |
|:-:|:-:|
| OS  |macOS Catalina(10.15.7)   |
|ハードウェア   |  MacBook Air (11-inch, Early 2015) |
|プロセッサ   | 1.6 GHz デュアルコアIntel Core i5|
|メモリ   |  4 GB 1600 MHz DDR3 |
|グラフィックス   |  intel HD Graphics 6000 1536 MB |
### ソフトウェア環境
| 項目 | 情報 |
|:-:|:-:|
| homebrew  | 3.3.8 |
| mysql | Ver 8.0.27 for macos10.15 on x86_64 |
| python  | 3.8.12 |
| django  | 3.0.0 |
| anaconda  | 4.10.1 |
| pip  | 21.2.4 |

# 原因究明
```Can't connect to local MySQL server through socket '/tmp/mysql.sock```
こちらのエラーを日本語に直して考えてみると、socketを通してMySQLサーバーにアクセスできないと言っている。

必要な設定などは済んでいるのになんでだろう。
[この記事](https://cortyuming.hateblo.jp/entry/20130702/p2)などを参考に、djangoのsettings.pyを変更などして```python manage.py runserver```をもう一度を実行するもエラーに苦しめられる。

しかしよく考えるとMySQLを接続するのにMySQLを起動しているのか？と気づいた。
[ここ](https://stackoverflow.com/questions/16325607/cant-connect-to-local-mysql-server-through-socket-tmp-mysql-sock#:~:text=For%20me%20the%20problem%20was%20I%20wasn%27t%20running%20MySQL%20Server.%20Run%20server%20first%20and%20then%20execute%20mysql.)で指摘されているように、MySQLの起動ができていなかった。

```console
$ mysql.server start
```
を行い、MySQLを実行した後にもう一度

```
python manage.py runserver
```
を実行する。
MySQLにログインする。

```
mysql -h localhost -u root
```
成功。


# 参考
[Django の runserver 立ち上げたら "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)" とかなる場合のメモ](https://cortyuming.hateblo.jp/entry/20130702/p2)
[Can't connect to local MySQL server through socket '/tmp/mysql.sock](https://stackoverflow.com/questions/16325607/cant-connect-to-local-mysql-server-through-socket-tmp-mysql-sock#:~:text=For%20me%20the%20problem%20was%20I%20wasn%27t%20running%20MySQL%20Server.%20Run%20server%20first%20and%20then%20execute%20mysql.)
【営業向け】GASを用いて不要なメールを自動削除するスクリプト


##やりたいこと
googleアラートって使ったことありますか？

https://www.google.co.jp/alerts

かなり便利なサービスでキーワード登録をしておけば、そのキーワードに引っかかるネット上の記事を毎日自動で配信してくれるというサービスです。
以下のキャプチャのように毎日ニュースが届きます。
営業マンであれば担当している業界や、お客様のニュースなどを日々収集する必要がありますので、使っている人も多いかなと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271600/70cf73b1-c0a5-6eb5-0ba3-0457f4cecb86.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271600/c73c5416-1d70-65c7-5f8a-a1f5f10175d1.png)

非常に便利ではあるのですが、不要なメールがメールボックスにたまっていってしまいますので、自動で削除することができないかなと思いまして、今回スクリプトを作成してみました。


##完成形

```javascript
function myFunction() {

  var deleteEmails = GmailApp.search("label:グーグルアラート");

  deleteEmails.forEach(function(email){
    email.moveToTrash();
  });
}
```

難しいことは考えずに、
1:　条件に一致するメールの一覧を配列で取得する
2:　配列をループ処理で削除する

という処理をしています。
新IDE本当に便利になったなと思うのですが、Gmail.search()といった感じで入力をするとメソッドの使い方のガイドが出るようになっています。　

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271600/61d66c0b-e971-dae6-ef34-c8bdcaddaf7d.png)

これ実はSearchに関して解説している公式のドキュメントの内容がIDE上に出るようになっているみたいですね。

https://developers.google.com/apps-script/reference/gmail/gmail-app#searchquery


```
the search query, as you would type it into Gmail
```

と書いてありますので、どうやらGmailの検索ボックスに入力する文字列を入れてあげれば使えるよということみたいです。ご丁寧にサンプルコードまであります。クエリは以下の画像の部分になります。私の場合はグーグルアラートというラベルが自動で付与されるように設定していますので、『label:グーグルアラート』をいれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271600/ba711a5c-c744-4816-09ec-7d5fbcab29fd.png)

すると、検索条件に引っかかるメールが配列で返ってくる仕様のようなので、あとはループ処理の中でメソッドを呼び出してあげることになりますが、適当にmoveと入力すると現在使えるメソッドの候補が出てきます。快適すぎます笑

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271600/ab74df00-69df-517d-eacc-f83a03432bf6.png)

そしてmobeToTrashを選択すると使い方がまたさらに出てきます。なんかほぼネットで調べずに感覚でプログラミングができるようになっていますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271600/93014d55-0b28-786e-3d23-479721220f6e.png)
Tinkerを用いて複数のレコードをdeleteする方法

#はじめに
Laravel8で開発中、誤って登録した複数のダミーデータをTinkerを用いて一括でdeleteしようとした際、ハマってしまったため、解決策をまとめました。

#複数のレコードをdeleteする方法
##前提：tinkerを立ち上げる。
artisanコマンドで行います。

```
php artisan tinker
```

上記を実行するとtinkerが立ち上がります。

##①deleteしたいレコードの取得
idを指定してデータを取得します。

```
$data(任意) = App\Models\Data(モデル名)::find[1, 2](指定するid)
```

上記を実行すると$dataにid:1,2のデータを代入でき、代入された内容について表示されます。

##②指定したレコードの削除

```
$data->each->delete()
```
上記を実行すると①で取得したデータを消去することができます。

#おまけ

```
$data->delete()
```

レコードが1件の場合は上記を実行すると消去することができますが、
レコードが複数件の場合はdelete method does not exitのような(うろ覚えですみません)エラーがでます。
Spring boot Applicationを作る話

Spring Bootの基本的な部分Helloを作る部分をまとめておきたいと思います

ソース : https://github.com/wataru775/example.springboot.hello

# はじめに
超シンプルな話で、Spring Bootを使い方をまとめておきます。

今回はシンプルなアプリケーションでHelloを書き出します。

実行可能なjarで出すことも可能な感じです

# ソース
サービスソース
ソースは超シンプルにロガーにhello文字列を吐き出します

ソース : https://github.com/wataru775/example.springboot.hello/blob/main/src/main/java/example/springboot/hello/services/HelloService.java

```java
@Component
public class HelloService {
    /**
     * Logger
     */
    private final Logger logger = LoggerFactory.getLogger(HelloService.class);
 
    /**
     * Helloを書き出す
     */
    public void say(){
        logger.info("Hello!");
    }
}
```

単純でしょ、標準出力の場合はロガー出力を

```java
logger.info("Hello!");
```
標準出力

```java
System.out.println("Hello!");
```
に書き直してください。

# 呼び出しソース
先ほど作成したコンテンツを実行します

ソース : https://github.com/wataru775/example.springboot.hello/blob/main/src/main/java/example/springboot/hello/Application.java

```xml
public static void main(String[] args){
    // Spring boot Applicationの実行
    ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
    // Componentの取り出し
    HelloService service = context.getBean(HelloService.class);
    // サービスを実行
    service.say();
}
```

ポイントはコンテキストを引っ張ってきて、Beanを引っ張ってくるわけです。（ここでは、あんまり使わないかな？）
それ以外ないので略

定義ファイル(pom.xml)
はい、ハローワールドということで定義ファイルを紹介します

ソース : https://github.com/wataru775/example.springboot.hello/blob/main/pom.xml

定義ファイルのポイントとしては、あんまりありませんが、「spring-boot-starter」を使っています。
例としてよく使われる「spring-boot-starter-web」ではありません。動くかもしれませんが

あとは… ま、わかるでしょう

実行してみる
実行はシンプルです。

```bash
$ mvn spring-boot:run
 
... いろいろあって ...
 
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.2)
 
2022-01-05 22:06:00.006  INFO 74610 --- [           main] example.springboot.hello.Application     : Starting Application using Java 13.0.1 on 。 with PID 74610 (./example.springboot.hello/target/classes started by wataru in ./example.springboot.hello)
2022-01-05 22:06:00.008  INFO 74610 --- [           main] example.springboot.hello.Application     : No active profile set, falling back to default profiles: default
2022-01-05 22:06:00.356  INFO 74610 --- [           main] example.springboot.hello.Application     : Started Application in 0.739 seconds (JVM running for 0.983)
2022-01-05 22:06:00.359  INFO 74610 --- [           main] e.s.hello.services.HelloService          : Hello!
```

Hello!が表示されればちゃんと実行されていいます。

実行可能なjarの作成は

```bash
$ mvn package
```

にて作成可能です。

実行は…

```bash
$ java -jar target/example.springboot.hello.jar
```
です。

# 終いに
今回は超簡単な部分のhello worldをまとめました。ってか、次に移る前に押さえておきたかっただけです。

次回は本来まとめておきたかったTask(Scheduled)ですね



出典 : https://www.mmpp.org/archives/2610
Denoは全てのコードをstrict modeで実行する

## strict modeとは何か

非ES ModulesのJavaScriptでは、ファイルの先頭や関数の先頭に`"use strict"`という記述を行うことで、**strict mode**が有効になります。

```ts
function log(val) {
  "use strict";
  console.log(val)
}
```

このstrict modeは以下のような効果があります。

- 存在しない変数への代入をエラーとして扱う
- with文の削除
- 8進数表記を禁止
- 予約語の追加
- eval内で宣言した変数のスコープ
- などなど

strict modeは、後方互換性のために排除できなかった、挙動に問題がある構文を排除し、将来の言語の拡張や動作の高速化に対応するものです。
（たまに後方互換性を排除してJavaScriptをイチから作り直してほしいという人がいますが、strict modeが実質それだと考えられます。）

このstrict modeですが、**ES Modules**ではデフォルトで有効になっています。


## Deno と ES Modules と strict mode

Denoでは全てのコードが**ES Modules**として実行されます。
ES Modulesの場合、全てのコードがstrict modeとして実行されます。

> モジュール内部で定義されたスクリプトの動作は、通常のスクリプト内部のものと異なるかもしれません。これは、モジュール内部では自動的に Strict モード が使われるからです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Modules#other_differences_between_modules_and_standard_scripts

よって、Denoで動作するコードは**全てstrict mode扱い**になります。

```ts
function log(val) {
  // "use strict"が無くても自動的にstrict modeになる
  console.log(val)
}
```

このため、Denoでは非strict modeで使えていたwith文などの古い構文を使うことができません。

## TypeScript の strict オプションもデフォルトで有効

TypeScriptにもstrictオプションが存在します。**TypeScriptのstrictオプションはstrict modeとは別物**なので注意してください。

TypeScriptのstrictオプションは型チェックを厳格にするものです。

[公式マニュアル](https://deno.land/manual@main/typescript/configuration)によると、Denoではstrictオプションがデフォルトで有効になっています。
これを無効化するには、deno.jsonかtscofig.jsonに設定を記述した上で、実行時にコマンドライン引数で渡します。

```json:tsconfig.json
{
  "compilerOptions": {
    "strict": false // デフォルトではtrue
  }
}
```

```shell
> deno run --config ./tsconfig.json main.ts
```

:::note alert
tsconfigのオプションはライブラリを含め、コード全体に適用されることに注意してください。

例えば「実験的なデコレータ」（experimentalDecoratorsオプション）を有効にした上でライブラリを作成してしまうと、そのライブラリのユーザーは全てのコードをexperimentalDecoratorsオプション付きで実行する必要があります。
一方で、「実験的なデコレータ」の代わりに「ES標準デコレータ」というものが数年後に導入される予定があります。使用しているライブラリの中に一つでもexperimentalDecoratorsが含まれる場合、他のライブラリがES標準デコレータを使うことができなくなるため、ES標準デコレータへのアップデートが妨げられます。

カスタムのtsconfigを使用する場合、このような将来的な後方互換性問題が発生する可能性が高く、それなりの覚悟が必要です。
:::

## まとめ

- Denoは全てのコードをstrict modeで実行する
- TypeScript の strict オプションもデフォルトで有効になっている
Spring Bootでwebアプリを作る話 

Spring bootでwebアプリの使い方ってどうだったっけ？

と思って作り方を思い出してみました。

GitHub : https://github.com/wataru775/example.springboot.web/tree/0.helloworld

```java
@Controller
public class RootController {
    @RequestMapping("/")
    @ResponseBody
    public String index() {
        return "Hello World!";
    }
}
```

これだけですねw

ただ、定義が…

POM.xmlが…

```xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>org.mmpp</groupId>
    <artifactId>example.springboot.web</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>11</java.version>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <spring-boot.version>2.6.2</spring-boot.version>
    </properties>
 
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.2</version>
    </parent>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>
```

ライブラリを追加だけです

```xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
```

それだけですね。

覚書です

## ついでにの覚書
mavenの依存を書いた時にIntelliJ IDEAで反映させるには
pom.xmlを右クリックで[MAVEN] > [Reload Project]
です…
これだけで悩みました

作業対象 : IntelliJ IDEA 2021.3.1


出典 : https://www.mmpp.org/archives/2688
AWS Cloud Practitioner について勉強してわからないことをまとめた ~モジュール４~

## はじめに
[「AWS Cloud Practitioner について勉強してわからないことをまとめた ~モジュール3~」](https://qiita.com/dai_chi/items/659dfb9fe4f612561166)の続きです。

過去投稿分
[「AWS Cloud Practitioner について勉強してわからないことをまとめた ~モジュール１~」](https://qiita.com/dai_chi/items/9744c7935d00206ffc3a)
[「AWS Cloud Practitioner について勉強してわからないことをまとめた ~モジュール2~」](https://qiita.com/dai_chi/items/7c8620adb0b4478f8832)
[「AWS Cloud Practitioner について勉強してわからないことをまとめた ~モジュール3~」](https://qiita.com/dai_chi/items/659dfb9fe4f612561166)

参考：[AWS Cloud Practitioner Essentials(Japanese)](https://explore.skillbuilder.aws/learn/course/1875/play/27620/aws-cloud-practitioner-essentials-japanese-ri-ben-yu-shi-xie-ban)

## Amazon Virtual Private Cloud(Amazon VPC)
AWSリソースに対する境界を確立するために使用できるネットワークサービス。
AWSクラウドに独立したセクションをプロビジョニングできる。
### インターネットゲートウェイ
インタネットからパブリックトラフィックをVPCに渡すためには
インターネットゲートウェイをVPCにアタッチする。

#### VPCにプライペートリソースのみが含まれている場合はどうするか。
###仮想プライベートゲートウェイ
仮想プライベートゲートウェイの例
インターネットは、自宅とコーヒーショップの間の道路のようなイメージ。
ボディーガードに警護されながらこの道路を移動しているとします。
他のお客様と同じ道路を利用してはいますが、保護は強化されています。

ボディーガードは、周辺の他のリクエストすべてに対し、あなたのインターネットトラフィックを暗号化（または保護）する仮想プライベートネットワーク(VPN)接続のようなものです。

### AWS Direct Connect
データセンターとVPCの間に専用のプライベート接続を確立できるサービス

コーヒーショップ直結の道路があるアパートがあって、この道路が利用できるのはアパートの住人のみ

## サブネットとネットワークアクセスコントロールリスト
### サブネット
セキュリティまたは運用のニーズに基づいてリソースをグループ化できるVPC内のセクション。
サブネットはパブリックに設定することも、プライベートに設定することもできる。

- パブリックサブネット
オンラインストアのウェブサイトなど、一般公開されているリソースが含まれる。

- プライベートサブネット
個人情報や注文履歴を含むデータベースなど、プライベートネットワークを介してのみアクセス可能なリソースが含まれている。

### VPC内のネットワークトラフィック
パケットからサブネットへのアクセス許可をチェックするVPCコンポーネントは
ネットワークアクセスコントロールリスト（ACL）という。

## ネットワークアクセスコントロールリスト（ACL）
サブネットレベルでインバウンドトラフィックとアウトバウンドトラフィックを制御する
仮想ファイアウォール。

### ステートレスパケットフィルタリング
処理情報が保存されないため、パケットはサブネットの境界（インバウンドとアウトバウンドの双方向）を出入りするたびにチェックをする。
パケットの Amazon EC2インスタンへのアクセス許可をチェックするVPCコンポーネントはセキュリティグループである。

## セキュリティグループ
Amazon EC2インスタンスのインバウンドトラフィックとアウトバウンドトラフィックを制御する仮想ファイアウォール。
デフォルトでは、セキュリティグループはすべてのインバウンドトラフィックを拒否し、全てのアウトバウンドトラフィック許可する。
ユーザーはカスタムルールを追加して、許可または拒否するトラフィックを設定できる。

### ステートフルパケットフィルタリング
受信パケットに対して行われた以前の処理情報は保存される。

>そのリクエストに対するレスポンスがインスタンスに返されるとき、以前のリクエストの情報がセキュリティグループに保存されています。この場合、セキュリティグループは、セキュリティグループのインバウンドルールに関係なく、レスポンスの通信を通過させます

## グルーバルネットワーク
### ドメインネームシステム（DNS）
インターネットで電話帳と同じ役割を果たす。DNS解決は、ドメイン名をIPアドレスに変換するプロセスです。

### Amazon Route 53
Amazon Route 53はDNSウェブサービスです。
AWSでホストされているインターネットアプリケーションにエンドユーザーをルーティングするための信頼性の高い方法を開発者とビジネスに提供する。

ユーザーからのリクエストを、AWSで実行されているインフラストラクチャに接続、また、ユーザーをAWS外のインフラストラクチャにルーティングすることもできる。

もう１つの機能は、ドメイン名のDNSレコードを管理すること。
ユーザーは新しいドメイン名をRoute 53に直接登録できる。

## 注意
自己学習のために割愛している部分があるので
公式も合わせてご確認ください。
[AWS Cloud Practitioner Essentials(Japanese)](https://explore.skillbuilder.aws/learn/course/1875/play/27620/aws-cloud-practitioner-essentials-japanese-ri-ben-yu-shi-xie-ban)

参考書籍： [図解即戦力　Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書](https://amzn.to/32Srimi)
[Xcode]括弧内の範囲を確認したい時

#概要
VisualStudioなら括弧を色分けする便利な機能がありますがXcodeには残念ながらありません。
#本文
少し手間ですが、最初の括弧か最後の括弧にマウスカーソルを重ねてダブルクリックをすると括弧の中身が選択状態になるので確認しやすくなります。
![スクリーンショット 2022-01-13 8.05.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/bdabdb6d-eef8-29fd-4de7-50a51ffabde8.png)

#補足
デフォルトの配色では選択範囲の色が濃すぎたり薄すぎたりして見づらい時もあります。

Xcode > Preferences > Themesタブ > ウィンドウ下側のSelectionで見やすい色に調節するとだいぶ快適になります:sunny:
Qiita Daily Survey memo 2021.01.13

# Qiita Daily Survey memo 2021.01.13
Qiita の記事を可能な限り毎日読むために、読んだmemoを公開することでモチベーションを維持しようという試み。

## [色々な会社・エンジニアのまとめ of まとめ](https://qiita.com/e99h2121/items/8773ef78613ab8214dfc)
Nobuko YAMADA さん (e99h2121) の記事。
会社資料や研修資料をまとめてくれた記事・サイトをまとめてくださった記事です。
サーベイ力本当にすごい…助かります。
Qiitaのデイリーランキングを毎日見れていないですが…こつこつ習慣化して幅広く見れるようになりたいです。

## [急なTypeScript案件🔥最初の30日間に使い倒したい「コードリーディング支援ツール」](https://qiita.com/suin/items/68e9ba8b8906c6d36e29)
suin@TypeScriptが好き さん (suin) の記事。
Twitter でのアンケートをと一緒に、TypeScript にアサインされた場合のおすすめを共有してくださっている記事です。
TypeScript プロジェクトに限った話ではないと思いますが、すでにスキルを持っていることを前提にプロジェクトにアサインされるというケースは少ないと感じていました。
しかし、アンケートに如実に合わられていると、立ち上がりが大事…というのを痛感させられます。
記事内で紹介されている「TypeScript解読アシスタント」について、確かにこんなサポートツール（アドイン？）があれば、合流もしやすそう…と感じました。

## [エンジニアにおける"難しい人"への対処法](https://qiita.com/muumu/items/1da55b3c8760cec6d25c)
muumu さんの記事。
お正月に読んで気になっていたのですが、本日参照されていたため改めて読みました。
コミュニケーションがあまり得意ではなく、胸が痛くなる部分もあり、「今年の目標を決めるのに読んでおけばよかった」という感想とともに「もう一回考えよう」と思いました。
自戒の意味もそうですが、後半に記載されている「難しい人に対する対処法」も参考になりました。
実際、私の周りで超攻撃的な人が新人や若手の教育をしてやめて行ってしまう、求職に追い込まれてしまうというのを何件も目にしています。
コメントも合わせて拝見させていただき、大変参考になった記事です。ありがとうございました。
[Cyrix 486SLC] HIMEMがA20エラーで立ち上がらない時の対処法

# 想定される状況

1. NEC版 MS-DOS 5.0Aを使用していて
2. 286機にCyrix 486SLCのCPUアクセラレータが載っていて
3. CバスにEMSメモリが載っていて
4. HIMEM.SYSを読み込んだ時にA20エラーが出る

# EMM386も一緒に読み込みたいとき

メモリメーカー純正のメモリマネージャか、或いはフリーのメモリマネージャも使用できます。

例:

* LunarEMM
http://hp.vector.co.jp/authors/VA037191/Pt/index_/lemm.html

* VEM486
https://www.vector.co.jp/soft/dos/hardware/se025675.html

あるいはEPSON版MS-DOS 5.0からHIMEMとEMM386を持ってきて上書きしても使用できます。

# HIMEMのみで運用したい場合 (EMM386を読み込まない)

EMM386を意図的に読み込まないという事はWindows 3.xを使うのでしょうか？

解決方法は一つだけあります。EPSON版MS-DOS 5.0を使用する事です。

EPSON版MS-DOS 5.0からHIMEM.SYSのみを持ってきて上書きしても解決します。

（あわせてEMM386も上書きしておくと良いです）

# まとめ

EPSON版MS-DOS 5.0を用意すれば解決する

おわり
【Docker】amazon linux2にnginxを入れてwebで表示する方法

【前提】
Dockerのインストールがされている。

###①Docker hub より"amazon linux"のimageを取得する

```
docker pull amazonlinux
```

###②取得したimageより"amazon linux"のコンテナを制作する

```
docker run --name test-amazonlinux -it -p 8080:80 amazonlinux:2 /bin/bash 
```

※localhost:8080を仮想環境の80番アクセス(http)にポートフォワードしている。

###③コンテナのbashで作業する
※主にNginxのインストール

```
yum update -y
amazon-linux-extras install -y nginx1
nginx →このコマンドを打つことでwebでアクセス可能になる。
```


#番外編

上記の設定をDockerfileにまとめてみた。

```
FROM amazonlinux:2

LABEL version="1.0"
LABEL description="amazonlinux2にnginxを入れて立ち上げ"

#install packeges
RUN yum -y update
RUN amazon-linux-extras install -y nginx1.12

CMD ["nginx", "-g", "daemon off;"]
※↑これを記述しないとcontainerを立ち上げたと同時にnginxがうまく起動しない
```
【Rails】mysql2のインストールができない場合の対処法【MySQL】

## はじめに
　本記事は、プログラミング初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
　そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
　間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

##mysql2のインストールができない場合の対処法

###環境
OS: MacOS Big Sur 11.6.1（M1 mac）
Ruby: 2.7.5
Rails: 5.2.6
MySQL: 5.7（8.0でも確認しました。）

###状況
データベースをMySQLに指定した上で`rails new`をした後に`bundle install`をしても以下のような文章が出力され、インストールできませんでした。
また、インストールができても`rails s`をした際に`Load Error`が出てしまう状況でした。

```
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lzstd
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/taichi/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3 for inspection.
Results logged to
/Users/taichi/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/extensions/x86_64-darwin-21/2.6.0/mysql2-0.5.3/gem_make.out

An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
mysql2

```

### 解決した方法
私の場合には、以下の方法で解決しました。

```
openssl@3とzstdをインストール
$ brew install openssl@3 zstd

openssl@3のパスを通す
$ echo 'export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"' >> ~/.zshrc

LIBRARY_PATHにzstdを追加する
$ export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix zstd)/lib

ld-flags に openssl@3/libを追加する
$ bundle config --local build.mysql2  "--with-ldflags=-L$(brew --prefix openssl@3)/lib"
※.bundle/configに
　  BUNDLE_BUILD__MYSQL2: "--with-ldflags=-L/opt/homebrew/opt/openssl@3/lib"
  と記述されているのを確認する。

bundle installする
$　bundle install

```
Nginx Plus ダッシュボードを利用してみました。

Nginx Plusのダッシュボード機能を利用するための備忘録です。 
せっかく共有ゾーンとか作りましたので、どんな感じで見れるのかを確認したいと思います。

## 1. Nginx設定変更

nginx.confの内容を修正します。serverディレクティブに下記のように設定を差し込みます。

```bash
vim /etc/nginx/nginx.conf
    server {
        # ～～省略～～
        location /api {
            api write=on;
        }
        location = /dashboard.html {
            root /usr/share/nginx/html;
        }
        location / {
            proxy_pass http://backend/example/;
        # ～～省略～～
:wq
nginx -t
systemctl restart nginx
```

「location /api～」の部分はAPIを使用してアップストリームグループを再構成したり、収集された統計のセットをクリアしたりする場合のパラメータのようです。
「location = /dashboard.html」はダッシュボードをページの実体ですね。 

## 2. ダッシュボードへのアクセス

では、ダッシュボードへアクセスします。
*https://ipaddress/dashboard.html*
<img width="800" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/d68905dd-8584-046c-cdf8-a8f784ac72c6.png">

前回設定したCluster、共有メモリゾーン、Upstream、あとコネクション情報など出てきました。

せっかくなので、簡易的なスクリプトを用いてコネクション情報などちゃんと遷移しているか確認してみました。別ノードから下記のスクリプトを実行しています。
※スクリプトは以前EFS試験で参考にさせていただいた下記URLから一部流用して今回用に変更しています。

https://aws.amazon.com/jp/blogs/news/optimizing-wordpress-performance-with-amazon-efs

```bash
vim performance.sh
#!/bin/bash
for i in {1..250}
do
    curl -o /dev/null \
    -s \
    -w "%{time_starttransfer}\n" \
    https://www.nginx.local/SampleServlet --cacert nginx-cacert.pem
done
:wq
bash performance.sh
```
では実行して、ダッシュボードを閲覧します。
<img width="800" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/8f5e2411-9dfc-eeb6-b747-ba51ef6c4673.png">

確かに画面右側のReq/Sが増えていました。
何やらHTTP Upstream画面でWarningsが出てますので、確認してみました。
<img width="800" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/cdb52ca3-3464-62f3-6d95-a0c49e539662.png">

特に問題なさそうだと思いつつ見てみたらResponses欄に4xxがありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/ca94d3bd-1ece-c80f-1dd8-dad2010bbb4e.png)

試しにNginxを2台ともリスタートしてみましたところ
Warningsは消えました。
<img width="800" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/26c2cf42-750e-fc64-7506-751b2ca89fe9.png"> 
前回の記事でご紹介させていただいた共有メモリゾーンの情報もshared Zoneから見ることができました。
<img width="800" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/156bce09-c8ea-f950-01a1-f7a35d934896.png">

clusterの状況も見ることができます。
<img width="800" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/a6f5944c-7a17-dd70-bde5-0e5a9f5021c4.png">
## 3. その他
今回はNginx Plusのダッシュボードについて試してみました。設定している内容が少ない分、表示され内容も少なかったようですがコネクションリミット制御とかしている場合、ほかのパラメータも閲覧できるようなのでKibanaとかで可視化している環境化では色々な組み合わせができるのではないかとおもいました。

ただ、実運用ではパフォーマンス面やNginx Plusが実行されているノードではなく別のノードでAPI経由で情報をGetしてダッシュボードを表示したりとかの考慮が必要なのか？どうするべきなのか？などベストプラクティス的なものがあれば知りたいと感じました！（どなたか知見をお持ちの方がいればご教授いただけると幸いです。）
SQLコマンド　初心者用まとめ

#1.はじめに#
　パソコンに本格的に触れ始めてから約９か月のへっぽこ専門学生がこれまでに勉強した内容の復習しやすいよう自分なりにコマンドの使い方をまとめたものです。まとめたコマンドの説明はかなり簡略化してあります。誤字脱字や解釈の違い、意味の捉え方が違った場合はコメントして頂けると幸いです。（寧ろその方がありがたいです）
まとめにしては少なすぎますが、時間が出来次第記事を追加していくのでそこはご了承ください。

#2.コマンド#
__1.文字関数__
・UPPER関数　　UPPER（文字列）
　→文字列に含まれる英字をすべて__大文字__に変換する関数

・LOWER関数　　LOWER（文字列）
　→文字列に含まれる英字をすべて__小文字__に変換する関数

・INICAP関数　　INICAP（文字数）
　→単語の先頭文字を__大文字__に、２文字目以降を__小文字__に変換する関数

・CONCAT関数　　CONCAT（文字列１,文字列２）
　→２つの文字列を__結合__する関数

・SUBSTR関数　　SUBSTR（文字列,a[,b]）
　→文字列の__a番目__の文字から__b文字分__の文字列を戻す関数

・LENGTH関数　　LENGTH（文字列）
　→文字列の__文字数__を戻す関数

・INSTR関数　　INSTR（文字列１,文字列２[,a][,b]）
　→文字列１で指定した文字列から文字列２を検索して__位置__を求める関数。aを指定している場合は__a番目の文字__から、bを指定している場合は__b番目に検索されている文字列２の位置__を返す関数

・LPAD関数　　LPAD（文字列,n,'埋込文字'）
　→文字列の__左側__に文字列がn文字になるように埋込文字を埋め込んで戻す関数

・RPAD関数　　RPAD（文字列,n,'埋込文字'）
　→文字列の__右側__に文字列がn文字になるように埋込文字を埋め込んで戻す関数　

・REPLACE関数　　REPLACE（文字列,変更前文字列[,変更後文字列]）
　→変更前文字列を変更後文字列に__置き換える__関数

__2.数値関数__
・ROUND関数　　ROUND（数値[,n]）
　→数値を小数点以下ｎ桁に__四捨五入する__関数

・TRUNC関数　　TRUNC（数値[,n]）
　→数値を小数点以下ｎ桁に__切り捨てる__関数

・MOD関数　　MOD（a,b）
　→aをbで割った__余り__を戻す関数

__3.日付関数__
・SYSDATE関数　　SYSDATE
　→現在の__日付__を戻す関数

・MONTH_BETWEEN関数　　MONTH_BETWEEN（日付１,日付２）
　→２つの日付間の__月数__を戻す関数

・ADD_MONTH関数　　ADD_MONTH（日付,n）
　→日付__のnヶ月後の日付___を戻す関数

・NEXT_DAY関数　　NEXT_DAY（日付,'曜日'）
　→日付の__翌日以降__に、指定された__曜日の日付__を戻す関数

・LAST_DAY関数　　LAST_DAY（日付）
　→日付を__含む__月の__最終日の日付__を戻す関数

・ROUND関数　　ROUND（日付[,'書式']）
　→日付値を__四捨五入__して戻す関数。どの単位で四捨五入するかは__書式__で指定

・TRUNC関数　　TRUNC（日付[,'書式']）
　→日付値を__切り捨てて__戻す関数。どの単位で切り捨てるかは__書式__で指定

__5.参考__
・ORACLE MASTER Bronze Oracle Database 12c[12c SQL基礎]完全詳解＋精選問題集
・http://www.sql-master.net/articles/SQL455.html
Googleスプレッドシートの拡張機能が表示されない

#事象
スプレッドシートのメニューバーにあるはずの「拡張機能」が表示されない。

#原因
Microsoft Excdel形式だった。
タイトルの右側に緑色背景で`.XLSX`とあれば上述の形式。

#解決法
メニューバーの「ファイル」を開き、
「Googleスプレッドシートとして保存」を選択
railsチュートリアル第十四章 ［Follow］ボタン（基本編）

###［Follow］ボタン（基本編）
Follow］/［Unfollow］ボタンを動作させましょう
そのために
Relationshipsコントローラが必要です。いつものようにコントローラを生成しましょう。

```rb
ubuntu:~/environment/sample_app (following-users) $ rails generate controller Relationships
Running via Spring preloader in process 4782
      create  app/controllers/relationships_controller.rb
# コントローラ
      invoke  erb
      create    app/views/relationships
      invoke  test_unit
      create    test/controllers/relationships_controller_test.rb
# テスト
      invoke  helper
      create    app/helpers/relationships_helper.rb
# ヘルパー
      invoke    test_unit
      invoke  assets
      invoke    scss
      create      app/assets/stylesheets/relationships.scss
# scss
```

####リレーションシップの基本的なアクセス制御に対するテスト 
test/controllers/relationships_controller_test.rb

```rb
require 'test_helper'

class RelationshipsControllerTest < ActionDispatch::IntegrationTest

  test "create should require logged-in user" do
    assert_no_difference 'Relationship.count' do
    # Relationshipのカウントが変わっていないことを確認
      post relationships_path
    end
    assert_redirected_to login_url
  end

  test "destroy should require logged-in user" do
    assert_no_difference 'Relationship.count' do
      delete relationship_path(relationships(:one))
    end
    assert_redirected_to login_url
    # もしログインしていなければログインページにリダイレクトされる
  end
end
```

####リレーションシップのアクセス制御 
app/controllers/relationships_controller.rb

```rb
class RelationshipsController < ApplicationController
  before_action :logged_in_user
  # ログインされていることが前提
  def create
  end

  def destroy
  end
end
```

####Relationshipsコントローラ
app/controllers/relationships_controller.rb

```rb
class RelationshipsController < ApplicationController
  before_action :logged_in_user
  # ログインされていることが前提
  def create
    user = User.find(params[:followed_id])
    current_user.follow(user)
    redirect_to user
  end

  def destroy
    user = Relationship.find(params[:id]).followed
    current_user.unfollow(user)
    redirect_to user
  end
end
```

###演習
1.
ブラウザ上から /users/2 を開き、［Follow］と［Unfollow］を実行してみましょう。うまく機能しているでしょうか?

確認
2.
先ほどの演習を終えたら、Railsサーバーのログを見てみましょう。フォロー/フォロー解除が実行されると、それぞれどのテンプレートが描画されているでしょうか?

users/show.html.erb
C言語の復習

#はじめに
専門学校一年のプログラミング初心者がC言語の分からないところを復習するための記事を書こうと思います！特に構造体への理解が浅いので構造体について自分なりにまとめてみようと思います。
##構造体とは
簡単に説明すると異なる型の変数の集合です。
配列と違うところは異なった型を格納できる点です。
構造体のなかで宣言された変数のことを**メンバ変数**と呼びます。
##簡単な使用方法
###構造体の定義
構造体は以下のような形で定義します。

```ruby:file.dd
struct 構造体名
{
    データ型 メンバ変数名;
    データ型 メンバ変数名;

};
```

**struct**に続き構造体名を記述します。
最後の;(セミコロン)を忘れずに！

###変数へのアクセス
構造体変数からメンバ変数にアクセスするには**ドット演算子**を使用します。

```ruby:file.dd
構造体変数.メンバ変数=値
```
###typedef
typedefを使って既存のデータ型に新しい名前をつけることができる。

```ruby:file.dd
typedef 既存の型名 新しい型名;
```
typedefは特に構造体を使うときに便利なので、よく使われる。

#まとめ
今回構造体について調べてみて、まだ理解が難しく、まとめ切れないことがたくさんあったのでこれからの学習でこつこつ理解を深め、また記事を書きたいと思います!
ダメ学生がやる気を出そうとした

##やる気、1%##
初投稿です。
この記事は本題以外すべて余談なので、そこだけ読んでいただければ大丈夫です

情報系専門学校に通う一年生です。
学校の課題で、qiitaにエンジニアやエンジニア志望の学生に役立つ記事を一本投稿しろ。という課題が出たので、記事を書きます。
が、正直全くやる気が湧きません。課題とかのやるべきことって全くやる気起きないですよね。なんでですかね？
やる気だして初めにやってしまえば早く終わって後が楽なのに。

やる気は今のところ1％ですが、課題なので書かなければ成績が落ちてしまいます。こまった。
楽をしたいので、まずクラスメイトの記事を参考に見てみました。みんなプログラムや最新技術についての記事ばっかり書いているんです。
うわ、調べるのも自分でプログラム書くのもすごいめんどくさそう。

めんどくさいことは極力避けていきたいので、プログラムなどには全く関係ないけど、似たような人に役に立ちそうで簡単に結果を出せる記事を書こうと思います。

##本題##

タイトルに書いてある通り、自分はやる気のあまりないダメ学生です。ので今回は、ダメ学生が少しでもましになれるよう
やる気のない人が小さなやる気を出せる方法
と、
小さなやる気が消えないように長持ちさせる方法
この2つを調べて実践してみます。

結論から先に書いてしまいます。
やる気のない人が小さなやる気を出せる方法と、小さなやる気が消えないように長持ちさせる方法
**最初の1分だけ机に座ってやるべきことに取り組んでみる**
これが、実践した結果どちらの方法についても効果的でした。

##実践##
最初の1分だけ机に座ってやるべきことに取り組んでみる

これはyoutubeで検索しているときに出てきたやり方です。
某有名2ちゃんねる創設者の方によると、この方法が効果的らしいとのことだったので分だけなら楽でいいか。と実践してみました。
今回は資格試験の勉強をします。
実践してみると、1分でやるべきことが終わりません。中途半端なところで終わらせてしまうと気分があまりよくないので、もちろん1分以上続けます。
最初に取り組んだことが終わったとき、今の少しでもやる気があるうちに範囲を勉強しておくか。と、そこから結局3時間ほどやって友達からゲームのお誘いがあったので勉強は終了しました。ですが、やる気のない自分なりには頑張ったほうじゃないかなと思います。もちろんもっとやってる人がいることはわかっていますが。

##もっと楽にしてみる##
最初の1分だけ机に座ってやるべきことに取り組んでみると書きましたが、その最初の1分が始められない人は多いと思います。
そこで、手助けになりそうで共感できる言葉を二つほど残しておきます。
1つ目は、**最初の一歩が一番大変**という言葉です。
この言葉はうろ覚えで、このまんま誰かが言っていたわけではないですが、自分の人生において結構役立っています。
朝、学校や会社に行くのがめんどくさいときも、布団の中から出て用意を始めれば行けてしまうことありますよね。自分はよく行きたくないときにこの言葉を思い出して頑張っています。はじめて何かをするときや、なかなかやるべきことを始められないときなどいろんな場面で使えるのでぜひ使ってみてください。
2つ目は、**1分は1日の1/1440**という言葉です。
これもうろ覚えです。twitterでバズっていた言葉で、ちらっと見ただけでよく覚えてないですが、この言葉も結構自分の人生に役立っています。
1/1440は%に直すと約0.07%となります。まあこれぐらいなら頑張ってもいいかなという気分になる気がします。1分だけやろう...ではなく0.07％だけやろう...のほうがちょっとだけ楽な感じしません？
こんな感じで、うまい言葉を使って自分をだましながらやらなければならないことをやりましょう。

##やる気、5%##

自分は全然やる気のないダメ学生ですが、社会に出るまでに少しでもまともになれる方法を探して、たま～に発信していこうと思います。
記事を読んでいただき、ありがとうございました。読んでくれた方も、目を通しただけの方も頭の片隅に言葉だけ残していただけると、うれしいです。
これから社会現象になるメタバースについて

情報系の学校に通う学生です。
ちなみに初投稿です。
#はじめに#
皆さんはメタバースについて聞いたことがあるでしょうか？
２０２１年マーク・ザッカーバーグ氏(旧FacebookのCEO)がSNS企業からメタバース企業にすると言っていました。
今でも覚えてます、いきなり発表してsnsが湧きました。
次にメタバースが何かを少し説明いたします。
##メタバースとは##
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2302284/23ccf49a-2632-6186-2b24-ac2bf7e41638.png)

コンピュータが作り出す3次元の仮想空間のことです。(例SAOとか)
メタバースではアバターを作り仮想現実の中を移動や他の人ともコミュニケーションをとったりできます。
メタバースのいいところは全世界の人と近所のように話ができたり言語翻訳も付いているので外国語を話せなくても会話ができることです。
でも皆さんの中にはメタバースはVRのことでしょと思う人もいるでしょう。
厳密にいうと全くの別物とは言えません。
メタバースが仮想空間上で他のアバターと交流するという“世界”そのものを指すのに対し、VRはその体験をより現実的なものにするための最も有効な“ツール”みたいなものです。
#####最近ゲームにメタバースらしきものが#####
最近ゲームの中でライブイベントなどをしてゲーム内のアバターがそのライブを見てエモートをしたり動いたりして開催されることがあります。
これも一種のメタバースと言えるでしょう。
でもこれはメタバースではないという主張もあります。
なぜなら
######メタバースは永久的に時間か過ぎます######
パソコン閉じたからと言って時間が止まるわけではありません。
メタバースは常にアバターがいる仮想空間なので時が止まることありません。
仮に止まったとしたらほかんのアバターも動けななりメタバースにいる意味がなくなります。
なので時間は止まりません。
######相互運用性####
例えばゲーム内のアバターは別のゲームでは使えません。
でもメタバースならいとつのアバターをどこでも使ことができます。

######メタバース内でのアルバイト?####
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2302284/f5f8526d-ea4c-50ad-e411-230ed180ca66.png)

最近将来は仕事が減るというのを耳にしたことも多いでしょう。
なのにメタバースではアルバイト求人を集めるサイトなどがあります。
なので資格がなくても自分のやりたい仕事ができるはずです。（意見です）
そのアルバイトがいつかはは本職になるかもしれません。
そうなれば仕事が増えて経済が豊かになること間違いなし。

######最終的に人間の活動をすべてメタバースで管理####
最終的には仮想空間のオフィスに出社してそこで業務をすることやネットショッピングを暗号資産などで購入など
することになります。
でもメタのクリス・コックス最高製品責任者は日本経済新聞の取材にメタバースの実行機関はおよそ5～10年、あるいは15年の期間が必要」と発言しています。
なのでまだ先になりそうですね。
##最後に##
自分が小さいときは映画の中の世界でしかありえないことがだんだん現実になっていくのを見れて嬉しいです。
この記事を見て少しでもメタバースについて興味を持ててもらえたら幸いです。
これからも他ジャンルの記事を投稿する予定であります。
最後まで読んで下さりありがとうございました。
**bye**
SAP ABAP Platform 1909, Developer Editionはメリークリスマスっていってくれない

SAPに仕込まれた有名？　なイースターエッグとしてSE11のオブジェクト有効化ログに12/24はメリークリスマスと表示してくれるものがありました。（1/1は謹賀新年※1　余談参照）

こちらのイースターエッグについて、最近のSAP環境では表示されないといった噂を聞いたため。
ちょうど`ABAP Platform`な環境を下記記事で用意したこともあり、この環境ではどうなのか確認してみました。

[SAP ABAP Platform 1909, Developer Edition（dockerhub）をopenSUSE Leap 15.3（EC2）で起動してみる](https://qiita.com/SAITO_Keita/items/d826c66d0853282f4b9c)

## 12/24にSE11でオブジェクトを有効化してログを確認してみた結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/a65d1013-8b8b-ccee-d71c-ca6a9e7c5404.png)

Program start の上にイースターエッグのメッセージが表示されていたはず……
画像のようにメリークリスマスとはいってくれないSAPになったようです……

## メッセージクラス D0に残されている痕跡

イースターエッグとして表示されていたので、メッセージクラスD0のNo328だったのでこちらの痕跡だけでも確認しておきます。

`SAP ABAP Platform 1909, Developer Edition`では英語とドイツ語がインストールされているため、それぞれ確認。

### 英語

**SAP wishes you a Merry Christmas !**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/be725985-b64a-cea6-abe1-979ab3040027.png)

D0328に12月24日のメッセージ
D0329に01月01日のメッセージ

### ドイツ語

**SAP wünscht Ihnen eine frohe Weihnacht !**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/3af05f1f-3d1f-f85a-c15e-1d0a4ae7c1d3.png)

D0328に12月24日のメッセージ
D0329に01月01日のメッセージ

### 余談

新年用のメッセージとしてはD0329が用意されていますが、イースターエッグのプログラムがではバグがあり。

そのプログラムでは新年用のメッセージを登録D0329と指定すべきと思われる所、D0322を指定していました。

このため実際に1月1日にイースターエッグが発動してもD0329のメッセージが表示されることは無く、D0322のメッセージが表示されて終了……すごく残念な感じがしますね……

## まとめ

投稿を忘れていたので時期外れな感じですがタイトルの通り。　完全に小ネタ。
これは、いつごろからなくなってしまったのだろうか……
基本的なLinuxとUnix コマンド集

# LinuxとUnix
LinuxとUnixはOSの一種。Linuxはよくwindowsで使われ、UNIXはmacで使われている。
コマンドは同じなのでMacとかでUNIXをLinuxも学べる。

⚫︎両者の違い
Linuxは```オープンソースで無料で配布も自由。世界中で使われている。```
Unixは```企業が開発して、知的財産権が企業に属している。Linuxから派生したもの。```


# よく使うLinuxコマンド
***Linuxコマンドはコンピューターに命令を出すコマンド***。
以下はコマンドの一覧です。
ターミナルなどで```実際に手を動かしながら使って試して```みてください。


|コマンド |使い方|説明|
|:------|---:|:---|
|***cd~***|ディレクトリやフォルダ移動(Change Directory)|cd 移動したいファイルやフォルダ|
|***ls***　|フォルダの中身を確認　　|中身を見たいフォルダ　ls。ls 中身を見たいフォルダも可。　 lsは頻繁に使って現在地を確認。|
|***pwd***|現在地を表示| ***こまめに使い、現在地を確認しましょう***|
|***clear***|画面を綺麗にする|データは消えない| 
|***mkdir***|フォルダ作成| mkdirフォルダ名|
|***touch***|ファイルを作成|touch ファイル名| 
|***mv***|ファイル移動| 移動元ファイル名/フォルダ名 移動先ファイル名/フォルダ名)　|
|***cp***|ファイルやフォルダをコピー|cp 移動元ファイル名/フォルダ名 移動先ファイル名/フォルダ名|
|***rm***|ファイルやフォルダ削除|①rm ファイル名/フォルダ名　 ディレクトリ削除の場合はrm -rやrm -fなどを使う　②rm -rf　<ディレクトリ名>で中身のあるディレクトリを削除 |
|***rmdir***|空のディレクトリ削除|rmdir ディレクトリ名|
|***cat***|ファイルの中身を表示|catファイル名|
|***vi***|ファイルの中を確認し編集|vi ファイル名|
|***less***|テキストファイルを閲覧|less ファイル名　　*/をつけて検索できる機能あり  |
|***tail***|ファイルの中身の後ろの中身を表示|tailファイル名|
|***grep***|文字などの絞り込み|grep "検索したい文字" * ファイル名  他には　ls |grep 検索したい文字|

### 補足
- ***$(%)と#の違い***
1.```$と%は一般ユーザー```
2.```#は管理者ユーザー```

- ***rmの使い方***
https://atmarkit.itmedia.co.jp/ait/articles/1606/06/news013.html

rmの部分がごちゃごちゃしてすみません💦


# 補足コマンド
知っておくと徳だよというコマンドです。

|コマンド |使い方|説明|
|:------|---:|:---|
|***man***|コマンドのマニュアル表示|manコマンド|
|***rename***|複数のファイル名を一括変更する|rename 置換する文字列 置換後の文字列 ファイル名 ファイル名２|
|***date***|システムの日付や時刻の表示・設定|date [オプション] [フォーマット]|
|***apropos***|manページの内容を検索|apropos キーワード|
|***diff~***|ディレクトリやフォルダ移動(Change Directory)|cd 移動したいファイルやフォルダ|
|***in***|フォルダの中身を確認　　|中身を見たいフォルダ　ls。ls 中身を見たいフォルダも可。　 lsは頻繁に使って現在地を確認。|
|***more***|ファイルをページ単位で閲覧する|more ファイル名|
|***chown***|ファイルやフォルダのオーナーやグループを変更| |
|***chomd***|ファイルやフォルダのアクセス権限を変更|データは消えない|  
|***history***|コマンドの履歴表示|WHERE~|
|***nmcli***|ネットワークの状況を確認したり、設定を変更|nmcli [オプション] オブジェクト {コマンド | ヘルプ}|
|***ntpdate***|時刻をNTPサーバと同期|ntpdate [オプション] NTPサーバ名|

### コマンドわからない、忘れた時
***コマンドがわからない時にmanコマンドで調べるのもあり***です。

# 最後に
今学んだのはこのくらいです。
今後も調べたり実際に使った時に追加していきます。



# 参考資料
https://www.sejuku.net/blog/5465

https://kitsune.blog/linux-command-summary

https://eng-entrance.com/unix_linux

https://kazmax.zpp.jp/cmd/