OmniAICreator/Qiita-1.07M huggingface dataset:
APIってなんだ。

#### はじめに

Railsにてアプリケーション作成中に位置情報取得したいなーっと思い、
方法を検索するとやたら出てくる言葉。それがAPI。
なんとなくは理解しているけど、ちゃんと説明できるようにまとめてみました。

#### API = application programming Interface

APIのフルネームです。
interface（インターフェイス）というのは「何かと何かをつなぐ」という意味があり、
ソフトウェア同士のデータのやり取りをつないでくれます。
（ハードウェアだったら分かりやすいのはHDMIなどのディスプレイ端子とか）

APIでよく使われている、Google Maps APIを例にしてみましょう。
みなさんよく某グルメサイトなどを使用すると必ず位置情報が確認できると思います。
あれは裏でグルメサイトのアプリとGoogleマップをGoogleのGeolocation APIが
繋いでくれているので利用できる機能なのです。
つまり誰かが作ってくれた便利な機能を、共有できるシステムなんですね。
あそこでAPIを利用していなければ、載っている住所をコピーして、Googleマップに移動して
ペーストする、という動作が増えてしまいます。
![undraw_Destination_re_sr74.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2909373/c2c81432-7f34-5a89-bde7-335f2a24f322.png)

#### APIのメリット

・自分の利用したいプログラムと連携でき、ソフトウェア開発の効率化につながる。
・効率化によりコストの削減に。
・連携することで、最新情報のアップデートが容易にできる。

ここでは分かりやすくGoogle Mapを例にあげましたが、他にも画像認識をしてくれるAPIや
自然言語処理のAPIなどいろいろありますので、よければ検索してみてください♩

以下記事もご参照ください。なるべく初心者にもわかりすい記事を選んでます。
>https://products.sint.co.jp/topsic/blog/api
>https://wa3.i-3-i.info/word12428.html
[PHP]基本金額の入力から税込金額の入力に対応した際の失敗話

自省を兼ねてメモとして残す

旧システムでは基本料金を入力することで消費税が計算され、
総額入力が表示されるようになっていた。
```
例：基本金額 8727円 → 消費税 872.7 → 税込金額 9599.7円

税込金額表示の際に利用されていたのが、 number_formatであったため切り上げて処理
9599.7 → 9600
```
新システムでは税込金額を入力することで、
基本金額と消費税が自動で計算されるようになった。
```
税込金額 9600円 → 基本金額 8728 + 消費税 872
```
この際税込金額をDBに格納できていれば問題なかったのだが、
改修の都合上DBに入れられるのは基本金額のみ。

すると以下の問題が発生する。
```
例：基本金額 8728円 → 消費税 872.8 → 税込金額 9600.8円

税込金額を正しく(9600として）表示するためにfloorを利用して切り捨て処理
9600.8 → 9600
```
利用する関数をnumber_format→floorに変更することで9600と丸く収めた。
のだが、金額を扱っている物なので正しい表記は 9,600 でなければならない。

number_formatによる切り上げとfloorによる切り捨てに目が行き過ぎて、
金額整形してくれていることを忘れてしまったという失敗でした。

正しくは以下のように修正しなければならなかった。
```
失敗：number_format(hoge); → floor(hoge);

正解：number_format(hoge); → number_format(floor(hoge));
```
## 結論
金額を取り扱っている場合はただ数字だけに注目するのではなく、
表示(,による3桁区切りのフォーマット）にも注意しよう。
paizaラーニング レベルアップ問題集 線形探索メニュー応用編 JavaScript 二次元データ 2

二次元データ 2 (paizaランク B 相当)

https://paiza.jp/works/mondai/sequence_search_problems_advanced/sequence_search_problems_advanced__matrix_step1

# 解答例
メソッドを駆使して解いてみました。
```javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

const [n, m, k] = lines[0].split(" ").map(Number);

console.log(
  lines.slice(1)
    .map(line => line.split(" ").filter(v => Number(v) === k).length)
    .reduce((a, b) => a + b)
);
```
今日からデイトラで「Web制作コース」受講　受講内容をアウトプットする

今日から学んだことをアウトプットしていきます。完全に自己満足ですので悪しからず。
以下の点を確実にアウトプット
①何で学んでるか
②日々の学習内容
③学びのポイント
④制作物
⑤+αで参考にした記事
⑥+αでやってみたこと



①デイトラ「Web制作コース初級編」
②HTMLのタグの書き方
③今日得た新しい知識
　・数字付きリスト（ol・liタグ）
④特になし
⑤特になし
⑥特になし

今日の一言感想
　Progateで学んでたので既知の内容でしたが、良い復習になった。
フラッシュメッセージの日本語化


## はじめに
フラッシュメッセージの日本語化について自分自身戸惑ってしまった事があったので記録して残しておきます。

## 日本語の言語設定
config.i18n.default_locale = :jaをapplication.rb追加します。

```ruby:config/application.rb
class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 6.1

    config.i18n.default_locale = :ja
  end
end
```

## Gemfileの追加
Gemfileに'rails-i18n'を追加します。

```ruby:Gemfile
gem 'rails-i18n'
```
bundle installを忘れないように！

## 日本語化ファイル作成
下記の物に書いてある文章に応じて日本語化される。

[公式 devise-i18n](https://github.com/tigrish/devise-i18n/blob/master/rails/locales/ja.yml)


## 日本語翻訳文言の設定
最後にconfig/locales にja.ymlを追加してあげます。
自分の名前に応じたものに従って下記のように書いていきます。

```ruby:config/locales/ja.yml
ja:
 activerecord:
   attributes:
     user:
       name: '名前'
     course:
       title: 'ゴルフ場名'
       address: '住所'
       body: 'ゴルフ場概要'
```


何回か苦戦はしましたが今後の記録の為に残しておきます。
paizaラーニング レベルアップ問題集 線形探索メニュー応用編 JavaScript 二次元データ 1

二次元データ 1 (paizaランク B 相当)

https://paiza.jp/works/mondai/sequence_search_problems_advanced/sequence_search_problems_advanced__matrix_step0

# 解答例
ワンライナーで解いてみました。
```javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

console.log(
  lines.slice(1)
    .map(line => line.split("").filter(v => v === ".").length)
    .reduce((a, b) => a + b)
);
```
paizaラーニング レベルアップ問題集 線形探索メニュー応用編 JavaScript 大小関係 2

大小関係 2 (paizaランク B 相当)

https://paiza.jp/works/mondai/sequence_search_problems_advanced/sequence_search_problems_advanced__range_boss

# 解答例
問題文を正しく理解することが大事です。
>以下の条件を満たす (l, r) ( l + 2 ≦ r )の組の数を答えてください。
>* l + 1 ≦ i ≦ r - 1 を満たすすべての i について、 
a_{ i - 1 } < a_i > a_{ i + 1 } または、 
a_{ i - 1 } > a_i < a_{ i + 1 } である

例えば、入力例2だと
1 2 1 2 1 2 1 (入力値)
ですが、(l,r)の組がわかりやすいように番号をふると、
1 2 3 4 5 6 7 (l,rの何番目か)
です。
条件を満たす(l,r)の組と数列は、
(1,3)の1 2 1,
(1,4)の1 2 1 2,
(1,5)の1 2 1 2 1,
(1,6)の1 2 1 2 1 2,
(1,7)の1 ２ 1 2 1 2 1,
以下(l,r)の組だけ示すと、
(2,4),(2,5),(2,6),(2,7),(3,5)(3,6),(3,7),(4,6),(4,7),(5,7)で、出力値は、15個です。


```javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

const [n] = lines[0].split(" ").map(Number);
const a = lines[1].split(" ").map(Number);

let count = 0;//条件を満たす (l, r) ( l + 2 ≦ r )の組の数
//aについて、調べる区間の左端l
for (let l = 0; l < n - 2; l++) { //( l + 2 ≦ r )なので最低三要素
　//aについて、調べる区間の右端r
  for (let r = l + 2; r < n; r++) { //( l + 2 ≦ r )なので最低三要素
    //条件を満たすか
    let flag = true;
    for (let i = l + 1; i <= r - 1; i++) {
      //満たさない
      if (!(a[i - 1] < a[i] && a[i] > a[i + 1]) &&
          !(a[i - 1] > a[i] && a[i] < a[i + 1])) {
        flag = false;
        break;
      }
    }
    //全て満たす
    if (flag) {
      count += 1;
    }
  }
    
}

console.log(count);
```
paizaラーニング レベルアップ問題集 線形探索メニュー応用編 JavaScript 大小関係

大小関係 (paizaランク B 相当)

https://paiza.jp/works/mondai/sequence_search_problems_advanced/sequence_search_problems_advanced__range_step4

# 解答例
問題文の
>連続する 3 要素 a_i, a_{ i + 1 }, a_{ i + 2 } が、 a_i < a_{ i + 1 } > a_{ i + 2 } または a_i > a_{ i + 1 } < a_{ i + 2 } となる i の個数を出力

に基づいて実装します。

```javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

const [n] = lines[0].split(" ").map(Number);
const a = lines[1].split(" ").map(Number);

let count = 0;//連続する三要素の区間の個数

for (let l = 0; l < n - 2; l++) {//aについて調べる区間の左端l
  if (a[l] < a[l + 1] && a[l + 1] > a[l + 2] ||
      a[l] > a[l + 1] && a[l + 1] < a[l + 2])
  {
    count += 1;
  }
}
console.log(count);
```
paizaラーニング レベルアップ問題集 線形探索メニュー応用編 JavaScript 連続した要素区間の最大長

連続した要素区間の最大長 (paizaランク B 相当)

https://paiza.jp/works/mondai/sequence_search_problems_advanced/sequence_search_problems_advanced__range_step3

# 解答例
aの調べる左端lと右端rについてループを回します。
左端lを基準に、右端rを条件を満たす(a[l]=a[r])限り伸ばしていきます。
条件を満たさなくなったら長さを求めます。
a[l]!=a[r]なら、r-1までの長さ、
同じ要素なのに最後だったら、rまでの長さを求めます。

```javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

const [n] = lines[0].split(" ").map(Number);
const a = lines[1].split(" ").map(Number);

let max = 0;//同じ要素が連続する区間の最大長
//aの調べる区間の左端l
for (let l = 0; l < n; l++) {
  //aの調べる区間の右端r
  for (let r = l; r < n; r++) {
    //同じ要素でなくなったら
    if (a[l] !== a[r]) {
      max = Math.max(max, (r - 1) - l + 1);//一つ手前までの長さ
      break;
　　　　　　　　//もし同じ要素だが最後だったら、
    } else if (r === n - 1) {
      max = Math.max(max, r - l + 1);//最後までの長さ
    }
  }
}

console.log(max);
```
Atcoder 競プロ典型90問 【004 Cross Sum】 Javaで詰まった話

こんにちは、[Kuni](https://qiita.com/kuniengineer)です。現在Javaを学習中で、Atcoderでコーディング力を高めているところです。
そこで[競プロ典型90問 004-CrossSum](https://atcoder.jp/contests/typical90/tasks/typical90_d)において、TLEが続いてしまい詰まったので、共有します。

# TLEのプログラムとACのプログラム

<details><summary>TLEとなってしまったプログラム</summary>

```java
import java.util.*;

public class Main {
    public static void main(String[] args){
        //標準入力受け取り準備
      Scanner scanner = new Scanner(System.in);
 
      //Intで読み込み
      int H = scanner.nextInt();
      int W = scanner.nextInt();
      
      //配列定義&格納
      int[][] number = new int[H][W];
      for(int i = 0; i < H; i++){
        for(int j = 0; j < W; j++){
          number[i][j] = scanner.nextInt();
        }
      }
      scanner.close();
 
      //行と列の合計値計算
      int[] sum_line = new int[H];
      int[] sum_row = new int[W];
      for(int i = 0; i < H; i++){
        for(int j = 0; j < W; j++){
          sum_line[i] += number[i][j];
          sum_row[j] += number[i][j];
        }
      }
 
      //結果格納配列
      int[][] result = new int[H][W];
      for(int i = 0; i < H; i++){
        for(int j = 0; j < W; j++){
          result[i][j] = sum_line[i] + sum_row[j] - number[i][j];
          System.out.printf("%d"+" ", result[i][j]);
        }
        System.out.printf("\n");
      }
    }
}
```
</details>

<details><summary>ACとなったプログラム</summary>

```java
import java.util.Scanner;

public class Main { //クラス名はMain
    public static void main(String[] args) {

      //標準入力受け取り準備
      Scanner scanner = new Scanner(System.in);

      //Intで読み込み
      int H = Integer.parseInt(scanner.next());
      int W = Integer.parseInt(scanner.next());
      
      //配列格納
      int[][] number = new int[H][W];
      for(int i = 0; i < H; i++){
        for(int j = 0; j < W; j++){
          number[i][j] = Integer.parseInt(scanner.next());
        }
      }
      scanner.close();

      //行と列の合計値計算
      int[] sum_line = new int[H];
      int[] sum_row = new int[W];
      for(int i = 0; i < H; i++){
        for(int j = 0; j < W; j++){
          sum_line[i] += number[i][j];
          sum_row[j] += number[i][j];
        }
      }

      //結果格納配列
      for(int i = 0; i < H; i++){
        StringBuilder sb = new StringBuilder();
        for(int j = 0; j < W; j++){
          if(j != 0){
            sb.append(" ");
          }
          sb.append(sum_line[i] + sum_row[j] - number[i][j]);
        }
        System.out.println(sb.toString());
      }
    }
}
```
</details>

# TLEとなっていた原因
　Javaでは、プログラムを実行するためにVMが存在しているそうですが、変数を保存するための宣言で値を保存しておくためのヒープを確保します。ループを使ってどんどんと値を入れていくような処理をすると、ヒープ領域が増えていってしまい、処理速度の低下に繋がるそうです。
　TLEが発生していたプログラムはこのことが原因で処理速度が低下し、設定時間内にプログラムを終わらせることができませんでした。
　そこでこの問題を解決するために利用するのが、StringBuilderクラスです。

## StringBuilderクラスとは
　このクラスは文字列操作を行うことができます。その中でString型はimmutableなオブジェクトですが、StringBuilderはmutableなオブジェクトで、元の文字列を書き換えることができます。今回の問題に対しては文字列を結合するために利用します。
　プログラム内ではStringBuilderのインスタンスを生成し、appendメソッドを利用してインスタンス変数に値を追加します。最後の出力の際にはテキストとして出力を行っています。

　参考になれば嬉しいです！！
paizaラーニング レベルアップ問題集 線形探索メニュー応用編 JavaScript 連続した要素の区間

連続した要素の区間 (paizaランク B 相当)

https://paiza.jp/works/mondai/sequence_search_problems_advanced/sequence_search_problems_advanced__range_step2

# 解答例
問題文の、
>a_l から a_{l + k - 1 }までのすべての要素が x である l ( 1 ≦ l ≦ n − k + 1 )の個数を答えてください。

に基づいて実装します。
sliceとeveryを使いました。

```javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

const [n, x, k] = lines[0].split(" ").map(Number);
const a = lines[1].split(" ").map(Number);

let count = 0;//x が k 個連続で並んでいる区間の個数

for (let l = 0; l < n - k + 1; l++) { //l ( 1 ≦ l ≦ n − k + 1 )
  if (a.slice(l, l + k).every(v => v === x)) {
    count += 1;
  }
}

console.log(count);
```
paizaラーニング レベルアップ問題集 線形探索メニュー応用編 JavaScript 区間探索 2

区間探索 2 (paizaランク B 相当)

https://paiza.jp/works/mondai/sequence_search_problems_advanced/sequence_search_problems_advanced__range_step1

# 解答例
前問の区間探索 1の以上のところを、未満にします。
```javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

const [n, x] = lines[0].split(" ").map(Number);
const a = lines[1].split(" ").map(Number);

let max = 1;//最大長
let [l, r] = [-1, -1];//lとrの初期値。r-l+1=0なるように。

for (let i = 0; i < n; i++) {
  if (a[i] < x) { //aの要素がx未満
    //lが初期値のままだったら更新
    if (l < 0) {
      l = i;
    }
    //rは伸ばす
    r = i;
    //最後だったら、長さ判定する
    if (i === n - 1) {
      max = Math.max(max, r - l + 1);
    }
  } else {
    max = Math.max(max, r - l + 1);
    [l, r] = [-1, -1];//l,rリセット
  }
}
console.log(max);
```
Cluster Error Log｜Script has allocated YYYYYYYYY but is limited to XXXXXXXXX

Script has allocated but is limited to

## はじめに

ただいま Clusterでいろんなアイテムを作ったりしてます

10月某日より
JavaScript一部が使えるようになったことでいろんなエラーメッセージを確認するようになりました！！

エラーについて少しずつ共有していきたいと思います

一発目は、最近よく出るようになりました

## Script has allocated YYYYYYYYY but is limited to XXXXXXXXX

~~~ ClusterScript.log
Script has allocated YYYYYYYYY but is limited to XXXXXXXXX
~~~

### Gooogle 英訳
スクリプトは YYYYYYYYY を割り当てましたが、XXXXXXXXX に制限されています

スクリプト制限があるということなんですね。

![Script has allocated xxxxxx but is limited to 500000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/8724cb94-38a0-0e73-8b7d-bb7482b5aac4.png)

#### 調べてみました

一応、Cluster Creator Kit ドキュメントの方には、
https://docs.cluster.mu/creatorkit/item-components/scriptable-item/

・スクリプトの長さは最大20KBに制限される
・Scriptable Itemコンポーネントは各アイテムに最大1つ設定が可能
・他の種類のアイテムのコンポーネントと共存することが可能

スクリプトの長さは最大20KBに制限とはかいてるけど、500,000 but?とは
書いてないみたいですね

#### Scriptable Itemに関する記事

- [2022.10.24 - 動くクラフトアイテムをつくってみよう！](https://creator.cluster.mu/2022/10/18/script-craftitem/)

- [2022.10.24 - Scriptable Itemでギミックを動かそう](https://creator.cluster.mu/2022/10/19/scriptableitem/)

- [2022.10.27 - 基本的な動きをつくることができるスクリプトのサンプルコード集](https://creator.cluster.mu/2022/10/26/script-sample/)

https://cluster.mu/

## 終わりに
まだ、１週間くらいしか情報がないので、UnityとScriptableItemなどのギミックについていろいろ調べてわかったことがあれば更新していきます。
もちろん、既にある記事などもチェックしてもっとClusterユーザーを増やしていきたいなと思ってます。

勉強だ

http://sunstripe.main.jp/
paizaラーニング レベルアップ問題集 線形探索メニュー応用編 JavaScript 区間探索 1

区間探索 1 (paizaランク B 相当)

https://paiza.jp/works/mondai/sequence_search_problems_advanced/sequence_search_problems_advanced__range_step0

# 解答例
a に x 以上の要素は必ず 1 つ以上存在するので、最大長の最小値は1で、これを初期値とします。
lとrの初期値は0未満になるようにします。aのインデックにならないようにです。aのインデックになると、r-l+1=0の計算で、長さが求まってしまいます。
aの要素がx以上の時は、lが初期値だったら、更新します。rを伸ばします。最後のiだったら、最大の長さを求めます。
aの要素がx未満の時は、最大の長さを求めて、lとrをリセットします。
```javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

const [n, x] = lines[0].split(" ").map(Number);
const a = lines[1].split(" ").map(Number);

let max = 0;//最大長
let [l, r] = [-1, -1];//lとrの初期値。r-l+1=1なるように。aのインデックスにならないように0未満の値にする。


for (let i = 0; i < n; i++) {
  if (a[i] >= x) {
    //lが初期値のままだったら更新
    if (l < 0) {
      l = i;
    }
    //rは伸ばす
    r = i;
    //最後だったら、長さ判定する
    if (i === n - 1) {
      max = Math.max(max, r - l + 1);
    }
  } else {
    max = Math.max(max, r - l + 1);
    [l, r] = [-1, -1];//l,rリセット
  }
}
console.log(max);
```
プロになるためのweb技術入門を読んで学んだこと


私は最近プログラミングの勉強をスタートした新参者です。
プログラミングの勉強に入る前にどういった仕組みでネットワークが動いているかなど前提の知識を身につける必要があったのでこの本を読み始めました。
インプットした内容をQiitaを活用してアウトプットしていこうと思います。

- ステートフル

リクエストに伴って状態が変わっていくプロトコルのこと


前回のリクエスト結果を覚えていてそれを踏まえて次のリクエストを実行する仕様

例　FTP




- ステートレス

状態を持たないプロトコルのこと

HTTPで1回のリクエストだけで用が済んでしまうのでFTPのような手順が要らず、状態も存在しない

例　HTTP

- リクエスト

クライアントからサーバに対する要求

- レスポンス

サーバからクライアントに対する応答

- cookie

cookieとはHTTPの仕様を拡張してWEBアプリケーションとWebブラウザの間で情報を交換できるようにしたもの

- プロトコル

WEBサーバとWEBクライアントが通信を行うには、どのように情報をやりとりするかという取り決め

- ポート番号

受信した情報がどのようなプロトコルのものであり、どのようなアプリケーションが処理すべきかを識別するための番号
フリマアプリにコメント機能の追加実装をする　※コメントが保存されないエラーが出続けた話。

フリマアプリ作成が一段落して、追加の実装としてコメント機能の実装に取り組みます。
itemsコントローラー
```ruby
 before_action :set_item, only: [:edit, :show,:update]
 def show
    @user = @item.user
    @comment = Comment.new
    @comments = @item.comments.includes(:user)

  end
private
def set_item
    @item = Item.find(params[:id])
  end
```
commentsコントローラー
```ruby
class CommentsController < ApplicationController
   def create
      @comment = Comment.new(comment_params)
      if @comment.save
        redirect_to item_path(params[:item_id])
      end
    end
  
    private
    def comment_params
      params.require(:comment).permit(:text).merge(user_id: current_user.id, item_id: params[:item_id])
    end
  end
```

で、show.html.erbを
この状態から
```ruby
<%# /商品の概要 %>

  <div class="comment-box">
    <form>
      <textarea class="comment-text"></textarea>
      <p class="comment-warn">
        相手のことを考え丁寧なコメントを心がけましょう。
        <br>
        不快な言葉遣いなどは利用制限や退会処分となることがあります。
      </p>
      <button type="submit" class="comment-btn">
        <%= image_tag "comment.png" ,class:"comment-flag-icon" ,width:"20",height:"25"%>
        <span>コメントする<span>
      </button>
    </form>
  </div>
  <div class="links">
    <a href="#" class="change-item-btn">
      ＜ 前の商品
    </a>
    <a href="#" class="change-item-btn">
      後ろの商品 ＞
    </a>
  </div>
```

```ruby
<div class="comment-box">
   <div id="comments">
   <div class="comment-form">
  <% if user_signed_in? %>
    <%= form_with model: [@item, @comment], id: "comment-form" do |f| %>
      <%= f.text_area :text, class: "comment-text"%>
      <%= f.submit "コメントをする", class: "comment-submit" %>
    <% end %>
  <% end %>
</div>
  <h4>＜コメント一覧＞</h4>
    <% @item.comments.each do |comment| %>
      <div class="comment">
        <p class="user-info"><%= comment.user.nick_name %>： </p>
        <p><%= comment.text%></p>
      </div>
    <% end %>
</div>
  </div>
```
この状態へ。
これで一応同期通信であるものの、最低限の機能は実装できた。
あ、ルーティングのネストの設定も忘れずに。

※ずっとコメントが保存されないエラーが出続けていました。
で、何が原因かというと、form_withのメソッドを使う上で、<form>タグが共存していたことでした。
これ、めっちゃ大事です。
form_withメソッドを使うときは<form>タグは使わないようにしましょう！！！
Brake systems ボッシュ自動車handbook 11版(95) p.1206

Chassis systems, Wheel suspensions, ボッシュ自動車handbook 11版(91)

人生で影響を受けた本100冊。

https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊

http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0-1) 課題と記事一覧new

https://qiita.com/kaizen_nagoya/items/a9d2887bf2a7598dc8e5

# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
Internal-combustion engines(内燃機関),642
Management for spark-ignition engines,800
Gasoline-engine operation with alternative fuels, 886
Management for diesel engines, 906
Electrification of the drive, 970
Emission-control and diagnosis legislation, 1042
Chassis systems, 1108
#  Brake systems(制動機) p.1206
## Definitions and principles 
## Legal regulations
## Structure and organization of brake systems

# Reference
[1] ISO 611:2003
Road vehicles — Braking of automotive vehicles and their trailers — Vocabulary

https://www.iso.org/standard/28733.html

2   Normative references
ISO 3833:1977, Road vehicles — Types — Terms and definitions
ISO/TR 13487:1997, Braking of road vehicles — Considerations on the definition of mean fully developed deceleration
ASTM E1337-90, Standard Test Method for Determining Longitudinal Peak Braking Coefficient of Paved Surfaces Using a Standard Reference Test Tire

Bibliography

[1]-[1]	UNECE Regulation No. 13, Uniform provisions concerning the approval of vehicles of categories M, N and O with regard to braking(Supplement 6 to the 09 series of amendments)
[1]-[2]	JIS D 0106:1984, Glossary of terms relating to brake types, braking mechanics and brake operation of automobiles
[1]-[3]	JIS D 0107:1984, Glossary of terms relating to braking equipment of automobiles

[2] DIN 70024-1 :1977 
Vocabulary for components of motor vehicles and their trailers; controls, indicators and tell-tales

https://www.din.de/en/getting-involved/standards-committees/naautomobil/publications/wdc-beuth:din21:777297

[3] EC Directive 71/320/eec of 26 July 1971 on the approximation of the laws of the Member States relating to the braking devices of certain categories of motor vehicles and of their trailers 

https://www.legislation.gov.uk/eudr/1971/320/pdfs/eudr_19710320_adopted_en.pdf


# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 20221102
Steering , ボッシュ自動車handbook 11版(94) p.1192

Chassis systems, WSteering, ボッシュ自動車handbook 11版(91)

人生で影響を受けた本100冊。

https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊

http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0-1) 課題と記事一覧new

https://qiita.com/kaizen_nagoya/items/a9d2887bf2a7598dc8e5

# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
Internal-combustion engines(内燃機関),642
Management for spark-ignition engines,800
Gasoline-engine operation with alternative fuels, 886
Management for diesel engines, 906
Electrification of the drive, 970
Emission-control and diagnosis legislation, 1042
Chassis systems, 1108


#  Steering (操舵装置) p.1192
## Purpose of automotive steering systems
Steering-system requirements 
Types of steering box 
Power-assisted steering systems for passenger cars 
Power-assisted steering systems for commercial vehicles 


# Reference
[1] ECE R79 Uniform provisions concering the approval of vehicles with regard to steering equipment

https://op.europa.eu/en/publication-detail/-/publication/3f7415ac-ff32-11e8-a96d-01aa75ed71a1

pdf version is not linked. html version can be downloaded.



# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 20221102
最初に読むべきはQiitaではなく公式ドキュメントである

## はじめに

自分はあまり英語が得意ではないため、英語で書かれた公式ドキュメントを避け、日本語の文献に頼ってしまうことがある  
この記事はそういった自分に対する自戒であり、ただのポエムである

## ついQiitaの記事をクリックしがちな場面

- 任意のツールのインストール手順
- 任意のツールの使い方
- 任意のツールの設定手順
- 任意のツールでエラーが発生した時の解決方法

こういった情報を求めて、Google検索の上位に表示されたQiitaの記事や個人ブログ等をクリックすることがある。
だが思い出して欲しい。GoogleのSEOはもはやクソであり、まともに機能していない状態であるということを。
Google検索の上位に表示されるのはあくまで __SEOに強いページ__ であり、 __有用なページ__ とは限らない。  
真にまず最初に読むべきは __公式ドキュメント__ であり、 __どこの馬の骨が書いたかも分からぬQiitaの記事や個人ブログ__ ではない。  
仮に凄腕エンジニアが書いた技術記事だとしても、それが数年前に書かれたものだったりすると、現在は状況が変わっている可能性もある。  
公式ドキュメントや公式リポジトリのREADMEは、メンテナによって常に最新化され続けており、そこに書かれている手順の通りに進めていけば(基本的には)上手く行くはずであり、まず最初にそれを読むべきなのだ。  
英語が苦手な場合はGoogle翻訳に頼ってでもいいから、まず最初に公式ドキュメントを読むべきである。

## 優先順位

1. 公式ドキュメント
2. 公式ドキュメントの「Q&A」や「Frequently Asked Questions」
3. 公式リポジトリのREADME
4. 公式リポジトリのWiki(←忘れがち)
5. 公式リポジトリ内のexampleなど
6. 公式リポジトリのissue
7. つよつよエンジニア(本を書いてる人など)が運営している個人ブログ
8. [ArchWiki](https://wiki.archlinux.jp/)(←めっちゃ充実してるので、Linux関連なら必読)
9. <https://zenn.dev>
10. <https://qiita.com>
Enum(列挙型)とは？

## 目次
- 概要
- Enum(列挙型)とは？
- Enumの細かいルール
- 最後に

## 概要
だいぶサボっていましたが、スキルアップのための不定期30分インプット・アウトプット投稿第四弾は、「Enum(列挙型)とは？」についてやっていこうと思います！
第三弾は、[UMLを使ってクラス図を書く方法](https://qiita.com/kitamurakunihiko/items/5981d94a30541d65a568)について投稿したのでよければ確認してみてください。

プログラミングを本格的に勉強し始めて約1年経ちましたが、お恥ずかしいことに「Enum」を知りませんでした。
最初にEnumを見た時読み方すら知りませんでしたが、「イーナム」って読むみたいです:grimacing:


## Enum(列挙型)とは？
PHPドキュメントによるとEnumは、
> クラスやクラス定数に対して、さらに制限を加えたものです。 ある型に対して、取り得る値の限られた集合を定義する方法を提供します。

らしいです。

噛み砕くと、
定数の定義と取得を簡単にしてくれる認識。
クラスでいうgetterが定数ごとの定義の必要がなく、`case`で定義していないものは呼び出せないようにしているようです。
　

### Pure Enumとは
値を含まない列挙子のこと。

- PureEnumの実例。
```php5
<?php

declare(strict_types=1);

enum PurePrefecture
{
    case AICHI;
    case SHIZUOKA;
    case MIE;
}

var_dump(PurePrefecture::AICHI);
//出力結果　enum(PureEnum::AICHI)

var_dump(PurePrefecture::AICHI->name);
//出力結果　string(5) "AICHI"

```

### Backed Enum
値を含む列挙子のこと。

- BackedEnumの実例。

```php5
<?php

declare(strict_types=1);

enum BackedPrefecture: string
{
    case AICHI = "愛知県";
    case SHIZUOKA = "静岡県";
    case MIE = "三重県";
}

var_dump(BackedPrefecture::AICHI);
//出力結果　enum(PureEnum::AICHI)

var_dump(BackedPrefecture::AICHI->name);
//出力結果　string(5) "AICHI"

var_dump(BackedPrefecture::AICHI->value);
//出力結果　string(9) "愛知県"

```
#### ※Backed Enumの持つことができる値のルール

1. int型・string型のみ可(Union型も不可)
2. 値は重複不可


## Enumの細かいルールについて
### Interfaceの実装とClass/Enumの拡張について

1. Interfaceの実装は可能。
2. Class/Enumの拡張は不可。

### Enum内のメソッドルール

1. staticメソッドの定義可能
2. メソッドスコープも同様に「public」「protected」「private」から選択可能
3. traitも「use」で使用可能

## 最後に
最初「Enum」を調べていて、classで定数を定義すれば同じことではないかなと思っていましたが、調べてみるとコード量がだいぶ少なくなることがわかり、それだけでもメリットだなと思いました。

1ヶ月くらいアウトプットをサボっていましたが、その間にも業務内外でインプットし続けているので、また投稿していこうと思います！
【GitHub】コミットメッセージの書き方について

# 前書き
Gitのコミットメッセージの書き方についてどのようなものがあるのか気になったので調べてみた。会社によって、チームの方針によって、案件によって書き方は千差万別で正解は無いのであくまで参考程度に書き留める。

# どのように書けばよいか
Angularの規約にコミットメッセージをどのように工夫して書けばよいかが載っているので引用する。

https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md#-commit-message-guidelines

```
<プレフィックス>(<変更の範囲>) : <タイトル>
<空白>
本文を書く
<空白>
<フッター>
```
と書くのが良いコミットメッセージを書くときのテンプレートになっている。

## プレフィックス
プレフィックスとは、コミットメッセージの先頭に書かれるもので、コミットログがどんな変更をしたかざっくり理解できるように書くもの。Angularの規約では以下のプレフィックスが紹介されている。

* feat :&emsp;新しい機能の追加・実装
* fix :&emsp;バグの修正
* docs :&emsp;ドキュメントの修正
* style :&emsp;フォーマットやセミコロンの欠落など
* refactor :&emsp;リファクタリング
* test :&emsp;テストを追加
* chore :&emsp;カテゴライズの必要がない雑事
* improvement :&emsp;新しい機能の追加やバグの修正ではなく、現在の実装を改善するコミット
* build :&emsp;ビルド

## 本文

### 何を書けば良いのか
人に何かを伝えるときによく「5W1H」が使われるが、これはコミットメッセージにも当てはまる。

* いつ :&emsp;タイムスタンプでわかる
* 誰が :&emsp;author(著者)でわかる
* どこで :&emsp;ディレクトリとファイル名でわかる
* <b>何を</b> :&emsp;コミットのタイトルと本文でわかる
* <b>なぜ</b> :&emsp;コミットの本文でわかる
* どうやって :&emsp;diffでわかる

つまり、<b>「何を・なぜ、こうしたのか」</b> と書けばよい。

## フッター
重大な互換性のない破壊的変更はフッターに記載する。<b> BREAKING CHANGE:</b>　を用いて主に

* 変更の説明
* 正当な理由
* 移行に関するメモ

などを記述する。また、コミットログの内容に関するURLなどを貼るのもここ。




## 例
```
add : コードの軽微な誤字を修正する

修正された誤字脱字の詳細については、issueをご覧ください。

closes issue #24
```

::: note
良いコミットメッセージを作成するためのツールも存在する。
https://www.conventionalcommits.org/en/v1.0.0/#tooling-for-conventional-commits

:::








# gitmoji
gitmojiは、プレフィックスをアイコン化しちゃって (emojiを使って) 「文字ばっかりでログを確認するとき読むの疲れるなあ」を解消してくれる優れもの。emojiは文字を使わないので、どんな人でもぱっと見でわかりやすいし視認性も良くなるので、作業効率が上がる。

https://gitmoji.dev/

以下の記事にプレフィックスのemojiについて詳しくまとまっているので、参考にしてください。

https://qiita.com/oekazuma/items/0ce5082a07fe5c942de3

# おわりに
コミットメッセージの書き方を整理することで人に伝わりやすい文章を考えるきっかけになった。gitmojiは、すごくわかりやすい工夫なので導入を検討してみたい。

# 参照サイト
- [angular/angular](https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md#-commit-message-guidelines)
- [minop1205/conventional-commits.md](https://gist.github.com/minop1205/5fc4f6ef0ec89fb1738833ba25ae00a0)
- [conventionalcommits](https://www.conventionalcommits.org/en/v1.0.0-beta.4/)
- [https://gitmoji.dev/](https://gitmoji.dev/)
- [Gitのコミットメッセージに絵文字を入れて社内の開発効率をあげた話【Emoji Prefix】](https://qiita.com/oekazuma/items/0ce5082a07fe5c942de3)
アウトプットして公開することの重要性を20年前に説いた

# 前置き
この文章は20年前、新入社員に向けて作成したガイドの転載です。
研修であっても受け身で受講するだけではなく、必ず得たものをアウトプットするよう刷り込むために作りました（笑）
新入社員向けプログラミング研修用の文書だったという前提をもってご覧ください。
ここでは「書く」と「アウトプット」は同じ意味で使われています。

# 01 まずはとにかく書きましょう（アウトプットしましょう）
仕事とは成果物（＝アウトプット）をつくることだ、という人がいます。
我々はさまざまな成果物（システム、プログラム、設計書、・・・）に対する対価としてお客様の支払ったお金から給与をいただいています。

今回の研修ではプログラミングスキルを身に着けるのも勿論ですが
* スキルをつけた証として、また
* それを暗黙的なものから共有できる知識に変換してアウトプットする能力の養成のため

にも、まずは **とにかく文書を書いて（アウトプットして）ください**

# 02 カテゴリ分けは気にしない
疑問はQ&Aに、まとめた手順等は手順のカテゴリに、といったあたりは基本ですが・・・・

とにかく、**どこにでもいいから、どんなものでもいいから書きましょう**。

不適切なカテゴリに作ってしまった、将来文書が増えて煩雑になった、といったときには後から修正すれば良いだけのことです。

一番いけないのは「どこに書いたら良いか分からないから、どこにも書かない」となることです。

# 03 何を書くべきか
今、皆さんが説明を受けて、手元のノート（やローカルPC）に書いていること。これは大事なことだと思ったから、忘れては困ると思ったから書き留めているんですよね？
あなたにとって大事なことは、他の人にとっても大事なことですし、忘れて困ることは他の人も忘れては困ってしまうことです。

ですから、それらは公開しましょう。
研修で勉強したはずの「知識共有」とはそういうことです。

タイトルに対する答えは「**何でも**」です。
それがたとえ**くだらないことでも、上品なことが少ししか書かれていないよりずっと役に立ちます**。

# 04 誰が書くべきか
誰かが書いてくれる、ではなく、**あなたが書きましょう**。
誰かに先を越される前に書いてやる！ぐらいの競争心が欲しいところ。

先を越された人は、その文章を参考したり、そこに追記してより良いものを作れば良いのです。

一番だめなのは、皆が誰かが書くだろう、と思っていて、結局誰も書かないという状態です。

# 05 公開することの最大の利点
公開して共有すると、自分の懐で温めているだけでは絶対に得られない利点があります。

それは、**誤解や間違いを直してもらえる**ということです。

自分が勝手に勘違いしていても、それが公になる機会がないと案外分からないものです。
自分の間違いに気づくのが仕事でトラブルを起こしたときでは不幸すぎます。

そうならないためにも、早く人目にさらして内容をチェックしてもらうことです。

# 06 書くより聞いた方が早いんじゃ・・
*（筆者補足：この研修では質問もできる限り、文書にして公開し回答とセットで共有できるようにしていました）*

直接質問することも良いですが、相手が忙しいときには時間も限られますし、一度に質問できるのは一人です。

公の場所で文書にして質問する、もしくは質問した結果をまとめると
・**相手は自分の都合の良い時間に質問をみることができる**
・**いっぺんに何人もの人から答えをもらえる**
・**記録が残るので結果を皆と共有できる**
という利点があります。

（これは非同期コミュニケーションの利点です）

# 07 アウトプットの単位
メールでもそうですが、**1つの文書には1つの用件**（質問）が望ましいです。

その方が、後々のカテゴリの再編成や再利用に便利です。

また、文書の内容の**要約をタイトルにする**と、あとで見たい文書をすぐに見つけることができます。

# 08 こんな簡単なことを書く（聞く）のは恥ずかしい、なんてことはありません
その場でちょっと聞くなら良いけど、公の場所に書いたら自分の理解が足りない（＝バカ？）ことがばれて恥ずかしい、という理由でアウトプットできない人はいますか？

そのあたりのことは、そのままにしておくと本当に聞くのが恥ずかしくなります。
「今頃になってそんなことも分からないのか？」と言われますからね。
でも、学び始めの時期なら何を聞いても許されます。この貴重な時期を逃さないでください。
（実のところ、ベテランになっても聞くほうが良いのですが）

どんな些細なことでも良いのです。
むしろ、**些細なことのほうがアウトプットとしては人のためになることが多く、重要**なのです。

# あとがき
Qiitaもそうですが「公の場をレベルの低い内容で汚すな」という意見があるのも承知しています。
が、それが汚れなのか、価値あるものなのかは、あくまで受け手で決まるものなので**アウトプットすべき**が私の持論です。
【MAC　zipファイルにパスワードをかける】

*MAC ZIP*

macでzipファイルにパスワードをかけるには「**Keka**」というソフトをインストールします。
公式サイト↓
https://www.keka.io/ja/

ダウンロードしたらアプリを開きパスワードを設定したらパスワードをかけたいファイルをドラック&ドロップするだけです！簡単♪
↓↓↓↓↓

![パスワード設定_zip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918178/a5b44c3a-9293-96a4-4c3a-81e6c851c7e8.png)
![ドラッグ＆ドロップ_zip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918178/970256b6-6efa-5e08-7681-e3eb2a15655f.png)
Wheel, ボッシュ自動車handbook 11版(92) p.1154

Chassis systems, Wheel,  ボッシュ自動車handbook 11版(86)

人生で影響を受けた本100冊。

https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊

http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0-1) 課題と記事一覧new

https://qiita.com/kaizen_nagoya/items/a9d2887bf2a7598dc8e5

# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
Internal-combustion engines(内燃機関),642
Management for spark-ignition engines,800
Gasoline-engine operation with alternative fuels, 886
Management for diesel engines, 906
Electrification of the drive, 970
Emission-control and diagnosis legislation, 1042
Chassis systems, 1108
#  Wheel  (車輪) p.1154
## Function and requirements 
## Structure 
## Design criteria
### Passenger car wheels
### Special requirements for commercial vehicle wheels
## Designation for passenger-car wheels 
## Materials for wheels
### Classification of wheels
### Materials
#### Sheet steel
#### Alminium sheet
#### Cast alloy
#### Forge alloy
#### Magnesium alloy
#### Plastics
## Manufacturing processes
### Steel wheels
#### Manufacturing the weel disk
#### Manufacturing the rim
#### Joining the weel disk and rim
### Aluminium wheels
#### Aluminium forged wheels
#### Aluminium cast wheels
#### Flow forming process
#### Squeeze cast process 
## Wheel design variations
### Single or multiple part design variation
### Wheel spider
### Rim variants
### Lightweight construction technologies 
### Wheel mounting
### Wheel trims
### Special Wheel/tire systems
## Stress and testing of wheels 
### Testing of sheet steel wheels
### Testing of light alloy wheels
### Testing of wheel with tire

# Reference
参照なし

# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 20221102
極座標データを直交座標系に変換して描画する方法【MATLAB】

# やりたいこと

原点からの距離 $r$ と角度 $\theta$ に依存するデータ $P(r,\theta)$ を $xy$ 平面に描画することを考えます．例えば，レーダで取得した信号には，ターゲットとの距離 $r$ と方位角 $\theta$ の情報が含まれます．ちょうど下図のイメージです．

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2122187/56e04fc0-5997-f2c0-4c86-87ec32bd86df.png" width=40%>

本記事では，$x$ 軸から測った角度を $\theta$ とします．

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2122187/cfce68b8-ac42-d50c-020c-beab6ad5769f.png" width=50%>


# 表示例
$r,\theta$ に依存するダミーデータ $P(r,\theta)$ を作成して，それを $xy$ 平面に描画することを考えます．

## ダミーデータ
ターゲットの位置を極座標系で $(r_0,\theta_0)$ として，ダミーデータ $P(r,\theta)$ をガウス分布の積として生成します．
```math
P(r,\theta) = \dfrac{1}{\sqrt{2\pi\sigma_r^2}} \exp{\left[-\dfrac{(r-r_0)^2}{2\sigma_r^2}\right]}\cdot \dfrac{1}{\sqrt{2\pi\sigma_\theta^2}} \exp{\left[-\dfrac{(\theta-\theta_0)^2}{2\sigma_\theta^2}\right]}
```

$\sigma_r^2$, $\sigma_\theta^2$ は距離および角度方向の分散を表します．

## 変換および描画

距離と角度を定義し，meshgrid関数で二次元配列に変換します．そして，ターゲットの位置 $(r_0,\theta_0)$ を決めて，ダミーデータ $P(r,\theta)$ を生成します．

```matlab
% define range and theta
range = linspace(0,2,31); % m
theta = deg2rad(linspace(0,360,91)); % rad
[Range,Theta] = meshgrid(range,theta);

% target position
r0 = 1;
theta0 = deg2rad(75);

% dummy data P
gaussfunc = @(x,mu,sigma) 1/(sqrt(2*pi)*sigma)*exp(-(x-mu).^2/(2*sigma^2));
P = gaussfunc(Range,r0,0.2).*gaussfunc(Theta,theta0,0.2);
```
次に，極座標系から直交座標系へ変換します．極座標 $(r,\theta)$ は直交座標 $(x,y)$ と以下のように対応します．
```math
\left\{
\begin{align}
x &= r\cos{\theta} \\
y &= r\sin{\theta} 
\end{align} 
\right.
```
距離と角度の二次元配列を用いて，要素ごとに積をとることで $x,y$ に変換します．また，オマケとして，ダミーデータ $P(r,\theta)$ の最大点のインデックスも抽出しておきます．

```matlab
% convert from circular coordinates to Cartesian coordinates
X = Range.*cos(Theta);
Y = Range.*sin(Theta);

% detect max value and its index
[maxval,maxidx] = max(P,[],'all');
[maxidx_row,maxidx_col] = ind2sub(size(P),maxidx);
```

:::note
MATLABでは，要素ごとの積を `.*` でとります．
:::

描画には __surface プロット__ を用います．


`surface(X,Y,Z,C)`

`X,Y,Z` はメッシュ状の $x,y,z$ 座標，`C` は色を決める配列です．
`X,Y,Z,C` はすべて同じ大きさである必要があります．

[surfaceプロットのドキュメンテーション](https://jp.mathworks.com/help/matlab/ref/surface.html "surface")


surfaceプロットは，本来，3次元空間上に曲面を描画する関数です．しかし，今回欲しいのは $xy$ 平面上の2次元画像なので，$z$ 座標の値はすべて 0 にしてしまっても問題ありません．このとき，図を真上から見下ろすことで2次元画像になります．
```matlab
FS = 16; % fontsize
MS = 30; % markersize

figure(1);
clf(1);
surface(X,Y,zeros(size(X)),P,'EdgeColor','none'); % surface plot
hold on;
plot3(X(maxidx),Y(maxidx),0,'.r','MarkerSize',MS); % plot max point
xlabel('x (m)');
ylabel('y (m)');
cb = colorbar;
cb.Label.String = 'Data value';
daspect([1,1,1]); % Set the axes data aspect ratio
set(gca,'fontsize',FS);

```
下図は，$r_0 = 1\hspace{1mm}\mathrm{m}, \theta_0 = 75^\circ$ としたときに得られる画像です．赤点は最大点の位置を示します．

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2122187/788c59e2-c6ba-a9e1-1e5a-e10bd4977c10.png" width=100%>

:::note warn
最大点の位置が少しずれているように見えるのは，surface関数の仕様上の理由です．surface関数は各データを面単位ではなく，頂点の単位で描画しているため，若干のずれが発生します．メッシュが細かくなると，ずれは小さくなります．
:::

# 実行環境
MATLAB R2022a
使用したツールボックス：なし
SOAP APIについて

最近のプロジェクトは、クライアント先のSOAP APIを使用し、取得した情報をデータベースに保存することです。
サンプルプログラムをもらって、ソースを見たら、まったくわからないです。
いろいろ試し、結局やっておいたほうがいいことをまとめます。
1. SOAP　APIのURLを探す。
2. SOAP　API URLの後ろに「?wsdl」をつけ、wsdlファイルを取得
3. wsdlファイルをsoapUIに入れて、入力パラメータのXMLを取得
4. API疎通確認
5. API認証情報を確認：soap headerに入ているか？basicか  
6.  soap headerの場合
    ```
    <soap:header>
       <userInfo>
          <userId>admin</userId>
       </userInfo>
    </soap:header>
SendGridの始め方

# SendGridの始め方
AzureでSMTPが送信できなかったので代替手段をとして調査をしたのでメモメモ

# 前提
Windows環境
Python3

## 入口
いくつかある。
1. 構造計画研究所
2. AzureのMarketPlace
3. Twilio SendGrid 

無料分が一番多い構造計画研究所さんを基本に記述する

## 登録
下から登録
いろいろと記述箇所があるがすべて埋める
登録が完了すると代替翌日には完了メールが届く
https://sendgrid.kke.co.jp/

## APIの登録
最初にすべきこと
1. Setteings→API Keys
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387683/56024b38-df1a-5cf4-4f76-d18a6c68d6a3.png)
2. Create API Key
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387683/9117e574-7bb2-317d-dd38-218f22ce1302.png)
3. API Key Nameに適当に入力してFull Access
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387683/32eaa387-6286-3db9-0b1c-9f50486645a7.png)
4. Kyeが表示される。<b>めちゃくちゃ重要。要メモ

## 環境用意
環境変数を設定
>setx SENDGRID_API_KEY "Sgから始まるKey"
要再起動

## サンプルソース
import os
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail

message = Mail(
    from_email='from_email@example.com',
    to_emails='to@example.com',
    subject='Sending with Twilio SendGrid is Fun',
    html_content='<strong>and easy to do anywhere, even with Python</strong>')
try:
    sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
    response = sg.send(message)
    print(response.status_code)
    print(response.body)
    print(response.headers)
except Exception as e:
    print(str(e))

## 迷惑メールになる場合
DKIMの設定をする
設定を進めてDNSを登録
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387683/39815948-3f13-4517-5f24-5a45d9cafd5f.png)
vi操作中のE325: ATTENTIONエラー対処法


<h1>経緯</h1>

vi操作中にCtrl＋Zを押してしまい、ジョブ停止してしまったなと思い、再度viで対象のファイルを開こうとしたらE325: ATTENTIONエラーが出力されました。

<h1>対処法</h1>

```
E325: ATTENTION
    Found a swap file by the name ".httpd.conf.swp" ※SWAPファイルが作成されているみたい
owned by: root   dated: Wed Nov 02 18:39:43 2022
file name: /etc/httpd/conf/httpd.conf
modified: YES
user name: root   host name: XX.XX.XX.XX
process ID: 186908 (STILL RUNNING)
While opening file "httpd.conf"
dated: Wed Nov 02 18:35:06 2022

(1) Another program may be editing the same file.  If this is the case,
    be careful not to end up with two different instances of the same
    file when making changes.  Quit, or continue with caution.
(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r httpd.conf"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".httpd.conf.swp"
    to avoid this message.

Swap file ".httpd.conf.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
```

SWAPファイルが作成されているからこのSWAPファイルをどうにかしないと、本家のファイルが開けないよってことになる。対処法としてSWAPファイルを削除してしまえば解決する。
ただ、SWAPファイルが隠れているのでls -laで確認し、削除すること

```
# cd /etc/httpd/conf/　⇒上記のfile name: /etc/httpd/conf/のフォルダまで移動する
# ls -la
-rw-r--r-- 1 root root 16384 Nov  2 18:39 .httpd.conf.swp
# rm -f .httpd.conf.swp
```

事象解決
【Flutter】水平方向に並べたWidgetの横幅を最大まで伸ばす

# 状況の設定

- 幅いっぱいに複数Widgetを並べる
- 並べるWidgetの幅は固定値ではない
- 並べる各Widgetに応じて動的に幅を決定したい
- 水平方向に均等に並べるのでは不十分

### アプリ画面の様子
`Row`で間隔を均等に設けて並べるのではなく、
```dart
Row(
  mainAxisAlignment: MainAxisAlignment.spaceAround,
  children: [
    // your widgets
  ],
);
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440643/a92f1307-63b4-f4ba-d1c6-f659214ef490.png)

並べたWidgetの幅の合計が全体の幅いっぱいに広がるよう、各Widgetの幅をよしなに設定してほしい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440643/12d31088-2c26-5b84-28cb-09cac7ac0dd8.png)

# Tableを使う

Widgetの子供（複数）のサイズに応じて全体でのサイズを動的に決定する戦略として、Flutterには`Intrinsic**`という感じのクラスが結構ある。残念ながら`Row`では水平方向のサイズをこの戦略で決定する方法は無さそう。

一方、`Table`では列の幅を決定する戦略に`IntrinsicColumnWidth`が使える！

```dart
    SizedBox(
      width: double.infinity, // tableの幅を最大まで伸ばす
      child: Table(
        defaultColumnWidth: const IntrinsicColumnWidth(),
        children: [
          TableRow(
            children: [
              // your widgets
            ],
          ),
        ],
      ),
    );
```

DartPadで試してみてください

https://dartpad.dev/?id=82c676ea2ee3b3be9ea622cabf46cf4e
Wheel suspensions, ボッシュ自動車handbook 11版(91) p.1146

Chassis systems, Wheel suspensions, ボッシュ自動車handbook 11版(91)

人生で影響を受けた本100冊。

https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊

http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0-1) 課題と記事一覧new

https://qiita.com/kaizen_nagoya/items/a9d2887bf2a7598dc8e5

# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
Internal-combustion engines(内燃機関),642
Management for spark-ignition engines,800
Gasoline-engine operation with alternative fuels, 886
Management for diesel engines, 906
Electrification of the drive, 970
Emission-control and diagnosis legislation, 1042
Chassis systems, 1108
#  Wheel suspensions (車輪懸架)
p.1146
## Basic principles
## Kinematics and elastokinematics 
## Basic categories of wheel suspensions 



# Reference
[1]  L. Eckstein, Vertlkal, und Querdynamik von Kraftfahrzeugen, ika/fka 2010

https://www.euromotor.org/pluginfile.php/10995/mod_resource/content/0/Vorlesung_Umdruck_Fahrzeugtechnik_II_08_2005.pdf

[2] B. Heissing, M Ersoy (Editors) Fahrwerkhandbuch, Vieweg Teubner Verlag 2008

2013版
https://link.springer.com/book/10.1007/978-3-658-01992-1

[3] M Matschinsky, Radführungen der Straßenfahrzeuge, Springer Verlag, 2007

https://link.springer.com/content/pdf/bfm:978-3-540-71197-1/1

# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 20221102
【iOS】アプリの設定にバージョンを記載する

# はじめに
タイトルだけだとイメージできないと思うので画像載せます。
![IMG_1572.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/50cc2add-fe02-13ee-e411-9be155ee3399.jpeg)

こんな感じのよくあるやつです

# 実装方法
### Settings.bundleの設定
メインターゲットのフォルダを選択します
![スクリーンショット 2022-11-02 17.56.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/5aeab3e3-5f14-5e43-e585-b0e7c8920a9a.png)
⓪ 「`⌘ + N`」で「Choose a template for your new file:」を開きます
① `Setting`と検索します
② 「Setting Bundle」を選択します
③ 「Next」を選択します
![スクリーンショット 2022-11-02 17.57.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/b2e2ce9a-7375-b017-6a2f-464d6096d0bb.png)
④ 名前は`Settings`のままにします
⑤ 「Create」を選択します
![スクリーンショット 2022-11-02 18.02.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/e893682a-9356-227f-7153-67b6400a3d7b.png)
先ほど作った「Settings.bundle」を探します
⑥ 「Settings.bundle」を右クリックします
⑦ 「パッケージの内容を表示」を選択します
![スクリーンショット 2022-11-02 18.07.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/51d5e397-5366-0f75-0b3c-6858c0fe411c.png)
⑧ 「Root.plist」を右クリックします
⑨ 「このアプリケーションで開く」を選択します
⑩ Xcode以外のエディターを選択して開きます
![スクリーンショット 2022-11-02 18.10.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/6f7eb7b5-6fe2-cdd4-bbd8-854e97f64ca9.png)
以下のコードをコピペします
```Root.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>PreferenceSpecifiers</key>
	<array>
		<dict>
			<key>Type</key>
			<string>PSTitleValueSpecifier</string>
			<key>Title</key>
			<string>Version</string>
			<key>DefaultValue</key>
			<string>0.0.0</string>
			<key>Key</key>
			<string>VERSION</string>
		</dict>
	</array>
	<key>StringsTable</key>
	<string>Root</string>
</dict>
</plist>
```

### Run Scriptの設定
① プロジェクトを選択します
② メインターゲットを選択します
③ 「Build Phases」を選択します
④ 「+」を選択します
⑤ 「New Run Script Phase」を選択します
![スクリーンショット 2022-11-02 18.17.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/40b6b08e-5c67-20bc-9104-521cedcede18.png)

以下のコードをコピペします
```sh
# バージョン
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:0:DefaultValue ${MARKETING_VERSION}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Settings.bundle/Root.plist"
```
:::note warn
**注意**
`PreferenceSpecifiers:0`
ここの数字は`Preference Items`のArrayの何番目にあるかを指定しているので各自設定してください
バージョンのみ設定してる場合は0です
:::

![スクリーンショット 2022-11-02 19.04.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/3882f518-8295-cc73-d531-7aa11ab7a9c4.png)

これで完成です。

# 確認
バージョンを`1.2.3`にしてビルドしてみます
![スクリーンショット 2022-11-02 18.58.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/f3b9cfd9-bb84-6bee-8806-d9e685cd30ca.png)

バージョンの欄に`1.2.3`が表示されました
![simulator_screenshot_B2022BBA-510C-4AEB-9657-9F4B6B5127DB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/0433ddc0-ae07-febc-b308-e16525424803.png)

# おわり
設定が充実してるアプリってカッコよくない？？
Stable-DreameFusion （Text to 3D） をwsl2環境でbuildする時、ハマった件

### Stable-DreameFusion（Text to 3D)をwsl2環境でbuildする時、ハマった件

Text to 3D をwsl2環境でbuildする時、ハマったので、その沼からの脱出方法についての記録です。

　まだ、開発途上ですが、テキストから3DCGを生成するText to 3Dというトンデモない技術が公開され、
その論文中では、非公開のGoogleのText to Image技術が使われているのですが、それをオープンソース
のText to Image技術であるStable Diffusionに置き換えたものが、git上で公開されています。

https://dreamfusion3d.github.io/

私は、これをwsl2で実行していますが、基本的にはインストール＆実行とも簡単で、誰でも、
Text to 3D　を試すことができます。

しかし、この中の
```
　pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
```

だけビルドエラーがでてしまいます。これはoptionalなので、まあ、いいかと思っていたのですが、
気持ち悪いので調べてみました。

これは、https://github.com/NVlabs/tiny-cuda-nn
という2Dイメージを学習する部分で、Stable-DreamFusionを実験的に実行する上では必要ありません。
"Lightning fast implementation of small multi-layer perceptrons"　とありますので、
学習が滅茶早くなるのかな？
buildしようとすると、「lcudaが無いよ！」というエラーになります。

cuda関連のライブラリは　/usr/local/cuda/lib64 にあって、ここにパスが通っていれば問題ないはず
ですが、コンパイラーのバージョンを変えたり色々試みましたし、ネットでも調べましたがfixしません。
そこで、そういえば、nvidia-smiコマンドがwsl2では
/usr/lib/wsl/lib/nvidia-smi
という変なことろにあったのを思い出し、ここをlsで見てみると、ありました！libcuda.soが！

そこで、/usr/local/cuda/lib64　下に、/usr/lib/wsl/lib/libcuda.so　をシンボリックリンクすると
めでたくbuildが完了しました。

```
  sudo  ln -s  /usr/lib/wsl/lib/libcuda.so /usr/local/cuda/lib64/libcuda.so
```






https://www.instagram.com/p/Cjh7VncuxKb/
`brew install llvm` a nightmare for arm64 CPUs

The title says it all, just leaving a note for myself on how I got `ffigen` running on flutter/dart.
Without proper installation steps, the command `dart run ffigen` or `flutter pub run ffigen` WILL throw an error on the mac m1 processors.

```
Unhandled exception:
Invalid argument(s): Failed to load dynamic library '/Users/<user>/homebrew/opt/llvm/lib/libclang.dylib': dlopen(/Users/<user>/homebrew/opt/llvm/lib/libclang.dylib, 0x0001): tried: '/Users/<user>/homebrew/opt/llvm/lib/libclang.dylib' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/Users/<user>/homebrew/Cellar/llvm/13.0.1_1/lib/libclang.dylib' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64'))
#0      _open (dart:ffi-patch/ffi_dynamic_library_patch.dart:12:43)
#1      new DynamicLibrary.open (dart:ffi-patch/ffi_dynamic_library_patch.dart:23:12)
#2      initializeGlobals (package:ffigen/src/header_parser/data.dart:41:33)
#3      initParser (package:ffigen/src/header_parser/parser.dart:48:3)
#4      parse (package:ffigen/src/header_parser/parser.dart:22:3)
#5      main (package:ffigen/src/executables/ffigen.dart:54:19)
#6      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:295:32)
#7      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
```

Or something similar will terminate the command or binding files from being generated correctly.

Now it's important to note how I got here, installing the dependecies is no big deal and shouldn't really differ regardless of CPU choice. However, it's the LLVM that really gets you.

Any traditional doc will most likely tell you to run the equivalence of the following command: `brew install llvm`. While this gets the job done in terms of installing a version of LLVM, it automatically installs for the `arm64`, and NOT the `x86_64`. The latter is what's needed to run `ffigen`. 

Therefore, if you already have LLVM installed, `1. uninstall`. And you need to specify the x86_64 version of LLVM like so `2. arch -x86_64 /usr/local/homebrew/bin/brew install llvm`. Then finally, you need the same version of `ffi`. `3. sudo arch -x86_64 gem install ffi`.

Restart VSCode and execute the command again `flutter pub run ffigen`.