OmniAICreator/Qiita-1.07M huggingface dataset:
【General】Using user token for HTML Post, Cont.

This is an addition to the article [【General】Using user token for HTML Post ](https://qiita.com/Miki_Yokohata/items/2d75df65e3251ac1382a).

I put the generated user token to the Expression directly at that time.
However, by setting the token in a system property, it can be used like a kind of constant, making maintenance easier by eliminating the need to open the query even if changes occur.

I will explain how it can be achived here.

## Defining System Property ##
System Property is one of Sharperlight functionalities where we can define values with their unique code and they can be used from other Sharperlight objects by specifying the code.

In this case, I define the user token as a System Property and use it in the expression of a query.

Go for [Sharperlight](https://www.sharperlight.com/) application menu and select **System Properties**.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/e0df434c-7ab2-9fb5-091e-702174ba6c06.png)
Once System Properties window opens click `New` button to start creating a new system property.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/baae8faa-ec45-0677-9cb4-9c384cec47ce.png)
Enter an **unique code** and set its **value**. In this case, I put the user token to the value field. Click `Save` button to save it.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/119c47db-c9e4-9907-c91c-40e37760306d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/057b57a6-1911-62d3-9de6-c728c8220749.png)

## Using System Property ##
Open the published query created in the article [【General】Using user token for HTML Post ](https://qiita.com/Miki_Yokohata/items/2d75df65e3251ac1382a).
Go for the query and open the defined expression.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/5c584517-da41-b3ae-291a-800452a51ab9.png)
This part will be replaced with the function which refers the system property.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/7c60322e-4442-fdd2-fbbc-6d05eafadcec.png)
Type **system pro** in the `Find` text field.
Double-click the function `Get a System Property by name SystemPropertyGet(code, defaultValue)`.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/e7aa8b60-7db6-462d-4743-d63e1e3b95bc.png)
The template will be displayed in the `Expression Formula` text field.
Set the code of the system property for the token. As the default value, I put a notice "Please set SystemProperty 'AdminToken'". 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/d57bd7ba-07de-fa40-d22a-4c3e00026a27.png)
It's done and it will be replaced with the token at runtime.
When the user token is changed, this query doesn't need to be updated and the change is handled by updating the system property.
WASMのComponent-Modelへの期待

# Component-Modelで何ができるようになるか
[Component-Model](https://github.com/WebAssembly/component-model)とはWASM(WebAssembly)の現在策定中の新しい仕様。
このComponent-Modelでは抽象化された、静的解析可能で、機能安全で、言語にとらわれないインターフェースを定義することを目標としている。

----

## 主な用途
- ネイティブプラグインの代替
- サーバレスなプラットフォームでの低レイテンシで高速なインスタンス化ができるサンドボックス環境
- 簡単に効率的にスクリプトを導入するサポートの提供
- ライブラリをサンドボックス環境で安全に外部のunsafeなライブラリを実行する


----

## 経緯

このComponent-Modelはもともと二つの提案に分かれていました。
- interface-types
    - 入出力の構造を定義してインターフェースを作りやすくする
- module-linking
    - 他のwasmのモジュールに動的にリンクする

----

# WIT

Component-Modelにおいてのインターフェースを記述する言語
まだ仕様策定中

```
default world sample-plugin {
    record plugin-config {
        name: string,
        version: string,
    }
    record response {
        content: string,
    }
    import get-config: func() -> plugin-config
    export gen-response: func(user: string) -> response
}
```

----

## 想定される活用先

これらのインターフェース定義がwit経由になると考えられる

----

### Rust等の言語でフロントエンド
DOMを直接操作できるようになる。yewとかが高速化するはず

----

### fass

witでインターフェースを定義したwasmを設定することになるはず
https://wasmer.io/wasmer-for-faas
https://github.com/cloudflare/workerd
https://deislabs.io/posts/introducing-spiderlightning-and-slight/

----

### WAPM
IRB,RustPython,sqlite
Wasmのパッケージをimportなどして呼べるようになる。

----

# Rustへの影響

wasmと親和性が高いRustにいろいろメリットがあると思われる

----

### [yew](https://github.com/yewstack/yew)などのRust製フロントエンドの高速化
Domが直接操作できるようになるので高速化、効率化する

----

### [wit-bindgen](https://github.com/bytecodealliance/wit-bindgen)

- ランタイム(ホスト)として
    - wasm-time wasmer
- ゲスト
    - 対象のコンポーネントが実装されることをtrait定義で確認することができる

----

# まとめ

Component-Modelでwasmの表現力が高まり、様々な用途で使いやすくなると思われる。
基本情報技術者・応用情報技術者試験のストラテジ対策で知っておきたい経営指標一覧

応用情報技術者試験のストラテジ分野の午後の過去問を解いてみて、基礎知識がないあまり歯が立たなかったので執筆。

過去問を数問解いてみた限り、財務諸表のそれぞれの経営指標の求め方さえ知っていれば高得点が狙えそうだと感じたので、経営指標についてだけ書く。

これを知っているか知っていないかは、1か50かぐらいの違いがある。




<h1>代表的な経営指標 </h1>

経営指標には、主に収益性を確認するものと、安全性を確認するものがある。

<h2>収益性を確認するもの</h2>

<h3>総資本経常利益率</h3>
総資本の経常利益に対する貢献度を表す指標である。高ければ高いほど良い。

経常利益とは、企業が通常おこなっている事業のうち、経常的に得ている利益のことである。

総資本経常利益率は、次のように求める。

<h4>経常利益➗総資本✖️100<h4>
<br>
<h3>総資本回転率</h3>
総資本の売り上げに対する貢献度を表す指標である。高ければ高いほど良い。

総資本回転率は、次のように求める。
<h4>売上高➗総資本✖️100</h4>
<br>

<h3>固定資産回転率</h3>

固定資産の売り上げに対する貢献度を表す指標である。高ければ高いほど良い。


固定資産回転率は、次のように求める。

<h4>売上高➗固定資産✖️100</h4>
<br>
<h3>売上高対総利益率</h3>
売上高に対する売上総利益の割合を表す指標である。高ければ高いほど良い。



売上高対総利益率は、次のように求める。

<h4>売り上げ総利益➗売上高✖️100</h4>
<br>
<h3>売上高対経常利益率</h3>
売り上げ高に対する経常利益の割合を表す指標である。高ければ高いほど良い。

売上高対経常利益率は、次のように求める。

<h4>経常利益➗売上高✖️100</h4>
<br>
<h3>ROE(自己資本利益率)</h3>
自己資本に対する利益の割合を表す指標である。高ければ高いほど良い。

ROEは、次のように求める。

<h4>当期純利益➗自己資本✖️100</h4>
<br>
<h3>ROA(総資産利益率)</h3>
総資産に対する利益の割合を表す指標である。高ければ高いほど良い。

ROAは、次のように求める。

<h4>当期純利益➗総資産✖️100</h4>

<br>
<br>

<h2>安全性を確認するもの</h2>


<h3>流動比率</h3>
短期の負債に対する支払い能力を表す指標である。200%以上が望ましい。

流動比率は、次のように求める。

<h4>流動資産➗流動負債✖️100</h4>
<br>

<h3>当座比率</h3>
短期の負債に対する即時支払い能力を表す指標である。100%以上が望ましい。


当座比率は、次のように求める。

<h4>当座資産➗流動負債✖️100</h4>
<br>
<h3>固定比率</h3>
固定資産のどの程度が自己資本で賄われているかを表す指標である。100%以下が望ましい。


固定比率は、次のように求める。

<h4>固定資産➗自己資本✖️100</h4>

<br>
<h3>固定長期適合率</h3>
固定資産のどの程度が自己資本と長期借入金で賄われているかを表す指標である。100%以下が望ましい。

固定長期適合率は、次のように求める。

<h4>固定資産➗(固定負債＋自己資本)✖️100</h4>

<br>
<h3>自己資本比率</h3>
総資本に対する自己資本の割合を表す指標である。高ければ高いほど良い。

自己資本比率は、次のように求める。

<h4>資本合計➗総資本✖️100</h4>
<br>
<br>

終わり。
<br>
他の記事も見てね。Twitterもフォローよろしくお願いします。
https://twitter.com/curro50393127
Javaのメソッドについて_メソッドを使って処理を分割

paizaラーニングforTEAM Java入門編
レッスン6の#05

```Java:6-#05
// RPGの攻撃シーンを作ろう
// メソッドを使って処理を分割する

public class Main {
    public static void main(String[] args) {
        String[] enemies = {"スライム", "モンスター", "ドラゴン"};
        for (String enemy : enemies) {
            //System.out.println("勇者は、" + enemy + "を攻撃した。");
            attack(enemy);
        }
    }
    
    public static void attack(String target) {
        System.out.println("勇者は、" + target + "を攻撃した。");
        int hit = (int)(Math.random() * 10 + 1);
        if (hit < 6) {
            System.out.println(target + "に、" + hit + "のダメージを与えた！");
        } else {
            System.out.println("クリティカルヒット！" + target + "に、100のダメージを与えた！");
        }
    }
}

// プログラムの流れ
// 1. mainメソッド内で攻撃対象となる敵を配列enemiesで用意
// 2. mainメソッド内でenemiesのすべての要素enemyに対してattackメソッドを呼び出す_引数はenemy
// 3. attackメソッド内で、引数enemyを変数targetに代入し、"勇者は、" + target + "を攻撃した。"を出力
// 4. attackメソッド内で、変数hitにランダムに生成した1から10までの整数を代入
// 5. attackメソッド内で、変数hitの値に応じて場合分けして文字列を出力
個人的に忘れそうなSQL文まとめ

:::note info
「 ` 」は書式には関係ないです
:::

## BETWEEN演算子
ある範囲内に値が収まっているか判定する
```sql:書式
select * 
from `表` 
where `列名` BETWEEN `値１` and `値２`; 
```
## IN / NOT IN演算子
カッコ内に並べた値のいずれかに合うデータがあるか判定する。
= では一つしか判定できないが、IN演算子は複数の値を判定できる
```sql:書式
select * 
from `表` 
where `列名` IN (`値１`,`値２`); 
```
## ORDER BY ---- 結果の並び替え
ORDER BYを記述すると、指定した列名を基準に結果を並び替える
ASC … 昇順
DESC … 降順
```sql:書式
select * 
from `表` 
ORDER BY `列名` ASC or DESC; 
```
#### 行数を限定して、抽出する
一部の行だけを抜き出したい場合はORDER BY句に続けて、OFSET - FETCH句をつける
```sql
select * 
from `表` 
ORDER BY `列名`
OFFSET `先頭から除外する行` ROWS
    FETCH NEXT `取得行数` ROWS ONLY; 
```

## DISTINCT ---- 重複を除外する
DISTINCTを記述すると、重複した行があれば取り除いてくれる
```sql:書式
select DISTINCT `列名`
from `表`;
```
## UNION演算子 ---- 和集合を求める
<img src="http://physics.thick.jp/Mathematics_A/Section1/figures/fig1-3-2.png" alt="和集合" width="150" height="100">

2つのSELECT文をUNIONでつなぐと、検索結果を足し合わせた結果が返ってくる

```sql
select `列名` from `表` 
UNION
select `列名` from `表` 
```

## EXCEPT(エクセプト)演算子 ---- 差集合を求める
<img src="https://www.javadrive.jp/python/set/img/p6-3.png" alt="差集合" width="200">

上のSELECT文の検索結果から、下のSELECT文の検索結果に存在する行を引いた集合

```sql
select `列名` from `表` 
EXCEPT
select `列名` from `表` 
```
## INTERSECT演算子 ---- 積集合を求める
<img src="https://www.javadrive.jp/python/set/img/p6-2.png" alt="積集合" width="200">

2つのSELECT文に共通する行を抽出する

```sql
select `列名` from `表` 
INTERSECT
select `列名` from `表` 
```
:::note warn
集合演算は2つ目のselect文の後ろにORDER BY句を付けれる
(途中には書けない)
:::

## CASE演算子 ---- 値を変換する
列の値や条件式を評価し、その結果に応じて値を変換してくれる
```sql
CASE `評価する列や式` WHEN `値1` THEN `値1の時に返す値`
                     WHEN `値2` THEN `値2の時に返す値`...
                     ELSE `デフォルト値`
END AS `つけたい名前`                 
```

## LENGTH/LEN関数 ---- 長さを得る
文字列の長さを調べてくれる
LENはSQL ServerでLENGTH関数の代わりに使う
```sql
select LENGTH(`列名`) AS `列名の長さ` from `表名`                 
```

## SUBSTRING関数 ---- 一部を抽出する
「何文字目から何文字文」文字列を抽出できる
```sql:費目列の1~3文字目に「費」があるものを抽出
select * from `表名`
where SUBSTRING(`費目`,1,3) LIKE '%費%'                 
```

REPLACE関数 ---- 文字列を別の文字列に変換する
文字列「axxle」の「x」を「p」に変換して「apple」にできる

:::note info
LENGTH関数で文字列の空白を半角にするときにも使う
:::
Cognosで複数ページに跨るリストのあるレポートで、テキストやシングルトンのオブジェクトを繰り返し表示させないように制御する

# はじめに

1ページにリストやテキストなどの複数のオブジェクトを配置したレポートで、リストの行数が多く次ページに跨った際、出力が完了しているリストオブジェクトであれば表示が消えてくれるのですが、テキストやシングルトンは2ページ目以降にも表示されてしまいます。

おなじみのCognosのサンプルを使用したレポートで、「製品」ごとに改ページを設定しているレポートで検証していきます。

# レポート作成

まずレポートを作成します。

「製品」ごとに改ページを設定したレポートで、その製品の情報を複数のオブジェクトを使って出力するレポートを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146283/e3184f77-a491-00dc-e792-2542d851ec3a.png)


一番上の「製品」のみのリストで、「マスター/詳細を使用した改ページを設定」を設定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146283/9c834b8d-3673-db22-6037-08e1d8e370c1.png)


これで、製品ごとに改ページされるレポートが作成できました。
ただし、はじめに記載した問題の通り、同じ製品で2ページ目移った際にテキストやシングルトンの値が繰り返し出力されてしまいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146283/143e878c-b10f-429b-9ae7-1939e9253e82.png)





# 対応方法

テキストやシングルトンなどの2ページ目以降に表示させたくないオブジェクトに条件付きスタイルを設定します

定義する条件は下記の通りです。

`PageNumber () = 1`

その他の条件で「ボックスのタイプ」を「なし」を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146283/c324f16b-c7e2-8c74-55ec-0f4749da969f.png)



改ページのタイミングで、ページ番号を1にリセットしたいので、ページのプロパティから以下の設定を追加します。

ページ付け > ページ番号をリセット ： 1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146283/695ee30c-2cfb-8f20-a2a8-6c8af80887f8.png)



これで、製品が切り替わる改ページタイミングで、ページ番号も1にリセットされ、設定した条件付きスタイルが効いて期待通りのレポート出力が可能になります。

※さっきのレポートで条件付きスタイルを設定したレポートの2ページ目
繰り返し表示されていたテキストなどが消えていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146283/39e51dd3-9294-06e7-de78-5d960b0ade78.png)


ページを送り、製品が切り替わったタイミングではページ番号が1に振りなおされて、テキストなどが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146283/5539020d-8c7d-fe98-71e0-cd7d79d374db.png)


# さいごに

テキストなどのオブジェクトをページ跨った際に表示させてない方法について、他の方法があればコメントいただけると幸いです。
【データ基盤構築/Snowflake】Snowflakeと組み合わせて使われるAWSのサービスを調べてみた

# 今回の課題
SnowflakeとAWSのどのようなサービスを組み合わせて、データ基盤を構築することができるのか理解する。
SnowflakeのYouTubeチャンネルの[AWSサービスとSnowflakeを連携したデータ分析基盤](https://www.youtube.com/watch?v=4RplSCXVL2U)という動画を見て気になった点などを調べてみた。（アーキテクチャの図も引用させていただきました。）


https://www.youtube.com/watch?v=4RplSCXVL2U

下記が、動画内で紹介されていたアーキテクチャ。
この中のAWSのサービスを調べてみた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883573/287994f5-428f-43f6-f00b-6ad9c5a8149c.png)

# Snowflakeと連携して使えるAWSのサービスを調査する
動画内でSnowflakeと連携して使用できるAWSのサービスが紹介されていたので、簡単に調べてみた。
## 1)Data Pipeline系
下記のサービスを使って、データソースからS3やSnowflakeにデータをロードすることができる。
### Glue
下記のような機能がある。

* ETLジョブ：データソースからデータを抽出した後、データレイクやDWHにデータを連携する機能。
* データカタログ：ETLジョブのデータソースなどのデータの説明を記載しておける。
* クローラ：データレイクを定期定期にチェックし、メタデータをデータカタログに反映する機能。
* ワークフロー：ETLジョブ、クローラ、データカタログ出力までの一連の処理を自動化できる。

※`AWS Lambda`でも基本的に同じ作業を行うことができるが、
　15分でタイムアウトしてしまうので、
　大規模なデータ処理を行う場合は、Glueの方が向いている。
　しかし一方で、CloudWatch EventsやS3など連携サービスの方が多いことが理由でLambdaの方が選ばれがちな様子

https://qiita.com/takumi--kobayashi/items/3a608383219814cdf555

### AppFlow
Glueと同様の機能だが、SalesforceやSlackなど、
SaaSからのデータ連携用のツールのため、データ連携元が限られる。
コードを書かずにデータフローを自動化することができる。

## 2)Streaming Data系
下記のツールを使用して、ストリーミングデータを取り扱うことができる。
### Kinesis Data Streams
次々と送られる大量のストリームデータをリアルタイムに収集し、次のサービスに配送するためのサービス。
Kinesis StreamsにLambdaをつけて、S3やDWHに転送することもできる。
### Kinesis Data Firehose
次々と送られる大量のストリームデータをS3やDWHに転送することができる。

### MSK
Amazon Managed Streaming for Apache Kafkaの略。
streamingデータの収集・処理・保存を行うためのプラットフォームである、
`Apache Kafka`の実行や管理を自動で行ってくれるサービス。

`Apache Kafka`は管理が難しいなどの欠点が、それらを解決するためのサービス。といったイメージ。


## 3)Spark Processing系
### EMR
Amazon Elastic MapReduceの略。
`Apache Hadoop`や`Apache Spark`などのオープンソースツールを利用した、ビッグデータの分析が可能なサービス。

下記のように使用できる。
* 大規模データ変換：ビッグデータに対するデータ抽出や変換・読み込みといったワークロードを分散処理基盤を活用して効率的に行える。
* リアルタイムストリーミング：`Apache Flink`と`Apache Spark Streaming`を組み合わせることで、`Kinesis`などといったデータソースからストリーミングされるデータをリアルタイムに分析することができる。

# まとめ
データソースに対して、どういったツールを使用してETLしてSnowflakeにデータを格納することができるのか勉強になった。
Ubuntu14.04にphp7.4.1をインストールする個人的メモ

wget https://www.php.net/distributions/php-7.4.1.tar.gz
tar fzxv php-7.4.1.tar.gz
cd php-7.4.1

apt install libcurl pkg-config libxml++2.6-dev libkrb5-dev libssl-dev libsqlite3-dev libbz2-dev libpng-dev libjpeg-dev libfreetype6-dev libc-client2007e-dev libonig-dev libxslt1-dev

./configure --prefix=/opt/php74

make

ffiを使う場合はこんな感じ
./configure --prefix=/opt/php74 --with-ffi
Javaのメソッドについて_変数のスコープ

paizaラーニングforTEAM Java入門編
レッスン6の#04

```Java:6-#04
// スコープを理解する
// Javaでは、あるメソッド定義と別のメソッド定義は完全に独立したコードとして扱われるということ
// これが変数のスコープ_変数の有効範囲が決まっている
// メソッド定義など、ブロックの中で宣言された変数をローカル変数と呼ぶ

public class Main {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int num = sum(a, b); // sumメソッドの呼び出し_引数がaとb_戻り値をnumに代入
        System.out.println(num);
        System.out.println("hello" + a);
    }
    
    // 足し算をするsumメソッドを定義
    public static int sum(int x, int y) {
        // メソッドの結果を再利用したい場合に戻り値を記述する
        // メソッド定義では戻り値のデータ型を記述(ここではint)、戻り値がない場合はvoid
        // メソッド定義の引数にはデータ型と変数名を記述
        int a = 3;
        System.out.println("hello" + a); // mainメソッドとはスコープが分かれているため、
        // mainメソッドの変数aとsumメソッドの変数aは独立している
        return x + y; // メソッドの中身_ここではメソッドの返り値
    }
    
    
}

// プログラムの流れ
// 1. mainメソッドの変数aと変数bに値を代入
// 2. sumメソッドを呼び出す
// 3. sumメソッドの変数aに値を代入(メソッドではスコープが分離しているのでmainメソッドの変数aには影響しない)
// 4. sumメソッド内で"hello" + aを出力_変数aはsumメソッドのもの
// 5. sumメソッドでの計算結果を戻り値として返す
// 6. mainメソッドに戻り、戻り値を変数numに代入
// 7. mainメソッド内で変数numの値を出力
// 8. mainメソッド内で"hello" + aを出力_変数aはmainメソッドのもの
なぜ必須フィールドはProtocol Buffer (proto 3)から削除されたのか?

# 結論

- .proto定義に必須フィールドを追加すると、新しい定義でビルドされたバイナリは、古いデータに必須フィールドが存在しないため、古い定義を使用してシリアル化されたデータを解析できなくなるから
- proto定義の変更でprotoを共有しているアプリケーションの互換性が崩れる

詳しくは後述します。

# 概要

Protocol BufferのベストプラクティスにDon't Add a Required Fireldという項があり実際にProto3では必須フィールドが使えなくなりました。

![CleanShot 2023-03-14 at 15.36.17@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7565/1d8dbb73-bba1-7a47-d73e-ba9a7313d391.png)

https://protobuf.dev/programming-guides/dos-donts/

なぜこのようなことになったのか調べてみました。

調べてみると、次のStackOverflowの記事が見付かりました。

https://stackoverflow.com/questions/31801257/why-required-and-optional-is-removed-in-protocol-buffers-3

回答を翻訳しました。

> 必須フィールドの有用性については、多くの議論や論争が巻き起こってきました。双方に大きな陣営が存在しています。一方の陣営は、値が存在することを保証することが好きで、その制限を受け入れることになりますが、もう一方の陣営は、必須のフィールドは安全に追加または削除できないため、危険または役に立たないと感じています。

> 必須フィールドが控えめに使用されるべき理由について、もう少し説明しましょう。既にProtoを使用している場合、古いアプリケーションはそのフィールドを提供しないため、必須フィールドを追加することはできません。一般的に、アプリケーションは失敗をうまく処理できません。すべての古いアプリケーションを最初にアップグレードすることができますが、間違いを犯しやすいですし、Protoをどのデータストアに保存しているか（メモリーキャッシュなど、短命なものでも）に関係なく、役に立ちません。必須フィールドを削除する場合も同様の状況が発生します。

> 多くの必須フィールドは、それが必要だと思われていた...が、必要ではなくなったということがあります。例えば、Getメソッドのidフィールドがあるとします。それは明らかに必要です。ただし、後でidをintからstring、またはint32からint64に変更する必要があるかもしれません。これにより、新しいmuchBetterIdフィールドが追加され、古いidフィールドが指定される必要がありますが、最終的には完全に無視されます。

> これらの2つの問題が組み合わさると、有益な必須フィールドの数は限られ、陣営はそれでも価値があるかどうかについて議論します。必須フィールドの反対者は、必ずしもそのアイデアに反対していたわけではありませんが、現在の形態に反対していました。いくつかの人々は、より表現豊かなバリデーションライブラリを開発することを提案し、name.length>10のようなより高度なバリデーションをチェックすることができ、さらに良い失敗モデルを持つようにしました。

> Proto3は全体的にシンプルさを重視しており、必須フィールドの削除はシンプルです。ただし、proto3の場合、プリミティブのフィールドの存在を削除し、デフォルト値の上書きを削除するなど、他の機能と組み合わせることで、必須フィールドの削除が合理的であると考えられます。

> 私はprotobufの開発者ではありませんし、この問題についての権威的な知識を持っているわけではありませんが、この説明が役立つことを願っています。

さらに調べると、実際に必須フィールドが削除されたGitHubのissuesが見付かります。[why messge type remove 'required,optional'? · Issue #2497 · protocolbuffers/protobuf](https://github.com/protocolbuffers/protobuf/issues/2497)

抜粋して翻訳します。

> proto3では、requiredフィールドが一般的に有害であり、protobufの互換性セマンティクスに違反するため、必須フィールドを廃止しました。protobufを使用する全体的なアイデアは、プロトコル定義からフィールドを追加/削除でき、新しい/古いバイナリと完全に前方/後方互換性があることです。しかし、必須フィールドはこれを破壊します。.proto定義に必須フィールドを安全に追加することはできず、既存の必須フィールドを安全に削除することもできません。これらの両方のアクションはワイヤ互換性を破壊します。たとえば、.proto定義に必須フィールドを追加すると、新しい定義でビルドされたバイナリは、古いデータに必須フィールドが存在しないため、古い定義を使用してシリアル化されたデータを解析できません。.proto定義がシステムの多くの異なるコンポーネントで広く共有される複雑なシステムでは、必須フィールドを追加/削除することで、システムの複数の部分を簡単にダウンさせることができます。これにより、生産上の問題が複数回発生し、Google内のどこでも誰でも必須フィールドを追加/削除することはほぼ禁止されています。そのため、proto3では完全に必須フィールドが削除されました。

> "required"が削除された後、"optional"は単に冗長なため、それも削除されました。
【Kubernetes】開発中に知ってると便利な適用中のマニフェストを書き換えて適用する方法4つ + おまけ

Kubernetesを使った開発やCI等で適用中のマニフェストの一部を変更する方法を4つまとめました。

# 1. kubectl editで直接書き換える
`kubectl edit ~~~`でエディタを開いて直接適用中のものを書き換えることができる

## 例: nginx-deploymentという名前のdeploymentの中のimagePullPolicyをAlwaysに書き換える。

```
kubectl edit deployments.apps nginx-deployment
```

でエディタが開くのでimagePullPolicyをAlwaysに書き換えて保存

# 2. 適用中のマニフェストを取得してきて、ローカルで書き換えたうえでapplyする方法
`kubectl get ~~~ -o yaml`でローカルに適用中のマニフェストを保存して書き換えた後、再適用する方法

## 例: nginx-deploymentという名前のdeploymentの中のimagePullPolicyをAlwaysに書き換える

```
# 適用中のマニフェストを取得
kubectl get deployments.apps nginx-deployment -o yaml > nginx-deployment.yaml

# バックアップを作成
cp nginx-deployment.yaml nginx-deployment-backup.yaml
```

nginx-deployment.yamlの中のimagePullPolicyをimagePullPolicy: Alwaysに書き換える

```
kubectl apply -f nginx-deployment.yaml
```

元に戻すときはバックアップを適用しなおす

```
kubectl apply -f nginx-deployment-backup.yaml
```

# 3. kubectl patchを使う
`kubectl patch  ~~~`で上書きしたい設定をjsonで渡して書き換える。ワンライナーで書き換えることができる。

## 例: deployment/nginx-deploymentのnginxイメージをnginx:1.9.1に変える

```
kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.9.1"}]}}}}'
```


# 4. kubectl setを使う
`kubectl set image ~~~`のように使い、image以外にはenv、resources、selector、serviceaccount、subjectが指定できる

## 例: deployment/nginx-deploymentのnginxイメージをnginx:1.9.1に変える

```
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
```

# おまけ: 適当なenvを追加して強制再作成させる

Podの環境変数を書き換えることで強制的に再作成させる小技。

```
kubectl set env deployment/nginx-deployment RELOAD_DATE="$(date)"
```



`imagePullPolicy: Always`になってないとimageをpullしなおさないので注意。
JBOSSのシステムプロパティ設定とjavaでの使用

・設定ファイル：standalone.xml
 ※ファイル場所：%JBOSS_HOME％\standalone\configuration

```
...
</extensions>
<system-properties>
    <property name="qiitaID" value="qiitaValue"></property>
</system-properties>
<management>
...

javaソースで取得方法は
    System.getProperty("qiitaID"); // 結果は「qiitaValue」
```
Googleデジタルマーケティング＆Eコマース：ブランド・アイデンティティを構築する

# はじめに

”Googleデジタルマーケティング＆Eコマース プロフェッショナル認定証"　の受講が完了しました(2022/3/3)。私がこのコースから得られた素晴らしい体験を、テーマごとに分割して、わかりやすくご紹介しています。興味を持たれた方は、是非下記を受講してみてください。

https://jp.coursera.org/professional-certificates/google-digital-marketing-ecommerce

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/24ea32fb-2fb3-bdb2-462a-4ffc4d60a96f.png" width="800">

今回、ソーシャルメディアを使ってブランド・アイデンティティを構築することについて説明します。

# ブランド・ポジション・ステートメント

ブランド・ポジション・ステートメントとは

***<font color="MediumVioletRed">『あなたの会社が誰のために何をするのか、そして何が競合他社と違うのかを正確に概説するもの』</font>***

- 社内向けでは、マーケティングの世界における現在のトレンドの中で、チームを導くのに役立ちます。
- 社外向けでは、ブランドとその目標を顧客に伝えることができます。

# 1.ブランド・ポジション・ステートメントを作成する

ブランドポジション・ステートメントを作成するためには、以下のことが必要です。

- あなたの顧客層
- 顧客の課題またはニーズ
- あなたの会社名
- 製品、サービス、または差別化要因（他のブランドと差別化するもの）
- 会社のミッション・ステートメント

これらの情報をすべてまとめると、次のようなテンプレートができあがります。

***<font color="MediumBlue">[顧客の課題/ニーズ]を持つ[オーディエンス]に対して、[会社名]は、[ブランドの約束またはミッション]のために[製品と差別化要素]を提供します。</font>***

### シナリオ

EveryWay EveryWearという会社は、特に着心地の良さを追求したプロフェッショナルウェアを製造しています。EveryWay EveryWearは、プレゼンテーションやピッチ、セールスを行うために長時間働く人たちのために作られています。彼らの顧客は、彼らの服装でプロフェッショナリズムのレベルを維持したいが、彼らは一日中スーツで立ち往生することは望んでいない。

このような情報をすべて知った上で、あなたは彼らのブランド・ポジション・ステートメントをどのように構成しますか？次のような文章になるかもしれません。

***【スタイリッシュでプロフェッショナル、そして機能的なワードローブ】を必要とする【社会人】のために、【EveryWay EveryWear】は【職場で着るための豪華で快適な服】を提供します-なぜなら【長時間働くときには、快適さが第一】であるべきだからです。***

- オーディエンスは誰か？ どうやって見つけるか？
- 目標は何か？
- ブランドのポジショニング・ステートメントは何か？

が分かったところで、ブランドの外観を作りたいと思うでしょう。

# 2.ブランド・アイデンティティをデザインする

ブランド・アイデンティティの構築の次のステップは、ブランドの
- カラーパレット
- ロゴ
- デジタル資産

が、ソーシャルページで何らかの一貫性を持ち、オーディエンスに視覚的にアピールできるようにすることです。

ブランド・アイデンティティのもうひとつの重要な要素は、
- ブランド・ボイス

です。ブランドボイスとは、物理的な声ではなく、ブランドがコミュニケーションにおいて発揮する明確な個性を指します。ブランド・アイデンティティを確立するためには、ブランド・ボイスの作成が不可欠です。

### ブランドガイドライン

あなたのビジネスにすでにブランドガイドラインがある場合、あなたの投稿がそのガイドラインに適合していることを確認してください。ガイドラインに記載されている色、サイズ、フォント、ロゴを使用します。ブランドガイドラインがない場合は、ガイドラインを作成する必要があります。これらの決定がなされた後、以下のヒントに従います。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/f84f07f1-4d1a-9156-5304-aaed0ee36996.png" width="600">


#### <font color="MediumBlue">ソーシャルメディアページのブランドカラーを統一する</font>

特定の画像があなたのブランドのものであることを、人々にすぐに理解してもらいたいのです。また、誰かがあなたのページやフィードを訪れたとき、あなたが使っているすべてのプラットフォームで一貫性が感じられるようにしたいものです。そのためには、すべての画像に同じカラーパレットとフィルターを使用することです。

#### <font color="MediumBlue">ブランドのアイデンティティを理解できるインフルエンサーとチームを組む</font>

インフルエンサーマーケティングは、ブランドの認知度向上、検討の促進、販売への転換に大きな力を発揮することができます。また、あなたのブランドがインフルエンサーと提携することで、彼らのオーディエンスやあなたのブランドのアイデンティティを徐々に確立していくことができます。

#### <font color="MediumBlue">ブランドの "声 "を創る</font>

ソーシャルメディアのユーザーは、色、ロゴ、グラフィックデザインの要素から投稿を識別するのと同じように、あなたの声に基づいて投稿を識別できる必要があります。あなたの声を作り、それを守るようにしましょう。同じ日に、ユーモラスなブランドボイスから不機嫌なブランドボイスに切り替えると、フォロワーにとって不快になるかもしれません。また、この声はキャプションにだけ現れるのではなく、グラフィック、ビデオ、写真、その他のビジュアルに使用するテキストでも認識できるようにする必要があります。
使用していないリージョンでGuardDutyを有効化するべきか

# GuardDutyの有効化に伴うそもそもの前提のメモ

AWS環境上でセキュリティ対策はいろいろあるが、GuardDutyは何をしてくれるサービスなのか整理する。

## GuardDutyとは。
- AWS環境やAWSアカウントのセキュリティ状況をモニタリングおよび通知してくれる。
- 複雑な設定は不要。AWS上で有効化するだけでOK。
- 機械学習で分析されたログから攻撃と思われる状況を検知してくれる。
- 料金：VPCフローログとDNSログ分析：1.10USD/GB 

-CloudTralイベント分析：4.40USD/1,000,000イベント
 ※リージョン毎に料金は異なる。

## GuardDutyは何故必要なのか
AWSのようなパブリッククラウド環境において、手軽に環境を公開出来る分セキュリティの面で不備がある。
ユーザ側でセキュリティの設定をすれば問題はないが、使い始めのユーザだったり、検証環境であったりという場合は高いセキュリティの設定がなされておらず、脅威の攻撃対象となりやすい。

## 小規模だからGuardDutyを有効化は要らない？
AWSを利用している以上、そんなことはない。
セキュリティ対策の一つの側面は守るべき情報はしっかり守ることであり、逆に言えば顧客情報を扱わない環境や、検証環境は見捨てられがち。
しかし、AWSアカウントへの攻撃が一度成功すると、情報搾取ではなくコインマイニング等が盛んに行われてしまう。
普段使わないリージョンで気付かれないようにEC2が建てられ、利用者は次の請求タイミングで気が付く。
本番環境以外のセキュリティ意識が甘くなりやすいAWSアカウントは恰好の的である。

**すべてのAWSアカウント、すべてのリージョンでGuardDutyを有効化する必要がある。**

# まとめ

- Amazon GuardDutyは全リージョン・全アカウントで有効化すべき。

- 特に検証環境や普段使わないリージョンなどでのセキュリティインシデント検知に役に立つ。

- 利用料は従量課金となるため、予測を立てるしかない。（AWSアカウント利用料の何％目安など）
Javaのメソッドについて_引数と戻り値を追加

paizaラーニングforTEAM Java入門編
レッスン6の#03

```Java:6-#03
// 引数と戻り値を追加する

public class Main {
    public static void main(String[] args) {
        int num1 = sum(3, 4); // sumメソッドの呼び出し_引数が3と4_戻り値をnum1に代入
        System.out.println(num1); // num1を出力
        int num2 = sum(300, 400); // sumメソッドの呼び出し_引数が300と400_戻り値をnum2に代入
        System.out.println(num2); // num2を出力
    }
    
    // 足し算をするsumメソッドを定義
    public static int sum(int x, int y) {
        // メソッドの結果を再利用したい場合に戻り値を記述する
        // メソッド定義では戻り値のデータ型を記述(ここではint)、戻り値がない場合はvoid
        // メソッド定義の引数にはデータ型と変数名を記述
        return x + y; // メソッドの中身_ここではメソッドの返り値
    }
}
mavenプロジェクトのシステムプロパティ設定

参照したサイト
・https://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html
・https://stackoverflow.com/questions/3231797/specify-system-property-to-maven-project

メモ
・環境変数のfile.encoding設定
変数名：JAVA_TOOL_OPTIONS
変数値：-Dfile.encoding=UTF-8

```
・maven　コマンド
// テストファイルスキップ
mvn -Dmaven.test.skip=true
// システムプロパティ設定
例：file.encoding設定
mvn -Dfile.encoding=sjis　要検証
//mavenのclean package
mvn clean package
初期値問題「[演習]微分方程式7(体系大学数学)」をwolframalphaとsympyでやってみたい。

よくわかりませんでした。

オリジナル

https://youtu.be/-Wng4TMCtKE

# wolframで
Cの番号が異なります。

https://www.wolframalpha.com/input?i=D%5By%2C%7Bx%2C%EF%BC%98%7D%5D-y%3Dcos%28x%29&lang=ja

微分方程式の解

y(x) = c_1 e^x + c_5 e^(-x) + c_7 sin(x) + c_6 e^(-x/sqrt(2)) sin(x/sqrt(2)) + c_8 e^(x/sqrt(2)) sin(x/sqrt(2)) + c_2 e^(x/sqrt(2)) cos(x/sqrt(2)) + c_3 cos(x) + c_4 e^(-x/sqrt(2)) cos(x/sqrt(2)) - 1/8 x sin(x)

**?点検**
入力が最大文字数を超えています．
(省略)

# sympyで
できました。

```python
# xｙ’+4y=logx,y(e)=1
from sympy import *
x = Symbol  ('x',real=True)
y = Function('y')(x)
var('C1 C2 C3 C4')
var('C5 C6 C7 C8')
ans=dsolve(Eq(diff(y,x,8)-y,cos(x)))
print("#",ans.rhs)
plot (ans.rhs.subs({C1:1,C2:1,C3:1,C4:1,
                    C5:1,C6:1,C7:1,C8:1
                   })) 
# C6*exp(-x) + C7*exp(x) + C8*cos(x) + (C1 - x/8)*sin(x) + (C2*sin(sqrt(2)*x/2) + C3*cos(sqrt(2)*x/2))*exp(-sqrt(2)*x/2) + (C4*sin(sqrt(2)*x/2) + C5*cos(sqrt(2)*x/2))*exp(sqrt(2)*x/2)
```

C1からC8に、1を代入して、グラフを書いてみました。
縦横比は、異なります。

![0png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/f80f5de8-2fc8-c2a3-3419-3a1865803e4c.png)

# 参考
バージョン12は，...

https://www.wolfram.com/language/12/core-calculus/compute-the-nth-derivative-of-a-function.html.ja?product=language![0png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/76747fab-e727-5278-ab6d-9dd5572e3f85.png)
Administrateでの管理権限

# はじめに
administrateの導入は簡単にできるけど、管理権限の方法があまり記事で見つからなかったので書いてみようと思いました。
先に言っておきますがなんせよわよわ未経験エンジニアなので、方法が至らないところもあると思います。
その際は、ご教授いただけると嬉しいです。
公式ドキュメント[こちら](https://administrate-demo.herokuapp.com/getting_started)です。

# Administrateの導入
Gemfileに以下を記載し、bundle install ↓
```
gem "administrate"
```
dockerの場合は、```docker-compose exec アプリ名 bundle install　```を叩いてください。
そして、installerを実行してください。　↓
```
# デフォルト設定での install (デフォルトのnamespace: admin)
$ rails generate administrate:install

# 任意のnamespaceを使いたいとき (namespace: manager)
$ rails generate administrate:install --namespace=manager
```
これで、```http://localhost:3000/admin```などにアクセスすると、自動で管理画面が作成されていると思います。
もし、エラーが出た場合はサーバーの再起動をしてみてください。
Dockerの場合は、downしてbuildして立ち上げるとできました。

# 管理権限の付与
まずはuser.rbにenumを定義
```
#user.rb

  enum role: { general: 0, admin: 1 }
```

userカラムにroleを追加するため、マイグレーションファイルを作成する。Dockerのため以下のコードをターミナルで叩く。
```
docke-compose exec アプリ名 add_role_to_users
```
```xxxxxxxxxx_add_role_to_users.rb```が作成されており、以下を追加。
```
class AddRoleToUsers < ActiveRecord::Migration[7.0]
  def change
    add_column :users, :role, :integer, default: 0, null: false 
  end
end
```
そして、```docker-compose exec アプリ名 rails db:migrate```を叩く。

とりあえずコンソールでユーザーを作成。
```
[1] pry(main)> User.create!(name: "admin", email: "admin@example.com", password: "admin", salt: "admin", role: 1)
```

# 管理者しか管理画面にアクセスできないようにする
今のままだと、ベタ打ちで```http://localhost:3000/admin```にアクセスすると、誰でもアクセスできてしまう。```admin/application_controller.rb```が作成されているはずなので、処理を記載しておく。
```
module Admin
  class ApplicationController < Administrate::ApplicationController
    before_action :authenticate_admin

    def authenticate_admin
      if current_user && current_user.role === "admin"
        admin_root_path
      else
        redirect_to root_path
      end
    end
 end
end
```
↑ リファクタリングできる部分があれば教えていただきたいです。

# 参考記事
・[公式ドキュメント](https://administrate-demo.herokuapp.com/getting_started)
・[Rails管理画面gem の新星！administrate を使おう - その1 導入](https://qiita.com/mm36/items/c36c7a95e4e836dbffef)
キャッシュメモリ

# 仕組み
頻繁に使うデータやプログラムを高速なキャッシュメモリに入れておき、アクセス時にまずキャッシュを探し、見つからなければ主記憶を探すことで処理の高速化を実現している。
...
プログラムの「局所性」を利用し、キャッシュメモリに存在する確立```ヒット率```をあげて利用効率を高めている。

# 他段階のキャッシュメモリ
CPUに近いほう(アクセスが優先されるほう）から```１次キャッシュ```、```２次キャッシュ```...と呼ばれる。

# 主記憶装置への書き込み
キャッシュメモリに記録されている情報は、最終的には、主記憶装置の該当する箇所に書き戻さなければならない。
...
次のような2つの方式があり、一般に後者の方がアクセス時間を短縮できる。

### ライトスルー(write through)方式
CPUが書込みを実行するとき、```キャッシュメモリと主記憶の両方にデータを書き込む```方式。
そのつど速度の遅い主記憶に書き込むため、```読み込み時にしかキャッシュの効果が出ない```。

### ライトバック(write back)方式
```いったんキャッシュメモリにだけデータを書き込んでおき、主記憶への書き込みは該当ブロックが主記憶に追い出される時に行う```。書込み時にもキャッシュの効果が出る。

# 出典
https://gihyo.jp/book/2022/978-4-297-12375-8
管理者は任意のユーザーとしてログインできますの設定



+ [管理者は任意のユーザーとしてログインできますがチェックされていますが、まだ機能していません](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgUrA)

[管理者は任意のユーザーとしてログインできます] チェックボックスがオンになっています。ページの更新と再起動、さらにはコンピューターの再起動を試み、2 つの異なるプレイグラウンドと 1 つの開発組織で試しました。足りないものはありますか？

これは違ったみたい。

You need to have a Modify All data permission at the profile level.
https://developer.salesforce.com/forums/?id=9062I000000IJg0QAG


これはOkだったようです。
問題は、他のすべてのアクティブ ユーザーがルールの例外であったことです。
 The issue was all my other active users were the exceptions to the rule. 

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A8ZQ5SAN
bootstrap3 navbar、ハンバーガーメニューの色指定

bootstrap3でnavbarを書いてた時に色の調整で壁に当たったので忘備録をば
各要素の色指定
```
/* navbar-brand の文字色 */
  .navbar-inverse .navbar-brand {
    color: #D3D3D3;
  }
  /* navbar-brand のホバー時の文字色と背景色 */
  .navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover {
    color: gray;
    background-color: #281285;
  }
  /* navbar-nav の文字色 */
  .navbar-inverse .navbar-nav>li>a {
    color: #D3D3D3;
  }
  /* navbar-nav のホバー時の文字色 */
  .navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover {
    color: gray;
    background-color: #281285;
  }
  /* ハンバーガーメニューのアイコンの縁の色 */
  .navbar-inverse .navbar-toggle {
    border-color: gray;
  }
  /* ハンバーガーメニューホバー時の枠の内側の色 */
  .navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover {
    background-color:#D3D3D3;
  }
  /* ハンバーガーメニューの三本線の色 */
  .navbar-inverse .navbar-toggle .icon-bar {
    background-color:gray;
  }
  /* ハンバーガーメニュークリック時のnavbar-brand要素との境界線の色 */
  .navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form {
    border-color: yellow;
  }
```

https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css
からいろいろやって特定しました
install docker docker-compose on ubuntu

```
sudo apt-get remove docker docker-engine docker.io
sudo apt-get update
sudo apt install -y docker.io

sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose version
```
信頼性システムの考え方

# フェールセーフ(fail safe)
システムが誤動作した時、常に```安全側にシステムを制御```し、```誤動作による影響範囲を最小限```に止めるように制御する考え方や方策。
```安全なほうへ停止```

# フェールソフト(fail soft)
障害が発生した時、```性能の低下はやむを得ない```とてしも、```システム全体を停止せず、機能を絞っても維持する```考え方や方策。
```何としても稼働```

# フールプルーフ(fool-proof)
```意図しない使われ方をしても、システムとして誤動作をしない```ように設計すること。

# 出典
https://gihyo.jp/book/2022/978-4-297-12375-8

# 感想
違いが微妙にわからない時がある。
システムを維持をするしないで考え方が変わってくるのか。
どのバリデーションにかかっているの？

### 恥ずかしながら
エンジニアに転職して2ヶ月が経ちます。
Laravelで開発をしていて、バリデーションのエラーを修正するとき
これまではバリデーションのエラーメッセージが吐き出されたところが赤枠で表示されていました。
今回バグを見つけたとき、バリデーションのエラーメッセージが表示されるだけで、どこのバグ？？？と戸惑いました。

### Laravelでは
Laravelではバリデーションのエラーメッセージはどうやって表示されているのか・・・
それはドキュメントに書いてありました。
> Illuminate\Http\Requestオブジェクトによって提供されるvalidateメソッドを使用します。バリデーションルールにパスすると、コードは正常に実行され続けます。しかし、バリデーションに失敗するとIlluminate\Validation\ValidationException例外が投げられ、適切なエラーレスポンスが自動的にユーザーに返送されます。

https://readouble.com/laravel/9.x/ja/validation.html
```
$validator->errors()
```
この箱に投げ込まれるわけか。
確かにwithValidatorで書いたエラーもエラーメッセージは最後ここに格納していたきがする・・・。

dd($validator->errors());

という感じでブラウザに表示すると、エラーメッセージが配列として格納されていました。
めでたし。
RailsアプリケーションのRubyのバージョンを3.1にあげたらYAMLの読込に失敗しました。

## 起きたエラー

PubDictionariestというRailsアプリケーションをメンテナンスしています。
RubyとRailsのバージョンを上げたところ、Railsアプリケーションの起動時にエラーが起きるようになりました。

![image (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15964/58c7d48a-3438-7090-579d-abe291f7933c.png)

メッセージを読めばわかるとおり、`Psych::Load`メソッドでエラーが起きています。

## 原因

Ruby 3.1から`YAML.load`メソッドの内部で使っている`Psych::Load`メソッドで読み込めるYAMLファイルのフォーマットに制限が増えたことが原因です。

https://bugs.ruby-lang.org/issues/17866

Ruby 3.1ではRubyに同梱されるpsych のバージョンが4にあがりました。
`YAML.load`メソッドで `<<: *default` を使っているYAMLを読み込むとエラーになる非互換がふくまれています。

## 対策


`YAML.load`メソッドの代わりに `YAML.unsafe_load`を使うと読み込めます。

https://github.com/rails/rails/blob/v6.1.4/railties/CHANGELOG.md

> Fix compatibility with psych >= 4.

Railsは6.1.4で対応済みです。
前述のエラーメッセージをよく読むと`database.yaml`などのRailsの標準の設定ファイルではエラーはおきていません。

`config/initializers/elasticsearch.rb`という名前のカスタム初期化ファイルでエラーが起きています。
PubDictionariesはElasticsearch用の設定ファイルをYAMLで用意しています。
`config/initializers/elasticsearch.rb`はこの設定ファイルを読み込んでいます。
読込には`YAML.load_file`メソッドを使っています。ここでエラーが起きていました。



https://github.com/pubannotation/pubdictionaries/commit/976eb72c9dd8bf12580eded459daf50569a2d011

`YAML.load_file`メソッドの代わりに `YAML.unsafe_load_file`を使って対応しました。

## 補遺

https://github.com/rails/rails/pull/42687/files

```rb 
YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(source) : YAML.load(source)
```

psych3 とpsych4の両方に対応したい場合は、このように書くとよいようです。

## 関連記事

- https://qiita.com/Bjp8kHYYPFq8MrI/items/90a9db03160f8d6f7e5c
- https://qiita.com/hiroyukiwk/items/a7b85235d8ef927e2825
- https://qiita.com/scivola/items/da2e4687726fb20953c0
- https://qiita.com/kandalog/items/8fd20f79ecf73034795a
- https://qiita.com/cookie20000917/items/87f08be87d00cdaa0aca
- https://qiita.com/hiroyuki_onodera/items/d26b7c8d6c352cd95a16
- https://qiita.com/mono_glyceride/items/a447f2451078e8031cbc
Cloudflare R2 のバケツ容量を取る。AWS CLI で。

# R2 のバケツ量をとる

AWS CLI を使う。


1\. credential を作る
```
~/AWS $ aws configure --profile cfr2
aws configure
AWS Access Key ID [None]: <R2のやつ>
AWS Secret Access Key [None]: <R2のやつ>
Default region name [None]: auto
Default output format [None]: json
~/AWS $ cat ~/.aws/credentials
[cfr2]
aws_access_key_id = <R2のやつ>
aws_secret_access_key = <R2のやつ>
```

:::note info
Cloudfalre の [Dev Doc](https://developers.cloudflare.com/r2/examples/aws-cli/)
Classmethod さん [Blog](https://dev.classmethod.jp/articles/using-cloudflare-r2-compatible-with-amazon-s3-api-from-aws-cli/)
:::

2\. AWS用の script を編集する
```
#!/bin/bash
set +x
PROFILE="< ↑cred のプロファイル名 >"
ACCOUNTID="< Cloudflare のアカウント ID >"
R2END="https://${ACCOUNTID}.r2.cloudflarestorage.com"
function calcs3bucketsize() {
    sizeInBytes=`aws --profile ${PROFILE} s3 ls s3://"${1}" --recursive --human-readable --summarize --endpoint-url ${R2END} | awk END'{print}'`
    echo ${1},${sizeInBytes} >> allregions-buckets-s3-sizes.csv
    printf "DONE. Size of the bucket ${1}. %s\n " "${sizeInBytes}"
}
[ -f allregions-buckets-s3-sizes.csv ] && rm -fr allregions-buckets-s3-sizes.csv
buckets=`aws --profile ${PROFILE}  s3 ls --endpoint-url ${R2END} | awk '{print $3}'`
i=1
for j in ${buckets}; do
    printf "calculating the size of the bucket[%s]=%s. \n " "${i}" "${j}"
    i=$((i+1))
    # to expedite the calculation, make the cli commands run parallel in the background
    calcs3bucketsize ${j} &
done
```
:::note info
こちらから引用元してます [AWS 文書](https://aws.amazon.com/blogs/storage/find-out-the-size-of-your-amazon-s3-buckets/)
:::

3\. 結果

容量によって時間かかる:tea:
```
~/AWS $ ./r2.bucket.size.sh
calculating the size of the bucket[1]=logpush.
 calculating the size of the bucket[2]=logpush-workers.
 %
~/AWS $  DONE. Size of the bucket logpush-workers.    Total Size: 58.7 KiB
 DONE. Size of the bucket logpush.    Total Size: 789.2 MiB
```

ありがとうございます。
Laravel に Preline UI を導入する方法

# はじめに

「Laravel で作った Web アプリケーションのスタイル整えるのだるいな～」と思って、いいテンプレートがないか探していたところ『Preline UI』というものを発見しました。

本記事ではこの Preline UI の導入についてまとめてみようと思います。

# Preline UI とは？

https://preline.co/

https://github.com/htmlstreamofficial/preline

Preline UI は、Tailwind CSS を使用して作成された、モダンでシンプルなデザインの UI ライブラリです。

> Preline UI には、フォーム、ボタン、カード、ナビゲーション、アラート、モーダルなどのコンポーネントが含まれており、これらのコンポーネントは、Web アプリケーションやウェブサイトを構築するためのツールとして使用することができます。

> Tailwind CSS は、CSS フレームワークであり、事前に定義されたスタイルとユーティリティを提供することにより、開発者がスタイリングに時間を費やすことなく、素早くモダンなデザインを実現することができます。

> Preline UI は、Tailwind CSS を使用して簡単にカスタマイズすることができ、プロジェクトのニーズに合わせてスタイルを調整することができます。また、Preline UI はオープンソースであり、誰でも自由に使用することができます。

![Preline UI](https://camo.githubusercontent.com/475e6fce407bee63bf1da6f853fe05cc882f49b799d1eafd708600936d2f79db/68747470733a2f2f7072656c696e652e636f2f6865726f2d696d6167652d322e6a7067)

![Components](https://coliss.com/wp-content/uploads-202202/2022061601@2x.png)

現在、150 種類以上のページやフォームのテンプレートがあり、これらをコピペで簡単に使うことができます。

![hero](https://cdn.dribbble.com/userupload/4822575/file/original-c06bcd629b2653dae45accae2d1b1b93.jpg?compress=1&resize=752x)

こんな感じのトップページや...

![table](https://cdn.dribbble.com/userupload/4104588/file/original-98c2900913f3a247668d9c970a19a462.jpg?compress=1&resize=752x)

こんなテーブルをコピペで作れます！

# 導入方法

1. Preline UI をインストール

   ```bash:
   # npm または yarn 経由で インストール

   npm install preline // or yarn add preline
   ```

2. Preline UI JavaScript パスを構成する

   ```javascript:tailwind.config.js
   // ファイルに Preline UI JavaScript ファイルへのパスを追加

   module.exports = {
   content: [
       'node_modules/preline/dist/*.js',
   ],
   plugins: [
       require('preline/plugin'),
   ],
   }
   ```

3. プレライン UI JavaScript を追加する

   ```javascript: /resources/js/app.js
   //アプリのエントリ ポイントに Preline UI JavaScript を追加

   import('preline')
   ```

4. スクリプトのロード

   ```html:/resources/views/index.html
   <!--
    Viteエントリーポイントの設定が完了したら、
    アプリケーションのルートテンプレートの<head>に追加した@vite() Bladeディレクティブでそれらを参照させます。

   <head> の最後らへんに追加すればおけ
    -->

   <!doctype html>
   <head>
       {{-- ... --}}
       @vite(['resources/css/app.css', 'resources/js/app.js', 'resources/js/index.js', 'resources/css/index.css'])
   </head>
   ```


# まとめ

今回はLaravelに導入する例を紹介しましたが、React, Vue.js, Next.js, Nuxt.js, Angular, Astro など他のフレームワークでも使えます！

簡単にモダンなページを作れるので、Tailwind CSS を使っている方はぜひ導入してみてください！
入出力性能を示す単位

# dpi(dots per inch)
```1インチの直線上にいくつかの画素（ドット）が入るか```を示す。
```値が大きいほど、画像をきめ細かく表現```できる。
スキャナ、プリンタの性能を表す時に用いる。

# ppm(pages per minute)
```１分間あたりに印刷可能な出力枚数。```
ページ（レーザ）プリンタの性能指標となる。

# 出典
https://gihyo.jp/book/2022/978-4-297-12375-8
初期値問題「[演習]微分方程式6(体系大学数学)」をwolframalphaとsympyでやってみたい。

よくわかりませんでした。

オリジナル

https://youtu.be/PtRAOhhNrSE

# wolframで

https://www.wolframalpha.com/input?i=x%EF%BD%99%E2%80%99%2B4y%3Dlogx%2Cy%28e%29%3D1&lang=ja

微分方程式の解
y(x) = 1/16 ((13 e^4)/x^4 + 4 log(x) - 1)

x>0について、わかりませんでした。

https://www.wolframalpha.com/input?i=xy%E2%80%99%2B4y%3Dlogx%2Cy%28e%29%3D1%2Cx%3E0&lang=ja

**?点検**
わかりませんでした。

https://www.wolframalpha.com/input?i=x%EF%BD%99%E2%80%99%2B4y-logx+on+y%28x%29+%3D+1%2F16+%28%2813+e%5E4%29%2Fx%5E4+%2B+4+log%28x%29+-+1%29+&lang=ja


# sympyで
できました。

```python
# xｙ’+4y=logx,y(e)=1
from sympy import *
x = Symbol  ('x',real=True)
y = Function('y')(x)
ans=dsolve(Eq(x*diff(y)+4*y,log(x)),ics={y.subs(x,E):1})
print("#",ans.rhs)
#plot (ans.rhs,0,(x,0    ,4)) # error 
plot  (ans.rhs,0,(x,0.1  ,4))
plot  (ans.rhs,0,(x,0.1,0.3))
# log(x)/4 - 1/16 + 13*exp(4)/(16*x**4)
```
縦横比は、異なります。

![0png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/3d4e8fba-1d54-fc76-0c71-6c403ce3d4c3.png)

![1png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/79508a8d-6991-929a-7e68-17e32d4302b6.png)
Glueジョブごとの使用リソース量や料金を調査するためにDPU Hoursを取得する

# はじめに
Glueジョブの料金が増加してしまったため、GlueジョブごとのDPU Hoursを調査したところ、APIで取得できるパターンとできないパターンががあることがわかりました。
APIから取得できる場合は特別苦労はないですが、今回は取得できないパターンにぶち当たってしまったため、その時の対応方法を記します。

# APIでDPU Hoursを取得できるパターン
GlueジョブのAutoScalingの設定が有効になっている場合、GetJobRun API を利用して「DPUSeconds」からDPU Hoursの取得が可能です。

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/auto-scaling.html#auto-scaling-enabling-cli-sdk

```bash
$ aws glue get-job-run --job-name your-job-name --run-id jr_xx --endpoint https://glue.us-east-1.amazonaws.com --region us-east-1
{
    "JobRun": {
        ...
        "GlueVersion": "3.0",
        "DPUSeconds": 386.0 ← DPU Hours
    }
}
```

# APIでDPU Hoursを取得できないパターン
GlueジョブのAutoScalingの設定が有効でない場合、GetJobRun APIから取得できないです。
そのため、ExecutionTime x MaxCapacity の値が DPUSeconds になるため、3600で除算することでDPU Hoursを取得する方法で、算出しました。

# 取得できない場合の対応方法

Glueジョブごとの実行値を取得して、csvファイルを作成する
```bash
aws glue list-jobs --query 'JobNames[*]' --max-results ${任意の数字} | jq -r '.[]' \
| while read glue_job; do \
aws glue get-job-runs --job-name $glue_job \
  --query 'JobRuns[?StartedOn>=`${期間指定}`] | [?StartedOn<`${期間指定}`].[Id,JobName,ExecutionTime,MaxCapacity]' --output text | tr -s '\t' ','; \
done >> glue_job.csv
```

取得したcsvファイルをS3へ格納してGlueクローラーを実行することでテーブル化する。
その後Athenaからクエリを実行する際に、「ExecutionTime * MaxCapacity / 3600 as DPU_Hours」より、DPU Hoursの算出を行う
```sql
SELECT 
 Id, -- GlueジョブID
 JobName, -- Glueジョブ名
 ExecutionTime, -- 処理時間
 MaxCapacity, -- DPUの設定値
 ExecutionTime * MaxCapacity / 3600 as DPU_Hours -- DPU Hoursの算出
FROM "test_database"."glue_job"
```

Glueジョブの実行IDごとのDPU Hoursを取得したときの画像
![スクリーンショット 2023-03-14 22.26.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263017/3b4c53b8-3383-16ee-7676-234c7b85a4f9.png)


# さいごに
GlueジョブのDPU Hoursは、モニタリングをせずに放置しておくと、思わぬ料金の増加につながります。
日頃からDPU Hoursを確認する癖を作っておくことで、高品質なデータ分析基盤になっていきます！
画像の対角部分を表示

<h1>画像の対角部分を自由な幅で表示</h1>
画像処理をしていく過程で、対角部分を自由な幅で表示したい時用のメモとして保存しておきます。


<h2>code</h2>

```python
# ライブラリのインポート
import cv2
from google.colab.patches import cv2_imshow
import numpy as np


# 画像の読み込み
path = ("Your image path")
img = cv2.imread(path)


# 読み込んだ画像をグレースケール化
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 対角部分だけを表示する関数を定義
def show_diag(img, k_v):
  img_gray_tril = np.tril(img, k=k_v)
  img_gray_tril = np.triu(img_gray_tril, k=-k_v)
  # img_gray_tril
  return cv2_imshow(img_gray_tril)

# imageを表示する
show_diag(100)
```

<h2>結果</h2>

結果は、以下になります。
(*参考画像：https://www.irasutoya.com/2021/01/luffy.html)

<img width="300"  src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1878133/6f0bedf4-131b-a69d-bcff-7b9ccd82e128.png">
<img width="300"  src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1878133/5d05e479-b3e5-8172-c7c3-3d6fec351b15.png">
WSL2(Ubuntu)でMacのopenコマンドみたいなものを使いたい

```xdg-open```コマンドが似たような物とのこと。

```shell
# 入ってなかったので入れる
$ sudo apt install xdg-utils
$ xdg-open .
```

使えました。
エイリアス貼っておきます。

```shell
$ echo 'alias open='xdg-open'' >> ~/.bashrc
$ source ~/.bashrc
$ open .
```

以上
初期値問題「[演習]微分方程式5(体系大学数学)」をwolframalphaとsympyでやってみたい。

できませんでした。

オリジナル

https://youtu.be/ADYuvdhUqGs

# wolframで
できませんでした。できるような気がしました。

https://www.wolframalpha.com/input?i=%EF%BD%99%E2%80%99%EF%BC%9Dcos%28x%2B8*y%29**2%2Cy%28pi%2F9%29%3Dpi%2F36&lang=ja

**微分方程式の解**

y(x) = 1/8 (-x - cot^(-1)(1/3 tan(1/3 (9 x + π))))

**?点検**

https://www.wolframalpha.com/input?i=%EF%BD%99%E2%80%99-cos%28x%2B8*y%29**2+on+y%3D1%2F8*%28tan%5E%28-1%29%283*tan%283x-%CF%80%2F6%29%29-x%29+&lang=ja

https://www.wolframalpha.com/input?i=%EF%BD%99%E2%80%99-cos%28x%2B8*y%29**2+on+y+%3D+1%2F8+%28-x+-+cot%5E%28-1%29%281%2F3+tan%281%2F3+%289+x+%2B+%CF%80%29%29%29%29+&lang=ja

# sympyで
できませんでした。できるような気がしました。

```python
from sympy import *
x = Symbol  ('x',real=True)
y = Function('y')(x)
ans=dsolve(Eq(diff(y),cos(x+8*y)**2),ics={y.subs(x,pi/9):3*pi/36})
print("#",ans)
#plot (ans.rhs)
# Eq(x - atan(tan(x + 8*y(x))/3)/3 + pi*floor((-x - 8*y(x) - pi/2)/pi)/3 - atan(tan(2*pi/9)/3)/3 + 5*pi/9, 0)
```
paiza.ioでnadesiko その21

# 概要
paiza.ioでnadesikoやってみた。
ajax使ってみた。


# サンプルコード

```

URL = 「https://api.aoikujira.com/tenki/week.php?fmt=json&city=319」
データ = URLからAJAXテキスト取得
N = データをJSONデコード。
N[319][0]["weathers"]を表示。

URL = 「https://api.aoikujira.com/tenki/week.php?fmt=json&city=319」
N = URLからAJAX_JSON取得
N[319][0]["weathers"]を表示。


APIは「https://api.aoikujira.com/time/get.php」
APIからAJAX受信した時には
　　「現在時刻：{対象}」を表示。
ここまで。


```

# 実行結果

```
くもり　昼過ぎ　から　晴れ
くもり　昼過ぎ　から　晴れ
現在時刻：2023/03/14 13:41:52

```

# 成果物

https://paiza.io/projects/ZKpERScLfwkoqKdWrxJJzA


以上。
MySQL 5.7.12でmysqldump実行時、PROCESS権限エラー

## 事象

MySQL 5.7.12でmysqldump実行時、下記エラーが発生する。

```shell
$ mysqldump -udbuser -p -h localhost --single-transaction --set-gtid-purged=OFF dbname tablename > test_dump.sql
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
```

## 原因

MySQLのバージョン5.7.31から、テーブルスペース取得時にPROCESS権限が必要になった様子。
https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-31.html#mysqld-5-7-31-security

## 対応

PROCESS権限を持たせる方法もあるようだが、今回はプロジェクト上出来なかったので、
`--no-tablespaces`オプションを付与してdumpを取得する。

```shell
$ mysqldump -udbuser -p -h localhost --single-transaction --set-gtid-purged=OFF --no-tablespaces dbname tablename > test_dump.sql
$ find test_dump.sql
test_dump.sql
```

## 参考

https://isgs-lab.com/424/
https://dba.stackexchange.com/questions/271981/access-denied-you-need-at-least-one-of-the-process-privileges-for-this-ope
COBOTTA TwinCAT 連携

ロボットポータル
https://qiita.com/carpenders/items/1a653b1ca831547c92d3

## リンク集
### TwinCAT Motion
連携機能目次
https://www.fa-manuals.denso-wave.com/jp/RC9/011135/
TcCOMモジュール一覧
https://www.fa-manuals.denso-wave.com/jp/RC9/011139/
TcDwNcDrivePos
https://www.fa-manuals.denso-wave.com/jp/RC9/011151/
TcDwNcEncPos
https://www.fa-manuals.denso-wave.com/jp/RC9/011154/
TcDwNcCtrl
https://www.fa-manuals.denso-wave.com/jp/RC9/011157/

## 質問
位置情報XYZRxRyRzは負数はあるのでしょうか？
ロボットが出力しているエンコーダ情報ですが、プラス/マイナスはあります。
nDataIn1の先頭ビット(15Bit目)が1の場合は負数、0の場合は正数になります。
Winでspawn使ってnpmコマンド実行がうまくいかなかったときの対応

# Winでspawn使ってnpmコマンド実行がうまくいかなかったときの対応

## とりあえずnpmのコマンド実行してみた

```js:実行してみた
const { spawn } = require('child_process');
spawn('npm', ['-v']);  // Error: spawn npm ENOENT
```

なんでやねん。

## どうやらそのままだと実行できない模様

https://stackoverflow.com/questions/43230346/error-spawn-npm-enoent

Winは`npm`ではなく`npm.cmd`としないといけないと。

## 修正して再度実行してみる

```js:修正して再実行
const { spawn } = require('child_process');
spawn('npm.cmd', ['-v']);
```

実行できた！

## Win以外も考慮

```js:process.platformで切り替え処理追加
const { spawn } = require('child_process');
const isWin = process.platform === 'win32';
spawn(isWin ? 'npm.cmd' : 'npm', ['-v']);
```

## 環境

- Windows 11
- Nodejs 19.7.0
- npm 9.5.0
モック(mock)とスタブ(stub)の違いがわからなかったのでChatGPTに聞いてみた

## 結論
 - スタブは、テスト中に呼び出される関数に対して予め定義された値を返す
 - モックは、テスト中に呼び出される関数に対して、特定の値を返すだけでなく、呼び出された回数や呼び出し時の引数などを追跡することができる
 - （追記） スタブは、<strong>テスト対象ではない関数の返り値を正しいものとして使用するために使う</strong>
 - （追記）モックは、<strong>テスト対象ではない関数が呼び出されることを確認するために使う

## モック、スタブとは
 - モックとスタブは、テストを行う際に依存するオブジェクトや機能を置き換えるために使用されるテストダブルの一種
 - このようなテストダブルを使用することで、テストをより独立させ、依存関係による影響を減らすことができる

## スタブの説明
 - スタブは、テストに必要な機能を模擬するために使用される
 - スタブは、テスト中に呼び出される関数に対して予め定義された値を返すことができる
 - これによって、テスト中にスタブが返す値を正しく処理するかどうかを検証することができる
 - （追記）
 - 例）外部APIを呼び出す場合に、APIの結果を置き換えるために使用する。

## モックの説明
 - モックは、スタブと同じように機能するが、テストに必要な機能を完全に置き換えることができる
 - モックは、テスト中に呼び出される関数に対して、特定の値を返すだけでなく、呼び出された回数や呼び出し時の引数などを追跡することができる
 - これにより、テスト中に関数が正しく呼び出され、正しい引数が渡されていることを検証することができる
 - （追記）
 - 例）外部APIを呼び出す場合に、APIが呼び出されたこと、呼び出された回数を確認するために使用する

## まとめ
- スタブはテストに必要な機能を単純に置き換える
- モックはテストに必要な機能を置き換えるだけでなく、呼び出しや引数の追跡など、より詳細なテストができる

## より正確な参考情報
https://qiita.com/k5trismegistus/items/10ce381d29ab62ca0ea6