OmniAICreator/Qiita-1.07M huggingface dataset:
Databricksノートブックで関数や変数の定義に移動できるようになりました

こちらのアップデート**Go to definition for functions and variables in Python notebooks**です。

https://docs.databricks.com/en/release-notes/product/2023/august.html#go-to-definition-for-functions-and-variables-in-python-notebooks

# 要件

- Databricksランタイム12.2 LTS以降が稼働しているクラスターにPythonノートブックがアタッチされている必要があります。
- 同一セッションで変数や関数が定義されているセルが実行されている必要があります。

# 使い方

macOSなら**Cmd**を押しながら、変数や関数の上にマウスカーソルを移動します。Windowsなら**Ctrl**を押しながらとなります。キーボードショートカットは、macOSは**Cmd+F12**、Windowsは**Ctrl+F12**です。

macOSでは**Cmd**を押しながら変数の上にマウスカーソルを移動します。
![Screenshot 2023-09-03 at 14.22.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/33ff7eca-fc8c-b965-8c59-fcc6d9434626.png)

変数がハイパーリンクになるのでクリックします。
![Screenshot 2023-09-03 at 14.22.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/01e740cc-c856-3a8e-cd23-24c9cbbd7ca4.png)

変数が定義されている箇所に移動します。
![Screenshot 2023-09-03 at 14.22.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/935e50dd-d818-66da-51b7-16bb166ecfd9.png)

マニュアルはこちらです。

https://docs.databricks.com/en/notebooks/notebook-editor.html#go-to-definition

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
Gitlab Self-hosted runnerをセットアップしてみた

## あらすじ
最近の個人開発ではGitlabを主に利用しており、ちょくちょくGitlab CIを利用しています。普段はGitlab SaaS Runnerでも十分枠が足りており、特に問題ないのですが、[Intel N100の入った安いPC](https://item.rakuten.co.jp/chuwi/larkbox-pro)が手に入ったので、今後更に色々なことをCIでさせるため、せっかくなのでSelf-hosted runnerセットアップしてみます。

## 前提条件(用意したもの)
- LubuntuをインストールしたPC
  - Windowsをサーバーにするのは無しなので、既にWin11が入ったボリュームを分割してLubuntuを入れておきました。
    - (ボリュームを分けてUSBからブート/インストールするだけでした)
- Gitlab.com Org
  - この記事では セルフホストなGitlabではなく、SaaSとしてのGitlabを使います
- Dockerのインストール
  - 直接ランナーをインストールするのは不安なのでDockerを使って導入しました

## やったこと
- 1 設定ファイル格納用のDockerボリューム作成
  - `docker volume create gitlab-runner-config`
- 2 GitlabRunnerの設定ウィザード実行
  - `docker run -d --name gitlab-runner --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v gitlab-runner-config:/etc/gitlab-runner \
    gitlab/gitlab-runner:latest`
    - ウィザード1 Gitlabのエンドポイント入力
      - `https://gitlab.com/`
    - ウィザード2 Runnerのトークンを入力
      - Gitlab.com Org内 左メニュー -> CI/CD -> Runners -> `New group runner` から発行したもの
      - タグ名やDetailsはお好みで設定
      - Maximum job timeoutは ひとまず 6時間(21200)に設定しました
    - ウィザード3 適当な設定識別名を入力
      - ローカルの設定ファイル内にのみ使われると記載がありました
    - ウィザード4 ランナーの実行方法を指定
      - 色々ありますが今回は `docker`を指定
    - ウィザード5 ランナーのデフォルトイメージを指定
      - Dockerの場合 何もCIに指定しなかった場合に利用するイメージを指定します
      - とりあえず `debian:12-slim` にしました
    - ウィザード6 設定完了
      - 指定した gitlab-runner-configボリュームに設定が格納されます
- 3 GitlabRunnerの実行
  - `docker run -d --name gitlab-runner --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v gitlab-runner-config:/etc/gitlab-runner \
    gitlab/gitlab-runner:latest`
- 4 Gitlab公式サイトの Runnerを確認して Active になっていれば設定完了!
![スクリーンショット 2023-09-03 142926.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254984/77b64ed0-8f6a-ff12-ab83-00b621adcb7e.png)


## 備考
- 同じトークンを使いまわして 別のコンテナを立てれば 2ジョブ同時に1台で処理できそうです (未検証)

## 参考 (公式サイト)
公式サイトに全て書かれていました
- https://docs.gitlab.com/runner/install/docker.html
- https://docs.gitlab.com/runner/register/index.html#docker
Cloud Run を使用して Google Cloud 上で Python を使用する。

## はじめに

この記事は、
　[Using Python on Google Cloud with Cloud Run](https://www.youtube.com/watch?v=s2TIWIzCftM)
という動画を視聴し『実際にやってみた』という記事になります。

## この記事でできるようになる事
Pythonアプリを `Cloud Run Service` で実行できるようになる。

## Cloud Run について簡単に理解しておく

Cloud Runは、サーバレスの環境でコンテナベースの
アプリケーションを実行するためのプラットフォームであり、
これを使用することで、任意のランタイムやフレームワークを
使用したアプリケーションを簡単にデプロイする事ができるとの事。

さらには、フルマネージドでもあるため、
サービスが大量のトラフィックを受信し始めた場合でも、
インフラストラクチャのスケーリングを
心配する必要はないのがCloud Runの特徴になります。

## Google Cloud API を有効化
GCPプロジェクトのコンソールへ接続。

`Cloud Build API`
`Artifact Registry API`
`Cloud Run Admin API`

これらのAPIを有効化。
その他、APIの有効化は、必要に応じて、適宜行ってください。

## sample code を clone する。
[using-python-on-google-cloud-with-cloud-run](https://github.com/GoogleCloudPlatform/serverless-expeditions/tree/main/using-python-on-google-cloud-with-cloud-run) を、git clone してください。

```
git clone https://github.com/GoogleCloudPlatform/serverless-expeditions.git
```

git cloneの実行が完了したら、cdコマンドを使って、対象のディレクトリ階層へ移動。
```
cd serverless-expeditions/using-python-on-google-cloud-with-cloud-run/euro-to-usd
```

## Container Registry に コンテナイメージ を Deploy

`PROJECT_ID` はコンテナイメージをDeployしたい
GCPのプロジェクトIDに変換してから実行してください。

```
gcloud builds submit --tag gcr.io/PROJECT_ID/euro-to-usd
```

`STATUS: SUCCESS` がコンソールに出力されたらDeployは完了になります。

コンテナイメージは、GCPコンソールからも確認することができます。
![container_using-python-on-google-cloud-with-cloud-run.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952807/dc0ba4ea-4ab0-45f5-6e84-742a0cba614f.png)

## Cloud Run を Deploy する。

`PROJECT_ID` はDeployしたコンテナイメージがある
GCPのプロジェクトIDに変換してから実行してください。

```
gcloud run deploy --image gcr.io/PROJECT_ID/euro-to-usd --platform managed
```
コマンドを実行すると、deploy する `Cloud Run` の名前、
Region名を聞かれるので、適切な回答を入力および選択してください。
![cloudrun_name&region.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952807/29041feb-111a-4f83-a62c-414c693fdb75.png)
デプロイしようとしているサービスや関数（ここでは`euro-to-usd`）へのアクセスを
認証せずに許可するかどうかを尋ねている為、今回は認証なし（y）を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952807/21526d62-c1ff-83da-9bad-6a890ad09de8.png)

## Cloud Run の アプリケーションを実行する。

今回のSampleアプリケーションは、
ユーロからドルへ変換してくれるアプリになりますので、
アプリが正常に動いていればDeployは完了になります。
![cloudrun_using-python-on-google-cloud-with-cloud-run.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952807/282c85a6-3de1-6e30-e48e-2065a23dddd4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952807/c9a567c6-e6ca-32af-8107-87cfe1fc91db.png)

## 終わりに
今回の記事は、動画を視聴しまして、
実際に『手を動かしてみた』という内容でまとめました。

コンテナイメージのアプリケーションを
簡単にCloud RunはDeployできる
ということがわかると思います。

Cloud Runがどのようなものか、試してみたい人は、
参考にしていただけると幸いです。

あとで『じっくり読みたい』、『繰り返し読みたい』と
思ってくれましたら、『`ストック`』へ登録、
この記事が読まれている方にとって、
参考になる記事となりましたら、『`いいね`』を
付けていただけますと、励みになりますので、
よろしくお願いします。
vmstatのデータをVBAで取り込もう①

## vmstatのデータをVBAで取り込む

### 準備

テキストにvmstatのデータを出力されていること
vmstatのデータ準備

```
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
2  0      0 481508   2216 688484    0    0   361    65  229  402 12 12 93  4  0
2  0      0 481508   2216 688484    0    0   361    65  229  402 22 22 93  4  0
2  0      0 481508   2216 688484    0    0   361    65  229  402 32 32 93  4  0
2  0      0 481508   2216 688484    0    0   361    65  229  402 42 42 93  4  0
2  0      0 481508   2216 688484    0    0   361    65  229  402 52 52 93  4  0
2  0      0 481508   2216 688484    0    0   361    65  229  402 62 62 93  4  0
```

### vbaマクロ

```
Sub test()

Open "C:\Users\zzz\OneDrive\デスクトップ\vba\vmstat.txt" For Input As #1

  Do Until EOF(1)
    Line Input #1, buf
    
    zzz = Left(buf, 2)
    
    
    Select Case zzz
    
      Case p, r
    
        ' 何もしない
      Case 1 To 99
      
        tmp = Split(buf, " ")
        
        MsgBox tmp(33)
        MsgBox tmp(34)
        MsgBox tmp(35)
        
        
    End Select
    
    
    
  Loop

Close #1

End Sub

```

## vmstatのデータをVBAで取り込もう②に続く予定
Webブラウザが画面を取得するまで(ネットワークの基礎)

皆さんがよくつかっているWebブラウザ

Google Chrome
Microsoft Edge/Internet Explorer
Mozilla Firefox

こちらに画像が表示されるまでを簡単にまとめました。

まず、TCP/IP参照モデルを基に通信の中身を分析してみます。

![Page4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3550876/e5478940-068f-0502-1b47-70de606d8a3e.jpeg)
このようになっています。

![page1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3550876/cfc34b46-9d2a-4240-de4c-3586101db380.jpeg)

インターネットに接続するときの動作

1.WebブラウザでURLを入力

2.WebサーバのIPアドレスを解決

3.TCPコネクションの確立

4.HTTPリクエストの送信とHTTPレスポンスの送信

このようにアクセスしています。

ではネットワークではどのような動きをしているか見てみましょう。

![Page2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3550876/09fb7d3f-dfac-f532-9494-b144b1c6ffd8.jpeg)

PC君とルータ君とDNSサーバ君の対話形式で記載しています。
※自分の会社URLを記載しています。

前提としてURLだけではどんな方法でもインターネットアクセスは出来ないので
必ずIPアドレスを取得する必要があります。

1.Webブラウザを利用してURLを入力します。
2.URLを入力すると自分のデフォルトゲートウェイに聞きに行きます。
3.デフォルトゲートウェイに指定されたルータはURLの存在を知りません。
　そのため、URLを名前で解決させる(URL)為にDNSサーバに聞きに行きます。
4.DNSサーバは自分の情報を基にIPアドレスをルータに教えます。
5.ルータはWebブラウザを利用しているPCにIPを教えます。

この動作を瞬時に行っています。

次![Page3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3550876/0ad00ac8-a3ef-457c-2698-42e3fc832518.jpeg)

IPを貰ったPCはWebサーバにアクセスします。

Webサーバには受付窓口があり、TCP80番ポートで来訪者を待っています。

この時、Webブラウザは　HTTP(GETメソッド)という要求を受付に依頼します。
内容は
(例)
Webブラウザ　→　画像がほしいです。
Webサーバ　→　画像ですね。お送りします。
(HTTPレスポンス)
Webブラウザ　→　受け取りました。表示します。

ここで初めてWebブラウザに画面が表示されます。

このHTTPのやり取りがTCPコネクションで行われます。

よく技術者が口にする一度つながれば後は中身をやり取りするだけでしょ。という通信です。

ネットワークではこの一連の流れを理解して通信を確立させる。
これがネットワークエンジニアが行っている設計というものになります。

今回はここまで
次回はネットワーク基礎続編

まだ知らない。IPv6 IPoEの次世代インターネットについて

を説明していきたいと思います。
【FFmpeg】gifをn回ループさせてmp4にする

# 概要
FFmpegでループのgifのループ回数を指定してmp4などの動画に変換する方法です。
instagramなど、gif非対応のサイトに極端に短いgif（ドット絵など）をアップロードしたい時に使えます。

## FFmpeg

FFmpegを使用します。WindowsでもMacOSでも動きますが、インストールが必要です。


Homebrewでインストール（MacOS）
```terminal
$ brew install ffmpeg
```

Windowsの場合は[公式サイトからダウンロード](https://ffmpeg.org/download.html)してパスを通してください。（詳しくは調べてください）

# 変換方法

```terminal
$ ffmpeg -stream_loop 3 -i 変換元ファイル.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" 出力ファイル.mp4
```

`-stream_loop 3`の`3`がループ回数です。

mp4じゃなくてmovがいい！といった場合は最後の`.mp4`の部分を好きな拡張子にしてやればいい感じで変換してくれます。

# その他
Windowsならバッチファイル、MacならAutomatorのクイックアクションを作ってあげるとドラッグ&ドロップや右クリックで実行できたりして便利です。

# 参考
https://unix.stackexchange.com/questions/40638/how-to-do-i-convert-an-animated-gif-to-an-mp4-or-mv4-on-the-command-line

https://nico-lab.net/input_infinity_with_ffmpeg/
AutoHotKeyを使って[ 右ctrl + ijkl ]を矢印キーの代わりにするぞ！

最近になってプライベート用にWindowsPCを新調したのですが、仕事用のMacではKarabiner Elementsで`右option + ijkl`で矢印キーとして使っていたので、Windowsでも同じように`右ctrl + ijkl`を矢印キーとして使いたいと思い、AutoHotKeyに手を出してみました。

AutoHotKeyを使い始めるにあたってこちらの記事を最初に読んだのですが、こちらの記事ではChange KeyとAutoHotkeyという2つのアプリケーションを使って`hjkl`キーの矢印キー化を実現していました。

https://qiita.com/riekure/items/49b941fa5159f9948313

ただ、「AutoHotKeyでもKeyのRemapってできるし、もしかしたらAutoHotKeyだけでやりたいことをもっとシンプルにかなえられるんじゃないか」と思い、公式ドキュメントを見ながらまず作ってみたのが下記の内容です。


```ahk
#InstallKeybdHook
#UseHook
#SingleInstance Force

RControl::Return

RCtrl & j::Send {Left}
RCtrl & k::Send {Down}
RCtrl & i::Send {Up}
RCtrl & l::Send {Right}
```

ただ、この内容でしばらく使っていて気づいたのですが、このままだと範囲選択を行うために`shift + right-ctrl + l`を押下したときにも、ただ右矢印を押したときと同じ挙動となってしまい、期待していたような挙動ができないようになっていました。

試行錯誤した結果の完成形はこの通りです。

```ahk
#InstallKeybdHook
#UseHook
#SingleInstance Force

; right-ctrl + ijkl to emulate arrow keys
Hotkey, *i, Off
Hotkey, *j, Off
Hotkey, *k, Off
Hotkey, *l, Off

*RCtrl::
    Hotkey, *i, on
    Hotkey, *j, on
    Hotkey, *k, on
    Hotkey, *l, on
return

*RCtrl up::
    Hotkey, *i, off
    Hotkey, *j, off
    Hotkey, *k, off
    Hotkey, *l, off
return

*i::send {blind}{up}
*j::send {blind}{left}
*k::send {blind}{down}
*l::send {blind}{right}
```

この内容で、MacのKarabiner Elementsを使って`option + ijkl`を矢印キーとして扱っていた時と同じ挙動にできたのでひとまず一件落着でした🎉

Windowsでも同じような使い方をしてみたい方は是非お試しください！
ABC318回答メモ

0.はじめに
　毎回言ってる気はしますが、AB問題でも歯ごたえが出すぎた気がしています。
　難しくなっているのか、私のPG力が落ちているのか・・・。
　なんとかABCまではACとなりましたが、レートは-7
　まぁ、ということは私のPG力が衰えているんでしょうね・・・。
　というよりは参加者のレベルが上がっているのか。
　地道に正解できなかった問題の解き方を確認していくしかないですね。


1.A - Full Moon
　計算でも一発で出せそうな気もしましたが
　普通にwhileで回して答えを求めました。

　現時点の日付を変数nowにもち、まずはnowにMを入れる。
　満月を見た回数を変数ansにもつ（初期値0）
　以下をループ
　　nowがN以下の時
　　　-期限内に満月が見れたとしてansに1加算、nowにPを加算
　　nowがNより大きい時
　　　-ループを抜ける
　最後にansを出力して終了


　https://atcoder.jp/contests/abc318/submissions/45132684

2.B - Overlapping sheets
　いもす法で解けそうな問題。

　うろ覚えで仮組しましたが、うまくいかず、”競技プログラミングの鉄則”を
　見返し、2.4を見ながら作り直したところAC.
　持っててよかった、”競技プログラミングの鉄則”。
　

　https://atcoder.jp/contests/abc318/submissions/45161365

3.C - Blue Spring
　青春１８きっぷとか懐かしいなと思いつつ挑戦。
　いろいろ考え方はありそうでしたが、リストFを大きい順に並びなおし
　先頭から、D日分ずつの合計と、Pを比べ、Pの方が小さいときは
　そのD日間は周遊パスをつかう。
　D日分の合計の方が大きければ以降は通常料金で電車に乗るとします。
　注意点は、最後のD日分が、余った場合（例題３）ですが
　そこは、余った日数分の合計とPを比べて同様に処理します。

　結構てこずりましたが、終わってまとめると簡単な問題ですね・・・。


　https://atcoder.jp/contests/abc318/submissions/45183963

4.D - General Weighted Max Matching
　試験中は、取り組めるタイミングで@20分となっていて
　諦めました。
　その後解説読んでも今一でしたが、別解を読んでなるほど。と
　なり、参考に・・・というよりほぼ丸パクリでACを取りつつ
　解き方を学びました。

　https://atcoder.jp/contests/abc318/submissions/45207342


以上
英文を分割する

## 文字列のパース
F.o.R(Frame of Reference)のような構造図を実現するために、まずは文字列を単語単位で分割したい。

例えば`"This is a pen."`という文字列を`["This", "is", "a", "pen", "."]`というリストに変えたい。
`String.split()`だと空白で分割されるため、`"pen."`になってしまい、ピリオドだけ分割できない。

```elixir
test "split" do
    assert "This is a pen." |> String.split() == ["This", "is", "a", "pen", "."]
  end
```

実行結果
```elixir
code:  assert "This is a pen." |> String.split() == ["This", "is", "a", "pen", "."]
     left:  ["This", "is", "a", "pen."]
     right: ["This", "is", "a", "pen", "."]
```

## ピリオドを考慮する
そこで文字列の最後にピリオドが含まれているかを調べる関数を作り、ピリオドが含まれていれば、分割するようにしたい。

### 文字列の最後にピリオドが含まれているかどうか
```elixir
def contains_terminator?(token) do
    last_char_code =
      token
      |> String.to_charlist()
      |> List.last()

      last_char = <<last_char_code::utf8>>
      if last_char == "." do
        true
      else
        false
      end
  end
```

```elixir
test "contains_terminator" do
    assert "This" |> contains_terminator? == false
    assert "is" |> contains_terminator? == false
    assert "a" |> contains_terminator? == false
    assert "pen." |> contains_terminator? == true
  end
```

想定通りに動くことを確認できた。

### ピリオドが含まれていたら分割する
```elixir
def split_terminator([]), do: []

  def split_terminator([head | tail]) do
   
    if contains_terminator?(head) do
      [token_a, token_b] = head |> String.split(".")
      [token_a, ".", token_b | split_terminator(tail)]
    else
      [head | split_terminator(tail)]
    end
  end
```

```elixir
test "'This is a pen.'" do
    assert ["This", "is", "a", "pen."] |> split_terminator() == ["This", "is", "a", "pen", "."]
  end
```

テストコードを実行したが、エラーになってしまった。

```elixir
Assertion with == failed
     code:  assert ["This", "is", "a", "pen."] |> split_terminator() == ["This", "is", "a", "pen", "."]
     left:  ["This", "is", "a", "pen", ".", ""]
     right: ["This", "is", "a", "pen", "."]
```


どうやら最後に空白の要素ができてしまうらしい。
アドホックなやり方だが、 `Enum.filter(fn x -> x !== "" and x !== nil end)` を加えて空白の要素を除去するようにした。

```elixir
def split_terminator([head | tail]) do
    # {result, terminator} = contains_terminator?(head)

    if contains_terminator?(head) do
      [token_a, token_b] = head |> String.split(".")
      [token_a, ".", token_b | split_terminator(tail)]
      |> Enum.filter(fn x -> x !== "" and x !== nil end)
    else
      [head | split_terminator(tail)]
    end
  end
```
Git rebaseとmerge

# はじめに
git rebaseとmergeについてまとめてみた

# git rebase、mergeとは
* 指定したブランチの最新コミットに追従させる
* featureブランチでmainブランチの最新を取り込むときなどに利用するコマンド

# git rebase
featureブランチに最新のmainを取り込む

rebase前
```
A---B---C       <-- main
     \
      D---E     <-- feature
```
rebase後

コミットCを起点として、D'、E'がfeatureブランチに適用される

```
A---B---C        <-- main
         \
          D'--E' <-- feature

```
# git merge
featureブランチに最新のmainを取り込む

merge前
```
A---B---C       <-- main
     \
      D---E     <-- feature
```
merge後

新しいいコミットMが作成される
```
A---B---C        <-- main
     \    
      D---E---M  <-- feature
```
# rebaseとmergeの違い


https://www.wantedly.com/companies/progrit/post_articles/412697
https://qiita.com/miriwo/items/0a3a6444abbeb48f0fe7

# どのようにrebaseされるか
1. リベース元のぶらっBTのHEADを無名bランチとして作成し、チェックアウト
1. 無名ブランチにrebase先ブランチのコミットをパッチとして適用
1. もしコンフリクトなどが発生した場合はリベースは中断され、無名ブランチをチェックアウトしている状態になる
1. すべてのコミットが適用できるかリベースが完了したとき、無名ブランチをリベース先ブランチに切り替える

## rebase時のコンフリクト
a. コンフリクトを修正してコミットする(--continue)
b. コンフリクトを修正せずに中止して元の状態に戻す(--abort)

コンフリクトの修正はマージと同じ。正しい状態を選択して適用していく。

コマンド
```shell
# 最新を取り込むブランチを最新化
git pull main

# リベース対象に移動
git checkout feature/xxxxx

# リベース
git rebase main feature/xxxxx

# コンフリクトになった場合、コンフリクトを解消しでadd
# commitはしない
git add .

# 修正してコミット
git rebase --continuea
# コンフリクトになる、解消を繰り返していく
# コンフリクトにならなければsuccessになる

# successになったら
# feature/xxxxブランチのコミット履歴をrebaseする
git rebase -i HEAD~11

# 中断する場合
git rebase --abort
```

https://www.amazon.co.jp/Git%E3%81%AB%E3%82%88%E3%82%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86-%E5%B2%A9%E6%9D%BE-%E4%BF%A1%E6%B4%8B/dp/4274068641/ref=sr_1_1?keywords=git%E3%81%AB%E3%82%88%E3%82%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86&qid=1693710548&sprefix=git%E3%81%AB%E3%82%88%E3%82%8B%2Caps%2C220&sr=8-1

# 結論
ちょっと自分が実際に体験したものではないので、なんとも言い難いが、調べる限り、rebaseをしたほうが履歴が見やすくなりそう。rebaseを使うほうがよさそうだ。
「なぜ、自然な日本語をめざさないのか」という開発者さんの記事に感銘をうけた話

# はじめに

本記事は「なぜ、そら豆スクリプトは、自然な日本語をめざさないのか」という開発者さんの記事に感銘をうけたお話から、同じテーマについて考察し、「日本語トランスコンパイラ言語 Re:Mind（リマインド）」という自作トランスコンパイラ言語の企画意図をまとめています。

# 参考リンク
[なぜ、そら豆スクリプトは、自然な日本語をめざさないのか](https://www.catch.jp/wiki/index.php?SoraMame.ps.js%2F%C6%FE%CC%E7%2Freason)　catch.jp　catch.jp-wiki 2012-12-02

↑こちらが直接感銘を受けた記事です。記事の発信者は日本語プログラミング言語「なでしこ」[^1]の開発コントリビュータさんっぽい感じのスクリプト言語開発者さん。

BingのCoパイロットに記事を要約していただき、さらに私の方で要約しました。

>・そら豆スクリプトとは：
日本語っぽいプログラミング言語であり、自然な日本語を目指さない。
・自然な日本語を目指さない理由：
ほとんどのプログラミング言語は自然言語ではなく、自然な正しい日本語を定義するのは難しいから。
・なぜ日本語っぽいプログラミング言語を使う/作るのか？：
たとえ一部でも、見なれた言葉がまざっていたほうが、プログラミングが圧倒的にラクになる。
・プログラミングの本質：
コンピュータやネットワークをどのように動かすか、きちんと考えて表現することだ。


# どこに感銘を受けたか
「なぜ、日本語っぽいプログラミング言語を使ったり作ったりするのかというと、たとえ一部でも、見なれた言葉がまざっていたほうが、プログラミングが圧倒的にラクチンになるからだ。」というお言葉。ここで言われている「見なれた言葉」とは日本語の単語のことと解釈できます。

このあたりは人による「好み」で、だいぶ意見が分かれるでしょう。私は日本プログラミング言語ユーザーでもあるので、半角英数字記号のASCII文字だけの実装言語にはこだわりはなく、可能な限り業務単語や用語を原語のままソースコードにそのまま持ってきたいクチなので、この方の感覚やおっしゃりたいことに強く同感してしまうのです。

「記号と略号だけで、ほぼ作れるプログラミング言語もあるけれど、覚えたり使いこなすのに、時間がかかる。」いやいやそれは「あなた」だけでしょ！とみなぎる自信から異論を感じるデベロッパーさんもたくさんいらっしゃるでしょう。

私も英語の読み書きはそれほど抵抗がある方ではないのですが（すらすら読めるという意味ではない）また、記号と略号だけの言語も大好きなのですが、日本語がなんだか好き。

## 納得したところ
「自然な正しい日本語（のプログラミング言語）を定義するのはカンタンじゃない」というお言葉。本文ではだいぶ大きな見出しヘッダになっています。


日本語プログラミング言語Mind[^2]のように逆ポーランド記法とスタック処理を使ったForth言語をベースとした例を除くと、その後の世代の「なでしこ」や「プロデル」[^3]は語順や助詞の扱いなどで、そうとう苦労されていると拝察いたします。


# 記事の結論
「そら豆スクリプトでは、あえて自然な日本語によるプログラミングを目指していない。自分のアタマで考えて自分のアイデアをカタチにする、それをラクにする道具を目指している。」と、おっしゃっていると解釈しました。

とにかく、別にいまでもラクですよと思われる方はたくさんいらっしゃると推定されます。別にASCII文字言語でラクに書けるし、アイデアもまとめられるしと、強めの自信を持たれている方は多いと思います。

ただし、結果はどうあれ形式言語として日本語を採用したプログラミング言語はもっと百科繚乱であってよいと思っておりまして、著者の方のご努力に敬服する次第です。

# わたしの方向性
やはり、プロフェッショナルなデベロッパー、プログラミングを生業とするような方は、地頭もよい目で英語単語の読み書きも抵抗がない方が多いと思います。

とはいっても、そのような感覚はけっこう若めの脳をお持ちの方で、それは実年齢とは関係ないかもしれませんが、システム開発業界の中では経験とともにあるいは実力高めの理由により、システム全体を見る立場に移っていってしまうと、なかなか細かい実装言語にタッチする機会といいますか、実務時間としては実装作業は消失し、細かい実装言語のライブラリまでは覚えていないし、なにか動くものを書けるというところまでのスキルを消失している方はざらにいらっしゃるかと。

ので、そういう層とばりばり現役実装担当者層とのコミュニケーションツールとして日本語プログラミング言語が生かせないかなと考えております。また、現役プログラマと元プログラマの共有ツールとしての位置づけなので、日本語らしさにはこだわらず、一般的なC/C++由来の構文を許容しています。（ただし、ブロック文の波かっこは使わない。）

https://qiita.com/mylifewithviolin/items/9d58db8a101807c19bde

https://qiita.com/mylifewithviolin/items/ee1a16a363aaa4fe3f4c

# おわりに
「『〇〇〇〇』という〇〇さんの記事に感銘を受けた話」も実は今回で３回目となります。この記事のシリーズ化は最初の記事投稿時から想定しておりました。２回目の記事[^4]を投稿したときは、もうそんなに反響ないだろうと思っていましたが、１回目[^5]を上回るView数といいねをいただき驚いています。

今後も似たテーマ
**母語でのプログラミング言語って必要なの？**
で記事をあげていくと思いますが、お付き合いいただけると幸いです。

[^1]: Qiita [なでしこでもっと美しくFizzBuzzを書く](https://qiita.com/kujirahand/items/4d6a0166f54e4d6290fc)　参照
[^2]: Qiita [日本語プログラミング言語「Mind」最新版をリリースしました](https://qiita.com/killy/items/ccec1fbb81c4432757f5)　参照
[^3]: Qiita [日本語プログラミング言語「プロデル」でズンドコキヨシ](https://qiita.com/jpl_produire/items/e28a54709b7eb73cd201)　参照
[^4]: Qiita [「『プログラミング＝英語』という状況は正しくない。多言語でコードを書ける世界が求められている」という言語学者さんの記事に感銘をうけた話](https://qiita.com/mylifewithviolin/items/d545792ce594d45ed4cb)　参照
[^5]: Qiita [「日本語プログラミング言語は 日本人にとって可読性が高いが、 なぜあまり普及していないのか」という学生さんの卒論に感銘をうけたお話](https://qiita.com/mylifewithviolin/items/d15fdf16c6a66bdcf5b1)　参照
Auroraと他のRDSで、Datadogで使えるメトリクスが違う

Datadogを使用してAuroraのモニターを作成しようとしていました。
メモリ使用率のモニターを作成するために「aws.rds.memory.total」と「aws.rds.memory.free」というメトリクスを使用しようとしたところ、メトリクスのサジェストで出てきませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661124/abf50bce-ca68-55ac-43c9-76614b4bfb12.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661124/34c2dfaa-7525-e90a-368c-214b38ef671b.png)

[公式サイト](https://docs.datadoghq.com/ja/integrations/amazon_rds/?tab=%E6%A8%99%E6%BA%96 )にはメトリクスの表記がありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661124/c81b1807-81e6-2786-e3f4-220200e64090.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661124/75339638-5325-0b83-7f47-928501b27ee6.png)

CPU使用率のモニターを作成するために使用した「aws.rds.cpuutilization」というメトリクスはサジェストで出てきたので、DatadogとAuroraがうまく疎通できていないわけではなさそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661124/10022e09-1f06-45f2-62ec-20dfa538d179.png)

Datadogの公式サイトを詳しく見てみると、どうやらAuroraだけで使えるメトリクスと、Auroraを含めたすべてのRDSで使えるメトリクスと、Aurora以外のRDSで使えるメトリクスの3種類があるみたいです。

Auroraだけで使えるメトリクスの例
「Only available for Aurora DBs」という記載があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661124/e064ad68-c5d7-00dd-9c6d-1f8a64c58366.png)

Auroraを含めたすべてのRDSで使えるメトリクスの例
「Available for Aurora DBs」という記載があります。↑と比較すると、onlyという文言が抜け落ちています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661124/c0db3a4a-d7b1-5a89-0342-2b3d197b31bc.png)

Aurora以外のRDSで使えるメトリクスの例
こちらはAuroraに関しての記述はありませんが、↑の2つの例が存在することを踏まえると、使えないと考えるのが妥当だと思われます。先ほどお見せしたように、実際使えませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661124/72dd0e07-0016-48d1-6896-a1028cc02459.png)

[AWSの公式サイト](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMonitoring.Metrics.html )を調べたところ、Auroraが使用しているメモリの量を計測するメトリクスはそもそもないみたいです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661124/db815aac-d771-bf83-d55a-21c39f153285.png)

Auroraはメモリ使用率があらかじめ設定されているから特別監視する必要はないってことなんですかね？（この辺全然わからない。詳しい人いたら教えてほしい。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661124/362ce9a0-f046-7de4-cc93-8941527506ec.png)

https://aws.amazon.com/jp/blogs/news/best-practices-for-amazon-aurora-mysql-database-configuration/

## まとめ
- Datadogで使えるメトリクスはAuroraと他のRDSで完全に一致しているわけではない
- Auroraだけで使えるメトリクスと、Auroraを含めたすべてのRDSで使えるメトリクスと、Aurora以外のRDSで使えるメトリクスの3種類が存在する


## 教えてほしい
Datadogの[公式サイト](https://docs.datadoghq.com/ja/integrations/amazon_rds/?tab=%E6%A8%99%E6%BA%96 )にはサービスチェックのためのメトリクスとして「aws.rds.read_replica_status」というメトリクスが提供されているみたいなんですが、これが使えませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661124/53eda5e9-a5cb-235d-de6f-c1c177c81155.png)

これはAuroraでは使えないと明示的に書いていなかったので使えるのかなと思うのですが、サジェストされませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661124/3b6998d0-c4f5-4356-e153-87d39e18f243.png)

このメトリクスの使い方わかる人は是非教えてほしいです!マサカリも待ってます!
ファイアウォールの設定（ufw）


### ファイアウォールの有効・無効の状態を表示
```
sudo ufw status
```

### ファイアウォールを有効にする
```
sudo ufw enable
```

### ファイアウォールを無効にする
```
sudo ufw disable
```

### すべての通信を無効化する
現状繋いでいるままのssh接続に関しては途中で切れることはあるが、一度ログアウトすると再度sshから接続するのは不可能になる
```
sudo ufw default DENY
```

### すべての通信を有効化する
```
ufw default ALLOW
```

### ポート番号◯◯に来る通信を許可
```
sudo ufw allow [ポート番号]
```

（例）外部からのssh接続を許可
```
sudo ufw allow 22
```

（例）192.168.1.0/24からのssh接続を許可
```
sudo ufw allow from 192.168.1.0/24 to any port ssh
```

（例）192.168.1.10からのssh接続を許可
```
sudo ufw allow from 192.168.1.10 to any port ssh
```

### ポート番号◯◯に来る通信を許可しない
```
sudo ufw deny [ポート番号]
```

### アプリケーションの一覧を表示
```
sudo ufw app list
```

### アプリケーションを指定して接続を許可
```
sudo ufw allow '[アプリケーション名]'
```

（例）NginxへのHTTP(80),HTTPS(443)の接続を許可
```
sudo ufw allow 'Nginx Full'
```

### ルール番号を表示して設定を確認
```
sudo ufw status numbered
```

（例）番号「1」を指定してルールを削除
```
sudo ufw delete 1
```

（例）連続してアクセスしてくるIPアドレスの接続を許可しない」設定
（30秒間の間に6回以上接続を試みた IP アドレスを許可しない）
```
sudo ufw limit 22
```

### ファイアウォールをリロードする
```
sudo ufw reload
```
2023年8月振り返り〜頭が筋肉痛〜

## はじめに

さぁ、8 月の振り返りです！
毎月「はじめに」を書くのが 1 番迷います。
こんな時は chatGPT におまかせ。

```
8月、夏真っ盛りのこの月、私は多くの出来事や経験を通して、さまざまな気づきを得ることができました。
これらの瞬間やエピソードは、私にとって忘れられないものばかりです。
次の章では、私が8月に経験した主要なトピックを深掘りして共有します。
興味を引かれた方、来月もお楽しみにしていてくださいね！
```

はい！今月もよろしくお願いします！

## 2023 年 8 月のざっくり振り返り

今月も盛りだくさんな 1 ヶ月でした。
優先度高めのインシデントが発生し、解決まで頭の中で常にちらついていたり。
今の自分ではできないこと（＝キャッチアップなり成長必須なこと）に
チャレンジさせてもらえたり。

よく、「頭が筋肉痛」という言葉を使うのですが、
まさにそんな 1 ヶ月でした。
筋トレと同じく継続して力をつけて、また負荷を上げていきたいです。
（筋肉痛なのに負荷をあげようとしている ←）

### 今月おもしろかった、気になった記事、本など

##### ◯ チームトポロジー 価値あるソフトウェアをすばやく届ける適応型組織設計

https://www.amazon.co.jp/%E3%83%81%E3%83%BC%E3%83%A0%E3%83%88%E3%83%9D%E3%83%AD%E3%82%B8%E3%83%BC-%E4%BE%A1%E5%80%A4%E3%81%82%E3%82%8B%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%82%92%E3%81%99%E3%81%B0%E3%82%84%E3%81%8F%E5%B1%8A%E3%81%91%E3%82%8B%E9%81%A9%E5%BF%9C%E5%9E%8B%E7%B5%84%E7%B9%94%E8%A8%AD%E8%A8%88-%E3%83%9E%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%BB%E3%82%B9%E3%82%B1%E3%83%AB%E3%83%88%E3%83%B3/dp/4820729632

最近、チームづくりやマネジメントといった話題の LT やイベントで必ず出てきていたので、
夏休みを使って読みました。
認知負荷をいかに下げるのかだなと。
今の社内のチーム編成とも接続ができ、おもしろかったです。

##### ◯ ビジネスマンのための新教養 UX ライティング

https://www.amazon.co.jp/%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%83%9E%E3%83%B3%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%96%B0%E6%95%99%E9%A4%8A-UX%E3%83%A9%E3%82%A4%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0-%E9%AB%99%E6%A9%8B-%E6%85%88%E5%AD%90/dp/4798167452/ref=asc_df_4798167452/?tag=jpgo-22&linkCode=df0&hvadid=454308455743&hvpos=&hvnetw=g&hvrand=5883129738291804961&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009300&hvtargid=pla-978699070711&psc=1&th=1&psc=1

こちらは新しく入社されたデザイナーさんにおすすめいただきました。
基本のきが図解などで説明されており、分かりやすかったです。

##### ◯ 事業価値とエンジニアリング・リソース効率性とフロー効率性 / Business Value and Engineering

https://speakerdeck.com/recruitengineers/business-value-and-engineering

こちらは社内で同僚がシェアしてくれた資料。
フロー効率/リソース効率のお話が分かりやすくまとまっていたのと
事業とプロダクトは切り離せないので、そのあたりも含めて記載がありよかったです。

## 印象に残ったトピック

#### ① 要件定義の難しさ

これまでも要件定義の経験はあるのですが、今回関わったものは難易度が違ったなと。
何が違ったのか考えてみると、これまでは**要求の時点で課題が明確なもの** を扱っていました。
**課題が明確＝仮説（こうすればユーザーの課題が解決するだろう）の精度が高い**状態で
要件定義ができるものだったなと、
今回は何を実現したいかはありましたが、課題が明確でない状態でした。
仮説の精度が低いので、**「こうだと思う」「この方が良さそう」** といった
感覚になってしまう部分も多く、ここをいかに決めていくかが難しいです。
ユーザーヒアリングだったり、AB テストだったり、
方法はいくつかあるのかなと思いますが、まだ正解は見えておらず、、
こちらは引き続き。また別途記事にできればと思っています。

#### ② インシデント対応

不具合調査やインシデント対応はケーキの切り分けに例えられることが多いですが、
その力が多少はついたかな？と思う一方でもっと早く分けられたのではと思ったり。
結構デバッグありき（ニュアンス的にはログありき）の調査をしがちですが、
インフラなどその手法では上手くいかない部分も多いなと。
優先度が高いインシデントほど、復旧までのスピードも求められるので
もう少し切り分けの精度を上げたいところです。

## 終わりに

今月も今月とて大満足もりもりな感じでした。
余談ですが、社内で開催されている研修の影響もあり、
最近は逐一メモをとることにしています。
自分が何をどのように感じたか、できる限り都度メモしています。
（人に見せられないようなものもあったりなかったり）

**ありたい自分に引っ張られて捻じ曲げてしまう前にメモをとっておく**ことで
正しく現在地の把握できるようになったり、
自分を客観視できるようになるのではと期待して継続中です。

今月も読んでいただきありがとうございました！
来月もよろしくお願いいたします！
Ubuntu Serverにubuntu-desktopをインストールした場合と、Ubuntu Desktopをクリーンインストールした場合の違い

# 前提
Ubuntu Serverにデスクトップ環境をインストールすることは可能。
Ubuntu Serverをインストールした後、以下のコマンドを順に実行すればUbuntu Desktopを使用できるようになる。
```
sudo apt update
sudo apt upgrade
sudo apt install ubuntu-desktop
```

# Ubuntu Serverにubuntu-desktopをインストールした場合のイメージ
イメージとしては「Ubuntu Server」+「デスクトップ環境」。
ここでいう「デスクトップ環境」とは「GNOMEデスクトップ環境をベースとしたコンポーネント」のことを指す。具体的には以下が追加される。

### GNOME Shell
GNOMEデスクトップのユーザーインターフェース（UI）を提供する。これは、デスクトップ上のアプリケーションランチャー、ウィンドウマネージャー、タスクバーなどの要素を含む。

### Nautilus
GNOMEのデフォルトファイルマネージャーで、ファイルやフォルダーの管理を担当する。

### GNOME Terminal
コマンドラインアクセスを提供するターミナルエミュレータ。

### GNOMEアプリケーション
メールクライアント（Evolution）、ウェブブラウザ（GNOME WebまたはFirefox）、テキストエディタ（GNOME Text Editor）、カレンダー（GNOME Calendar）など。

### GNOMEコントロールセンター
システムの設定を管理するためのユーザーインターフェース。
実際に環境構築したところ、IPアドレスを設定する画面が「GNOMEコントロールセンター」になかった。`netplan`コマンドで設定する必要がある。手動でIPアドレスを設定しようとすると構文エラーの修正が大変なため、できることならUbuntu Serverインストール時のネットワーク設定画面で設定しておきたい。

### GNOMEソフトウェアセンター
ソフトウェアのインストールと管理を行うためのGUIツール。
実際に構築してみたところ、こちらはインストールされていなかった。別途コマンドを実行する必要がある。また、GUI上からはアプリがインストールされない事象が見られた。アプリをインストールする際に別途コマンドを実行する必要がある。
```
sudo apt install ubuntu-software
```

# Ubuntu Desktopをクリーンインストールした場合の違い
Ubuntu ServerにUbuntu Desktopをインストールした場合、Ubuntu Desktopをクリーンインストールした場合と比較し、以下のような違いがある。
### サーバーコンポーネント
インストール時にUbuntu Serverがベースとなり、サーバーコンポーネントが含まれています。これには、サーバー用途に最適化されたカーネルとパッケージが含まれる。

### デスクトップ環境の追加
デスクトップ環境は、Ubuntu Serverに追加され、デスクトップ環境を利用できるようになる。しかし、システムはサーバーカーネルを使用し、一部のサーバー設定（SSHサーバー、ネットワーキング関連の設定、サーバーアプリケーション、サーバーグループなど）が残る。

### サーバーソフトウェア
サーバーソフトウェア（Webサーバー、データベースサーバー、ファイルサーバーなど）がすでにインストールされている場合がある。これらは通常、クリーンなデスクトップインストールには含まれない。

### メモリリソース
サーバーコンポーネントがインストールされているため、デフォルトでメモリを消費しやすい。クリーンなデスクトップインストールよりもメモリを必要とする。通常のUbuntu Serverは少なくとも512 MBから1 GBのメモリが必要ですが、デスクトップ環境を追加した場合、最低でも1.5 GBから3 GBのメモリが必要となることがある。

# まとめ
Ubuntu Serverにubuntu-desktopをインストールした場合、クリーンインストールしたUbuntu Desktopではできていたアプリのインストールやネットワークの設定などができないことがあり結局Ubuntu Server同様にCUI操作をしないといけないということが多々ある。相乗りするよりUbuntu Serverを利用するならUbuntu Serverを利用する！Ubuntu Desktopを利用するならUbuntu Desktopを利用する！と決めておいた方が操作に困らないかもしれない。
小ネタ: .NETプロジェクトでソースコードをサブディレクトリに整理する方法

自分用メモ

.NETプロジェクトではソースコードはサブディレクトリに入れると勝手に追跡してくれる。

例えば以下のような構造のプロジェクトがあるとして

```text
./
├── aaa.cs(Main関数が入っている)
├── bbb.cs
├── ccc.cs
├── project.csproj
└── project.sln
```

こんな感じにディレクトリを切ってわけていい

```text
./
├── project.csproj
├── project.sln
└── src/
    ├── aaa.cs(Main関数が入っている)
    ├── bbb/
    │   └── bbb.cs
    └── ccc/
        └── ccc.cs
```

`dotnet (build|run)`時に勝手に依存関係を追いかけてくれる。`dotnet run`は`.csproj`, `.sln`があるディレクトリじゃないとだめ。

ソースコードやプロジェクトファイルに何か変更をする必要もない。

ファイルの再配置をvscodeでやってると、しばしばvscodeでクラスの参照できない系の警告が出るが、vscodeで [フォルダを閉じる] -> [フォルダを開く] でフォルダを開き直すと、更新後のディレクトリ構成に合わせて依存関係を追いかけ直してくれる。
pyinstaller + yolo v8

# 課題

Yolo V8で作成したプログラムをPyinstallerを利用し、パッケージする時、下記のようなエラーが発生します。

https://github.com/orgs/ultralytics/discussions/1356


# 解決策

私もEXEファイルへのアプリケーション変換中に同様のエラーに直面しましたが、このページにたどり着きました。特に@dh031200さんの提供したアドバイスが非常に有益でした。

今回は、私が発見した別の解決策をご紹介したいと思います。

使用環境としては、Windowsシステム上でpyinstaller, YOLO v8, そしてTkinterを用いています。

### ステップ1: 必要なライブラリのインストール

まず最初に、以下のコマンドで必要なライブラリをインストールします。

```bash
pip install ultralytics
pip install pyinstaller
```

### ステップ2: Pyinstallerのspecファイルの編集

次に、Pyinstallerのspecファイルに以下のコードを追記します。これは`collect_data_files`を使用して、Ultralyticsライブラリの全てのデータファイルを参照可能にするためのものです。

```python
from PyInstaller.utils.hooks import collect_data_files
import ultralytics

ultra_files = collect_data_files('ultralytics')

a = Analysis(
    ['GUI-yolo-distribution.py'],
    pathex=[],
    binaries=[],
    datas=ultra_files,
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
```

### ステップ3: specファイルを用いたパッケージング

最後に、以下のコマンドでspecファイルを用いてアプリケーションをパッケージングします。

```bash
pyinstaller main.spec
```

![yolo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/58edce25-db1f-a38a-5fa1-a0cd28ef7bcb.png)

### 結果

この手順により、私は問題を解決することができました。希望があれば、是非お試しください。

以上が私の手順です。ご参考になれば幸いです。
LXDとにかく削除

## 目的
LXDが使用しているボリュームサイズが肥大化してしまった場合は何もかも一旦消したくなるそんな時は以下のコマンドを実行する

```bash
lxc image delete $(lxc image list --format csv -c "l")
lxc delete --force $(lxc list --format csv -c "n")
```
パワーアップconsole.log()　〜デバッグスキルを向上〜

# はじめに
プログラム実行中のバグやエラーを特定し、修正する方法をデバッグ技術と言います。
JavaScriptやTypeScriptでconsole.log()を実行することで変数の値などを出力することができます。
今回は様々なconsole APIの方法をまとめました

# デバッグ技術
+ プリント
 コードの特定の箇所にconsole.log()を追加することで、変数を出力して確認することができます。
 変数の値や実行の流れをトレースすることでバグの原因を特定しやすいようになります。
+ ステップ実行
 VSCodeなどデバッガを使用してコードをステップ(行)ごとに実行する方法です。
 変数の値や実行の流れをGUIから詳細に確認することができます。
+ ブレークポイント
 デバッガを使用して、特定の変数や条件文で処理を止めて変数の値や実行の流れを確認することができます。
+ ログ分析
 プログラムの実行をログファイルに出力し、バグの原因を特定します。
+ テスト（UTとST）
 テストケースを設計し、それぞれの機能をテストし、バグを特定します。
+ メモリリーク
 プログラムがメモリを正しく開放していない場合に発生するメモリリークを検出します。
 ツールを使用してメモリ監視をすることができます

# 様々なプリント方法
プリントする際に変数に{}を追加するだけで、値だけではなく、変数名も出力されます。
```javascript
var num = 1;
console.log(num) // 1
console.log({num}) // {"num":1}
```

### console出力のフォーマット
+ %s: 文字列として出力
+ %iまたは%d: 整数
+ %f: 浮動小数点値
+ %o: 拡張可能なDOM要素
+ %O: 展開可能なJavaScriptオブジェクト

これらを組み合わせると
```javascript
console.log("%i個 %s あります, 10, 'console'); // 10個 console developer
```

## ログのグループ化
console.group()を使用するとVScodeなどでログをグループ化して展開したりまとめたりできます
```java
console.group("sample label");
console.log("aaa");
console.log("bbb");
console.log("ccc");
console.log("ddd");
console.groupEnd("sample label");
```

# メソッドの実行回数をカウント
console.count()を使用すると特定の関数や機能が実行された回数を出力することもできます
```javascript
const greet = (food) => {
  console.count(food);
};

greet('meat'); // 出力結果:1
greet('fish'); // 出力結果:1
greet('meat'); // 出力結果:2
```
他にも
```javascript
document.addEventListener('click', function() {
  console.count('Document clicked');
});
```

余談ですが、console.time()を使用すると特定の処理の実行時間が計測できます。
デバッグ時にconsole.count()と合わせて活用できます。

様々なconsoleメソッドはコチラ

https://learn.microsoft.com/en-gb/microsoft-edge/devtools-guide-chromium/console/api
8051エミュレータ

自分の理解が正しいか確認するために8051のエミュレータを探してみました。

とりあえず目に留まった簡単に試せるものです。もっといいのがあのかもしれませんが。

githubはこちら

https://github.com/jarikomppa/emu8051

バイナリも用意されてます。

https://solhsa.com/8051.html

Windows 7で試してみます。cmdを開いて英語モードにしてからコマンドを実行します。

```
c:\> chcp 347
```

intel hexファイルを読み込んで実行できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/6d8829ac-6f74-2e15-4529-5ca914ec5ef8.png)

8051の命令はここが参考になります。

http://www.st.rim.or.jp/~nkomatsu/intel8bit/i8051.html

platformioのtoolchain-sdccのパッケージにusim(s51)というエミュレータがありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/31144f96-4607-bdac-aedb-916472095579.png)
smart japan ノートパソコン買ってみた その5

# 概要
smart japan ノートパソコン買ってみた。
アプリ入れてみた。

# chrome
- google.com/chromから



# oedit
- oedit_7542.zipをダウンロード
- 解凍してprogram files(x86)に置く

# NeosVR
- neos.comから、NeosPublicSetup.msiをダウンロード実行

# iverilog
- iverilog-v12-20220611-x64_setup.exeをダウンロード実行。

# python 
- python-3.11.4-amd64.exeをダウンロード実行。

# wsl1
- Windowsのスタートボタンから、「設定」→「アプリ」→「プログラムと機能」
- 表示されたコントロールパネルの画面の「Windowsの機能の有効化または無効化」をクリック
- [Windows の機能] のダイアログが開くので、「Linux 用 Windows サブシステム」を有効にします。
- 再起動します。
- Windows Storeから「ubuntu」と検索して、「ubuntu 18.04.6 lts」をインストールします。

# wslの ubuntu 18.04に elixirをインストール

```
$ mkdir elixir

$ cd elixir

$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb

$ sudo apt-get update

$ sudo apt-get install esl-erlang

$ sudo apt-get install elixir

```

# Canon IP2700
- pd68-win-ip2700-2_56c-ejs.exeをダウンロード実行。



以上。
Javaで「メンバメソッドとは」の動作を確認してみた

# 概要
Javaで「メンバメソッドとは」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/start/member/index5.html

# 実装
以下のファイルを作成しました。
```CTest5.java
class CTest5{
  public static void main(String args[]){
    Television tv1 = new Television();

    tv1.setChannel(1);
  }
}

class Television{
  private int channelNo;

  public void setChannel(int newChannelNo){
    channelNo = newChannelNo;
    System.out.println("新しいChannelNo=" + channelNo);
  }
}
```
以下のコマンドを実行しました。
```
$ javac CTest5.java 
$ java CTest5 
新しいChannelNo=1
```

# まとめ
何かの役に立てばと。
データの取得と複製　フォレンジック画像ファイルの内容の表示


◆目的
目的は、フォレンジック画像を表示するためにAccessData FTK Imagerを使用する方法

ハードディスクのフォレンジック イメージを取得した後、フォレンジック調査者はイメージ ファイルの内容をプレビューして、調査に役立つ証拠が含まれているかどうか、または追加の分析が必要かどうかを確認する必要があります。

◆概要
AccessData FTK Imagerツールに慣れ、元の証拠を変更せずにコンピューター データのフォレンジック イメージを調査する方法を学習します。また、電子証拠を評価して、フォレンジック ツールによる証拠のさらなる分析が必要かどうかを判断する方法を理解するのにも役立ちます。

１，
AccessData_FTK_Imager_4.3.1.exeをダブルクリックしてセットアップを起動し、ウィザードによるインストール手順に従ってアプリケーションをインストールします。
※インストール プロセスの最後に、セットアップ ウィザードで [ Launch AccessData FTK Imager]オプションがオンになっていることを確認し、 [Finish]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/86f1beae-4640-a210-9429-8c38b987784d.png)

２，
次のスクリーンショットに示すように、AccessData FTK Imagerのメイン ウィンドウが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/0266b1e1-8554-4c49-48bc-ab1008a12132.png)

３，
[ファイル] --> [証拠アイテムの追加…]をクリックして証拠を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/51777797-88ce-cd5d-bf4a-41dc435094bc.png)

※あるいは、ツールバーの「証拠の追加」アイコンをクリックして証拠を追加することもできます。

４，
「ソースの選択」ウィンドウが開きます。[イメージ ファイル]オプションを選択し、[次へ]をクリックします。

 ddイメージを調べます。したがって、[イメージ ファイル]ラジオ ボタンを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/69ec65c0-8b99-1679-32ae-36a171a52a5e.png)

５，
[参照]ボタンをクリックしてイメージ ファイルのパス ( C:\CHFI-Tools\Evidence Files\Forensic Images\Windows_Evidence_001.dd ) を指定し、[完了]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/a04c3400-eba5-27c6-81f9-296122868c92.png)

６，
証拠ファイル ( Windows_Evidence_001.dd ) が、メイン ウィンドウの左ペインの[証拠ツリー]セクションの下に表示されます。次のスクリーンショットに示すように、証拠ファイルとその内容を展開してツリー形式で表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/ceb37d6f-c333-b865-228b-ce47102c316a.png)

７，
証拠ツリーから任意のファイルまたはフォルダー (ここでは画像フォルダーを選択しました)を選択すると、右ペインの[ファイル リスト]の下にファイル リストが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/17e96f1d-1bd5-aef9-b4b8-1c147003204f.png)

８，
AccessData FTK Imagerでは、ファイルまたはフォルダーの内容を表示するだけでなく、ファイルの 16 進値も表示できます。16 進値は、ファイルが削除されているか上書きされている場合でも、ファイルの生の正確な内容を判断するのに役立ちます。したがって、16 進値は、OS が通常アクセスできない情報を識別して取得するのに役立ちます。

ファイルの16進値を表示するには、ファイル リストからファイルを選択します (ここでは1200px-Peace_sign.svg.pngを選択しました) 。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/d7ab5a67-ac32-cc75-c7b7-8db182a75a64.png)

９，
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/3b7e22a1-e494-a45e-b2cd-77628f35ada5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/7a0e8d98-920c-ac96-7d9e-e48747877cf0.png)

１０，
左下のペインの[プロパティ]タブをクリックして、選択したファイルのファイル クラス、サイズ、日付、開始クラスターなどのプロパティを表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/79c0e67c-08ee-d407-3f6a-a7021faef066.png)

１１，
左下のペインの「Hex Value Interpreter」タブをクリックして、選択したファイルの符号付き整数、DOS 日付などのプロパティを表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/2bb4544d-94f6-2367-3940-8bcb3dc4ed9a.png)

１２，
このようにして、 AccessData FTK Imagerツールを使用してフォレンジック イメージ ファイルの内容を検査できます。

開いているウィンドウをすべて閉じます。
Google Bard はまだまだという感じですね。

最近、Chat-GPT のライバルと言われる Google Bard をよく使っていますが、まだ「試験運用中」のままです。

「試験運用」の理由ですが、個人的に感じたのが確かに「まだまだ」ということです。

とにかく、間違いが多いです。

それも、いかにも正しいという感じで平然と答えてきます。

次の例は Nim という言語の複数行コメントについて聞いてみた例です。

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

Nim の複数行コメントは、/* と */ で囲みます。
Nim

/*
これは複数行コメントです。
複数行のテキストをコメントアウトすることができます。
*/

コードは慎重に使用してください。詳細

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

これは間違いで**正しい答えは #[ ... ]# です。**

```nim
# コメントの例

#[
  これは複数行コメントです。
  この中ではバックスラッシュ \ はエスケープされず、改行文字はそのまま改行されます。
]#

let here = """
  これはヒアドキュメントです。
  ヒアドキュメントはコメントとしては使えず、エラーになります。
"""

echo here

```

なお、Nim はややマイナーな言語のせいもあるかもしれません。C 言語などならもっと正確な回答を得られる可能性もあります。

面白いことに Bard にライバルは？と聞いてみると Chat-GPT と答えます。現状は Chat-GPT のほうが先行しているように見えますが。

あと、問題なのがフェイクやプロパガンダをそのまま信じる可能性があるそうです。(一応、チェックはしていると主張しています)

これは、Bard に限ったことではなく、今の AI には「常識」「良心」などがないため、学習した内容を人間のような常識に基づいて判別することができないそうです。
ABC318　自分の解法（A〜C）

ABC318の自分の解法です。残念ながらAtCoderのコンテストには時間の都合上、参加できないのですが、後で解いたものを少しでも残せたらと思います。

# A問題

https://atcoder.jp/contests/abc318/tasks/abc318_a

まずはA問題から。
A問題ははじめに入力した$M$が$N$を超えないまで$P$を足せば答えが出てきます。

```cpp
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
#define rep(i, n) for (int i = 0; i < n; i++)
#define ll long long

int main() {    
  int n, m, p;
  cin >> n >> m >> p;
  int ans = 0;
  while(m <= n) {
    ans++;
    m += p;
  }
  cout << ans << endl;
  return 0;
}
```

# B問題

https://atcoder.jp/contests/abc318/tasks/abc318_b

B問題です。
制約は$0\leq A_i < B_i \leq100$、$0\leq C_i < D_i \leq100$なので、$100 × 100$の$bool$型の配列で、$N$回の試行を実装すればいいです。
具体的には、$bool$型の配列を$vec$として$vec[A_i][B_i]$から$vec[C_i][D_i]$を$true$にして、最後に配列$vec$の中にある$true$の数を数えると、その数が答えになっています。

```cpp
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
#define rep(i, n) for (int i = 0; i < n; i++)
#define ll long long

int main() {
  int n;
  cin >> n;
  vector<vector<bool>> vec(100, vector<bool> (100, false));
  rep(i, n) {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    for (int x = a; x < b; x++) {
      for (int y = c; y < d; y++) {
        vec[x][y] = true;
      }
    }
  }
  int ans = 0;
  rep(i, 100) {
    rep(j, 100) {
      if(vec[i][j]) ans++;
    }
  }
  cout << ans << endl;
  return 0;
}
```

# C問題

https://atcoder.jp/contests/abc318/tasks/abc318_c

C問題です。
累積和を考えます。
まず、$1$日周遊パスのセットを購入する数を$k$セット($kD$枚)で固定した時に$N$日間の旅行の代金を最小化することを考えます。（ここの文章はAtCoderの公式解説からです。ごめんなさい。同じような解き方なので。）そして、配列$F$を昇順にソートします。$S_j=\sum_{i=1}^{j}F_i$とします。そして、$kP+\sum_{i=1}^{N-kD}F_i$、つまり$kP+S_{n-kD}$を求めれば良くなります。

```cpp
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
#define rep(i, n) for (int i = 0; i < n; i++)
#define ll long long

int main() {
  int n, d, p;
  cin >> n >> d >> p;
  vector<int> f(n);
  rep(i, n) cin >> f[i];
  sort(f.begin(), f.end());
  vector<ll> s(n + 1);
  rep(i, n) s[i + 1] = s[i] + f[i];
  ll ans = 1LL << 60;
  rep(k, 1e9) {
    int r = max(0, n - k * d);
    ll now = s[r] + (ll)p * k;
    ans = min(ans, now);
    if (r == 0) break;
  }
  cout << ans << endl;
  return 0;
}
```
PowerAutomateForDesktopの技術検証④

　今回は、運用に必要な項目などについて検証してみたいと思う。
検証してみたい項目は以下の通り。
１，デバック
２，アクティビティの表示変更・検索

# デバック

　デバックに関しては、下図のように「デバッグ」→「実行」Or「次のアクションを実行」で実行できるみたいだ。

　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3533364/9f281e57-09e7-b5bc-fd6a-3ca41bc2f3ed.png)

　また、以下のボタンでも可能そうだ。

　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3533364/2d2996cb-98a5-32e1-38c7-0f63cf97c250.png)

　また、下図のように欲しいところにブレークポイントが設定できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3533364/4d0bc9e1-6108-88ba-c7f1-c0c4a10bb621.png)

　この状態で、「デバッグ実行」と「実行」を試してみる。
１，「デバッグ実行」
　デバッグ実行では、他のRPAツールと同様にブレークポイントでいったん止まる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3533364/28db9808-0c8b-c709-795d-d8ad85bc2af7.png)

２，「実行」
　一方で、「実行」では以下のようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3533364/e134b570-a30d-4f35-e3d0-f5cd93407f3c.png)

　つまり、PADの実行の動作は、UiPathの時とは異なり「デバッグ実行」と同じ動作をするようである。

# アクティビティの表示変更・検索

　WinActorやUiPathではアクティビティのタイトル名を変更できるのだが、PADでは以下の通り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3533364/34f71e26-e6d3-38e6-0d4d-5107d352458f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3533364/14868c58-9e57-e6af-4f78-6cb19ba7276c.png)

　従って、タイトルの変更ができないため大規模なノードになったときに検索が厳しい。また、アクティビティの検索機能もないため大規模になればなるほどツールの運用・管理は厳しいのかなと思う。
AUTOSAR用語の定義場所

# Glossary, Acronyms and Abbreviations
AUTOSARや車載ソフトに使われる基本用語は、以下のAUTOSAR仕様書で定義されています。
<strong>[AUTOSAR_TR_Glossary.pdf](https://www.autosar.org/fileadmin/standards/R22-11/FO/AUTOSAR_TR_Glossary.pdf)</strong>
他のAUTOSAR仕様書を読んでよくわからない言葉が出てきたら、このファイルを辞書代わりに参照することをおすすめします。

CP・APに共通して使えるため、この仕様書はFOに分類されています。

# 例 (抜粋)
* <strong>Abbreviation</strong>
略字・略語は表の形式でまとめられています。
AUTOSAR独自の用語だけではなく、通信規格の名前や暗号の仕組みなどの一般的なソフトウェア用語についても記載されています。

   >|Abbreviation|Description|
   >|:--|:--|
   >|AES|Advanced Encryption Standard|
   >|FIFO|First In First Out|
   >|FO|(AUTOSAR)FOundation|
   >|OEM|Original Equipment Manufacturer|
   >|RTE|Runtime Environment|

* <strong>Definition</strong>
用語（Term）の定義や使用例が記載されています。
e.g. "Interrupt Vector Table", "Link Time Configuration", "manifest", "Reentrancy", "Sender-Receiver Communication"

---
以上
ActivityとFragmentの違い

ActivityとFragmentの使い分けのメモ。
#### Activityとは
- Activityは、全ての画面のベースになるコンポーネント。
- アプリのライフサイクルに合わせてペインを生成・破棄する。
- タブやマルチメインを実装する時はFragmentを利用することが多い。
- Activityは持っている値をアクティビティの２つのライフサイクルを跨いで保持できない。
#### Fragmentとは
- 複数のペインを持つことができる。
- 複数のライフサイクルを跨いで値を保持できる。
- Activityの上で動作し、ライフサイクルに合わせてペインを生成・破棄できる。
- UIの変更や更新が行い易いです。
- 値の保持機能があり、アプリの再起動や回転があっても次のライフサイクルに値が維持される。また、
- ペインを細かく分けることができる。

Fragmentは、Android3.0から、よりフレキシブルなUI実現のためにActivity上のUIの断片化を目的として生まれた。そのためレイアウト内にどのように配置するかという点でも、Viewのように扱えるように設計されている。ActivityだけではやりづらかったTab機能やActionBarなど、UIを実現しやすくなった。


#### 参考
https://creatorhiro.com/archives/1475

https://tttsunagari.jp/activity-fragment-difference/
以前使った Portable 化 Arduino 環境を検索する

Arduino 開発環境は2023/9/3現在の最新は 2.2.1 。しかしながら特定のディレクトリのみでUSBメモリにコピーしたりして使用できるポータブル環境のサポートがなされていない。
ポータブル環境が使える Version 1 系での Tips.


# ポータブル環境の乱立

お気軽にポータブル環境を作っていたりすると、あれ、あのプロジェクトどの環境だったかな??? となる。あちこちあてずっぽに開けるのではなく、ちゃんと調べる方法。

# 環境

- Ubuntu Linux 22.04 LTS

find と grep が使える環境ならどれでもOKなハズ。

# portable 環境内にスケッチを保存している場合


- ポータブル環境とスケッチの保存場所が同じ
- スケッチ名の一部"CO3"を覚えている

```
$ find . -name "*CO3*.ino"
```

これで、スケッチのある場所が表示される。

日付も表示するとき。


```
$ find . -name "*CO3*.ino" -ls
```

3日以内に編集したスケッチという条件を追加して検索

```
$ find . -name "*CO3*.ino" -mtime -3 -ls


```

2023/7/1〜2023/7/20 の間が最終更新のものを探す場合


```
$ find . -name "*CO3*.ino" -newermt '2023/7/1' -and ! -newermt '2023/7/21' -ls
```

これで、2023/7/1 0:00 〜 2023/7/21 0:00 の間の CO3 が含まれるスケッチを表示する。


# portable 環境内にスケッチを保存しているとは限らない場合

- スケッチ名の一部"CO3"を覚えている
- スケッチの保存場所はどこだったかな・・・


```
$ find . -name preferences.txt | xargs grep CO3
```

ファイルパス・ファイル名だけを表示

```
$ find . -name preferences.txt | xargs grep -ilr CO3
```

ファイルにアクセス権が無くてパーミッションエラーが発生する場合は以下のように標準エラー出力を捨てる

```
$ find . -name preferences.txt 2>/dev/null | xargs grep -ilr CO3 2>/dev/null
```

最後に Arduino 環境を使用した日時も表示

```

$ find . -name preferences.txt 2>/dev/null | xargs grep -ilr CO3 2>/dev/null | xargs ls -l

```

# 最新のプラグインが入った環境を調べる

最新の ArduBlock をインストールした環境はどれだったかな?


```

$ find . -name ardublock-all.jar -ls 

```
AUTOSARの始め方

# はじめに
このページはAUTOSAR仕様書や関連ページへの個人的なリンク集およびメモ書きです。
随時追記します。補足情報やアドバイスがあればコメントを頂けるとうれしいです😀

<!--
# 文書履歴
|版|日付|メモ|
|:-:|:-:|:-:|
|0.01|2023-09-03|初版|
-->

# 目次
* [AUTOSARとは](#-AUTOSARとは)
* [AUTOSAR仕様の読み方](#-AUTOSAR仕様の読み方)
* [リンク](#-リンク)

# AUTOSARとは
AUTOSARは複雑化する車載ソフトを標準化し、開発をラクにするために発足した国際的な団体です。
フォルクスワーゲンやトヨタ自動車をはじめ、2023年現在230以上の企業や研究機関が
AUTOSARの会員(Partoner)としてAUTOSARを利用しています。
AUTOSARが作成した車載ソフトのルール・ガイドラインをAUTOSAR仕様書と呼びます。
OEMやサプライヤはAUTOSAR仕様書に準拠した開発プロセスを利用することで、
ソフトウェアの再利用性を高めたり、メンテナンスのしやすいソフトを作ることができます。
AUTOSARのコンセプトは、AUTOSARが公開している以下のページで詳しく知ることができます。
https://www.autosar.org/about

OEM仕様書とは異なり、AUTOSAR仕様書は一般公開されており、誰でも閲覧することができます。

# AUTOSAR仕様の読み方
* 概要:
  * [Classic Platform AUTOSAR](https://www.autosar.org/standards/classic-platform)
  * [Adaptive Platform AUTOSAR](https://www.autosar.org/standards/adaptive-platform)
  * [Foundation AUTOSAR](https://www.autosar.org/standards/foundation)

AUTOSAR仕様書に使用される図はUMLに基づいてデザインされています。
図を理解するためにはUMLの知識が助けになります。

---
<strong>CP</strong>
CPはAUTOSAR発足時から開発され続けているプラットフォームです。
アプリケーション、RTE、BSWの3つの階層で構成されます。
CPのコンセプトを理解するために、初めての人はこのEXPを読むことをおすすめします。
[AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf](https://www.autosar.org/fileadmin/standards/R22-11/CP/AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf)

各BSWのAPIの定義やシーケンス図を見たい方は、"Web Doc Type" == "SWS" の文書を読んでください。（検索結果: [Search AUTOSAR](https://www.autosar.org/search?tx_solr%5Bfilter%5D%5B0%5D=category%3AR22-11&tx_solr%5Bfilter%5D%5B1%5D=platform%3ACP&tx_solr%5Bfilter%5D%5B3%5D=webDocType%3ASWS&tx_solr%5Bq%5D=)）

<strong>AP</strong>
APはCPとは異なるコンセプトで開発されているプラットフォームです。
CPとAPには各々の利点があり、開発者（OEM、サプライヤ）は用途に応じて
適したプラットフォームを選択する必要があります。

APがどのようなものなのかを知るためには、以下のEXPから読み始めることをおすすめします。
[AUTOSAR_EXP_PlatformDesign.pdf](https://www.autosar.org/fileadmin/standards/R22-11/AP/AUTOSAR_EXP_PlatformDesign.pdf)
CPに対する第二のプラットフォームとしてAPが開発された経緯や、APの特徴、全体像が記載されています。
併せて、以下の文書もAPのアーキテクチャを理解するのに役立ちます。
[AUTOSAR_EXP_SWArchitecture.pdf](https://www.autosar.org/fileadmin/standards/R22-11/AP/AUTOSAR_EXP_SWArchitecture.pdf)

# リンク
* [はじめてのAUTOSAR](https://cdn.vector.com/cms/content/know-how/VJ/PDF/For_Beginners_AUTOSAR.pdf)（ベクター・ジャパン株式会社）
BSWベンダーのベクター社が発行・公開している初心者向けの資料です。
非AUTOSARのソフトウェアを開発してきた企業や開発者に向けて、
AUTOSAR（CP）が紹介されています。
* [AUTOSARを使いこなす](https://monoist.itmedia.co.jp/mn/series/9343/)（MONOist）
AUTOSAR CP/APを使いこなすために留意すべき点や、定期的にリリースされる
AUTOSARの新バージョンで導入された新機能のポイントが解説されています。

---
以上