OmniAICreator/Qiita-1.07M huggingface dataset:
プロキシとリバースプロキシ

# 概要

- プロキシとリバースプロキシについて調べてみたので簡単にまとめる。

# プロキシ

- HTTP通信を中継する仕組みのことを指す。
- クライアント側に設置するもの。
- 会社のネットワークの中からインターネットにアクセスするとき、クライアントPC → プロキシ → 外部インターネット → サーバー → リソースの順にアクセスする。
- 中継するだけではなく下記の様な機能をつけることもできる。
    - アクセスが多いファイルをキャッシュ
    - ファイアウォール
    - 低速回線用にデータ圧縮を行う
    - 認証をかけて配信コンテンツをフィルタリング
- 似たようなものでゲートウェイがあるが別のものである。
    - プロキシ
        - 通信内容を理解し、コンテンツを改変したり、キャッシュしたり、アクセス制限をかけたりする。
    - ゲートウェイ
        - リクエスト送信元に存在を悟られることは無い。
        - 通信内容をそのまま転送し、内容の改変などは行わない。

# リバースプロキシ

- 「リバース」なので文字通りプロキシの逆バージョン、その他、やることはプロキシと一緒である。
- 何が逆かというと設置されている場所が真逆となる。
- 自宅のネットワーク（プロキシなし）からアクセスするとき、クライアントPC → 外部インターネット → リバースプロキシ → サーバー → リソースの順にアクセスする。

# まとめ

- クライアントPC側を守っているのがプロキシ、サーバー側を守っているのがリバースプロキシ

# 参考文献

https://wa3.i-3-i.info/word1755.html

- Real World HTTP（オライリー・ジャパン）
- Webを支える技術（）
laravel mysql sql 速度計測

# 速度を計測しちゃおう

phpやsqlで処理時間を計測したいときがある。
そんなときはサクッと！

```hoge.php

$start = hrtime(true); // 計測開始時間

// ここに計測したい処理を書く
// 計測したい処理を書くここまで

$end = hrtime(true); // 計測終了時間
$nano_sec = $end - $start;
$sec = $nano_sec / 1000000000;
echo '処理時間:'. $sec .'秒' . '<br>';
die;
```

以上
Bash 及び Zsh における echo コマンドの違いについて

調べたら有名な話らしいが, 一応備忘録として書いておく.
参考: https://stackoverflow.com/questions/36277870/zsh-why-is-n-interpreted-within-single-quotes
# 問題
最近 Bash から Zsh に乗り換えたのだが, 以下の様な動作の違いに遭遇し困惑した.
`echo 'hoge\nfuga'` を Bash と Zsh でそれぞれ実行すると
```bash:Bash
$ echo 'hoge\nfuga'
hoge\nfuga
```
```zsh:Zsh
$ echo 'hoge\nfuga'
hoge
fuga
```
となり, `\n` が改行文字として解釈されるか否かが異なる.
`echo` コマンドはオプション `-e` をつけない限り `\n` の様なエスケープシーケンスは解釈せずそのまま出力するものと理解していたため, Zsh は `echo` に渡す前に `\n` を改行文字に置き換えるのか? (シングルクオーテーションで囲っているのに?) などと混乱した.

# 解決
原因は `echo` の方にあった. `type` でそれぞれが呼んでいる `echo` が何なのかを調べると, 
```bash:Bash
$ type echo
echo is a shell builtin
```
```zsh:Zsh
$ type echo
echo is a shell builtin
```
両者ともビルトインの `echo` を呼んでいる. しかしそれぞれのビルトインの仕様に差があるようだ.
マニュアル([Bash](https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html), [Zsh](https://zsh.sourceforge.io/Doc/Release/Shell-Builtin-Commands.html))を読んでみると, (あまり明示的には書かれていないが文脈から考えると) Bash の方はデフォルトではエスケープシーケンスを解釈しない一方 Zsh は解釈するみたいだ.
Bash:
> If the -e option is given, interpretation of the following backslash-escaped characters is enabled. The -E option disables the interpretation of these escape characters, even on systems where they are interpreted by default. The xpg_echo shell option may be used to dynamically determine whether or not echo expands these escape characters by default. 

Zsh: 
> The -E flag, or the BSD_ECHO option, can be used to disable these escape sequences. In the latter case, -e flag can be used to enable them.

# まとめ
`echo`コマンドの可搬性には気を付けましょう.
laravel random 遅い

約 5万件のデータから、ランダムでデータを取得したい

# 結論

速く検索するには
1 一旦主キーのみで検索し、データを取得
2 1⃣を元に検索する

0.05秒 - 0.07秒
```hoge.php
//① 主キーだけをランダムで取得
$rand_id = Answer::query()
    ->select('id')
    ->inRandomOrder()
    ->take(1)
    ->first();//最初の

//② 取得したランダムキーで検索
$answer = Answer::query()
    ->where('id',$rand_id->id)
    ->take(1)
    ->get()->toArray();
```

# 遅い

とにかくすべてをランダムに取得

0.16秒 - 0.2秒
```hoge.php

$answer = Answer::query()
    ->inRandomOrder()
    ->take(1)
    ->get()->toArray();


```

以上
PHP function_exists

# 概要

- PHPの`function_exists()`関数を簡単にまとめる。

# 内容

- `function_exists()`関数は引数に取った関数が組み込み関数、ユーザー定義関数のいずれかで定義済みかを確認する。
    - 定義済みの場合trueを、定義されていない場合falseを返す。
- 例1（下記は「関数は存在しません」と出力される。）

    ```php
    <?php
    
    if (function_exists('foo')) {
        echo '関数が存在します。';
    } else {
        echo '関数は存在しません。';
    }
    // 関数は存在しません。と出力される。
    ```

- 例2（下記は「関数が存在します。」と出力される。ユーザー定義関数をチェックする。）

    ```php
    <?php

    function foo() {
        echo 'foo';
    }
    
    if (function_exists('foo')) {
        echo '関数が存在します。';
    } else {
        echo '関数は存在しません。';
    }
    // 関数は存在します。と出力される。
    ```

- 例3（下記は「関数が存在します。」と出力される。組み込み関数もチェックされる。）

    ```php
    <?php

    if (function_exists('is_null')) {
        echo '関数が存在します。';
    } else {
        echo '関数は存在しません。';
    }
    // 関数は存在します。と出力される。
    ```

# 参考文献

https://www.php.net/manual/ja/function.function-exists.php
Github Actions : snake case to kebab case

簡単なことなんですが、めちゃはまったので。。。

snake_case って文字が snake-case なります

```
name: snake case to kebab case smple

on:
  workflow_dispatch:
    inputs:
      input_string:
        description: 'select input string'
        required: true
        type: choice
        default: 'snake_case'
        options:
        - snake_case
        - kebab-case
          
jobs:
  CaseChange:
    runs-on: ubuntu-latest
    steps:
      - name: echo input
        run : |
          echo ${{ inputs.input_string }}
      - name: snake case to kebab case
        run: |
          echo "KebabCase=${{ inputs.input_string }}" | sed $'s/_/-/g' >> $GITHUB_ENV
      - name: use kebab case
        run: |
          echo ${{ env.KebabCase }}

```
様々な警告を解決する

# はしめに
本投稿の言語はC言語,C++になります.
自分がMicrosoft Visual Studioを使用して、
気になった警告を解決した時のメモ書きと参考になったら良いと思い投稿しました。
発見し解決しだいここに更新していきます。
ただし、この投稿では警告だけをとり扱います。
# C6262
とても大きな配列を使用するときにこの警告がでました。
静的な変数にしましょう。
```sample.cpp
//C6262
BYTE scanin[8192 * 4];
//解決策
static BYTE scanin[8192 * 4];
```
# C26451
このような配列宣言時にこの警告がでました。
事前に定数を計算しておきましょう。
```sample.cpp
//C26451
	UINT* pixels = new UINT[width * height * 4];
//解決策
	const UINT pixelsSize = width * height * 4;
	UINT* pixels = new UINT[pixelsSize];
```
Site24x7でトラフィックの使用状況を確認する方法

トラフィックの使用状況を確認する上で誰がいつ何の通信を行ったのか可視化できれば、帯域を占有する通信やコンプライアンスを違反する通信を容易に特定できます。
今回はSite24x7のNetFLow分析機能を紹介します。

すでに取得している監視データから見ていきます。
装置パフォーマンス)
可用性の他トラフィックやボリューム、フロー数を確認できます。
特にトラフィックグラフでは、ある時刻においてどのくらいの使用状況なのか見て取れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1674507/a337fab5-002c-8faf-0603-31ac297fbacd.png)

グラフを拡大することで時間の粒度を変更したりレポートを抽出が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1674507/b53d9fcd-49d6-dada-43df-00770faa6cc9.png)


インターフェース)
各インターフェースのトラフィックを確認できます。
どのポートがどれだけ通信を行っているのか大まかに内訳を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1674507/b202d838-ee9d-2e55-2b6e-d11fdbc274fb.png)

アプリケーション)
受信したフローの中でどのアプリケーションがどのくらいの割合で通信されたのか表しています。
下記例では、直近24時間でiscsi-targetとhttpsが半分以上通信量を占めていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1674507/67fb4da6-fdd6-13f2-b938-1ff54643887c.png)

ソース)
受信したフローの中で特定の送信元IPアドレスがどのくらいの割合で通信されたのか表しています。
下記例では、直近24時間で上位3つの送信元IPアドレスの通信が半分以上の通信を占めていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1674507/a7caea8b-a1a6-61b9-9d24-3eb561ada233.png)

宛先)
受信したフローの中で特定の宛先IPアドレスがどのくらいの割合で通信されたのか表しています。
下記例では、直近24時間で上位3つの宛先IPアドレスの通信が半分以上の通信を占めていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1674507/c1987622-ffa6-97d8-1eae-c3ea4710c6c6.png)

QoS)
受信したフローの中でQoSの優先度ごとのトラフィックを表示できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1674507/ea7c04d7-b6ed-90e5-db82-d180aed0b068.png)

会話)
受信したフローの中で、送信元IPアドレスと宛先IPアドレスとアプリケーションの組み合わせの通信量を表しています。
下記の例では、直近24時間で1位と2位の通信は双方向になりますが、合計約17GBの通信量であることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1674507/1a0a3ba9-8437-ef3c-7805-638985f90c7b.png)

障害)
受信したフローの中で、トラフィックやボリュームが設定したしきい値に対して違反アラートを発生させた場合アラート情報が表示されます。
下記の例では、直近24時間でトラフィックのしきい値を違反したことを示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1674507/e9224953-d052-ab38-d8d0-4500aa492696.png)

しきい値の設定)
上記、障害)で発生したアラートのしきい値設定になります。
トラフィックが2bpsを超えているためにクリティカルアラートが発生しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1674507/66ffb6fa-0d75-f0c1-f935-5711d559d2d4.png)


監視フローの編集)
受信したフロー監視の編集になります。
ここでは、フローの情報の他しきい値プロファイルやユーザーアラートグループを関連づけます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1674507/4027aa4d-2a79-8a9a-9185-212bc8d9ebf0.png)


NetFlowの監視設定は、LAN内にオンプレミスポーラーサーバーを立ててFlow対応ルーターやスイッチからオンプレミスポーラーサーバー宛にフローを送信することで自動的に監視が行えます。
それぞれ以下のユーザーガイドが参考になります。
オンプレミスポーラーサーバー)
https://www.site24x7.jp/help/getting-started/on-premise-poller.html

オンプレミスポーラーサーバー宛にフローを送信)
https://www.site24x7.jp/help/netflow/
保持変換(Retain)

[Teradata Vantage - Vantage Analytics Library](https://docs.teradata.com/r/Vantage-Analytics-Library-User-Guide/January-2022)[2022/9/22時点]の翻訳です。
(リリース番号 : 2.1.1 | リリース日 : January 2022)
> この記事はVantageアナリティクスライブラリ シリーズのコンテンツです。

# 概要
保持変換を使用して、1 つ以上の入力テーブルの列を出力テーブルにコピーし、オプションで出力テーブルの列に新しい名前と型を付けます。Retain 変換は、どのようなデータ型の列にも適用することができます。

選択したカラムを単純に表示します。型の変換も可能です。

# 前提条件
・Teradata Vantageインスタンスにアクセスできること。
・Vantage アナリティクス・ライブラリがインストールされていること。

::: note info
Vantage アナリティクス・ライブラリのインストールについて、既にVantageを導入頂いているお客様はTeradataサポートサービスにお問い合わせください。
Vantage Express (評価版)やクラウドサービスのDIYでご利用頂く場合は[Teradata Dounload](https://downloads.teradata.com/download)からダウンロードし利用可能です。
Vantage アナリティクス・ライブラリのインストール手順は「[Vantageアナリティクス・ライブラリのインストール](https://qiita.com/ykswi/items/12d0da2ac69b4b161881#vantage%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)」の記事に従い行います。
:::

# データの準備
## サンプルデータの入手とデータベースへの格納方法
こちらの「[チュートリアル用のサンプルデータを用意する](https://qiita.com/tmsky/items/4d86ca35aef753290020)」を参照ください。


# 実行方法
## SQLから実行する場合の例
```SQL
CALL td_analyze (
  'vartran',                          /* 分析手法　*/
  '
  database        = QID;              /* データベース名 */
  tablename       = Customer;         /* テーブル名 */
  retain =
     {columns (Customer_ID,Customer_name)}
  ;                                   /* 導出項目の定義 */
  '
);
```

:::note information
出力結果をテーブルに書き込む場合は以下オプションを指定可能です。
outputdatabase = 出力データベース名;
outputtablename = 出力テーブル名; 
overwrite = {true | false}; --- 未指定の場合はtrueで上書きします
:::

## 出力結果
データ量が多いため上位10件を表示しています。
|Customer_ID|Customer_Name|
|:-|:-|
|BT-11485|Brad Thomas|
|DS-13180|David Smith|
|MJ-17740|Max Jones|
|VP-21760|Victoria Pisteka|
|DP-13165|David Philippe|
|MH-17440|Mark Haberlin|
|JH-16180|Justin Hirsh|
|HA-14905|Helen Abelman|
|MP-18175|Mike Pelletier|
|JP-16135|Julie Prescott|
|～|～|

# おわりに
:::note information
サンプルコードはSQL関数から掲載し順次Pythonコードも掲載していく予定です。
:::

:::note warn
警告
この本書は[Teradata Vantageドキュメンテーション](https://docs.teradata.com/)よりトピックに必要な情報を抜粋したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については、原本をご参照下さい。
また、修正が必要な箇所や、ご要望についてはコメントをよろしくお願いします。
:::

#### Teradata Vantageへのお問合せ
[Teradata Vantage へのお問合せ](https://www.teradata.jp/About-Us/Contact)
S3のインターフェース型エンドポイントとゲートウェイ型エンドポイントの違いと使い方について

S3使われるインターフェース型のエンドポイントとゲートウェイ型エンドポイントについて整理してみました。

S3にアクセスするためにゲートウェイ型のエンドポイントが使われますがもう一つのエンドポイントがあります。

それがインターフェース型のエンドポイント。
この二つのエンドポイントのメリットデメリットを理解してどのような使い方をするのかをまとめてみました。

結論から言うと、他のAWSアカウント、データセンター側からアクセスするときはインターフェース型のエンドポイントを使用する。

内部でアクセスしたいならゲートウェイ型のエンドポイントを使用します。

## それぞれのエンドポイントの特徴
* インターフェース型のエンドポイント
　・VPCのプライベートIPアドレスを使用してS3にアクセスする
　・オンプレミスからのアクセスを許可する
　・VPCのピアリング、Transit Gatewayを使用する別のAWSリージョンにあるVPCからのアクセスを許可する
 ・課金あり

* ゲートウェイ型のエンドポイント
　・S3パブリックIPアドレスを使用する
　・オンプレミスからのアクセスを許可しない
　・別のAWSリージョンからのアクセスを許可しない
　・課金なし

他にもありますが詳しくは下の参照記事のリンクにある公式ドキュメントに記載されています。

## インターフェース型のエンドポイントを使用するとき
特徴を見てもらえればわかると思いますがデータセンターからアクセスをするとき、そして他のAWSアカウントからアクセスをするときに利用します。

イメージでいうとざっくりこんな感じです。

![スクリーンショット 2022-10-30 16.23.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1828177/2fe3a435-a805-d472-0444-57497d5e6276.png)

データセンターからアクセスするときはDirectConnectからTransit Gatewayを通りS3エンドポイントからS3へといった流れです。

またエンドポイントはプライベートサブネットに設置します。


## ゲートウェイ型のエンドポイントを使用するとき
オンプレミスからアクセスが不要な場合、外部からのアクセスが必要がない場合に利用します。

エンドポイントはVPCに紐づいています。


![スクリーンショット 2022-10-30 16.26.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1828177/7d1055a4-0605-e1f4-7817-24be7ece8e8f.png)

これを見てみると外部からアクセスができないように見えますが専用のバケットポリシーなどを使用して外から入れるように設定することはできます。

またどこかでバケットポリシーについて書きたいと思います。


## 他にもこんな記事を書いています！

https://qiita.com/mmurm/items/c5c8b1328e8864144c26

https://qiita.com/mmurm/items/dc60c9430c675f901273



## 参照記事
Amazon S3 用の AWS PrivateLink
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/privatelink-interface-endpoints.html

S3エンドポイント（Interface型）を使用してVPN経由でS3にアクセスする
https://wellknowledge.org/s3-endpoint-interface/
[AWS Lambda Powertools Python]ログに実行ファイル名を含める

# 経緯

[AWS Lambda Powertools Python](https://awslabs.github.io/aws-lambda-powertools-python/latest/) [^1] のLogger機能はとても強力です。

ログを出力する目的は色々ありますが、デバッグ時のように処理を追いかける場面では「そのログがどこで出力されたのか」をまず知りたいのではないでしょうか。

デフォルト設定の出力では、 `location` 属性として出力されています。
下記の例だと、 `get_users` 関数内で、そのソースコードの40行目で出力したログであることがわかります。

```json
{
    "level": "DEBUG",
    "location": "get_users:40",
    "message": "...
```

シンプルな構造であれば「ああ、get_users()はあそこだな」とわかるでしょうが、いくつものファイルで構成されている場合は「get_users()ってどこの？」となりませんか？


# 出力内容の変更

出力内容をカスタマイズ可能です。（[ドキュメント](https://awslabs.github.io/aws-lambda-powertools-python/2.2.0/core/logger/#overriding-log-records
)にも記載されています）

`location` を指示することで書式がオーバーライドされます。

下記の例では先頭へ`filename` を記述することで、`handler.py` の `get_users` 関数、位置は40行目、ということがわかります。迷わずソースコードを開けます。

```python
from aws_lambda_powertools import Logger

location_format = '%(filename)s:%(funcName)s:%(lineno)d'
logger = Logger(location=location_format)
```

```json
{
    "level": "DEBUG",
    "location": "handler.py:get_users:40",
    "message": "...
```

## 参考

下記ソースコードあたりが該当します。 

https://github.com/awslabs/aws-lambda-powertools-python/blob/develop/aws_lambda_powertools/logging/formatter.py


省略時の書式... `_build_default_keys()` を参照すると下記のようです

```python
"%(funcName)s:%(lineno)d"
```

指定可能な属性値...`RESERVED_LOG_ATTRS` を参照します。

```python
RESERVED_LOG_ATTRS = (
    "name",
    "msg",
    "args",
    "level",
    "levelname",
    "levelno",
    "pathname",
    "filename",
    "module",
    "exc_info",
    "exc_text",
    "stack_info",
    "lineno",
    "funcName",
    "created",
    "msecs",
    "relativeCreated",
    "thread",
    "threadName",
    "processName",
    "process",
    "asctime",
    "location",
    "timestamp",
)
```
Nuxt3でaxiosはなくなり、Fetch APIをつかうらしい

参考サイト
https://www.memory-lovers.blog/entry/2022/06/02/170000
とのこと。以下、メモ。

# Fetch API
ざっくりな使い方はこんな感じ。
```
const url = "https://...";

const headers = new Headers({
  Authorization: `...`,
});
const res = await fetch(url, {
  method: "GET",
  headers: headers,
});
const resData = await res.json();
console.log(`** ${res.status}`, resData);
```


# unjs/ohmyfetch
unjs/ohmyfetchの場合は、こんな感じ。
```
const headers = {
  Authorization: `...`,
);
const res = await $fetch<ResponseType[]>(url, {
  method: "GET",
  headers: conf.headers,
  retry: 3
});
console.log(res);
```

GETなど一部のみretryが使えるのも便利。

# useFetch
コンポーネント内だとuseFetchが追加され、 API呼び出しもこれを使う形に。
```
Nuxt 3 - Data Fetching
Nuxt 3 - useFetch
<script setup>
const { data: count } = await useFetch('/api/count')
</script>

<template>
  Page visits: {{ count }}
</template>
```
# axiosを使うときの注意
以降中のときなどでaxiosを使いたい場合、
proxyを設定する必要がある。

Nuxt3からはnuxt.config.tsのサーバ(vite)側に設定すればよいっぽい。
```
import { defineNuxtConfig } from "nuxt";

// https://v3.nuxtjs.org/api/configuration/nuxt.config
export default defineNuxtConfig({
  vite: {
    server: {
      proxy: {
        "/api/": {
          target: "https://api.example.com",
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, ""),
        },
      },
    },
  },
});
```

How to proxy api requests? · Discussion #1223 · nuxt/framework
https://github.com/nuxt/framework/discussions/1223

Configuring Vite | Vite
https://vitejs.dev/config/#server-proxy

開発中だとCORS問題があったりして、axios-proxyが必要だったけど、
不要になってだいぶ便利になった
キャリア２０年の電気系エンジニアが転職活動したときに工夫したこと

# 目的
大企業で長年エンジニアとして働いていましたが、２年前くらいに転職したのでその時工夫したことなどをご紹介しようと思います。

# 大事なことは
- プロフィール（Resume）をしっかり作る
- 自分の力量をいろんな方法で発信する

ということなんじゃないかと思ってます。後述するのはその具体的なやり方なので、それをやってもいいし別のやり方を選んでも良いと思います。重要なのは「世の中の人は自分のことを何も知らないので、エンジニアとしての力量をちゃんと知ってもらう」ということですね。

# LinkedInにプロフィールを作る
2006年くらいからLinkedInにプロフィールを載せてたので、今回の転職のためにやったわけではないですが、埋めるべき項目が全て提示されているので、職歴をまとめるツールとしてはかなり便利だと思います。プロフィールを埋めてpdf出力すればResumeができあがるので便利。LinkedInにプロフィールを載せるとヘッドハンターからバシバシ連絡が来ますが、はっきり言ってそこからなにかにつながったことはないです。一度くらい話を聞いてみてもいいかもしれませんが、向こうは大した話しない代わりに、こちらの年収とか各種情報を抜きにくるだけなのであまり意味が無い。まあ自分のプロフィールがどれだけ人の目を引くのか、という尺度として活用するくらいに思っておけばよいと思います。

# GoogleのResume Tipsを見てプロフィールを更新する
Googleは「こうやってResumeを書け！」というYoutube動画をあげてくれてます（[Create Your Resume for Google](https://www.youtube.com/watch?v=BYUy1yvjHxE)）。Googleだけをターゲットにする必要はないと思いますが、この手法自体はどこにでも通じるものだと思います。実際にこれに従ってResumeをちょこちょこ更新して、Googleの書類選考だけ通りました（結果不採用だけどね）。なので、やればそれなりに効果はあると言える。「成果を数値化して具体的に書く」というのは結構意識しました。「xxxの機能を設計し、従来と比較して xx%性能がアップし、コストが xx%下がった」とかいう感じ。

# 必要に応じてLeetCode、AtCoder、Kaggleなどで修行する
技術系の仕事は大体コーディングテストがあります。アルゴリズムやデータ構造の基礎を理解して、ちゃんとしたコードが書けるというのは自分の力を示す上で重要だと思います。でもまあ、この辺をやりすぎるのもどうかと思いますね。仕事で書くコードとAtCoderとかで書くコードはあまりに違いすぎる。あまりやりすぎず、基礎を理解するだけでよいのではないかと思います。

# GitHubを充実させる
自分の力量を相手に理解してもらうには自分の作品を見てもらうのが一番。自分のリポジトリを充実させてもよいし、オープンソースにプルリクエストだしてもよいし、とにかく自分のアウトプットを見てもらうというのは大事なんじゃないでしょうか。

# Qiitaを充実させる
海外に対してはそれほどの知名度を持ちませんが、Github同様技術的なアウトプットで力量を示すことができるツールという意味では、Qiitaはなかなかの存在なんじゃないかと思います。論文が出せれば最強ですが、誰しもそこまでのボリュームは書けないので、Qiitaの記事とかがまあ割とスキルを示すにはちょうどいいんじゃないかなと思います。

# 最後に
あーあ、Googleで働いてみたかったなぁー。もう少しがんばろうかなぁー。そんな気持ちで日々LinkedInのプロフィールを更新しています
ノーコードツール Adalo – Custom Action で外部APIを利用したいがマジックテキストが使えない ( Nothing Available  )

ユーザー情報とかを外部APIに渡したいが出来ない

![image](https://user-images.githubusercontent.com/13635059/200756202-803acd34-2a5e-408f-a47d-755aa47f747c.png)

Inputsを設定する必要があるようだ
![image](https://user-images.githubusercontent.com/13635059/200756210-29bbfc2f-c7a4-4d2c-988d-45f7962338bb.png)

Custom API を保存した後に Adaloの情報を渡せるようになるというフロー。気づきにくい二度手間なUI…。

<img width="779" alt="image" src="https://user-images.githubusercontent.com/13635059/200756639-eea842cd-a6b0-4a51-9dee-c3ef71735bc3.png">


# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# Twitter

https://twitter.com/YumaInaura
【Rails】PG::UndefinedTable: ERROR: relation "users" does not existの対処法【DB】

<h2>症状</h2>
DockerでRailsの環境構築後にDB:migrateをしようとしたとき、下記のエラーが発生しました。

```terminal:error
PG::DuplicateTable: ERROR:  relation "users" already exists
```

マイグレーションファイルは以下を使用していました。

```terminal:マイグレーションファイル
20210817024851_photos
20220817024851_users
```

```terminal:20210817024851_photos
class CreatePhotos < ActiveRecord::Migration[6.0]
  def change
    create_table :fhotos do |t|
      t.references :user, null: false, foreign_key: true
      t.string :name, null: false
      t.string :image

      t.boolean :deleted,default:false
      t.timestamps
    end
  end
end
```

```terminal:20220817024851_users
class CreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :fhotos do |t|
      t.string :name, null: false

      t.boolean :deleted,default:false
      t.timestamps
    end
  end
end
```

<h2>解決策</h2>
userが先に読まれるように、マイグレーションファイルの名前をリネームして解決しました。

エラーが出ていた理由としては、上から順にマイグレーションファイルが処理されていたため、userに依存しているphotoが先に読まれてしまい、userがないとエラーが出ていたようです。

```terminal:solution
20200817024851_users
20210817024851_photos
```

<h2>参考</h2>

https://teratail.com/questions/360435
レンタルサーバーでComposerのインストールができない・動かない　Your requirements could not be resolved to an installable set of packages.

## 結論
とりあえず、最初に結論をい言うと
composer.jsonのPHPバージョンを変更するか、
さくらインターネット内での環境なら、言語バージョン設定で変えろ！
## バグの経緯
アプリを開発して、レンタルサーバーにアップロードしようと言う事で、

https://arrown-blog.com/laravel-sakura-deploy/#composer

を参考に作業を進めていたのですが、記事のとおり
```
php composer.phar install
```
をしても上手くいかず下記のエラー文が出て動きませんでした、、、👇
```
Your lock file does not contain a compatible set of packages. Please run composer update.
```
Google先生に翻訳してもらったとろ「Composerをアップデートしろ！」ってことだったので
```
php composer.phar update
```
を実行したところ
```
Your requirements could not be resolved to an installable set of packages.

Problem 1
    - Root composer.json requires laravel/sanctum ^3.0 -> satisfiable by laravel/sanctum[v3.0.0, v3.0.1, 3.x-dev].
    - laravel/sanctum[v3.0.0, ..., 3.x-dev] require php ^8.0.2 -> your php version (7.4.30) does not satisfy that requirement.

～～～～～～～似たような文言が続く～～～～～～～～～～～
    ~~~~~~Problem 5
```
Google先生は「PHPバージョン7.4.30じゃ使えないよ！」ってことのようなので、いろいろ調べたところ

https://qiita.com/GUTTY/items/6eced75f072b6aece590

この記事を見つけ、記事に従いcomposer.jsonにバージョンを追記し、再度Updateを試みましたが、それでも上手くいきませんでした。

## 解消方法
ただ、レンタルサーバー（さくらインターネット）には
ホーム画面＞スクリプト設定＞言語バージョン設定
でPHPのバージョンが変更できるようだったので、PHPバージョン7．4.30だったものを８系に変更したところ、無事アップデートができるようになりました。！

レンタルサーバーにアップロードする際に参考になればと思います！
IBM i ACSのSQLスクリプトの実行ウィンドウで日本語が文字化けする

IBM i ACSのSQLスクリプトの実行 画面でDBCSが文字化けするというQAがあり。

こんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/0013fee9-e00c-90a4-60c1-448afff4d87a.png)

調べてみると、SQL自体はDBCS含めて正常に実行されている、SQL実行結果のログ（メッセージタブ）はDBCSも日本語で正しく表示されている、文字化けしたSQL文をコピペすると文字化けなくコピペできた、という状況でした。

原因はごくシンプルでした。
SQLスクリプトの実行 ウィンドウのデフォルトフォントがSBSCなためでした。
上記ウィンドウの 表示 > フォント からDBCS対応フォントに変更することで解決しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/7617d7a0-dae8-d19c-0ba7-f748dbf261d4.png)

DBCSフォントを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/73a8dfbb-2977-1b9a-21a3-01858378015a.png)

この通り。無事解決。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/acf4f128-37be-f429-63a8-11c3be71a27e.png)

*SQL実行結果は(3行目でなく)1行目のものでした、、ご了承くださいませ。
*確認した環境はACS 1.1.9.0です。
【デザインパターン】Builder

# Builderとは
Builderはデザインパターンのうち、生成のパターンに分類される一つであり、複雑なオブジェクトを段階的に生成します。今パターンでは異なる型や様々な表現を持つオブジェクトを一つのBuilderで生成できます。


# 問題点
フィールドが多数になると、コンストラクタのパラメータが増えてきます。また、必須でないフィールドが多くあると、冗長的なコンストラクタとなります。

``` java
public class House{
	public int roof;
	public int wall;
	public int floor;
	public int door;
	public int window;
	public int stair;

  	public House(int roof, int wall, int floor, int door, int window, int stair){
		this.roof = roof;
		this.wall = wall;
		this.floor = floor;
		this.door = door;
		this.window = window;
		this.stair = stair;
	}
}
```

# 構造
1. Builder: 各プロダクトに共通する構築ステップの宣言します。
1. Concrete Builder: 様々な構築ステップの実装を行います。インターフェース外のプロダクトの産出も可能です。
1. Product: 生成されるオブジェクトです。インターフェースで定義する必要はありません。
1. Director: 構築ステップを呼ぶ順番を定義することで、Productの特定の設定を再利用できます。厳密には必須ではありません。
1. Client: Concrete BuilderとDirectorを関連付ける役割を果たします。

``` java
public class House{
	public int roof;
	public int wall;
	public int floor;
	public int door;
	public int window;
	public int stairs;
}

public interface Builder{
    public void readd();
    public void addRoof(int roof); 
    public void addWall(int wall); 
    public void addFloor(int floor); 
    public void addDoor(int door); 
    public void addStair(int stair); 
    public void addWindow(int window); 
}

public HouseBuilder implements Builder{
    private House house;
    public HouseBuilder(){
        this.readd();
    }
    public void readd(){
        this.house = new House();
    }

    public void addRoof(){
        house.roof++;
    }

    public void addFloor(){
        house.floo++;
    }

    public void addDoor(){
        house.door++;
    }

    public void addWindow(){
        house.window++;
    }

    public void addStair(){
        house.stair++;
    }
    
    public House getProduct(){
        House product = this.house;
        this.readd();
        return product;
    }
}

```

``` java
public class Director{

	public void constructOneStory(Builder builder){
      this.builder.addFloor();
      this.builder.addWall();
      this.builder.addRoof();
      this.builder.addDoor();
	}

	public void constructTwoStory(Builder builder){
      this.builder.readd();
      this.builder.addFloor();
      this.builder.addWall();
      this.builder.addRoof();
      this.builder.addDoor();
      this.builder.addStair();
	}

}
```

``` java
public class Client{
    
	public void createHouses(){
        Director director = new Director();
        
        HouseBuilder houseBuilder = new HouseBuilder();
        director.constructOneStory(houseBuilder);
        House house = houseBuilder.getProduct();
    	
        HouseBuilder houseBuilder = new HouseBuilder();
        director.constructOneStory(houseBuilder);
        House house = houseBuilder.getProduct();
    }
}

```

## 長所と短所
### 長所
- 段階的な生成が可能となり、再帰的にステップを呼び出すことができる。
- 様々な形式のプロダクトを同じbuilderで表現することができる。
- 複雑化したconstructionを切り離すことができる。

### 短所
- 複数のクラスを作らなければならず、全体的にコードが複雑化する。
テクストエリアの長さの計算（1改行コード　2バイト）

テクストエリアの方で1改行コードがあれば、2バイトとする。
■入力規則：201以上、長さエラーになりました。
全角と半角も同じです。
123456...（198個）+ 改行コード＊1　OK
あいうえお...（198個）+ 改行コード＊1　OK
123456...（199個）+ 改行コード＊1　NG
あいうえお...（199個）+ 改行コード＊1　NG
for文で変数名を回す方法

# for文で変数名を回す方法
### execを使って回す方法
execを使えばシンプルに書けることに気が付いたのでメモしておく。
ファイル名を付けるときにも役立ちそう。

```python:in
for i in range(5):
    exec('print("file_" + str(i))')
```
```python:out
file_0
file_1
file_2
file_3
file_4
file_5
```

# 追記
コメント欄より、ほかの方法を掲載します。
## formatを使った方法
```python:
for i in range(5):
    print(f"file_{i}")
```
```python:
for i in range(5):
    print("file" + str(i))
```

## execを使う方法
```python
file_0,file_1,file_2,file_3,file_4 = 0,1,2,3,4
for i in range(5):
    exec("print(file_{i})")
```
Azure Fundamentals(AZ-900)：Azure の基礎: Azureの管理とガバナンスについて説明する「Azure Advisor」

Microsoft Learnを用いたMicrosoft Azure Fundamentals(AZ-900)の試験内容をまとめる投稿です。
この投稿ではMicrosoft Learnで学ぶ内容をできるだけ簡潔にまとめております。
Azureの勉強を一から始める方の参考になれば幸いです。

## 今回の学習内容
**◆「Azure Advisor」**
◇対応するMicrosoft Learn ラーニングパス
[Azure の基礎: Azureの管理とガバナンスについて説明する](https://learn.microsoft.com/ja-jp/training/paths/describe-azure-management-governance/)
◇対応するモジュール
[Azure Advisor の目的について説明する](https://learn.microsoft.com/ja-jp/training/modules/describe-monitoring-tools-azure/2-describe-purpose-of-azure-advisor)

※前回の投稿は下記から確認できます。
[Azure Fundamentals(AZ-900)：Azure の基礎: Azureの管理とガバナンスについて説明する「Azure Resource ManagerとAzure ARMテンプレート」](https://qiita.com/fsd-jume/items/44a553236cd061eecc93)

## Azure Advisor
**Azureリソースを最適化するためのベストプラクティスを推奨事項として表示**
⇒Advisorダッシュボードに利用中のすべてのサブスクリプションに対する推奨事項を表示
・推奨事項はすぐに実行するか、延期するか、無視するかを選択可能
・新しい推奨事項を知らせる通知も設定可能

### 推奨事項のカテゴリ
**◆信頼性**
・アプリの継続性を確保し向上させるために使用
例)レプリケーションが有効になっていないVMを検出し、有効にすることを推奨
例)耐障害性(Fault Tolerance)用に構成されていないアプリケーションゲートウェイを識別して、修復アクションを提案

**◆セキュリティ**
・セキュリティ違反につながる可能性がある脅威と脆弱性を検出するために使用
・Defender For Cloudと統合してセキュリティに関する推奨事項を提供

**◆パフォーマンス**
・アプリの速度を向上させるために使用
例)CPU使用率が高いサーバを検出し、スケーリングを推奨
例)高いIOPS(Input/Output Per Second)を必要とするVMディスクを特定し、Premium Storageへの移行を推奨

**◆オペレーショナルエクセレンス**
・プロセスとワークフローの効率性、リソースの管理容易性、デプロイのベストプラクティスを実現するために使用
例)参照先が変更となり無効となったクエリが含まれるログアラートルールを検出し、修正を推奨
例)リージョンを制限するAzure Policyが適用されていないリソースを検出し、制限を推奨

**◆コスト**
・Azure全体の支出を最適化し、削減するために使用
例)過去7日間に全く使用されていないリソースを識別して、シャットダウンするように推奨
例)現在の負荷状況からVMをより適切で安価なSKUにできる場合、サイズ変更を推奨

## 次の学習内容
**◆Azure Service Health**

https://qiita.com/fsd-jume/items/a12c09ff82539c3ff8c2

## 学習内容をまとめたページの一覧

https://qiita.com/fsd-jume/items/e4ec76959adb547ac5e8
javascriptのアクセサ（getterとsetterプロパティ）

# アクセサとは
オブジェクトの中のプロパティの値を取り出したり、変更したりする関数のこと。
```javascript:javascript
const obj = {
    _name: "John"
}

const result = obj._name
console.log(result) // "John"
```
上記のコードを見ると、`obj`の中にある`_name`プロパティを参照してコンソール出力をするコードである。
持っている値を出力するだけのことですが、持っている値が変更される恐れもある。
```javascript:javascript
const obj = {
    _name: "John"
}

obj._name = "Sam"
const result = obj._name
console.log(result) // "Sam"
```
上記のように`obj._name`に直接アクセスして`Sam`を代入して値を上書きしているため、`result`も変わってしまうことがわかる。
この問題を解決するため必要なのがアクセサである。
アクセサを利用し得て、プロパティの値をアクセサを持って参照・変更できるようにすれば、`obj._name`の値を保証することができる。

# アクセサの種類（getterとsetter）
アクセサにはgetterとsetterの２種類ある。

### getter
値を取得するプロパティ
```javascript:javascript
const obj = {
    _name: "John",

    get name() {
        return this._name
    }
}
const result = obj.name
console.log(result) // "John"
```
ここのコードを見ると`_name`に直接アクセスして値を取得せず、`name`という`getter`を利用して取得している。


### setter
値を変更するプロパティ
```javascript:javascript
const obj = {
    _name: "John",

    get name() {
        return this._name
    },

    set name(value) {
        this._name = value
    }
}

obj.name = "Sam"

const result = obj.name
console.log(result) // "Sam"
```
上記のコードでは`_name`の値を変更する際、同名の`name`の`setter`を持って変更している。
なお、`setter`の`name`はプロパティであるため、新しい値をセットする際には、以下のように書く。
```javascript:javascript
obj.name = "Sam"
// ✖︎obj.name("Sam")
```
まとめると、ある特定のプロパティに直接アクセスして値を取り出したり変更せず、アクセサを持って行うことがgetterとsetterの役割である。

# getterとsetterを使う利点
- あるスコープ内の値に外部からアクセスを制御するため、値の状態を管理することができる。
- 値にアクセスする前に検証を行うことができる。
MSSQLサーバ用ODBCドライバーインストール&SAP関連ノート

# SAP関連ノートとリリースバージョンチェック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821335/8da82010-b65b-e0a0-faf8-927c8865a1c6.png)

関連ノート:1902794 - ODBC driver for MS SQL Server

# 公式サイトで検索「ODBC Driver xx for SQL Server download」
今回はSQL Server2012なので、ODBC Driver 11 for SQL Server downloadで検索します。

公式サイトはこちら。

https://www.microsoft.com/en-us/download

## 検索画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821335/a925fcd3-d07c-c5cf-a16f-9c30084c570b.png)




## 検索結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821335/7bdbce7e-641d-ec6e-cdd7-a0577a4f80ce.png)
OSに合わせてダウンロード。

一番上のWindowsを選択しました。実際のURL
https://www.microsoft.com/en-us/download/details.aspx?id=36434

# ダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821335/e844b151-6197-eabb-71a3-03af8b7a1bb2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821335/8d132eda-6317-f40b-c268-f2224cc50163.png)


# インストール

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821335/28fdac88-6aaf-86ea-44ac-464d868cc7b3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821335/1ce072b6-bb49-ccce-e1a6-c3e24e9b09b4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821335/ecb7304f-bca0-d868-7f26-724e2eaa73e4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821335/adca7f07-d307-dbd0-d380-e89004c9eb12.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821335/1f631dc1-1fc6-2867-5997-dd12e3899a93.png)

インストール完了。
C#のコンソール出力について

## 記事の背景
C#を業務で扱い始めて、コンソールへの出力の方法が気になったので調査
（ぺちぱー（死語）なのでechoとかしかわからない）

## 文字列出力の種類
### Console.WriteLine()
引数に文字列や変数を渡すとコンソール画面に出力します<br>
例
※今回のコード内では名前空間の省略はしませんでした
```C#
public class huga{
    public static void Main(){
        string huga = "hello";
        int piyo = 5;
        bool miyo = true;

        System.Console.WriteLine("hoge");
        System.Console.WriteLine(huga);
        System.Console.WriteLine(piyo);
        System.Console.WriteLine(miyo);
    }
}
```
実行結果
```
hoge
hello
5
true
```
<br>
<br>
Console.WriteLine()は複数個の引数を受け取ることもできます<br>
第一引数はベースとなる文字列、第二引数からはその文字列で表示したい値を渡します<br>
第一引数中の{0},{1}はそれぞれ第二引数と第三引数と対応し、第四引数からも{2},{3}...と続いていきます
<br>
第二引数以降の値は、登場回数や順序も自由です<br><br>
例

```C#
public class hoge{
    public static void Main(){
        string hoge = "ホゲ太郎";
        string huga = "リンゴ";
        System.Console.WriteLine("私の名前は{0}です。好きな食べ物は{1}です。",hoge,huga);
        System.Console.WriteLine("私の名前は{1}です。好きな食べ物は{0}です。",hoge,huga);
        System.Console.WriteLine("私の名前は{1}です。好きな食べ物は{1}です。",hoge,huga);
    }
}
```
出力結果
```
私の名前はホゲ太郎です。好きな食べ物はリンゴです。
私の名前はリンゴです。好きな食べ物はホゲ太郎です。
私の名前はリンゴです。好きな食べ物はリンゴです。
```
ちなみにこれでも同様の出力結果になります
```C#
public class hoge{
    public static void Main(){
        string hoge = "ホゲ太郎";
        string huga = "リンゴ";
        System.Console.WriteLine("私の名前は" + hoge + "です。好きな食べ物は" + huga + "です。");
        System.Console.WriteLine("私の名前は" + huga + "です。好きな食べ物は" + hoge + "です。");
        System.Console.WriteLine("私の名前は" + huga + "です。好きな食べ物は" + huga + "です。");
    }
}
```

### Console.Write()
```Console.WriteLine()```と同様に、引数に文字列や変数を渡すとコンソール画面に出力します
ただし、```Console.WriteLine()```では出力の最後に自動的に改行コードが挿入されていましたが、
```Console.Write()```では挿入されません
改行コード\r\nを入れると改行されます
例
```C#
public class huga{
    public static void Main(){
        string huga = "hello";
        int piyo = 5;
        bool miyo = true;

        System.Console.Write("hoge");
        System.Console.Write(huga);
        System.Console.Write(piyo);
        System.Console.Write(miyo);
        System.Console.Write("hoge\r\n");
        System.Console.Write(huga);
    }
}
```
出力結果
```
hogehello5Truehoge
hello
```

複数の引数を渡すことも同様に可能です
```Console.WriteLine()```を挟むともちろん改行されます
```C#
public class hoge{
    public static void Main(){
        string hoge = "ホゲ太郎";
        string huga = "リンゴ";
        System.Console.Write("私の名前は{0}です。好きな食べ物は{1}です。",hoge,huga);
        System.Console.Write("私の名前は{1}です。好きな食べ物は{0}です。",hoge,huga);
        System.Console.WriteLine("私の名前は{1}です。好きな食べ物は{1}です。",hoge,huga);
        //ここで改行
        System.Console.Write("私の名前は{0}です。好きな食べ物は{1}です。",hoge,huga);
    }
}
```
出力結果
```
私の名前はホゲ太郎です。好きな食べ物はリンゴです。私の名前はリンゴです。好きな食べ物はホゲ太郎です。私の名前はリンゴです。好きな食べ物はリンゴです。
私の名前はホゲ太郎です。好きな食べ物はリンゴです。
```

## まとめ
なるほど
[FastAPI]Noneをレスポンスから除外する方法[Pydantic]

下記の様に設定することで、`Response.name`に値が存在する場合はそれを含め、Noneの場合は除外してからJsonに変換してくれるようになる。


```python
from pydantic import BaseModel
from typing import Optional


class Response(BaseModel):
    id: int
    name: Optional[str] = None

    class Config:
        fields = {'name': {'exclude': True}}
```
網羅的検索で利便性が大きく向上。JMP 17の新機能「JMPの検索」

![画像1_ヘッダー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/ef4ec297-102e-5f72-39fe-6b8a3e1c9d49.png)
### ■ヘルプの新機能「JMPの検索」
新バージョン「JMP 17」の目玉の新機能の1つが「JMPの検索」です。統計検定名から分析をスタートしたり、分析過程で必要な情報をリアルタイムかつ網羅的に調べたりできます。

ヘルプ機能といえば、とかく初心者向けと思われがちですが、JMP 17に新たに搭載された「JMPの検索」は、経験や知識が豊富な熟練ユーザーの方でも十分に満足できる便利な機能になっています。

使い方は簡単です。
まずはJMPを起動し、[ヘルプ]>[JMPの検索]をクリックします。
![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/9ef0e417-51a3-39b1-39aa-78d92fc8ec39.png)
次に、検索窓に検索したいテキストを入力します。
すると、入力した内容に関連するさまざまな情報が、網羅的に表示されます。
![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/0fb119fa-8d94-74d0-1b01-080b8ecb8f22.png)
その中から探していた結果をクリックすると、その右側に説明等が表示されるので、下部の「実行」ボタンをクリックして分析を起動するか、「トピックのヘルプ」からさらに詳細な情報を得ることもできます。

この「網羅的な」検索が特に便利です。JMPのプラットフォームだけでなく、サンプルデータ、ヘルプ、コミュニティ、JSL（JMPスクリプト言語）に至るまで、さまざまな情報を検索できるので、知りたい内容に効果的にアクセスでき、疑問的をその場で解決できます。

そのため、分からないところを放置したまま、何日もモヤモヤするようなこともなく、分析がとんとん拍子にはかどるはずです。

### ■統計検定名で検索し、分析をスムーズに実行
次に、私自身が使ってみて、個人的に「あっ、これは便利だな」と感じた具体的な活用例をご紹介します。

皆さんは、JMPを使う際に「ある統計手法をおこないたいけれど、どこからスタートすればいいの？」と感じたことはありませんか？

このように、ある統計手法をどこから実行すればよいか分からないような場合にも、「JMPの検索」が役立ちます。

これから実際に操作してみますので、皆さんもぜひご一緒にJMPを操作してみてください。

※JMPをお持ちでない方は、以下のリンクからトライアル版をどうぞ。

[**JMPの全機能を３０日間使い放題！無料トライアル版**](https://www.jmp.com/ja_jp/download-jmp-free-trial.html?utm_campaign=ot&utm_source=facebook&utm_medium=social)

今回は、医学論文でよく用いられる「Wilcoxon検定」を例に挙げます。

まず、JMPを起動し、[ヘルプ]>[サンプルデータフォルダ]内のサンプルデータ「Big Class」のデータテーブルを開きます。その状態で、[ヘルプ]>[JMPの検索]をクリックします。
![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/2aba6476-c45b-6b0d-623d-d3f92996c397.png)
開いた検索窓に「Wilcoxon」と入力してみましょう。
![画像5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/6434d461-84aa-dffa-9816-cdfd0e623612.png)
すると、幾つかの検定とその場所、そして、それぞれの簡単な説明が表示されます。ここで、右下の「トピックのヘルプ」ボタンを押せば、マニュアルのWebページで詳しい説明を学ぶことができます（現在は英語表記。今後のマイナーアップデートで日本語表記に）。

また、左の「実行」ボタンを押せば、「Wilcoxon検定」を実行する際に使う「二変量の関係」をピンポイントで開いてくれます。
![画像6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/6b55140e-cdb3-e33d-f57c-2f7d93d2ebf8.png)
さらに、分析の過程で疑問が生じたなら、「JMP Communityの検索」からコミュニティページに行き、そこで他のユーザーに質問することもできます。
![JMPの検索6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417820/1f79ae89-053a-e6b4-f20f-34a2e636b451.png)
このように、「ある統計手法をおこないたい」というよくあるケースでも「JMPの検索」が役立ちます。

さらに、検索対象の内容だけでなく、検索時に表示された他の内容にも目を通すことで、今までにも増してJMPの知識や分析の幅を広げることが可能です。

### ■情報の網羅的検索が、疑問の解決、分析のサポートを強力にバックアップ
いかがでしたか？「JMPの検索」は、従来のヘルプ機能にとどまらず、統計検定名から分析を開始できたり、サンプルデータやコミュニティへのアクセスが容易になる等、その網羅的な検索によって、ユーザーの皆さんの分析業務をパワフルにサポートします。

JMP 17には、他にも便利な新機能が盛りだくさんです。
下のWebページや、今月17日（木）・18日（金）にオンライン開催予定のDiscovery Summit Japan 2022で詳しくご紹介しますので、ぜひチェックしてみてください！

Webページ：
[**JMP 17の新機能**](https://www.jmp.com/ja_jp/software/new-release/new-in-jmp.html?utm_campaign=ot&utm_source=facebook&utm_medium=social
)

Discovery Summit Japan 2022について：
[**【参加登録受付中！】Discovery Summit Japan 2022**](https://discoverysummit.jmp/ja/2022/japan/home.html?utm_campaign=ot&utm_source=facebook&utm_medium=social
)
looker学習備忘録メモ

## 記事の目的
lookerのファイル作成を行う上での個人的なポイント


・modelファイルの中にexploreタグを書いてあげるとexploreに表示されるようになる

・基本sql_table_name: ``でプロジェクト、データセット、テーブル名を記載して接続を確保、

・viewファイルはmodelの補助役で、これらを使うと、テーブルのjoinなどが楽になる。

・modelファイルはjoinなどで関連するviewファイルやcache情報などをまとめた、あくまでbiツール単位の括り
基本1explore1modelが良いと思う
【ServiceNow】テーブルリストのポータルビューの表示方法

テーブルリストのポータルビューを表示する方法をご紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/6f55b6fd-523c-822a-cc38-226979845ca4.png)

弊社ではエンドユーザの作業はポータルに集約しています。
あるテーブルリストをエンドユーザに公開することとなり、これもポータルビューで実現したく調査をしたのでご紹介します。

今回ご紹介する方法はデフォルトで用意されている汎用利用可能なページとウィジェットを使用するので、１からページを作成する必要がありません。

また設定のみで検索窓をつけることができるので、その方法もあわせてご紹介します。



## 手順概要
以下の手順でビューを表示します。

　1.URLを生成する
　2.テキストインデックスをONにする
　　※ONにするとページ内に検索窓が表示され、キーワード検索が可能になります。


## 実装手順
### 1.URLを生成する
以下のルールでURLを作ります。

**＜instance＞/sp?id=list&table=＜テーブル名＞&view=＜ビュー名＞**
＜＞の部分は以下に置き換えます
　　instance　＝　インスタンスのURL　※https://インスタンス名.service-now.com
　　テーブル名　＝　テーブルの物理名
　　ビュー名　＝　ビューの物理名
 


### 2.テキストインデックスをONにする
以下を参考にテーブルのテキストインデックス作成を有効にします。


https://docs.servicenow.com/en-US/bundle/tokyo-platform-administration/page/administer/search-administration/task/t_EnableATextSearchOnATable.html


### 補足
権限があればレコードの新規作成や更新なども可能です。
フォームもポータルビューで表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/9c2a8858-c7d5-2ccc-f27b-af221caf9f0f.png)
sshのキーの権限設定（Mac）

# 経緯
- Macを使ってscpを使おうとした
    - pemファイルの鍵を使ってアクセスしようとしている
- 次のエラーが発生

```
...
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '.ssh/xxxxxxxxxxxxxx.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key ".ssh/xxxxxxxxxxxxx.pem": bad permissions
ubuntu@xx.xx.xx.xx: Permission denied (publickey).
lost connection
```

- `パーミッション0644は開きすぎやで` というメッセージ
- (´・ω・`)

# 対処
```
% chmod 600 .ssh/xxxxxxxxxxxx.pem
```

- ヽ(´ー｀)ノ

# 感想

Mac環境だからなのか、ファイルの権限がオープンすぎて失敗するパターンは初めてだったので記録。
データベースについてザックリ説明する

<h2>記事の目的</h2>

データベースについてアウトプットしていきます。

「Webサービスを作りたいけど、そもそデータベースってなんや？？」

という過去の自分へ向けて書きます。

<h2>目次</h2>

<ul>
①データベースって何？<br>
②データベースのメリット<br>
③データベースの種類<br>
④リレーショナルデーターベースとは？RDBMS<br>
⑤SQLとは？<br>
<ul>

<h2>①データベースって何？</h2>

データベースとは、<b>データを1か所に集め、いつでも利用できるようにしたもの</b>です。

もう少し難しくいうと…

><b>構造化した情報またはデータの組織的な集合</b>
※ORACLE HPより

データベースという言葉自体は、抽象化した概念みたいなものです。

<h2>データベースのメリット</h2>

データベースがとても優れているのは、<b>大人数で、大量のデータを、安全に管理が出来るという点</b>です。

具体的なデータベースのメリットは

<ul>
<li>大量のデータの検索・登録・修正・削除を素早く簡単に行える。（SQLを使用する）</li>
<li>同時に複数の人が利用してもデータに矛盾が生じない（同時実行制御）</li>
<li>データが飛ばないように対策が可能（耐障害性）</li>
<li>データが流出しない（セキュリティ）</li>
</ul>

<h2>③データベースの種類</h2>

データベースという概念を、ソフトウェアとして具体的なものにした場合、大まかに5種類に分けられます。

<ul>
<li>階層型データベース</li>
<li>リレーショナルデーターベース</li>
<li>オブジェクト指向データベース</li>
<li>XMLデータベース</li>
<li>NoSQLデータベース</li>
</ul>

この5種類を<b>DBMS(Database management System)</b> と呼びます。

この中で割と主流なのが、<b>リレーショナルデータベース（RDBMS:Relational Database management System）</b>です。

<h2>④リレーショナルデーターベースとは？RDBMS</h2>

リレーショナルデーターベースとは、データを二次元表で管理するデータベースです。

これです

|名前|性別|生年月日|血液型|
|:--|:--|:--|:--|
|山田 太郎| 男性|1990年10月10日|B型|
|吉田 香|女性|1997年5月7日|A型|
|田中 賢|男性|2002年6月21日|O型|
|中村 康太|男性|1999年8月31日|AB型|

二次元表でデータを管理することで、プログラミング言語を使用しなくてもデータを操作できます。
よって、エンジニア以外でも、多くのユーザーがデータを操作することが可能です。

二次元表のデータ操作には、<b>SQLというデータベース言語</b>を使用します。

:::note warn
<b>SQLはプログラミング言語ではありません。</b>
:::

ファイル管理だと、プログラミング言語や環境構築を行う必要があり、めんどいです。

<h2>⑤SQLとは？</h2>

SQLとは、データを操作するために使用する、データベース言語です。

データベース言語の中でも、多く使用されています。

SQLの特徴は、英語を使用してデータ操作を行うことができる点です。
<br>

こんな具合に…

<h3>データベースの作成</h3>

```
mysql> CREATE DATABASE "データベース名";
```


<h3>　　データベースの指定</h3>

```
mysql> USE "データベース名";
```


<h2>参考</h2>


・[独学エンジニア](https://dokugaku-engineer.com/)
・[Oracle Japan](https://www.oracle.com/jp/database/what-is-database/)
[Python] 祝日を判定する

#### 0.初めに
国内株などに投資をしていると平日だけ実行したいプログラムが思い浮かぶ。
Windows10 のタスクスケジューラは祝日に実行しない設定が存在しない。
そこで祝日のみをピンポイントで弾く必要性を感じた。

#### 1.jpholidayをインストールする
コマンドプロンプトで
`pip install jpholiday`
を入力

#### 2.サンプルプログラム
holiday.pyは祝日のとき終了するプログラム
exit()の下に(インデントを戻して)実施したいプログラムを記述すればよい
```python:holiday.py
import datetime
import jpholiday

if jpholiday.is_holiday(datetime.date.today()):
    print("Today is a holiday, so this program will not work.")
    exit()
```
参照先
https://github.com/Lalcs/jpholiday

#### 3.問題点
年末年始が対応してませんね。
金融機関は12/31,1/2,1/3を追加
役所はさらに12/29,12/30を追加
しなければならない。

↓の例は金融機関に対応したバージョン
現代は大発会も大納会も終日立会がありますよ
```python:holiday.py
import datetime
import jpholiday

if jpholiday.is_holiday(datetime.date.today()):
    print("today is holiday.so this program don't work.")
    exit()
if datetime.date.today().strftime("%m/%d")=="12/31" or datetime.date.today().strftime("%m/%d")=="01/02" or datetime.date.today().strftime("%m/%d")=="01/03":#
    print("today is holiday.so this program don't work.")
    exit()
```
Amazonの高評価レビューを識別する単語は何か？textirによる多項逆回帰の紹介

> 問題 多項逆回帰を用いて、Amazonレビューデータセットの評価点を識別する単語を明らかにせよ

レビューサイトにおいて、高評価のレビューに含まれている単語と低評価のレビューに含まれている単語を明らかにしたいとしよう。この場合どのようにアプローチするべきだろうか。

テキスト回帰では、テキストにおける各単語数をテキストの属性(レビューの評価など)へと回帰する。しかし、単語の数がデータ数よりも多い場合、モデルの係数を推定する上で問題が生じる。

対して、多項逆回帰(Multinomial Inverse Regression)では、テキストの属性からテキストにおける単語へと回帰する(Taddy, 2013)。事前分布として、ガンマラプラス事前分布を定めているため、正則化がなされており、パラメータ推定上の問題は回避されている。また、本来は単語から属性へと回帰するところを、属性から単語へと回帰しているため「逆回帰」と呼ばれている。

この記事では、amazonのレビューデータセットを対象に多項逆回帰を用いてみる。


```R
#分析用のパッケージ
library(tidyverse)
library(RMeCab)
library(textir)

url  <- 'https://s3.amazonaws.com/amazon-reviews-pds/tsv/amazon_reviews_multilingual_JP_v1_00.tsv.gz'
amazon_df <- read_tsv(url) %>% head(5000) #計算時間を減らすためデータ数を絞る
amazon_df[c("star_rating", "review_body")] %>% head(5)
```
![スクリーンショット 2022-11-09 0.49.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581047/aca38fd8-2bce-3c1a-094b-c24acb5ce5c4.png)


データセットには、レビュー評価点とレビュー文が含まれている。前者をベクトルviとし、テキストにおける単語数xiへと回帰してみよう。

```math
x_y ∼ MN(q_y, m_y) 　with　\ q_{yj} = \frac{exp[αj + yϕ_j]}{\sum^p_{l = 1}exp[α_l + yϕ_l]}
,\ for 　j = 1, . . . , p, y ∈ Y
```

```R
amazonRatings <- amazon_df[,"star_rating", drop=FALSE]
docMatrix <- amazon_df$review_body %>% docMatrixDF() %>% t() #単語文書行列を作成し、転置
rownames(docMatrix ) = NULL #インデックスの削除
docMatrix %>% head(3)
```

RMecabでは、docMatrixDF()を使うことで単語文書行列を作成することができる。

![スクリーンショット 2022-11-09 0.50.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581047/4f0353a2-695d-0d7e-e29a-32b3b33d4adb.png)


```R
cl <- NULL
fits <- dmr(cl, amazonRatings, docMatrix, bins=5, gamma=1, nlambda=10)
B <- coef(fits)
B[1:2, 1:10]
```

![スクリーンショット 2022-11-09 0.54.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581047/bad74d7a-ba42-72b3-3a1c-1cab5ea9acb4.png)


単語数の数だけ結果の列がある。低いレビュー点数を識別する単語と高いレビュー点数を識別する単語を見てみよう。

```R
mean(B[2,]==0)
#負の効果がある単語ベスト30
B[2,order(B[2,])[1:30]]
#正の効果がある単語ベスト30
B[2,order(-B[2,])[1:30]]
```
![スクリーンショット 2022-11-09 0.56.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581047/35775f52-94f0-3dbd-41ef-5a5c0ba7f091.png)


前処理の必要性を感じさせられる結果になっているが、「お粗末」、「返送」という単語が低いレビュー点数を識別しており、「enjoyable」、「thrilling」という単語が高いレビュー点数を識別していることが分かる。

単語から属性を識別したい場合、その指標となるのは予測タスクにおける指標と同じになるが、予測することが本来の目的ではない。このようなタスクを架空の予測問題という(Grimmer et al, 2022)。そのような場合は、多項逆回帰のように予測するための変数と予測したい変数を逆にして回帰することもできるのである。


# 参考文献
https://www.amazon.co.jp/Text-As-Data-Framework-Learning/dp/0691207550/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=OZ25GJKNLBZG&keywords=text+as+data&qid=1667923125&qu=eyJxc2MiOiIxLjAyIiwicXNhIjoiMC4zMyIsInFzcCI6IjAuNTAifQ%3D%3D&sprefix=text+as+d%2Caps%2C375&sr=8-1


https://www.jstor.org/stable/24246859

https://cran.r-project.org/web/packages/textir/textir.pdf
Nodebrew インストールメモ(Windows)

<h2>以下のコマンド１つ叩けば nodebrew インストール可能</h2>


    curl -L git.io/nodebrew | perl - setup

    wget git.io/nodebrew

    perl nodebrew setup

 wget git.io/nodebrewでインストールすると「Internet Explorer エンジンを使用できないか、Internet Explorer の初回起動構成が完了していないため、応答のコンテンツを解析できません。」というエラー発生するのでIEの初回起動完成させないとダメ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884833/18b9907e-779e-e6fb-4427-8a3a2dacb99a.png)
PyQt6Creatorにて作成した.uiファイルを.pyファイルへ変換

# 環境
* Windows 10 Pro
* Python 3.1.0
* Qt Creator 8.0.2
* Pyside6 6.4.0
* PyQt6 6.4.0
* Qt6 6.4.0
<INS>コマンドで以下を入力</INS>
```command:Qt6
uic -g python form.ui > ui_form.py
```
```command:Pyside6
pyside6-uic form.ui > ui_form.py
```
```command:PyQt6
pyuic6 form.ui > ui_form.py
```
どれも同じ結果になります。
formの部分は各々のファイル名に書き直してください。
忘れたときにどうぞ。

# 参考ページ
* https://doc.qt.io/qt-6/uic.html
* https://doc.qt.io/qt-6/designer-using-a-ui-file-python.html
htaccessがどうも動かなかったとき・・

Dockerでphp:8.1-apache-bullseyeのイメージに
Laravel+Jetstreamで環境構築していたら
/login /registerのページが404 not foundで動かない・・

何度入れ直してもだめだったので、htaccessかな？って思うようになって
でも、微妙にhtaccessは動作していて、？？だったが
ふとapache moduleを確認していたら

```
# apache2ctl -M
Loaded Modules:
 core_module (static)
 so_module (static)
 watchdog_module (static)
 http_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 unixd_module (static)
 access_compat_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 filter_module (shared)
 mime_module (shared)
 mpm_prefork_module (shared)
 negotiation_module (shared)
 php_module (shared)
 reqtimeout_module (shared)
 setenvif_module (shared)
 status_module (shared)


```
rewrite_moduleが入っていなかった・・

```
 a2enmod rewrite
```

で追加したら、普通に動きました・・
Backlogチケットの起票時に心掛けていること

# この項について
対象：チケットを起票する人、依頼を受ける人
社内でチケットに関するコミュニケーションミスを見かけたことがあり、それをきっかけにまとめたもの。

## 起票者側の心得
- **大前提：依頼している立場としてのスタンス**
    - 「お願いする」気持ちはわすれずに
    -  (そんなん当たり前だろ！という人も多いと思いますが念の為！) 

## 依頼受ける側の心得
- **チケットに情報が足りない場合、確認をしましょう**
    - 立場が違うと、どんな情報が必要なのかわからないこともある。
    - 起票者も悪気があるわけではない。
    - いつも同じ情報が足りなかったら、テンプレートを作る/修正して、一発で欲しい情報が手に入るよう協力しましょう。

## 両側用tips
### 文章で手と心を尽くしても、伝わらない時は→声でコミュニケーションしましょう
    
- **5分ハドルする！**
    - 5分より長くしない、鉄の意志を持つ！スパッと解決しましょう。
- **ペアプロ→両者で30分くらい、一緒に作業する。**
    - チケット起票作業を一緒に行う。
    - 相手が何をやっているかわかると、相手の立場にも立てるようになる.。言いづらさや、お互いにちくちくした気持ちになるのを防げる。
- 一見コスト高く見えるが、テキスト書いて往復書簡しなくて済むので時短になることもある
- 一回やるだけで解決することも多いので、勇気を出して試しにやってみてください。

## 起票者tips
### チケットは具体的に書く
- タイトルだけ見て、何をすればいいのかわかる文章にする

### テンプレートを作る/修正する
- 定型の依頼が続くようであれば、テンプレート化しましょう。
- 一ヶ月に一回くらい、見直しアンド修正しましょう。使いやすいように改善！

### テンプレ使用時の注意
- 起票時、余分な情報は消しましょう
    - 例文などが入りっぱなしのまま依頼しない。
    - 情報が入ってると、それを読み込むのにも労力/時間がかかる。
    - できるだけ情報量を減らす努力を！

### チケット作りアンチパターン
- 主語と述語を無視した課題名（体言止め・名詞の羅列）
- 課題の詳細欄には何も記入しない
- 共通の課題なのにチームメンバーごとに課題名が異なる

など。参考：https://homilog.hatenablog.com/entry/backlog-advent-calendar-2019-12-05

## 依頼受ける側tips
そのうち書く