OmniAICreator/Qiita-1.07M huggingface dataset:
firebase 9からはsetPersistenceが変わりました！Argument of type 'string' is not assignable to parameter of type 'Persistence'.ts(2345)

# Persistenceをどうやって渡せばいい？？
firebaseのバージョンを9に上げてから、色々なものが大きく変わりました。。。:frowning2:
そのうちの1つが`setPersistence`メソッド

### 環境

```json:package.json
"@angular/fire": "7.3.0",
"firebase": "^9.0.0",
```


### コード例
angularfireを使ってるので、少しだけjavascriptだけのコード

Version V8以前

```typescript
import * as firebase from 'firebase/compat/app';
import { Auth } from '@angular/fire/auth';


constructor(
    private afAuth: Auth,
  ) { }


this.afAuth.setPersistence(firebase.auth.Auth.Persistence.LOCAL);

this.afAuth.setPersistence(firebase.default.auth.Auth.Persistence.LOCAL);
```

Version V9以降

```typescript
import { browserLocalPersistence } from 'firebase/auth';
import { Auth } from '@angular/fire/auth';

constructor(
    private afAuth: Auth,
  ) { }

this.afAuth.setPersistence(browserLocalPersistence);
```

`browserLocalPersistence`（LOCAL）以外のオプションについては👇の参考をご覧ください:relieved:


# 参考

https://stackoverflow.com/questions/69038593/how-to-use-setpersistence-in-firebase-modular-sdk-v9

https://firebase.google.com/docs/auth/web/auth-state-persistence?hl=ja
Cloudflare Zero Trust で Tenant Control する

# Tenant Control

企業としては承認されたアプリケーションとして、特定の SaaS へのアクセスを許可するが、個人利用を制限し、企業ドメインの SaaS にのみアクセスさせる構成にできます。

その際に、ヘッダー埋め込みを行う必要がありますが、Cloudflare Gateway で実装可能です。

> [Tenant control · Cloudflare Zero Trust docs](https://developers.cloudflare.com/cloudflare-one/policies/filtering/http-policies/tenant-control/)
>
> [Announcing Tenant Control in Cloudflare Gateway](https://blog.cloudflare.com/gateway-tenant-control/)
>
> ![Organizations send traffic to Cloudflare by deploying the WARP agent, a WireGuard-based client built on feedback from our popular consumer app.](https://blog.cloudflare.com/content/images/2021/08/identity-policy-engine.svg)

# Google Workspace の場合

Google Workspace の場合は、`X-GooGApps-Allowed-Domains` ヘッダを使います。

> [一般ユーザー向けアカウントからのサービス利用を防ぐ - Google Workspace 管理者 ヘルプ](https://support.google.com/a/answer/1668854?hl=ja)
>
> [Tenant control · Cloudflare Zero Trust docs](https://developers.cloudflare.com/cloudflare-one/policies/filtering/http-policies/tenant-control/#g-suite)
>
> ![image-20220530230843659](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220530230843659.png)

# HTTP ポリシー作成

このようなポリシーを作成します。

![image-20220530231037757](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220530231037757.png)

# アクセス確認

実際に、無料で作成できる [Google Workspace Essentials Starter](https://support.google.com/a/users/answer/9122200?hl=en) アカウントにアクセスすると以下のエラー画面になります。

![image-20220530231118547](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220530231118547.png)

Cloudflare Gateway の Activity Log でもポリシーが適用されたことが確認できます。

![image-20220530231217038](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220530231217038.png)
DDLトリガー と イベント属性ファンクション で CREATE されるオブジェクトのオーナー名とオブジェクト名を記録する。(Oracle Database)

表題の通り Oracle Database の DDLトリガー と イベント属性ファンクションで、CREATE されるオブジェクトのオーナー名とオブジェクト名を記録してみますやで。
彡(ﾟ)(ﾟ)

# 1. 参考マニュアル

以下のマニュアルを参考にしました。イベント属性ファンクションが肝ですね。

> Oracle Database データベース PL/SQL言語リファレンス 19c
> 
> 9.15.1 イベント属性ファンクション
> https://docs.oracle.com/cd/F19136_01/lnpls/plsql-triggers.html#GUID-266DBF6D-AA74-490C-ADE5-962C10708C2D
> ora_dict_obj_name  ... VARCHAR2(128): DDL操作が発生したディクショナリ・オブジェクトの名前
> ora_dict_obj_owner ... VARCHAR2(128): DDL操作が発生したディクショナリ・オブジェクトの所有者
> ora_dict_obj_type  ... VARCHAR2(20) : DDL操作が発生したディクショナリ・オブジェクトの型
> 
> 9.5.3 INSTEAD OF CREATEトリガー
> https://docs.oracle.com/cd/F19136_01/lnpls/plsql-triggers.html#GUID-7B32FE4B-AB8E-48B0-A74C-599584A485A7
> 
> 14.12 CREATE TRIGGER文 ※構文図
> https://docs.oracle.com/cd/F19136_01/lnpls/CREATE-TRIGGER-statement.html#GUID-AF9E33F1-64D1-4382-A6A4-EC33C36F237B

# 2. 事前準備(記録用テーブル と DDLトリガー作成)

記録用テーブル と DDLトリガー を作成します。SYSユーザーで作成します。
今回は ayshibatスキーマ の CREATE を記録するようにしました。

```sql
CONNECT SYS/xxxxxxxx@ORCL AS SYSDBA

CREATE TABLE ayshibat.tbl_create_object_logging (
    OBJECT_OWNER     VARCHAR2(128)
  , OBJECT_NAME      VARCHAR2(128)
  , OBJECT_TYPE      VARCHAR2(23)
  , CREATE_TIMESTAMP TIMESTAMP
);

CREATE OR REPLACE TRIGGER ayshibat.trg_create_object_logging
INSTEAD OF CREATE ON ayshibat.SCHEMA
BEGIN
  INSERT INTO ayshibat.tbl_create_object_logging
  VALUES (
      ora_dict_obj_owner
    , ora_dict_obj_name
    , ora_dict_obj_type
    , SYSTIMESTAMP
  );
END;
/
```

# 3. オブジェクト作成 と 記録結果の確認

対象スキーマ(今回は ayshibatスキーマ)でテーブルを CREATE してみます。

```sql
CONNECT ayshibat/xxxxxxxx@ORCL;

CREATE TABLE TAB1(ID NUMBER);

ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY/MM/DD HH24:MI:SS.FF';
SET LINESIZE 170;
COLUMN OBJECT_OWNER FORMAT A30;
COLUMN OBJECT_NAME  FORMAT A30;
COLUMN CREATE_TIMESTAMP FORMAT A30;
SELECT * FROM ayshibat.tbl_create_object_logging;
```

結果は以下の通りです。

```sql
SQL> CONNECT ayshibat/xxxxxxxx@ORCL;
Connected.

SQL> CREATE TABLE TAB1(ID NUMBER);

Table created.

SQL> ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY/MM/DD HH24:MI:SS.FF';

Session altered.

SQL> SET LINESIZE 170;
SQL> COLUMN OBJECT_OWNER FORMAT A30;
SQL> COLUMN OBJECT_NAME  FORMAT A30;
SQL> COLUMN CREATE_TIMESTAMP FORMAT A30;
SQL> SELECT * FROM ayshibat.tbl_create_object_logging;

OBJECT_OWNER                   OBJECT_NAME                    OBJECT_TYPE             CREATE_TIMESTAMP
------------------------------ ------------------------------ ----------------------- ------------------------------
AYSHIBAT                       TAB1                           TABLE                   2022/05/30 10:11:44.580414
```

オーナー名とオブジェクト名を記録できました。

# 4. まとめ
CREATE されたオブジェクトのオーナー名やオブジェクト名を記録できました。
当初はイベント属性ファンクションに辿り着けず、教えて頂いた @nakaie さんに感謝感激雨霰
彡(^)(^)ｱﾘｶﾞﾄｺﾞｻﾞﾏｰｽ
mac OS Montereyでpyenv installができなくなった時の解決策

# 事象
OSのアップデート後、以下の開発環境にてpyenvでpythonバージョンインストールができなくなり、３時間ほど溶かしたので、備忘録。

:::note info
開発環境
- OS Monterey ver12.3
- シェルはzsh
- Homebrew経由にてpyenvをインストール済。python3.6系を使用中。`pyenv install 3.8.1`を、実行したところ以下のエラーが発生
:::

```
BUILD FAILED (OS X 12.3 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/dz/f45slrd10kd13yxmrsxzg0rr0000gn/T/python-build.20220530202441.23363
Results logged to /var/folders/dz/f45slrd10kd13yxmrsxzg0rr0000gn/T/python-build.20220530202441.23363.log

```

# 解決策
1. xcodeの再インストール
2. Homebrewにて、zlib, bzip2 をインストール
2. ~/.zshrc　の書き換え
2. ターミナルにて指定のコマンド実行

### xcodeの再インストール
```
$ xcode-select --install
```
※　この処理は結構重いみたいで10分ほどかかりました

### Homebrewにて、zlib, bzip2 をインストール
参考記事をもとに、zlib, bzip2をインストール。bzip2に関しては、zlibを入れて解決しない人が使っているっぽいので、zlibを入れて解決しない場合に、bzip2を入れるでも良いかも。

> 参考： [Install python 3.8.0 via pyenv on BigSur](https://dev.to/0xkoji/install-python-3-8-0-via-pyenv-on-bigsur-4oee)

### ~/.zshrc　の書き換え
`open .zshrc` コマンドを叩いて、~/.zshrcに以下の記述を追記
```
export LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/bzip2/lib"
export CPPFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/bzip2/include"
```
尚、pyenv 関連の最終的な記述は以下
```
# pyenvの設定
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
export LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/bzip2/lib"
export CPPFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/bzip2/include"
```

### ターミナルにて指定のコマンド実行
以下のコマンドを実行。　※かなり長いけど、一文。コード内`pyenv install --patch 3.8.1`の部分は自分のインストールしたバージョンに書き換えて使う。
```
CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" pyenv install --patch 3.8.1 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
```

結果、指定バージョンがインストールできた
```
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.8.1 to /Users/ogasawarasatoru/.pyenv/versions/3.8.1

$ pyenv versions
  system
* 3.6.5 (set by /Users/ogasawarasatoru/.pyenv/version)
  3.8.1
```


# 参考記事
> 1. [macOS Big Sur にアップグレードした後にpyenv installできなくなった際の私の場合の解決方法](https://qiita.com/hisa_shim/items/abb4936f1f676fe6a7b8)
> 1. [pyenvのgit issue (Python 3.6-3.8 cannot be installed on Mac OS 11.0.1: "implicit declaration of function 'sendfile' is invalid in C99")](https://github.com/pyenv/pyenv/issues/1737)
Flutter : ListViewを横スクロールにすると両端でoverscrollが起こる問題

## エラー
```
'package:flutter/src/widgets/overscroll_indicator.dart': Failed assertion: line 243 pos 14: 'notification.metrics.axis == widget.axis': is not true.
```

## 修正方法
下記プロパティをセットする。
ただしAndroidユーザーにはあまり慣れないような動きかもしれないです（筆者はiOSをメインに開発してまして。。。）
`physics: const BouncingScrollPhysics()`

```
          ListView.builder(
            itemCount: artistColumnList.length,
            scrollDirection: Axis.horizontal,
            physics: const BouncingScrollPhysics(), ← これ追加
            itemBuilder: (context, index) {
              return GestureDetector(
                onTap: () => onTapItem(artistColumnList[index]),
                child: ArtistColumnListItem(
                  data: artistColumnList[index],
                  tapBookMark: tapBookMark,
                ),
              );
            },
          ),
```
【BigQuery】処理されたバイト数と課金対象のバイト数

タイトルの通り、Bigqueryの実行結果の中にある処理されたバイト数と課金対象のバイト数について調べてみました。加えて、料金もメモしておきます。(途方もない料金を溶かさないために… )

## バイト数について

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774565/daafcd80-867b-211d-3a53-54f51f3a8035.png)
*GCPのマネジメントコンソールで確認できるクエリ結果*

- 上記のように、Bigqueryのジョブ情報の中には、2つのバイト数があります。
    - `処理されたバイト数`
    - `課金されるバイト数`

- わずかなデータスキャン量のクエリを実行した際、上記のように2つのバイト数に差出ました。

差が出た理由は、下記になります。

- 処理されたバイト数：
    - その名の通り、実行したクエリで処理されたバイト数
- 課金対象のバイト数：
    - クエリあたりのデータ`最小処理容量は 10 MB` とします([公式](https://cloud.google.com/bigquery/pricing)より参照)
    - 上記イメージは、最小処理容量の10MB(切り上げ)

## 利用料金

- オンデマンド料金　$6.00 / TB (東京（asia-northeast1）)
- 毎月 1 TB まで無料
([公式](https://cloud.google.com/bigquery/pricing)より参照)

## 利用料金の監視について

下記の記事が参考になりました。

- [BigQuery 破産で泣かないために。。GCP 利用料金を bot で Slack に通知してみた](https://dev.classmethod.jp/articles/gcp-cost-slack-bot-notify/)
    - ```月当たりの利用料金の予算```を決めて、アラートを通知するもの
    
- [BigQueryの監査ログをリアルタイムに監視して使いすぎを防止してみる](https://techblog.zozo.com/entry/bigquery-overuse-alerting-system)
    - ```クエリあたりの閾値```を決めて、それを超えるクエリが実行されたら通知するもの
基本情報（シフト演算のかけ算と割り算）

## シフト演算のかけ算

シフト演算では「2,4,8,16」のような2nに当たる数字でしか、掛け算と割り算もできません。
「3」や「7」などの半端な数字で行う計算をどうすればよいか考えるのですが下記のようにできます。

例えば変数Nを7倍にする時は7を2進数に分解します。

```
N * 7 = N * (4 + 2 + 1)
      = N * (2²+2¹+2⁰)
      = (N * 2²)+(N * 2¹)+(N * 2⁰)
```
2²は左に2ビットシフト
2¹は左に1ビットシフト
2⁰は元の数値

では変数Nを5と仮定します。
5を2進数にまず変換します。
```
128 64 32 16 8 4 2 1
  0  0  0  0 0 1 0 1
```
8ビットなので8桁までだします。
```
5 * 7 = (00000101 * 2²)+(00000101 * 2¹)+(00000101 * 2⁰)
      =  00010100 + 00001010 + 00000101
      =  00100011

2進数を10進数に戻します
128 64 32 16 8 4 2 1
  0  0  1  0 0 0 1 1
```
10進数だと35ですね！
かけ算ができました。

## シフト演算のわり算
まず「わり算とは何か」を整理すると

20 / 5 は5ずつ4つに分けられるの意味となります。
つまり20という数字からは5を4回、引くことができるとなるわけです。

15 / 3 をやってみます
```
128 64 32 16 8 4 2 1
  0  0  0  0 1 1 1 1 // 15
  0  0  0  0 0 0 1 1 // 3

1111から11は何回引けるかというと

11を2ビットシフト

 1111
-1100
------
   11

11を0ビットシフト
 11
-11
----  
  0

重み 2⁷  2⁶ 2⁵ 2⁴ 2³2²2¹2⁰ 
重み 128 64 32 16 8 4 2 1

2ビットシフトは4で0ビットシフトは1です。
2² + 2⁰ = 4 + 1
        = 5
```
上記のやり方は普通に割り算するやり方と変わりません
```
   101 // 10進数だと5
   ---- 
11|1111
   11
-------  
     11
     0
-------
     11
     11
-------
      0 
```

## まとめ
この辺りはひたすら計算をやれば慣れる気がするので
とにかく計算ですね。
ReactのMaterialUIでTBLにソート機能を実装する

## Material UIでソート機能を実装する。
成果物の完成イメージ

![スクリーンショット 2022-05-30 22.42.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/ac5a0c9b-23e0-a86c-6451-897bb8b69ec8.png)

```typescript:App.tsx
import { SampleTable } from "./SampleTable";

export default function App() {
  return <SampleTable />;
}
```

```typescript:SampleTable.tsx
import { useState, VFC } from "react";
import Table from "@mui/material/Table";
import TableBody from "@mui/material/TableBody";
import TableCell from "@mui/material/TableCell";
import TableContainer from "@mui/material/TableContainer";
import TableHead from "@mui/material/TableHead";
import TableRow from "@mui/material/TableRow";
import TableSortLabel from "@mui/material/TableSortLabel";

interface TableLayout {
  id: number;
  name: string;
  score: number;
}

function createData(id: number, name: string, score: number): TableLayout {
  return {
    id,
    name,
    score,
  };
}

const rows = [
  createData(1, "Koji", 75),
  createData(2, "Bryant", 48),
  createData(3, "k.k.Factory", 89),
  createData(4, "Subaru", 78),
  createData(5, "Yokosawa", 55)
];

function descendingComparator<T>(a: T, b: T, orderBy: keyof T) {
  if (b[orderBy] < a[orderBy]) {
    return -1;
  }
  if (b[orderBy] > a[orderBy]) {
    return 1;
  }
  return 0;
}

type Order = "asc" | "desc";

function getComparator<Key extends keyof any>(
  order: Order,
  orderBy: Key
): (
  a: { [key in Key]: number | string },
  b: { [key in Key]: number | string }
) => number {
  return order === "desc"
    ? (a, b) => descendingComparator(a, b, orderBy)
    : (a, b) => -descendingComparator(a, b, orderBy);
}

export const SampleTable: VFC = () => {
  const [order, setOrder] = useState<Order>("asc");
  const handleOrderChange = (property: keyof TableLayout) => (
    event: React.MouseEvent<unknown>
  ) => {
    setOrder(order === "asc" ? "desc" : "asc");
  };

  return (
    <TableContainer>
      <Table>
        <TableHead>
          <TableRow>
            <TableCell>
            <TableSortLabel
                active
                direction={order}
                onClick={handleOrderChange("id")}>ID</TableSortLabel>
              </TableCell>
            <TableCell>
                氏名

            </TableCell>
            <TableCell>
                成績
            </TableCell>
          </TableRow>
        </TableHead>
        <TableBody>
          {rows.sort(getComparator(order, "id")).map((row, index) => {
            return (
              <TableRow key={row.id}>
                <TableCell>{row.id}</TableCell>
                <TableCell>{row.name}</TableCell>
                <TableCell>{row.score}</TableCell>
              </TableRow>
            );
          })}
        </TableBody>
      </Table>
    </TableContainer>
  );
};

```

https://mui.com/material-ui/api/table-sort-label/#main-content
10年前のWindows７マシンをQ4OSで完全復活させた話。

10年前に購入した、古いWindows7マシンがあります。
Intel G460,メモリー４GB,500GB　HDDと言うスペックのAcerのデスクトップマシンです。

と思って、過去の自分のブログを探したら、ちゃんと書いてありました。
https://kanashimi-kikoushi.blogspot.com/2012/09/15windows-pc.html
購入したのは、2012年9月で、59,800円でした。

このマシンなのですが、購入後２年くらいは、Windows７で利用していたのですが、色々なアプリをインストールすると非常に遅くなり、以降、4台目PCとしてUbuntuをインストールして使っておりました。
しかしながら、GUIモードで動かしていることもあるのでしょうが、Ubuntuは重い。
使えないことはないが、起動に２分位かかるし、起動後もサクサクと動きません。
かつて多くの軽量Linuxをインストールして動かしてみましたが、どれも、色々な問題があり（軽量ではない。きちんと動かない等）、結局、Ubuntuで無理やり動かしていたと言うのが現実です。

そんな中、軽量Linuxとして非常に評判の良い、Q4OSに出会い、今の自分のメインPCであるMac　M1にUTMで仮想環境を構築して動かしてみたところ、非常に高速に動くことが確認できました。操作性も良い。
https://qiita.com/naiveprince0507/items/c32fea219e5dc0e0a353

と言う訳で、仮想環境での動作確認ができたので、上のAcerマシンにインストールしてみました。
尚、最初は６４bitをインストールしたのですが、Acerマシン上で変なエラーが出て、GUIが表示されません。Graphicドライバが、この古いAcerマシンに対応していない様です。
ついては、32bitでインストールしました。
https://q4os.org/
![Q4OS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1665829/a5ea1859-401a-f72b-30ee-80a0ea3a7288.png)

結果ですが、非常に快適にサクサクと動きます。
普通にインターネットを見たりするのは全く問題ないです。
Acerが生き返って、非常に嬉しい。
【初心者メモ】Gatsby+TypeScriptにおけるCSS Modulesエラー

## 事象
[Gatsbyのチュートリアル](https://www.gatsbyjs.com/docs/tutorial/part-2/)をTypeScriptに読み替えながら実施している際、以下のエラーが吐かれた。

```ts
// Cannot find module './style.module.css'.
import { style } from "./style.module.css";
```

## 解決策
[next.jsでの対処方法](https://blog.shimar.me/2020/12/05/nextjs-css-cannot-find-module)を参考に、以下の手順で解決した。
1. プロジェクトフォルダ直下にgatsby-env.d.tsを作成
1. tsconfig.jsonのincludeに上記のファイルを追加する
```ts:gatsby-env.d.ts
declare module "*.css";
declare module "*.scss";
```
```ts:tsconfig.json
  "include": [
    ...,
    "./gatsby-env.d.ts"
  ],
```

## 参考
https://blog.shimar.me/2020/12/05/nextjs-css-cannot-find-module
https://www.gatsbyjs.com/docs/tutorial/part-2/
ASP.NETでエラー「No OWIN authentication manager is associated with the request.」

>No OWIN authentication manager is associated with the request.

WebAPIでアクセスすると「OWIN認証マネージャーは要求に関連付けられていません。」というエラーが出る。

## 原因
Microsoft.Owin.Host.SystemWebパッケージが足りていません。
これがないとOwinの認証機能(ASP.NET Identitiy)が動きませんでした。
(プロジェクトをMVCで作成するとき、認証ありにすると、デフォルトでインストールされていた気がしますが、今回は空のWebAPIから始めた)

これ、インストール忘れでもコンパイルエラーなどが出ず、実行時エラーでしか気づけません。
移植(コピペ)で作成しているときに忘れがちです…

## 対応
「Microsoft.Owin.Host.SystemWeb」パッケージをインストールします。

ソリューションを右クリック＞ソリューションのNuGetパッケージの管理
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538652/a8749295-b3fc-b706-9319-3108402be98c.png)


「Microsoft.Owin.Host.SystemWeb」で検索してインストール対象のプロジェクトを選択し、右側にある「インストール」ボタンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538652/f0eb4fbd-ee40-9fe4-0c7e-139d5cf53240.png)


正常にインストールされたら完了です。
スパイウェア とは

## 勉強前イメージ

聞いたことあるようなないような・・・
スパムの親戚？それともスパイが化けの皮被った的な？ウェアやから

## 調査

### スパイウェア とは

パソコン内でユーザの情報や行動を収集して送信するプログラムになります。
基本的に多くのものは悪意があって使用されるものが多いですが、
ソフトなどを使用してニーズを掴むために行動の情報を取得するような使われ方をするものもあります。
悪意のあるスパイウェアはパソコンを経由して口座番号など個人情報を盗むものがあります。

### スパイウェアの種類

- アドウェア

サービス提供と引き換えに広告を表示するもので
閲覧機歴を収集してそれに変動して広告を表示したりします。
必ずマーケティングに使用されるとも限らないので悪質な場合は対策をしないといけません。

- ジョークプログラム

突然PCに画像が表示されるなどいたずらに使用されるものです。
最近はあまりないようです。

- キーロガー

キーボード操作などを記録して外部に送信します。
パスワードなど守らないといけない情報の流出につながるので対策が必要です。

- ブラウザハイジャッカー

ブラウザを使用する際に設定を変更したり表示されるサイトを変えるなどされる場合があります。
セキュリティレベルも下げられる可能性があります。

### スパイウェアの侵入経路と対策

基本的にはメールの添付ファイルや閲覧したホームページから侵入します。
安全性の低いソフトはインストールしない、また知らないメールは開かない、
もちろんセキュリティソフトの導入など基本的な対策が効果的です。

## 勉強後イメージ

高度な場合もあるけど
基本的なことしてたらまぁまぁ安全に使用できる？
ただ、それを守るのって結構難しいのね。

## 参考

- [スパイウェアとは？基本的な仕組みと被害を防ぐための対策方法](https://www.daikodenshi.jp/daiko-plus/security/what-is-spyware/)
- [スパイウェアとは？その種類別の症状、感染経路や対策を解説]https://cybersecurity-jp.com/security-measures/22807)
[Amazon Linux] ユーザー追加とパスワード設定

OS
-
Amazon Linuxを使用しています
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664791/b8058341-1181-e732-4aed-62c4878c7e12.png)

ユーザーの追加
--
一旦root権限にします
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664791/057fb6cb-6324-57a2-add8-3b39b90ca136.png)

useradd ●●　とコマンドを入力します。
私の場合は"uni"を新規ユーザーとして作成しました。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664791/a909242c-b73a-bf89-7082-75ed3388a738.png)

今作成した"uni"ユーザーにログインできることを確認します。
sudo [ユーザー名]を入力
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664791/a1bfb4fb-bbdb-0bdc-4f02-055b25d5a5f2.png)

"uni"へログインできることを確認できました。

パスワードの設定
-
今作成した"uni"に対してパスワードを設定します。
rootを操作している状態でpasswd[ユーザー名]を入力
例では"togetoge"としました。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664791/79d1edb1-53d7-c8b4-bc56-20a1c44e2758.png)
パスワードが簡単すぎるためか、BAD PASSWORDと表示されていますが設定できています。念のため確認します。

作成したアカウントへパスワードを入力してログイン
-
rootからsu [ユーザー名]を入力するとパスワードを入力せずに対象アカウントへログイン出来てしまうためいったんexitを入力してec2-userへ変更します。
ec2-userの状態でsu [ユーザー名]を入力するとパスワードを要求されます。先ほど設定したtogetogeを入力するとuniアカウントを操作できるようになりました。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664791/9e98b22f-c1f0-842a-ea9b-eb167f6f79ef.png)

以上になります。

参考
-
https://hodalog.com/how-to-check-linux-os-version/

https://atmarkit.itmedia.co.jp/ait/articles/1811/02/news035.html

https://eng-entrance.com/linux-command-useradd
【BigQuery】URLをデコードする関数をJavaScriptで作る - 

## 背景
データベースにエンコードされたURLが入っていた場合、そのURLをデコードしなければいけませんよね。
既存の関数で一発！というわけにはいかないURLのデコードの関数をUDF(User-Defined Function)として作ってみました。

## URLエンコード、デコードとは
まず初めに、URLのエンコードとデコードとはなんぞやということを書いておきます。
URLのエンコードとは、**本来URLの中で使えない文字を、使用できる文字の特殊な組み合わせによって置き換えること**です。日本語の入っているURLなどもエンコードすることで機能します。

具体的には、 %の後に 0~9,A~Fの16進数2桁で1Biteの文字を表します。日本語などの1Biteで表しきれないものは、その組み合わせで表します。(例：%41がA、%23が#、%E3%81%82 が あ など)

デコードとは、エンコードされたURLを元の状態に戻すことです。

では、本題に入ります。

## BigQueryではJavaScriptが使える
BigQueryのUDFは、実はJavaScriptで書くことができます。つまり、SQLでどうやったらいいかわからない処理も、JavaScriptを使えば簡単にできたりするってことなんですね。

使い方は簡単で、UDFの中身にJavaScriptを書くだけです。

しかし、欠点としてJavaScriptはSQLと比べBigQuery上での動作が遅くなります。
なんと、クエリの高速化に関して言及している公式ドキュメントでは、「JavaScript ユーザー定義関数を避ける」と明記されているんですね笑
なので、JavaScriptで作るUDFの乱用は要注意です！


**▼Google公式ドキュメント『クエリ計算の最適化』**

https://cloud.google.com/bigquery/docs/best-practices-performance-compute?hl=ja#avoid_javascript_user-defined_functions

## URLデコードのUDF
URLをデコードする一次関数の作り方は、
```SQL
CREATE TEMPORARY FUNCTION url_decode(url STRING)
RETURNS STRING
LANGUAGE js AS "return decodeURIComponent(url);";
```
となります。

似た関数に `decodeURI()`があるのですが、URL内で特別な意味を持つ`「; , / ? : @ & = + $ #」`の扱いが若干異なります。
`decodeURI()`は上記の文字がエンコードされていた場合デコードに対応しないのに対し、`decodeURIComponent()` は対応します。用途に応じて使い分けてみてください。

```SQL
select url_decode ('https://qiita.com/%41%41%41') as decoded_url
```

を実行してみると、結果は
|  decoded_url  | 
| ---- | 
|  https://qiita.com/AAA  | 

となります。

この関数にデコードできないURLを引数として渡した場合、
**『URIError: URI malformed at url_decode(STRING)』** というエラーが出ます。

**▼デコードできない引数の例**
```SQL
select url_decode ('https://qiita.com/%4') as decoded_url
```

## デコードできない場合はnullを返したい
デコードできるURLは全てデコードしたいが、デコードできない場合にエラーでクエリが回らなくなるのは避けたい... そんな時もありますよね。

そんな時は、JavaScriptの **try...catch文** を用いてエラー回避しましょう。今回はJavaScriptをで書いたUDFを使うため、エラーへの対処をSQLではなくJavaScript側で行います。

**▼URLをデコードし、デコードできない場合はnullを返す関数**
```SQL
CREATE TEMPORARY FUNCTION url_decode_try(url STRING)
    RETURNS STRING
    LANGUAGE js AS """
    try{
    return decodeURIComponent(url);
    }catch(e){
    return null;
    }
    """ 
    ; 
```

この関数を使って
```SQL
select 
  url_decode_try ('https://qiita.com/%41%41%41') as not_error,
  url_decode_try('https://qiita.com/%4') as error_occurred
```

実行すると、結果は
|  not_error  |   error_occurred  |
| ---- |  ---- |
|  https://qiita.com/AAA  |  *null*  |

となります。

これを使えば、例えば　`table01` というテーブルの `url` というカラムにデコードできるURLとできないURLが混じっていた場合も、
```SQL
select coalesce(decode_url_try(url),url)
from table01
```
で問題なく処理できます！
ASP.NETでエラー「見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。」

## エラー内容

>ファイルまたはアセンブリ 'System.Web.Http, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'、またはその依存関係の 1 つが読み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外:0x80131040)

## マニフェストという英語の意味
マニフェスト【manifest】
https://www.weblio.jp/content/%E3%83%9E%E3%83%8B%E3%83%95%E3%82%A7%E3%82%B9%E3%83%88
>名詞だと、「(船やトラックなどの)積荷目録」「乗客名簿」とのこと。日本では「政策宣言」としても使われる

「一覧表」くらいのニュアンスで捉えていいだろうか…

## アセンブリマニフェストとは
https://docs.microsoft.com/ja-jp/dotnet/standard/assembly/manifest

ASPに限らず.NETのアセンブリは全て、アセンブリマニフェスト(というファイル)に
アセンブリメタデータ(アセンブリ内の要素の相互関係の情報など)が入っています。

アプリケーションを実行するのに何という名前のアセンブリのバージョンいくつを使うという一覧表のイメージ。(それ以外の情報も含まれますが。)

## 対応
今回のエラーは「System.Web.Http」というアセンブリの「Version=5.2.7.0」で読み込めない、という内容です。

Webアプリだといろいろなパッケージを追加でインストールすることがありますが、そうするとパッケージの依存関係が壊れることがよくあるそうです。確かにパッケージをいくつかインストールしたので、依存関係が壊れ、一部読み込めなくなったかもしれません。

そういう場合はパッケージをすべて再インストールすることで解消するようになります。

### 公式の再インストールの手順
https://docs.microsoft.com/ja-jp/nuget/consume-packages/reinstalling-and-updating-packages

>Visual Studio のプロジェクトでは、パッケージへの参照が壊れてしまう状況が多々あります。 このような場合、パッケージの同じバージョンをアンインストールして再インストールすると、それらの参照は復元され動作するようになります。

nugetとpackages.configを使ってパッケージを管理していて、「パッケージ マネージャー コンソール」で全パッケージの再インストールを行ってみました。

パッケージマネージャーコンソールを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538652/2e13c280-140d-e20e-b931-fcffb90f074f.png)

パッケージマネージャーコンソールで再インストールコマンドを実行します。
```
Update-Package -reinstall
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538652/78243356-ed4f-b05f-c0e2-f084f9f5f5f3.png)



処理が完了したら、プロジェクトを実行してみます。
正常に表示されるようになれば完了です。

## 参考
https://qiita.com/keymoon/items/289dfe4af857cf54e25b

>パッケージを全て再インストールしてみると治ることが多々あります。
VRChatでPCDJをプレイする（無料ソフト使用）-暫定版

# やりたいこと
VRChat内でPCDJをしたい。
今回はVRChatの音声入力を利用して、ボイスDJとしてする方法。
# 必要なソフト
* VirtualDJ
* VB-Cable
* VoiceMeeter Banana

すべて無料でインストール可能

# WindowsとBananaの設定

1. まずは3つのソフトをインストール。このとき、**管理者権限**でインストールすること。
1. 設定の前に、自分が普段使っているオーディオデバイス（入出力共に）を確認しておく。
1. Windowsのサウンド設定とVoiceMeeter Bananaの設定を見ていく。
Windowsのサウンドの出力をVoiceMeeter **input**に設定。入力をVoiceMeeter **output**に設定する。
1. Bananaの左から。Hardwear input1に2で確認した、普段自分が使っている入力デバイスをWDMで設定。（A1を消すと自分の声は跳ね返らない）
1. Hardwear input2はとりあえず無視。
1. Hardwear input3にWDM:CABLE outputを設定。
1. Virtual inputのVoiceMeeter VAIOの方の、A1を点灯させる。これでいわゆる、デスクトップ音声が聞こえるようになる。
1. Hardwear outに、2で確認した、自分が普段使っている出力デバイスをWDMで設定。

# VirtualDJの設定
### スキンの設定
1. 右上の歯車マークで設定→インターフェース→1番上のGet more→右上の検索するに「Blocks」といれて、出てきたものをインストール。
1. インターフェースに戻り、Blocksの＋マーク→4 Decks verticalを選択。ここではとりあえずこれで説明。

### オーディオデバイスの設定
1. 次にオーディオのタブに行き、下の出力のマスターをブースに変えて、その隣をVB-Audio Virtual Cable(WASAPI)に設定。
1. 右下の＋を押して、設定を追加。追加したものを、ヘッドホン＝VB-Audio VoiceMeeter VAIO(WASAPI)に設定。
1. できたら、**適用する**を押す！！
1. 最後に、オプション→AUTOMATON→autoGainをrememberにする。
1. で、閉じる。
1. 画面左上の「fx」のボタンと、その左の四角が6個のボタンを押す。これで、fxボタンとその左2つ、右のスピーカーマークが点灯状態であればOK。

### 音量の設定
このままでは爆音で流れたり、小さい音は途切れたりするので、調整したりしていく。

1. まず、流したい音だけで流すと、VRChat内では小さい音が聞こえいことや切れてしまうことがあるので、
https://booth.pm/ja/items/1177208
のような音源を後ろで流しておく必要がある。
上記URLのような音源をダウンロードしたら、わかりやすいフォルダなどに入れて、Virtual DJ上で、たとえば、一番右の黄色の部分に、下のフォルダなどのところからファイルをドラッグアンドドロップする。
黄色の丸の左、LOOPと書いてある下の数字を押す。これで、この音源がループ再生の設定になる。
2. 小さい音が聞こえるようにする音源のGainの調整をする。今、黄色に入れた、途切れなくする音のGainを赤目一杯になるように調整する。普通の曲は緑までだが、この音源は例外。
黄色の音源をループ再生（再生は再生・一時停止ボタン）しながら、真ん中の丸やつまみ群の一番上の黄色い丸をスライドする感じで調整する。
3. 爆音の調整をする。左から、BOOTH VOLUMEを5%くらいに、HEADPHONE VOLUMEの音量を5%くらい（これは自分に聞こえる音量なのでお好きに）、HEADPHONE MIXを40～50%くらいに設定してみる。
このあたりは慣れてきたら調整だけど、まずはこのくらいで。

ここまできたら、次はVRChatの設定。

# VRChat内の設定
1. Audio→Microphone→Changeから「VoiceMeeter Output」を選択。
1. BananaでHardwear input3の下がMuteになっていないかを確認。（MuteだとVRChatに音が入らない）
1. VRChat内、マイクの入力レベルを確認しながら、判定が入るギリギリまで、VirtualDJの黄色の縦のフェーダーを下げる。（これでノイズを極力少なくする）

以上！

# いざテスト
黄色の音源を流しながら、空いているところに好きな音源を置き、再生！
流しながら、曲のGainを一番大きい音で緑をキープできるようにする。

# 注意事項
oculus linkやsteamVRを起動したときなど、ちょくちょくWindowsの設定が戻ってしまうときがあるので、確認して、変わってしまっていたら戻すこと。
ポイントは、VRChatを起動する前に、Windowsのサウンド設定をVoiceMeeterにしておくこと。でないと音が入らないなどバグる。
Inkscapeで2ファイル間で線や図形をコピペするには？

解： しないでください

inkscapeでsvgファイルを別々に開いて、いっこからもういっこにコピペしたら全然サイズや比が違うなんてよくハマりますよね。
そういう時は、コピーしたい図形のあるsvgファイルをコピー先からインポートしましょう。

やりかたはファイル→インポートです。
Requirements on Runtime Environment, No.83, AUTOSAR R21-11(284) CP

Requirements on Runtime Environment, No.83, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SRS_RTE.pdf

AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11,200文書読んだ。2022年5月に全部到達。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
no

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Standardization Template
AUTOSAR_TPS_StandardizationTemplate
[2] Requirements on Standardization Template
AUTOSAR_RS_StandardizationTemplate
[3] Virtual Functional Bus
AUTOSAR_EXP_VFB
[4] Software Component Template
AUTOSAR_TPS_SoftwareComponentTemplate
[5] Basic Software Module Description Template
AUTOSAR_TPS_BSWModuleDescriptionTemplate
[6] Requirements on Mode Management
AUTOSAR_SRS_ModeManagement
[7] Specification of Memory Mapping
AUTOSAR_SWS_MemoryMapping
[8] Specification of Compiler Abstraction
AUTOSAR_SWS_CompilerAbstraction
[9] Specification of Platform Types
AUTOSAR_SWS_PlatformTypes
[10] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral
[11] Specification of Diagnostic Log and Trace
AUTOSAR_SWS_DiagnosticLogAndTrace
Specification of a Diagnostic Communication Manager for SAE J1939, No.610, AUTOSAR R21-11(282) CP

Specification of a Diagnostic Communication Manager for SAE J1939, No.610,2021-11

https://www.autosar.org/fileadmin/user_upload/standards/classic/21-11/AUTOSAR_SWS_SAEJ1939DiagnosticCommunicationManager.pdf

AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11,200文書読んだ。2022年5月に全部到達。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
|Term|Description|
|:--|:--|
|ACKM| Acknowledgement Message, J1939 PGN 0E80016
|DEM| Diagnostic Event Manager
|DET |Default Error Tracer
|DM |Diagnostic messages
|PGN |Parameter Group Number
|SAE |Society of Automotive Engineers (in charge of J1939 specification)
|SPN |Suspect Parameter Number


## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] List of Basic Software Modules
AUTOSAR_TR_BSWModuleList.pdf
[2] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[3] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral.pdf
[4] General Specification for Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
[5] Requirements on Diagnostics
AUTOSAR_RS_Diagnostics.pdf
[6] Specification of Communication Stack Types
AUTOSAR_SWS_CommunicationStackTypes.pdf
[7] System Template
AUTOSAR_TPS_SystemTemplate.pdf
[8] Specification of Diagnostic Event Manager
AUTOSAR_SWS_DiagnosticEventManager.pdf
[9] Specification of PDU Router
AUTOSAR_SWS_PDURouter.pdf
[10] Specification of Default Error Tracer
AUTOSAR_SWS_DefaultErrorTracer.pdf
[11] Specification of a Request Manager for SAE J1939
AUTOSAR_SWS_SAEJ1939RequestManager.pdf
[12] Specification of Network Management for SAE J1939
AUTOSAR_SWS_SAEJ1939NetworkManagement.pdf
[13] Specification of BSW Scheduler
AUTOSAR_SWS_BSWScheduler.pdf
[14] Specification of ECU Configuration
AUTOSAR_TPS_ECUConfiguration.pdf
[15] Specification of Memory Mapping
AUTOSAR_SWS_MemoryMapping.pdf
[16] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
[17] J1939-73 FEB2010, Application Layer – Diagnostics
AWSのEC2へアプリをデプロイした際のThe page you were looking for doesn't exist.というエラーについて

## はじめに
Railsで作成したアプリをAWSのEC2上にデプロイしようとした際、ブラウザ上に
The page you were looking for doesn't exist.
You may have mistyped the address or the page may have moved.
というエラーが生じました。
自分の状況にピッタリくる参考記事が見つけられず、上記のエラーに苦しめられたためこの記事を作成しました。

## 開発環境
- ruby2.6.3
- rails6.1.4
- IDE：Cloud9

## エラー内容
railsのエラーログを確認するとActionController::RoutingError(ルーティングエラー）が/（ルートパス）へ生じている。urlへさまざまなルーティングを打ち込むと全てルーティングエラーになっている。
- アプリがgithubからpullできているか確認 → OK
- 結び付けられたサーバーがあっているか確認 → OK
- 本番環境内にルーティングがあるか確認 → OK

サーバーを落としてみようと下記コマンドを実行。
```
kill $(cat tmp/pids/puma.pid)
```
Operation not permittedと怒られてしまいました、、、

## 解決
サーバーが落とせなかった理由はサーバーの自動起動を設定していたためでした！
```
sudo kill $(cat tmp/pids/puma.pid)
```
上記で停止、再起動することができました。
すると出ていたルーティングエラーも消失していました！

## 原因
アプリのルーティングを設定する前に練習としてそのアプリを一度デプロイしてしまっていたため、その中身のない以前の状態のまま立ち上げられている状態でした！
そのため、１度サーバーを停止させることで無事にエラーを解決することができました。

## 最後に
初めてのデプロイが無事に終わってスマホから検索できた時は感動しました！
同じような状況でエラーが生じて困っている方の助けになれれば幸いです。
[Amazon Linux] Apacheのインストール

OS
-
AMAZON Linuxを使用しています。

Apacheのインストール
-------
下記コマンドを入力する
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664791/9ee9b867-68d4-374b-e826-20dc3060f99c.png)


Complete!が表示されればOK！
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664791/2784d0ce-1e97-55c9-2488-142d531c6b42.png)

Apacheサービスの状態確認を行う
-
下記青線のコマンドを入力
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664791/990c1f02-bea7-9c43-103e-6b7dce30b4ea.png)

状態(Active)がinactive(dead)になっているのでapatchサービスが停止していることが確認できる

Apacheサービスを起動
-
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664791/49f982b4-ebab-d0d9-9c0e-db202c9b033c.png)

再度状態確認を行う
-
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664791/7ef03b5e-a747-0fdc-4f57-555a68456a32.png)

状態(Active)がactice(running)になっていることが確認できる

次回インスタンス起動時に自動でApacheサービスが起動するようにする
--
一旦rootへ変更
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664791/f70d5572-bc16-0da6-0d52-0a649391d945.png)

下記コマンドを入力する
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664791/40c5ec87-612e-9740-3ec2-e0b94776a55c.png)

以上になります。

参考
-
https://engineer-ninaritai.com/apache-install/

https://genchan.net/it/server/1782/
git pushしたらエラー起きた

git pushしたら画像のようにエラーが起きた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697069/d5454440-3a62-d1d5-8f6b-3a1bff4353e3.png)

原因は、リモートリポジトリで名前を変えたり直したりしてたことらしい。つまり、リモートリポジトリの変更がローカルリポジトリに反映してないから、してねってこと。

下記の記事が参考になったけど、一番下の記事の「git pull origin」とコマンドを打つと解決した。

https://wonderful-tereshkova-38f91d.netlify.app/GitHub%E3%81%B8%E3%81%AEpush%E3%81%8C%E3%80%8Cfetch%20first%E3%80%8D%E3%81%A8%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%A6rejected%E3%81%A8%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE%E5%AF%BE%E5%87%A6/

https://qiita.com/blackpeach7/items/b58079064082afcc7f3c

https://thebaker.hatenablog.com/entry/2017/11/15/053219
Explanation of Classic Platform Software Architectural Decisions, No.1028, AUTOSAR R21-11(280) CP

Explanation of Classic Platform Software Architectural Decisions, No.1028, 

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_EXP_CPSWArchitecturalDecisions.pdf

AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11,200文書読んだ。2022年5月に全部到達。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
|Term|Description|
|:--|:--|
|Date of approval|Date when the decision has been approved by CF-CCB.
|Decision|The decision itself. Impact or direct consequences (for example, changes tointerfaces) of the decision are not documented in the normal case. Changes are requested during the roll-out process after the decision has been made.
|Rationale |A rationale for the decision.
|Category| Category of the decision.
|Application affected|States if the decision has a direct impact on existing applications.
|Assumptions|Lists the assumptions that have been made before making the decision itself. These assumptions are documented in order to be able to review decisions in the future and check if some assumptions probably no longer hold.
|Constraints|Provides an overview of the constraints that were identified to have an impact on possible solutions. The constraints are also documented in order to be reference points for future reviews of the decision.
|Alternatives |Lists the alternatives that were considered and a rationale why they are worse than the decision that has been made.
|Remarks |Lists remarks on the decisions.
|Related requirements|Lists requirements related to the decision.

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Glossary, AUTOSAR_TR_Glossary
https://www.autosar.org/fileadmin/standards/foundation/21-11/AUTOSAR_TR_Glossary.pdf
[2] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture

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



# 文書履歴(document history)
ver. 0.01 初稿 20221229
ver. 0.02 URL追記　20230101
Update homebrew & git 

# Update brew (2.x -> 3.4.1)
* brew --version
* /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
* brew --version

# Update git (2.7.1 -> 2.36.1)
* brew update && brew upgrade
* git --version
* brew install git

* brew link --overwrite isl
* brew link git
* brew link --overwrite git
Layered Software Architecture, No.53, AUTOSAR R21-11(278) CP


Layered Software Architecture, No.53, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf

AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11,200文書読んだ。2022年5月に全部到達。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
|Term|Description|
|:--|:--|
|Hardware errors / failures| Root cause: Damage, failure or ‚value out of range‘, detected by software- Example 1: EEPROM cell is not writable any more - Example 2: Output voltage of sensor out of specified range
|Software errors| Root cause: Wrong software or system design, because software itself can never fail. - Example 1: wrong API parameter (EEPROM target address out of range) - Example 2: Using not initialized data
|System errors| -Example 1: CAN receive buffer overflow - Example 2: time-out for receive messages
|Development Errors|Development errors are software errors. They shall be detected like assertions and fixed during development phase. The detection of errors that shall only occur during development can be switched off per module for production code (by static configuration namely preprocessor switches). The according API is specified within AUTOSAR, but the functionality can be chosen/implemented by the developer according to specific needs.
| Runtime Errors|Runtime errors are systematic software errors. They indicate severe exceptions that hinder correct execution of the code. The monitors may stay in code even for a deployed systems. Synchronous handling of these errors can be done optionally in integrator code.
| Transient Faults|Transient faults occur in hardware e. g. by passage of particles or thermal noise. Synchronous handling of these faults can be done optionally in integrator code. The detecting module may offer behavioral alternatives selectable by this integrator code.
| Production Errors / Extended Production Errors|Those errors are stored in fault memory for repair actions in garages. Their occurrence can be anticipatedand cannot be avoided in production code. Production errors have a detection and a healing condition.


## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

no
【写真整理】不要な写真をコマンドプロンプトで削除する

デジタルカメラで写真を撮る人は便利かもです。
NEFはニコンのRAWデータ形式なので、他のカメラメーカーの方はお使いの形式に置き換えてください。

**使い方**
1. 撮った写真のJPGとRAWデータを同じフォルダに置く（メモリーカードからコピー）
1. フォルダのJPGを「フォト」などの画像ビューアで見ながら不要な写真を削除する
1. 不要な写真のRAWデータが残るので、以下のコマンドを実行する

```
@echo off 
cd フォルダ名
copy *.JPG *.DEL
ren *.NEF *.DEL
del *.DEL
```

`@echo off `でコマンドの復唱を停止
`cd フォルダ名`でデータのあるフォルダに移動
`copy *.JPG *.DEL`で必要な写真のDELファイルが生成されます（最後に消えます）
`ren *.NEF *.DEL`で不要な写真はDELファイルに変わり、必要な写真はすでにDELファイルがあるので何も起きません
`del *.DEL`ですべてのDELファイルが消えます
これで不要な写真のRAWデータが削除できました


ほぼこのサイトと同じです。自分用に`@echo off`と`cd フォルダ名`を追記しました。
https://sawa.i-shany.com/pc/software/5093/

フォルダがCドライブ以外の場合はこの記事を参照ください。
https://qiita.com/Nemy/items/3ab1f91010ea9908d673
Specification of Bulk NvData Manager, No.949, AUTOSAR R21-11(277) CP

Specification of Bulk NvData Manager, No.949, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SWS_BulkNvDataManager.pdf

AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11,200文書読んだ。2022年5月に全部到達。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
no

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Glossary, AUTOSAR_TR_Glossary
[2] General Specification of Basic Software Modules, AUTOSAR_SWS_BSWGeneral
Requirements on AUTOSAR Features, No.294, AUTOSAR R21-11(276) CP obsolete

Requirements on AUTOSAR Features, No.294, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_RS_Features.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11,200文書読んだ。2022年5月に全部到達。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
|Term|Description|
|:--|:--|
|SHALL|This word means that the definition is an absolute requirement of the specification.
|SHALL NOT| This phrase means that the definition is an absolute prohibitionof the specification.
|MUST| This word means that the definition is an absolute requirement of the specification due to legal issues.
|MUST NOT| This phrase means that the definition is an absolute prohibition of the specification due to legal constraints.
|SHOULD| This word, or the adjective "RECOMMENDED", mean that there may exist valid reasons in particular circumstances to ignore a particular item, but the full implications must be understood and carefully weighed before choosing a different course.
|SHOULD NOT| This phrase, or the phrase "NOT RECOMMENDED" mean that there may exist valid reasons in particular circumstances when the particular behavior is acceptable or even useful, but the full implications should be understood and the case carefully weighed before implementing any behavior described with this label


## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[GLOSSARY] AUTOSAR Glossary, AUTOSAR_TR_Glossary.pdf
[ISO 10681] Road vehicles -- Communication on FlexRay
[ISO 11898] Road vehicles -- Controller area network (CAN)
[ISO 13400] Road vehicles -- Diagnostic communication over Internet Protocol
(DoIP)
[ISO 14229] Road vehicles -- Unified diagnostic services (UDS)
[ISO 15031] Road vehicles -- Communication between vehicle and external
equipment for emissions-related diagnostics
[ISO 15765] Road vehicles -- Diagnostic communication over Controller Area
Network (DoCAN, UDS on CAN)
[ISO 17356] Road vehicles -- Part 3: OSEK/VDX Operating System (OS)
[ISO 17987] Road vehicles -- Local Interconnect Network (LIN)
[ISO 26262] Road vehicles -- Functional safety
[ISO 27145] Road vehicles -- Implementation of WWH-OBD communication
requirements
[RS_MAIN] AUTOSAR Main Requirements, AUTOSAR_RS_Main.pdf
[SAE J1939] Serial Control and Communications Heavy Duty Vehicle Network
[TPS_STDT] AUTOSAR Standardization Template,
AUTOSAR_TPS_StandardizationTemplate.pdf
scipy.stats: Fisher の正確検定  fisher_exact <-- 使うな！！

# scipy.stats: Fisher の正確検定  fisher_exact <-- 使うな！！

この際，はっきり言おう。

**Fisher の正確検定は，決して使ってはいけない**。

そもそも，Fisher の正確検定の前提は，実際に使われている場面とかけ離れている。

代替案というか，Fisher の正確検定を使わないで，「**連続性の補正をしない$\chi^2$検定を使いなさい**」ということに尽きるようだ。

それを受け入れられない人は，いろいろ自分で調べてみよう。その上で使いたい場合は自己責任でどうぞ。

ということで，**以下は読む必要なし**。

---
`fisher_exact(table, alternative='two-sided')`

引数には 2×2 分割表を与える。デフォルトで両側検定である（`alternative='two-sided'`。他に `'less'`，`’greater'` が指定できる）。

戻り値は「オッズ比」と 2 変数が独立であるという検定結果（両側検定）の $p$ 値である。

以下の分割表について検定する。


```python
import numpy as np
tbl = np.array([[15, 9], [9, 18]])
```


```python
from scipy.stats import fisher_exact
fisher_exact(tbl)
```




    (3.3333333333333335, 0.051250670703359466)



オッズ比は以下のように計算される。


```python
odds_ratio = (tbl[0,0] * tbl[1,1]) / (tbl[0,1] * tbl[1,0])
```


```python
print(f"オッズ比 = {odds_ratio}")
```

    オッズ比 = 3.3333333333333335



```python
fisher_exact より優れているという，2 つの検定法が実装されている。詳しくは，自分で調べてみよう。

確かに，この例では，Fisher の正確検定では有意でない場合でも，以下の 2 つの検定では有意となっている。つまり，検定力が高い（強い）ということである。

ただ，広く知られていないということは確かである。影の実力者なのか，口ほどにもないということなのか。そのへんの情報も少ない。

まあ，使わなくても良いということなのだろう。

ちなみに，　R で実装されている `exact.test` はオプションがたくさんあるのだが，どれとも結果が一致しないのはなぜだろう（理解不足か？）。
```


```python
from scipy.stats import barnard_exact
barnard_exact(tbl)
```




    BarnardExactResult(statistic=2.082916624991665, pvalue=0.03991921726930299)




```python
from scipy.stats import boschloo_exact
boschloo_exact(tbl)
```




    BoschlooExactResult(statistic=0.03533077208146509, pvalue=0.04273122668534922)
Utilization of Crypto Services, No.602, AUTOSAR R21-11(275) CP

Utilization of Crypto Services, No.602, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_EXP_UtilizationOfCryptoServices.pdf

AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11,160文書読んだ。2022年5月中に全部読み。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

AUTOSAR 21-11, 62文書読んだ。2022年5月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
|Term|Description|
|:--|:--|
|BSW| Basic Software
|CDD |Complex Device Driver
|CRYIF |Crypto Interface
|CRYPTO|Crypto Driver
|CSM| Crypto Service Manager
|HSM| Hardware Security Module
|NvM |NVRAM Manager
|RTE| Runtime Environment
|SHE| Security Hardware Extension
|SWC| Software Component
|Crypto Driver Object|A Crypto Driver implements one or more Crypto Driver Objects. The Crypto Driver Object can offer different crypto primitives in hardware or software. The Crypto Driver Objects of one Crypto Driver are independent of each other. There is only one workspace for each Crypto Driver Object (i.e. only one crypto primitive can be performed at the same time).
|Crypto Primitive|A crypto primitive is an instance of a configured cryptographic algorithm realized in a Crypto Driver Object.
|Job |A job is a configured crypto primitive together with a referenced key.
|Key |A key can be referenced by a job or by a key management function in the CSM. In the Crypto Driver, the key refers a specific key type.
|Key Element K|ey elements are used to store data. This data can be, e.g., key material or the IV needed for AES encryption. It can also be used to configure the behavior of the key management functions.
|Key Type |A key type consists of references to key elements. The key types are typically pre-configured by the vendor of the Crypto Driver.
|Processing |Indicates the kind of job processing.
|Asynchronous |The job is not processed immediately when calling a corresponding function. Usually, the caller is informed via a callback function when the job has been finished.
|Synchronous |The job is processed immediately when calling a corresponding function. When the function returns, a result will be available.

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Specification of Crypto Driver
AUTOSAR_SWS_CryptoDriver.pdf
[2] Specification of Crypto Interface
AUTOSAR_SWS_CryptoInterface.pdf
[3] Specification of Crypto Service Manager
AUTOSAR_SWS_CryptoServiceManager.pdf
[4] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
業務未経験エンジニアが初現場を終えて。

# 自己紹介
はじめまして。
昨年飲食業界からエンジニアに転職した『ゆうき』です。
私は現在都内のSESで勤務をしており、Javaをメインに業務を行っております。
2022年1月より参画させて頂いた、初案件の現場で感じたことや学んだことについて、今回は発信させていただきたいと思います。
技術的な事よりは、気持ちの面などの事がメインの記事です。

## 質問を恐れるな
分からないことは素直に分かりません。とまず伝えましょう。
初めての現場参画で、僕は不安な気持ちがとても多く、質問する事を躊躇してしまう事が多々ありました。

　ーこんな事も分からないの？
　　　　って思われたらどうしよう。。

ですが、いざ質問すると上長の方などは、僕が思っているよりも詳細に答えを下さいました。
もちろん現場によって、雰囲気が違ったりする事もあるでしょうが、1人で悩んでも時間の無駄なので、不安な事や、分からないことがあれば質問するようにする事が、技術や知識が乏しい僕が出来る最大限の努力だなと感じました。
一人で悩んで解決しそうかも！？みたいな時は15分など時間を決めて悩むのは有りかもしれません。

## 質問内容は詳細まで明確に
自分の頭の中では何を聞きたいかわかっているが故に、質問をする時に要点だけ絞り出して質問してしまいがちです。
この程度で伝わるだろう　は認識齟齬にも繋がりかねないので、伝えられる範囲は全て伝えましょう。
そのかわり、まず結論から話して伝わりやすい文章で。

## 実は意外と成長できてるから安心しよう
案件中はあまり感じなかったが、初案件終わったあとに、自己学習等を進めていると、以前まで知らなかった知識や技術が体に馴染んでいる事が増えた気がします。
現場参画中はあまり気づけませんでしたが、いざ離れて違う現場に参画した時に、自分の成長を少しですが感じられました。

参画当初は技術面や知識面でものすごく不安を抱えておりました。
もちろん現在も不安やコンプレックスはありますが、最初の案件先を終え心が軽くなった感覚があります。

## まとめ
色々と書きましたが、あくまで仕事先はアウトプットの場という事。
仕事先で色々学ぼう！とかはとてもいいと思いますが、あくまで現場で求められてるのはアウトプットです。
インプットを目的に仕事場に行くのは違うと思うので、今後も日々自己学習で知識をつけ、現場で期待を超えれるようなアウトプットをしていけるよう、頑張りたいと思います。
最後までご覧頂きありがとうございました。
PowerBI: 『Expression.Error: 値 "[Function]" を型 Function に変換できません。』の対処法

# 背景
TextAnalysis を使おうとしてこのエラーが出て、あれ？って少し悩んだので備忘録

エラー発生時の基本は以下

https://docs.microsoft.com/ja-jp/power-query/dealing-with-errors

# エラー詳細
実際のエラーは以下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/02bdd90f-bc5c-a257-4703-45a3be292473.png)

> Expression.Error: 値 "[Function]" を型 Function に変換できません。
詳細:
    Value=[Function]
    Type=[Type]

# 原因
アクセス許可の編集で、「プライバシーレベル」が設定していない

普段、プライバシーレベルって未設定だと聞いてきてくれる認識だったので、気付かず・・

![アクセス許可の編集.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/4cdaf8dd-65c3-d8ff-3261-df1dcc5211ec.png)

# 解決策
ってことで、
なし　→　組織とかに変更すればOK
![プライバシーレベル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/333a9598-4522-932b-3d47-383e5611782d.png)

# あとがき
エラー内容からじゃ正直想像つかないレベルなので、改善してほしいな・・と
PHP nullsafe演算子（?->）について

# 概要

- 実務でnullsafe演算子を使う事があったのでどういうものかまとめておく。

# nullsafe演算子

- nullsafe演算子は下記である。

    ```php
    ?->
    ```

- 下記の様なコードがあったとする。

    ```php
    if (is_null($repository)) {
        $result = null;
    } else {
        $user = $repository->getUser(5);
        if (is_null($user)) {
            $result = null;
        } else {
            $result = $user->name;
        }
    }
    ```

- 下記の様な処理になっている。
    - `$repository`がnullのときnullを`$result`に格納する。
    - `$repository`がnullではないかつ、`$repository->getUser(5)`がnullのときnullを`$result`に格納する。
    - `$repository`がnullではないかつ、`$repository->getUser(5)`がnullじゃないとき`$user->name`を`$result`に格納する。
- PHP8からのnullsafe演算子を用いると下記の様に記載する事ができるらしい。（nullsafe演算子の左側の値がnullの時にそれ以降処理を実行せずnullを返す。）

    ```php
    $result = $repository?->getUser(5)?->name;
    ```

- nullsafe演算子を用いることで複雑な記載を1行で記載する事ができる。

# 参考文献

- [https://qiita.com/rana_kualu/items/c967d58582ef75e73d7d](https://qiita.com/rana_kualu/items/c967d58582ef75e73d7d)
- [https://qiita.com/atsu_kg/items/9122a5a1091557b041b3](https://qiita.com/atsu_kg/items/9122a5a1091557b041b3)
- [https://www.php.net/manual/ja/language.oop5.basic.php#language.oop5.basic.nullsafe](https://www.php.net/manual/ja/language.oop5.basic.php#language.oop5.basic.nullsafe)
【初心者向け】Python openstackのAPI発行する

文系やPython初心者向けの記事。
何かコードを渡されて解読しようにも、全く知識が無くて何で検索すれば良いのか分からない人向け。
※Openstackやらモジュールは他の記事参照。とりあえずOpenstack（何それ・・・）というののAPI発行方法。

・ソースコード

``` python
#!/usr/bin/python3

import openstack
conn = openstack.connect()
print(conn.list_flavors())
```

実行したら大量に応答が返ってきた。。。たぶん整形しないと画面出力にはつらい。。。

conn_list_flavors()の部分はOpenstackドキュメントを見ればわかる。らしい。