OmniAICreator/Qiita-1.07M huggingface dataset:
Jetson Orin NXでIntel Wireless モジュール8265 が認識しない

# 結論
* ドライバをインストールする
```shell
sudo apt install iwlwifi-modules
```
# 環境
* Jetson Orin NX 
  * L4T:R36
  * Jetpack:6.0DP
# 原因
* ドライバがインストールされていない
Amplify override authでSecrets Managerを利用する

## 概要
Amplify override authで認証情報を設定する際、ソースコードに認証情報を書くわけにはいかず、Gitに含めるわけにもいかず、環境ごとに自動で値が設定されるようにしたいということがあります。その場合、Secrets Managerを使用することができます。

## Amplify override authでSecrets Managerを参照させる方法
こちらの記事に詳しく書かれていたため、[こちら](https://www.seeds-std.co.jp/blog/creators/2023-10-02-2194bf44-d68c-4d59-8b07-158e65f343b3/)を参照ください。
下記のように書くことになるかと思います。

```javascript
import { AmplifyAuthCognitoStackTemplate, getProjectInfo } from '@aws-amplify/cli-extensibility-helper'

export function override(resources: AmplifyAuthCognitoStackTemplate) {
  const serviceName = 'abc' // サービスの名前（お好きに）
  const providerName = 'xyz' // プロバイダの名前（お好きに）
  const { envName, projectName } = getProjectInfo()
  const secretName = `${serviceName}/${envName}/${providerName}` // お好きに

  resources.addCfnResource(
    {
      // 中略
      properties: {
        // 中略
        ProviderDetails: {
          client_id: `{{resolve:secretsmanager:${secretName}:SecretString:PROVIDER_CLIENT_ID}}`,
          client_secret: `{{resolve:secretsmanager:${secretName}:SecretString:PROVIDER_CLIENT_SECRET}}`,
          // 中略
        },
        // 中略
      },
    },
    // 中略
  )
}
```

## Secrets Managerに認証情報をセットする方法

こちらが本題ですが、Secrets Managerに認証情報をセットするためのコマンドです。

```sh
ENV="<環境名>"
PROFILE="<AWSプロファイル名>"
SERVICE_NAME="abc"
PROVIDER_NAME="xyz"
echo '{"PROVIDER_CLIENT_ID": "<CLIENT ID>","PROVIDER_CLIENT_SECRET": "<CLIENT SECRET>"}' > secret.json
SECRET_NAME="$SERVICE_NAME/$ENV/$PROVIDER_NAME"
aws secretsmanager create-secret --name "$SECRET_NAME" --description "$SERVICE_NAME $ENV $PROVIDER_NAME SECRET" --secret-string file://secret.json --profile "$PROFILE"
```
新しい環境を作成するたびにこちらを事前に実行する必要があります。

## 参考

[Amplify override authでSecrets Managerの値を取得する](https://www.seeds-std.co.jp/blog/creators/2023-10-02-2194bf44-d68c-4d59-8b07-158e65f343b3/)
[AWS CloudFormation リソースの AWS Secrets Manager シークレットを取得する](https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/cfn-example_reference-secret.html)

## バージョン情報

```sh
% amplify -v
12.10.1
```
GitでAPIキーなどの公開したくないファイルをcommitさせないようにするには

<h2>本日のお悩み</h2>

APIを使用したwebアプリを作成し、Gitへcommitする際にjsonファイル(私の場合はAPIキー)などの公開したくないファイルはどう管理すれば良いのか。

<h2>本日の処方箋</h2>

<h3>.gitignoreというファイルをプロジェクト直下に新規作成する。</h3>
<hr>

<h3>.gitignoreファイルの記載方法</h3>

.gitignoreはgitに管理させたくないファイルを記述します。以下何パターンか記載します。

<h3>特定の名前のファイルを全て除外する(これが一番早いし簡単)</h3>
/をつけない

    sample.txt

<h3>指定したファイルを除外する</h3>
最初のみに/をつける。最後には/をつけない。

    /sample/file

<h3>特定のディレクトリを除外する</h3>

最初と最後に/をつける

    /sample/directory/

<h3>特定の拡張子のファイルを除外する
</h3>
*をつける

    *.py

<h3>特定の名前のディレクトリを全て除外する</h3>
最後にだけ/をつける

    directory/

<h3>特定のディレクトリ以下にある特定のディレクトリ名を全除外する</h3>
mainディレクトリ以下にあるdirectoryというディレクトリ名のディレクトリを全てスルー

    /main/a/directory

<h3>ややこしい例</h3>
すべての .txt ファイルを除外するが、main/sample.txtファイルのみcommitする

    *.txt
    !/main/sample.txt

<h3>ハマりやすい例</h3>
/mainディレクトリを除外したいが/main/sample.txtだけはcommitしたい場合

    /main/
    !/main/sample.txt

とすると **/main/** ディレクトリが優先されて除外されてしまう。
なのでsample.txtをcommitしたくてもmain配下にあるため、この場合は何も指定されない。
ではどうすれば良いのか**↓**

    /main/*
    !/main/sample.txt

末尾に*をつけることで、/main/ ディレクトリ以下のファイルを除外するが、その中にあるsample.txtファイルだけはcommitの対象とする。
RTX830 で MAP-E + IPsec の二重トンネル

こちら「[MAP-EでのIPsec接続](https://qiita.com/h_toshik/items/b248c7651eb59d0)」を拝見し、
ヤマハの RTX830 でなんとかできないもんかと。

条件などは同じで、

**・IPoE + MAP-E な IPv4 over IPv6 な環境
・PPPoE のセッションが何等かの理由によって張れない場合
・IPsec はイニシエータ側**

結果としては、ヤマハの RTX830 でも問題なくできた。
上記サイトにもあるように、重要なのは、

**・NAT トラバーサルを両端で使用する。（Type は 1 でも 2 でも可）
・ipsec ike local id で IP アドレスを使用しない。**

上記二点でした。

未検証ながら、DS-Lite の IPIP トンネルでも動きそう。
今から ISP の契約を DS-Lite に変えるのも面倒なので、どなたか人柱願いたい。
DS-Lite でできたら、RTX810/1200 とかの古いのとか、
L2TP/IPsec なら NVR500 とか NVR510 あたりも、
もうしばらくは延命イケるか。

検証環境のレスポンダ側の都合で、IKEv2 ではなく IKEv1。
IKEv2 の場合でも、上記原則に則る事で、接続できるのではないか。
検証環境ができたら試してみたい。

以下、設定からトンネルと NAT 部分の抜粋。

~~~設定例
tunnel select 1
 tunnel encapsulation map-e
 ip tunnel nat descriptor 1
 tunnel enable 1

tunnel select 2
 tunnel name ipsec01
 ipsec tunnel 1
  ipsec sa policy 1 1 esp 3des-cbc md5-hmac
  ipsec ike keepalive log 1 off
  ipsec ike keepalive use 1 on heartbeat 10 6
  ipsec ike local address 1 192.168.50.1
  ipsec ike local name 1 ipsec01 key-id
  ipsec ike nat-traversal 1 on
  ipsec ike pre-shared-key 1 text PASSKEY
  ipsec ike remote address 1 xxx.xxx.xxx.xxx
 ip tunnel tcp mss limit auto
 tunnel enable 2

nat descriptor type 1 masquerade
nat descriptor address outer 1 map-e
ipsec auto refresh on
~~~

もちろんメーカーが推奨する方法ではないと思うので、
自己責任＆ご利用は計画的に。。。
docker composeと docker-composeの違いは？

## docker-composeとは

> 複数のコンテナを使用する場合にコンテナ同士を繋いだり、ボリュームのマウント、環境変数の設定など手順が多く時間がかかったりミスが発生することを防げるもの
docker-compose.ymlのあるディレクトリで`docker-compose up`のみでイメージの作成からコンテナの起動まで完了できる

https://qiita.com/mayobimu/items/022d043a1fd0d0130011#docker-compose

## docker compose(Compose V2)と docker-compose(V1)の違い

2021年6月にリリースされたDockerDesktop3.4でdocker composeV2がサポートされるようになり、その後V2 が一般提供開始になった為V1 はDeprecatedになりました。

現在は`docker-compose`コマンドが`docker compose`のエイリアスになっています

### コンテナ名
アンダーバー(_)区切り文字からハイフン(-)単語区切り文字に

### サポートされていない
- `docker-compose scale`
    - 代わりにこちらを使用 `docker compose up --scale`
- `docker-compose rm --all`


### V1とV2の変更点
- `–compatibility`
    - コンテナ名の単語区切りに-ではなく_を使用
- `ps --filter KEY-VALUE`
    - 特定のプロパティ（例：–filter=status=running）のみでフィルタリングできます
- 環境変数:
    - 環境変数の優先順位と.envファイルの補間が両方ともカバーされています


参考：

https://qiita.com/zembutsu/items/d82b2ae1a511ebd6a350

https://docs.docker.com/compose/migrate/#unsupported-in-v2
心理的安全性の矛盾に関する一考察

こんにちは！博報堂テクノロジーズの近藤です。

前回、[SRE Core体験レポート](https://qiita.com/tkkon/items/787734a3af9fdb75f9d5)を執筆しましたが、その中で心理的安全性について学習する機会があり、あくまで個人の見解として一考察をまとめます。

# 背景

テレワークが当たり前の職場が増え対面のコミュニケーションが減り、かつ、新しい職場で早く上手く活躍するために心理的安全な状態が保たれていることは重要だと考えています。

ただ、**心理的安全性は一見矛盾する側面**があると感じ、そのことをまとめます。

# 心理的安全性の矛盾と一考察

心理的安全性とは組織の中で自分の考えや気持ちを誰に対してでも安心して発言できる状態のことを指します[1]。

ただ、自分の考えや気持ちをストレートに発言できてしまうと、内容によっては他者を傷つけてしまうことがあります。これにより、その他者が自分の考えや気持ちを発言しづらくなることや、もしくは反発して攻撃的になる可能性があり、この連鎖により心理的安全な状態が崩壊する可能性があります。

つまり、**心理的安全性を保つには他者を傷つけない発言をする必要があり、これにより自分の考えや気持ちを制限された状態になったとすると、心理的安全性は保たれない、という一見矛盾のようにみえます**。

なので心理的安全性を持つためには何かしらの前提があると考えてみました。

## 道徳・教養の必要性

自身の考えを表現する際は、他者がどう思うかや置かれている立場を理解し発言することが大切だと考えています。また、自身が傷ついた発言を受けた場合でも同じで、なぜそのような発言に至ったかを考えることで、その意見を受け入れることが出来る可能性があります。

つまり、**相手への共感(エンパシー)と敬意(リスペクト)が大事**だと考えており、
攻撃→攻撃→・・・の負の連鎖を断つことが可能です。

これには道徳的な考えや教養が必要不可欠と考えています。ただ、道徳や教養は主観に基づくものであり人によって基準が異なります。なので、**道徳・教養は大切ですが、矛盾を解決する万能な解ではない**と考えています。

## 組織・チームの共通認識

組織やチームでの価値観・目標・期待値の共通認識を形成することは大切だと考えています。例えば”相手への共感を持った発言を心掛けること”を組織やチームのスローガンとして掲げ、メンバーへ浸透することで、水準を作ることが出来る可能性があります。

ただ、こういったスローガンを各メンバーが咀嚼し理解するには、その人が持つ道徳・教養が根底には必要だと感じています。
また、メンバーのバックグラウンド(母国などを含む)は様々であり、字面だけではとらえ方が異なる可能性もあるため、スローガンを元に率直にディスカッションしてみることが大事だと考えています。

このディスカッションでは、一旦心理的安全性は置いておき、思ったことを率直に会話するのも一案だと思います。**破壊的なコミュニケーションを通してお互いを深く知ることができ、強固な関係を持つことができるとも感じます**。(喧嘩するほど仲が良い、的な発想です)
なんにせよ、コミュニケーションを取ることがお互いを知るきっかけであり、これは心理的安全性の一歩目に繋がると考えています。
なお、心理的安全性は一旦置くといっても、***相手への共感(エンパシー)と敬意(リスペクト)は持つべき***だと考えています。

## 他人軸と自分軸

相手への共感と敬意の行き過ぎは、他人軸になる可能性があると思います。
他人軸とは「他者にどう思われたいか」など、自身では無く他者を基準に物事を判断する考え方の理解です。
あくまで「自分がどうしたいか」という視点、つまり自分軸を意識することで、納得し責任を持った行動をとることができ、かつ、そういった態度や発言は他者へもしっかり伝わると思います。(他人軸の場合、自身の行動を理解はできても、心のどこかでは納得が出来ないはずです。)
また、自分軸の行き過ぎは自分勝手へ繋がる可能性があると思います。自分勝手と自分軸の違いは、他者を強制するかどうかだと思っています。ここでは共感を意識することで、自身の行動を振り返ることができると思います。

自分軸での行動はやりがいに繋がり、やりがいを持つことで他者への共感・敬意の余裕が生まれ、その他者も共感・敬意に意識を向けることが出来る、という正の連鎖に繋がると考えています。

## ＋α

個人的に大事だなと感じる根底的な観点としては、**他者への興味・感心**だと思っています。

他者への興味・関心を持つことで、自然とコミュニケーションが発生し理解が深まることで「どう思うかな？」など他者への尊重や共感の考えに至ると考えています。これは業務における興味・感心を含み、その人の人となりを知ることが大切だと思っています。

テレワーク中心の環境では、本当に何でもない会話(昨日のサッカー見た？など)が少ないなと感じていますが、本来はこういった会話からその人の興味関心事を知り、人となりを理解することが出来ると考えています。

前職では、このような割としょうもない話が私は大好きで、よく話していたなぁと、この記事を書きながら思い出しました。これからは心掛けていきたいと思います(笑)。

# 参考文献
[1]リクルートマネジメントソリューションズ.「心理的安全性とは」. https://www.recruit-ms.co.jp/glossary/dtl/0000000230/ (参照 2024-04-17).
DatabricksでサービングされるLlama 3を動かしてみる

こちらの記事で触れられている機能がUSリージョンで利用できるようになっていました(すみません、日本はまだです)。

https://www.databricks.com/jp/blog/building-enterprise-genai-apps-meta-llama-3-databricks

サービングページにアクセスするとLlama 3があります！

![Screenshot 2024-04-26 at 9.35.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fde44d69-2110-27f4-c7fb-75ee49e57ab3.png)
![Screenshot 2024-04-26 at 9.36.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4ac3e09a-0f79-5508-871f-bd9db874b6d5.png)

ノートブックで以下を実行します。

```py
%pip install databricks-genai-inference
dbutils.library.restartPython()
```

```py
from databricks_genai_inference import ChatCompletion

response = ChatCompletion.create(model="databricks-meta-llama-3-70b-instruct",
                                 messages=[{"role": "system", "content": "You are a helpful assistant."},
                                           {"role": "user","content": "Knock knock."}],
                                 max_tokens=128)
print(f"response.message:{response.message}")
```
```
response.message:Who's there?
```

```py
response = ChatCompletion.create(model="databricks-meta-llama-3-70b-instruct",
                                 messages=[{"role": "system", "content": "あなたは有能なDatabricksのアシスタントです。質問に日本語で回答してください。"},
                                           {"role": "user","content": "Databricksの特徴を教えてください"}],
                                 max_tokens=128)
print(f"response.message:{response.message}")
```
```
response.message:😊

Databricksは、Apache Sparkを基盤とした、高速でスケーラブルなデータエンジニアリングプラットフォームです。以下は、Databricksの主要な特徴です：

1. **Apache Sparkの統合**：Databricksは、Apache Sparkをネイティブサポートしており、Sparkのパフォーマンスと機能を最大限度まで活用できます。
2. **高速なデータ処理**：Databricksは、高度に最適化されたクラスター構成と自動チューニング機能を備えており、高速な
```

AI Playgroundでも試すことができます。
![Screenshot 2024-04-26 at 9.49.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8d34f827-f7d5-ccec-d981-6098ab760ed8.png)

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
Flaskでjsonデータのやり取りをする方法

## 初めに
私は今までの開発ではフロントエンドからバックエンドで送られてくる値は
string型やint型で送るものが多く、json形式でデータが送られることはあまりありませんでした。
今回は備忘録としての目的も兼ねて記事に残そうと思います。

## 情報の取得とレスポンス
今回はデータベースから情報が送られてきた際にその値とステータスを返すという形で実装していきます。

```example.py
            #フロントエンドから取得した値をjson型で取得する
            body = request.data.decode("utf-8")
            body = json.loads(body)

```
ここでそのままjson型のまま取り出すと文字化けするかもしれないのでutf-8を指定します。
```example.py
            response = {
                "status":"OK",
                "return":"body["return"]"
            }
            return response

```
取得した値がreturnだった場合を仮定しています。
json型の情報をやり取りする場合はレスポンスを返す時もjson型で返します。
## 終わりに
今回は短い内容でしたが、参考にしていただけると幸いです。
パナソニック製スイッチングハブのパスワードを紛失したときの対処法

# 紛失までの経緯
パナソニック製スイッチングハブ（Switch-M24eG）をヤフオクで落札したところ、下の利用者の設定が残っており、ログインできず初期化するのに手間がかかったので対処法を雑記

# やったこと
 [製品ページ](https://panasonic.co.jp/ew/pewnw/product/lan/m24eg_new.html) からアクセスできるマニュアルを確認
 → ログインせず初期化する方法が記載されていない

[公式F&Q](https://panasonic.co.jp/ew/pewnw/inquiry/faq/question.html) を確認すると問い合わせ窓口に連絡するよう案内があった（[このページより](https://panasonic.co.jp/ew/pewnw/inquiry/faq/answer/answer03_01.html#01?TB_iframe=true&width=720&height=520&modal=false)）

# 問い合わせ窓口に電話
以下の情報を聞かれたので事前に用意しておくと良い
1. スイッチのMACアドレス
1. 本体のシリアルナンバー

この情報を伝えると解除用のパスワードが口頭で伝えられる。
コンソールにアクセスしユーザーIDを入力せず、パスワードのみを打ち込むとログインできるので初期化できるようになる。
Pythonでの「オブジェクト」、「インスタンス」、「クラス」の違い

# Pythonでの「オブジェクト」、「インスタンス」、「クラス」の違い

**クラス (Class)**
クラスは、オブジェクトの`設計図またはテンプレート`として機能します。
クラスは`属性（データ）`と`メソッド（そのデータを操作する関数）`を定義します。

**オブジェクト (Object)**
オブジェクトはPythonの`基本単位`で、`データと機能性（メソッド）`をカプセル化します。

**インスタンス (Instance)**
インスタンスは`クラスから生成される具体的なオブジェクト`です。

```Python
class Cat:
    pass

smallCat=Cat()
```

smallCatは`Catクラス`の`インスタンス`であり、同時にPythonの`オブジェクト`です。
Databricksのシステムテーブルによる消費金額の集計と可視化

こちらの記事を参考にさせていただきました。

https://www.linkedin.com/posts/activity-7189340209111592960-n688?utm_source=share&utm_medium=member_desktop

**課金利用 システム テーブル**と**価格設定システムテーブル**を使います。前者は日々のDatabricksの使用量(DBU)、後者はSKUごとの単価が格納されています。つまり、これらを掛け算することで費用が計算できます。

https://docs.databricks.com/ja/administration-guide/system-tables/billing.html

https://docs.databricks.com/ja/administration-guide/system-tables/pricing.html

:::note info
**注意**
- システムテーブルは[有効化の作業](https://docs.databricks.com/ja/administration-guide/system-tables/index.html#enable-system-table-schemas)が必要となります。
- 価格設定システムテーブルは**リスト価格**を格納しているので、ディスカウントが適用されている場合には別途ディスカウントを適用してください。
:::


クエリーはこのようになります。

```sql
SELECT
  u.usage_date,
  u.sku_name,
  SUM(u.usage_quantity * p.pricing.default) AS total_spent,
  p.currency_code
FROM
  system.billing.usage u
  LEFT JOIN system.billing.list_prices p ON u.sku_name = p.sku_name
  AND u.cloud = p.cloud
  AND u.usage_start_time < coalesce(p.price_end_time, date '2029-12-31')
  AND u.usage_end_time > p.price_start_time
WHERE u.usage_date >= date '2024-04-01' -- 4月のデータ
GROUP BY
  ALL
```
![Screenshot 2024-04-26 at 9.12.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d3c7fcb1-d431-4c22-f62c-03a73a04054b.png)

可視化すると使用状況が一目瞭然ですね。SKUは大分類にまとめるなどの処理を加えてもいいと思います。
![Screenshot 2024-04-26 at 9.12.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/cbbd7b71-2e98-dbd5-9852-5d4d6bbcd34f.png)
![chart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e679809e-4d50-f700-c297-871f8e28a343.png)

SQLでの分析なので[サーバレスウェアハウス](https://qiita.com/taka_yayoi/items/e167b2e1c485c83fc024)も活用できます。システムテーブルの分析方法に関してはこちらの記事も参照ください。

https://qiita.com/maroon-db/items/b89d47009948206ac064

https://qiita.com/maroon-db/items/e5c72de40f8b71900afe


### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
LinkedIn Sales Navigator 

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)



+ [インサイドセールスが「LinkedIn Sales Navigator(セールスナビゲーター)」を活用してアポイント率2倍以上を実現したユースケース4選](https://note.com/hiroya_yamanashi/n/n0a53db191985)


+ [Salesforce の LinkedIn Sales Navigator では、新しいタブで LinkedIn にログインするように求められ続けます。タブを閉じると再び開き、ページが更新され続けます。フォーカスが新しいタブに切り替わり続けるため、ブラウザで Salesforce を使用できません。 Salesforce を使用できなくなります。 LinkedIn にログインしても役に立ちません。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007bLPXE)

この問題は 4 月初旬から発生しています。今、アプリを最新バージョンに再インストールしようとしました。これが機能しているかどうかはわかりません。 

:::note
最初の記事で問題が解決しました。

https://support.outreach.io/hc/en-us/articles/20431486225947-Issues-signing-in-to-LinkedIn-Sales-Navigator
:::

+ [リードがフォームを送信したときに、LinkedIn リード生成フォームから Pardot または Salesforce にリードを取得するにはどうすればよいですか。](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54V00007H8O40)

:::note
Please check this article.

https://www.linkedin.com/pulse/how-automatically-set-pardot-source-campaign-when-you-julia-valentine
:::
windowsでsshfsの代わりにrcloneでVPSサーバにマウントする

:::note info
sshfsの開発が終了になったので、rcloneを使ってマウントしてみました
今回はVPSのファイルにアクセスするやり方を説明します
:::
# 環境
rclone v1.66.0
winfps v2.0

# rcloneをインストールする
https://rclone.org/downloads/
「windows」の「Intel/AMD - 64 Bit」をダウンロード
ファイルを展開して任意の場所に配置

# winfspをインストール
・Windowsの場合は、winfspをインスールする必要があります
https://github.com/winfsp/winfsp/tags
・後ろにB1(bate)などがついてない通常版をインストール(今回は「v2.0」をインストール)
・該当バージョンの「Downloads」をクリックして、
・「Download WinFsp」をクリック
・「winfsp-2.0.xxxx.msi」のmsiの拡張子のファイルを実行(デフォルトでOK)

# 設定を行う
コマンドプロンプトを起動します
インストールしている場所まで移動して設定コマンドを実行
```
cd \tool\rclone
rclone config
```
下記のやり方を引用(中間は省いているので詳細はリンク先をご覧ください
https://developers.gmo.jp/18603/#Rclone
```
No remotes found, make a new one?
n/s/q> n                           [←nを入力。新規にリモート設定を作成します]
name> vps                          [←リモート設定の名前を入力します。よく使うので短い方が良いです。後で変更可能]
Storage> sftp                      [←sftpと入力します]
host> 157.xxx.xxx.xxx              [←接続先のホスト名を入力します。ipアドレスでも可]
user>                              [←SSHのユーザー名を入力します。省略すると今現在ログイン中のユーザー名が使われます]
port>22                            [←ポート番号を入力します。省略可能]
y/g/n>                             [←パスワードを入力します。公開鍵認証を使う場合はそのままエンター]
key_pem>                           [←PEM形式の秘密鍵を直接入力できます。省略可能。次でファイル名でも指定できます]
key_file> ~/.ssh/id_rsa            [←秘密鍵のファイル名を入力します。私はこちらを使いました]
y/g/n>                             [←秘密鍵のパスワードを入力します。省略可能]
pubkey_file>                       [←公開鍵ファイルを指定できます。省略可能]
key_use_agent>                     [←ssh-agentを使う場合はtrueにします。省略可能]
use_insecure_cipher> false         [←falseで良いでしょう。古いサーバーに接続する場合はtrueにする必要があるかもしれません]
disable_hashcheck>                 [←SFTPのハッシュチェックを無効にします。省略可能]
y/n>                               [←拡張設定を行いたい場合はYesと答えます。省略可能]
e/n/d/r/c/s/q> q
```
バージョンよって上記以外の質問もでてきますが、基本デフォルト(何も入力せず)にエンターで大丈夫です

# VPSに接続してファイルの中身を確認
```
rclone lsd vps:/home/user/github/laravel
```
「vps」はconfigで設定したname、「/home/user/github/laravel」はマウントしたいフォルダー


# 書き込み可能でマウントする
```
rclone mount vps:/home/user/github/laravel E: --vfs-cache-mode writes
```
「vps」はconfigで設定したname、「/home/user/github/laravel」はマウントしたいフォルダー
「E:」新しく空いてるドライブを指定、「--vfs-cache-mode writes」書き込みオプション


# 自動起動
「rclone_vps_start.bat」のバッチファイルにしてショートカットをスタートアップメニューに配置します
バッチファイルの中身は上記のコマンドを記入します
※バックグラウンドで実行できる --daemonのオプションが使えなかったのでコマンドプロンプトは表示したままになります
```
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
```

# GUIで設定も可能です
```
rclone rcd --rc-web-gui
```

# まとめ
linux環境に開発環境がある際の参考にして頂ければと思います
間違って削除してしまう可能性もあるので、本番環境や/(全フォルダー)は選択せず、
必要に応じて自己責任でお使いください
Salesforce Classicのまとめ

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)



+ [classicに切り替えると、解決できるトレイルヘッド](https://qiita.com/Keiji_otsubo/items/d5a119ac821df65258f5)

+ [「Salesforce Classic にとどまる」設定を権限セットで割り当てているのにClassicからLightningに切り替わってしまった](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ajdvv)

:::note
Lightning Experience User の設定は無効になっていますか？

今回の件とは直接関連はなそそうですが、この権限が有効だとSalesforce Classic にとどまる設定をしていてもLightningに切り替わるようなことが書かれています。

https://support.playbooks.aurea.com/hc/en-us/articles/4410143896466-Users-with-the-Remain-in-Classic-Permission-are-automatically-switched-to-Lightning-when-reverting-to-Salesforce
:::
投稿アプリ　ユーザー管理機能実装

学習を進めていく中で、理解できたと思っていた部分が自力でやろうとするとまだまだだということが分かったので、ここで再度アウトプットします。

deviseを使ったユーザー管理機能の実装手順です。
#### deviseの導入・userモデル作成
deviseを使った場合、コマンドはrails g deviseになる。

```ruby:Gemfile
gem 'devise'
```
```ruby
% rails g devise:install
% rails s
% rails g devise user
```

#### マイグレーションファイルにカラムの追加。
deviseを使うとemail.passwordは自動で生成される。
```ruby:_create_user.rb
t.string :name
t.text :profile
```
```ruby
% rails db:migrate
```

#### バリデーションの設定。
空欄では保存できないことを定義。
```ruby:user.rb
validates :name, presence: true
validates :profile, presence: true
validates :position, presence: true
```

#### ビューファイル。
modelには＠モデル名、rulはdevise/registrations#newに対応するパス。
registrationは新規登録。
※対してsessionはログイン。
```ruby:new.html.erb
<%= form_with model: @user, url: user_registration_path, local: true do |f| %> 

<div class="field">
  <%= f.label :email, "メールアドレス" %><br />
  <%= f.email_field :email, id:"user_email", autofocus: true, autocomplete: "email" %>
</div>

<div class="field">
  <%= f.label :password, "パスワード（6文字以上）" %><br />
  <%= f.password_field :password, id:"user_password", autocomplete: "new-password" %>
</div>

<div class="field">
  <%= f.label :password_confirmation, "パスワード再入力" %><br />
  <%= f.password_field :password_confirmation, id:"user_password_confirmation", autocomplete: "new-password" %>
 </div>

<div class="field">
  <%= f.label :name, "ユーザー名" %><br />
  <%= f.text_field :name, id:"user_name" %>
</div>

<div class="field">
  <%= f.label :profile, "プロフィール" %><br />
  <%= f.text_area :profile, class: :form__text, id:"user_profile" %>
</div>

<div class="actions">
  <%= f.submit "新規登録", class: :form__btn  %>
</div>
<% end %>
```

#### 追加したカラムの情報を取得できるようにする
```ruby:application_controller.rb
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :position])
  end 
end
```
watsonx.aiの生成AIを使ってIBM i アプリの保守が可能か（ほんの少し）検証してみる ⑥命令、試行の入力文を変えてみる

昨晩,guri_guriさんからコメント頂いた件＋αを検証してみました。
***コメント：***
***最初の「RPGⅢプログラム修正の検証」も、具体的に記述すれば成功するでしょうか？***

## テスト① 命令、試行の文を RPG III に変えてみる
命令
RPG IIIのソースを読み込んで、指示通りにプログラムを修正する。
試行
入力したRPG IIIの変数KEISUを探し出し、KEISUを1.05に修正する。
***テスト結果：解析しなかった。***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/1d57091d-330d-a18d-a519-c39e20acb731.png)

## テスト② 命令、試行の文を 'RPG III' (コーテーションつき)に変えてみる
命令
'RPG III'のソースを読み込んで、指示通りにプログラムを修正する。
試行
入力した'RPG III'の変数KEISUを探し出し、KEISUを1.05に修正する。
***テスト結果：解析されたが、KEISUは修正されなかった。***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/5bde60f2-9622-7bf5-c6c4-327d08720d07.png)

んん～？と、試行文も悪いのかと推測、文章を変更してみることにしました。

## テスト③　試行の文を推敲してみた
命令
'RPG III'のソースを読み込んで、指示通りにプログラムを修正する。
試行
***変数KEISUを探し出し、KEISUを1.05に修正する。*** に修正
***テスト結果：KEISUは正しく修正された。***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/e6a10dfa-6d7d-ec3c-b8ac-5e405706789c.png)

## テスト④ 試行の文は③と同じで、エラーとなった②の命令文 RPGⅢ に修正した
記載は略式としますが、
試行の命令文を③と同じに修正すると、①の命令文（RPG III,コーテーションなし）でも***正常にKEISUが修正された。***

## テスト⑤ 試行の文は③と同じで、前回エラーの命令文 RPGⅢ に修正した
記載は略式としますが、
試行の命令文を③と同じに修正すると、前回エラーの命令文（RPG Ⅲ,コーテーションなし）でも***正常にKEISUが修正された。***

## 本日の考察
***命令の入力文***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/322819b7-3766-b6e4-2d5f-b32fe6f4a21e.png)
***よりも***
***試行（または例）の文章（指示）の入力文の推敲が重要（かもしれない）***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/f97584a3-9eb7-7d05-6519-cb892d68a7d0.png)
（期待する）結果が得られやすい。

ということが、現時点のwatsonx.aiとcodellamaモデルの組合せでは言えるのかもしれません。

[つづきはこちら・・⑦命令、試行の入力文を業務記述を目指してみる](https://qiita.com/gomAnomalocaris/items/7a4b61ebb3e7146bd5fe)
html X(twitter)タイムライン　埋め込み

html X(twitter)タイムライン　埋め込み

X(twitter)埋め込み　生成サイト　にアクセス
https://publish.twitter.com/#

![X埋め込み.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3775234/2a44393f-6bbb-c18b-1508-4f49dfb52293.png)

下にスクロールすると様式が出てくるので、
様式選択
![X埋め込み2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3775234/1a5a1dd4-02f8-a55a-d383-d9548d1ff6ae.png)

選択した後に、埋め込みしたいXuserのurlをコピー＆ペースト
![X埋め込み3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3775234/ed1d841e-e0b5-1a8f-fc5d-9ba57b7751e5.png)

埋め込みコードが生成
コピーしてhtmlに追加
詳細設定項目があるので、設定変更したければ、変更。

<a href="https://twitter.com/twitter?ref_src=twsrc%5Etfw" class="twitter-follow-button" data-show-count="false">Follow @twitter</a>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
```
<a href="https://twitter.com/twitter?ref_src=twsrc%5Etfw" class="twitter-follow-button" data-show-count="false">Follow @twitter</a>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
```
X(twitter)作成中

```
<a class="twitter-timeline" data-lang="ja" data-width="300" data-height="300" data-theme="dark" href="https://twitter.com/user">Tweets by </a> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
```
html discord server 埋め込み

html discord server 埋め込み

→埋め込みしたいdiscord serverを選択
→サーバー設定
→ウィジェット
→サーバーウィジェットを有効化
```
<---公式ウィジェット-->
<iframe src="#"></iframe>
<---/公式ウィジェット-->
<---json api-->
<script src="#"></script>  
<--/json api-->
```

表示させたいhtml欄に記載

fin
【Python】DjangoのMTV。MVCとの違い

MVC
![MVC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864611/bfe3f3fa-f57f-ec8b-5550-8ac8856a9dee.png)

MTV
![MTV.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864611/91c0b2f1-545c-0cd8-84d5-51bad9ccbbc7.png)
aws EC2 基礎構築(編集中)

# 1-はじめに 
aws EC2 基礎構築

サーバー立てるだけ設定

時間があるときに写真などを追加します

※まだかけてません(´;ω;｀)

# 目次


| 項番 | ページ内リンク | 説明 |
|:----:|:-------------|:-------------|
| 1 | [1-はじめに](#1-はじめに) ||
| 2 | [2-awsに登録しよう！](#2-awsに登録しよう！) ||
| 3 | [3-EC2サーバーを作ろう!](#3-EC2サーバーを作ろう!) ||
| 3.1 | [3.1 vpcを触ろう！](#3.1vpcを触ろう！!) ||
| 4 | [4-EC2作成](#4-EC2作成) ||
| 5 | [5.amazon linux ログイン](#5-amazonlinuxログイン) |ターミナル等を使ってログイン|
| 6 | [4.さいごに](#4-さいごに) ||


# 2-awsに登録しよう！
awsと検索して、クラウドサーバーを作っちゃおう！
無料で、30GBまでのサーバーを作れちゃう！
登録してたら、aws内で使える300＄ギフトも貰えちゃうかも！！！

aws詳細ページ：<a href="https://aws.amazon.com/jp/?nc2=h_lg">aws詳細ページ</a>

https://aws.amazon.com/jp/?nc2=h_lg

# 3-EC2でクラウドサーバーを作ろう!
(1クリックではできません)
EC2はawsが名付けたサービス名です。(eなんたら cなんたら 2!)


無料枠で作れるので、EC2でサーバーを作っちゃおう！
(※オプション 固定ip/ドメインとか　色々つけると料金がかかります。)
住んでいる土地・サーバーを建てたい土地　を右上から選んで

EC2を押したら完成！！！！！！

ではないので、
どうやったら　サーバーが作れるのか　解説していきます。


# 3.1 vpcを触ろう！
vpcはサーバーと接続する為の、サーバーのipとセキュリティーを設定している。
(みたいな感じでオールオッケー☺)

VPCを上のアドレスから検索しましょう
--写真添付--

・vpc
・サブネット
・ルートテーブル
・インターネットゲートウェイ
・セキュリティーグループ

を設定していきます。

# 4-EC2作成
EC2を作ります。
上記で作ったvpcを使って、EC2を構成します。



# 5-amazon linux ログイン

ターミナル等を使ってログイン
![amazon linux 1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3775234/945f211e-5ab8-22e3-08e1-c67f816f2e01.png)
【知識】MVCモデル

MVCモデルとは、プログラムを役割ごとにModel（モデル）・View（ビュー）・Controller（コントローラー）の3つに分けて管理するソフトウェア設計モデル

![MVC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864611/97b4d3bf-6930-5c40-cff5-aae582e7d7c0.png)
md形式画像リンクを一括取得(pwshの場合)

# フォルダー内にあるファイル一覧を取得する

次のコードの前半部分がそれを担当してます. `-Name` <- important!


# 後半で一覧を生成してます

Bing・・とかに教えてもらおうとすると、Markdownシンタックスで表現しているためか、こういうのは苦手みたいです。備忘録としてここに書かせてください。

```
Get-ChildItem *.jpg -Name | foreach-object {"![](./img/"+$_+")"}
```
ある日突然Github Copilotのサジェストが効かなくなる（2024/04/30時点で改善を確認）

近い将来解消されるかもしれないが、取り急ぎメモ。

## 現象
ESET製品がインストールされているPCにて、
Intellijを起動後、はじめの1回だけサジェストが効くが、「unable to verify first certificate」と表示されて以降はサジェストが効かなくなる。
（2024/04/18頃から発生）

<details><summary>例）発生時ログ</summary>

```
2024-04-18 19:09:02,248 [3921084] WARN - #copilot - [ghostText] Error on ghost text request: FetchError: The pending stream has been canceled (caused by: unable to verify the first certificate)
at fetch (C:\snapshot\copilot-client\node_modules@adobe\helix-fetch\src\fetch\index.js:99:11)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at cachingFetch (C:\snapshot\copilot-client\node_modules@adobe\helix-fetch\src\fetch\index.js:288:16)
at WJ.fetch (C:\snapshot\copilot-client\lib\src\network\helix.ts:78:22)
at oH.fetchWithParameters (C:\snapshot\copilot-client\lib\src\openai\fetch.ts:426:26)
at oH.fetchAndStreamCompletions (C:\snapshot\copilot-client\lib\src\openai\fetch.ts:321:26)
at genericGetCompletionsFromNetwork (C:\snapshot\copilot-client\lib\src\ghostText\ghostText.ts:143:21)
at getGhostText (C:\snapshot\copilot-client\lib\src\ghostText\ghostText.ts:692:23)
at getGhostTextWithAbortHandling (C:\snapshot\copilot-client\agent\src\methods\getCompletions.ts:302:16)
at handleGetCompletionsHelper (C:\snapshot\copilot-client\agent\src\methods\getCompletions.ts:154:33) {
type: 'system',
_name: 'FetchError',
code: 'ERR_HTTP2_STREAM_CANCEL',
errno: undefined,
erroredSysCall: undefined
}
```
</details>

## 環境
GitHub Copilot: 1.5.2.5345
IntelliJ: IntelliJ IDEA 2024.1 (Community Edition)
OS: Windows 10
ESET: ESET Endpoint Security 11.0.2044.1
※VSCodeでも同様に発生する情報あり。

## 回避策1
1. 下記リンクにある手順を実施して、NPM用の追加証明書を作成して環境変数に設定する
2. IDE再起動する

[参考手順リンク](https://github.com/the-last-byte/ESET-NPM-Breakage-Fix/issues/1#issuecomment-2075166058)

## 回避策2
1. ESETのSSL/TLSプロトコルフィルタリングをオフする
※ESETを触れるならこちらが楽。開発終わったらオンに戻す

## 備考
ESETのSSL/TLSプロトコルフィルタリングという機能に引っかかって起きている。
ESETの更新が来るまでしのぐしかなさそう。

【2024/04/30追記】
ESETの「インターネット保護機能」モジュールのバージョンが「1475.1」に更新されたため、2024/04/30現在で改善されたもよう。

## 参考URL
[Copilot Intellij - unable to verify the first certificate #120205](https://github.com/orgs/community/discussions/120205)
[SSL証明書情報がESETのルート証明書になってしまう対策](https://blog.future.ad.jp/ssl-info-eset)
lessに色を付ける

Linuxを使っていると，しばしばlessでソースコードの中身を確認します．しかし，lessでソースコードを見るとシンタックスハイライトの機能がないため読みにくいです．そこで，lessでシンタックスハイライトを有効にします（ソースコードに色がついてカラフルになります）．

## 手順

まず，source-hightをインストールします．
```
sudo apt install source-highlight
```
つぎに，zshを使っている人は.zshrc，bashを使っている人は.bashrcに次のコードを追加します．
```
export LESS="-R"
export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s"
```
以上でlessでシンタックスハイライトが有効になりました．
UbuntuにJavaをインストール

まず定番の
```
apt update
```
を行い最新状態にします。

その後、
```
apt-cache search openjdk
```
でJDKのパッケージを探し、結果である下の図から、(私の場合)
```
openjdk-11-dbg - Java runtime based on OpenJDK (debugging symbols)
openjdk-11-doc - OpenJDK Development Kit (JDK) documentation
openjdk-11-jdk - OpenJDK Development Kit (JDK)
openjdk-11-jdk-headless - OpenJDK Development Kit (JDK) (headless)
openjdk-11-jre - OpenJDK Java runtime, using Hotspot JIT
openjdk-11-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
openjdk-11-source - OpenJDK Development Kit (JDK) source files
jtreg - Regression Test Harness for the OpenJDK platform
jtreg6 - Regression Test Harness for the OpenJDK platform
libjax-maven-plugin - Using the xjc goal with OpenJDK 11+
openjdk-11-demo - Java runtime based on OpenJDK (demos and examples)
openjdk-11-jre-dcevm - Alternative VM for OpenJDK 11 with enhanced class redefinition
openjdk-11-jre-zero - Alternative JVM for OpenJDK, using Zero
openjdk-17-dbg - Java runtime based on OpenJDK (debugging symbols)
openjdk-17-demo - Java runtime based on OpenJDK (demos and examples)
openjdk-17-doc - OpenJDK Development Kit (JDK) documentation
openjdk-17-jdk - OpenJDK Development Kit (JDK)
openjdk-17-jdk-headless - OpenJDK Development Kit (JDK) (headless)
openjdk-17-jre - OpenJDK Java runtime, using Hotspot JIT
openjdk-17-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
openjdk-17-jre-zero - Alternative JVM for OpenJDK, using Zero
openjdk-17-source - OpenJDK Development Kit (JDK) source files
openjdk-18-dbg - Java runtime based on OpenJDK (debugging symbols)
openjdk-18-demo - Java runtime based on OpenJDK (demos and examples)
openjdk-18-doc - OpenJDK Development Kit (JDK) documentation
openjdk-18-jdk - OpenJDK Development Kit (JDK)
openjdk-18-jdk-headless - OpenJDK Development Kit (JDK) (headless)
openjdk-18-jre - OpenJDK Java runtime, using Hotspot JIT
openjdk-18-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
openjdk-18-jre-zero - Alternative JVM for OpenJDK, using Zero
openjdk-18-source - OpenJDK Development Kit (JDK) source files
openjdk-8-dbg - Java runtime based on OpenJDK (debugging symbols)
openjdk-8-demo - Java runtime based on OpenJDK (demos and examples)
openjdk-8-doc - OpenJDK Development Kit (JDK) documentation
openjdk-8-jdk - OpenJDK Development Kit (JDK)
openjdk-8-jdk-headless - OpenJDK Development Kit (JDK) (headless)
openjdk-8-jre - OpenJDK Java runtime, using Hotspot JIT
openjdk-8-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
openjdk-8-jre-zero - Alternative JVM for OpenJDK, using Zero/Shark
openjdk-8-source - OpenJDK Development Kit (JDK) source files
uwsgi-plugin-jvm-openjdk-11 - Java plugin for uWSGI (OpenJDK 11)
uwsgi-plugin-jwsgi-openjdk-11 - JWSGI plugin for uWSGI (OpenJDK 11)
uwsgi-plugin-ring-openjdk-11 - Closure/Ring plugin for uWSGI (OpenJDK 11)
uwsgi-plugin-servlet-openjdk-11 - JWSGI plugin for uWSGI (OpenJDK 11)
```
「Openjdk-(バージョン)-jdk」
の中で一番バージョンが新しいもの
私の環境では
```
openjdk-18-jdk
```
なので、
```
apt install openjdk-18-jdk
```
でインストールできます。



---
参考にしました!

https://qiita.com/studio_meowtoon/items/4d11e94a2389758759cd
私のreset.css(編集中)

後日記載します。

私のreset.css

・ios対応reset.css
``` 
:where([hidden]:not([hidden='until-found'])) {
	display: none !important;  /* hiddenは非表示を意味します */
}
 
:where(html) {
	-webkit-text-size-adjust: none; /* iOSのランドスケープでテキストが調整されないようにする */
	color-scheme: dark light; /* ユーザーがダークテーマを好む場合、自動的にダークテーマになる */
}
 
@supports not (min-block-size: 100dvb) {
	:where(html) {
		block-size: 100%;
	}
}
 
@media (prefers-reduced-motion: no-preference) {
	:where(html:focus-within) {
		scroll-behavior: smooth; /* 何かにフォーカスがある場合のみスムーズスクロール */
	}
}
 
:where(body) {
	block-size: 100%; /* サファリ以外のブラウザのフォールバック */
	block-size: 100dvb; /* 1dvbは動的ビューポートの長さの1%、100dvbで高さいっぱいに */
	line-height: 1.5; /* アクセシブルな行の高さ */
	font-family: system-ui, sans-serif; /* timeの代わりにシステムフォントを使用 */
	-webkit-font-smoothing: antialiased; /* テキストのレンダリングを改善 */
}
 
:where(input, button, textarea, select) {
	font: inherit; /* フォーム コントロールは親フォントを継承 */
	color: inherit; /* カラーも継承 */
}
 
:where(textarea) {
	resize: vertical; /* テキストエリアの水平リサイズを無効に */
	resize: block;
}
 
:where(button, label, select, summary, [role='button'], [role='option']) {
	cursor: pointer; /* インタラクティブなものにカーソルを合わせる */
}
 
:where(:disabled) {
	cursor: not-allowed; /* フォームコントロール無効時のカーソルを許可しない */
}
 
:where(label:has(> input:disabled), label:has(+ input:disabled)) {
	cursor: not-allowed; /* ラベルにもカーソルを許可しない */
}
 
:where(button) {
	border-style: solid; /* ボタンのボーダーのスタイルを設定しやすくする */
}
 
:where(a) {
	text-underline-offset: 0.2ex; /* 下線の上にスペースを追加する */
}
 
:where(ul, ol) {
	list-style: none; /* ビュレットを削除、必要に応じて手動で追加する */
}
 
:where(img, svg, video, canvas, audio, iframe, embed, object) {
	display: block; /* 置換された要素をより予測可能にする */
}
 
:where(img, picture, svg) {
	max-inline-size: 100%; /* images should never overflow past the available space */
	block-size: auto; /* アスペクト比を保持 */
}
 
:where(p, h1, h2, h3, h4, h5, h6) {
	overflow-wrap: break-word; /* 長い単語は改行 */
}
 
:where(h1, h2, h3) {
	line-height: calc(1em + 0.5rem); /* 見出しの行の高さを減らす */
}
 
:where(hr) { /* より一貫性のある、スタイリッシュなhr */
	border: none;
	border-block-start: 1px solid;
	color: inherit;
	block-size: 0;
	overflow: visible;
}
 
:where(:focus-visible) { /* より一貫性のある、カスタマイズ可能なフォーカスのアウトライン */
	outline: 2px solid var(--focus-color, Highlight);
	outline-offset: 2px;
}
 
 /* .visually-hiddenは後のカスケードレイヤーを上書きするために!importantを使用 */
:where(.visually-hidden:not(:focus, :active, :focus-within, .not-visually-hidden)) {
	clip-path: inset(50%) !important;
	height: 1px !important;
	width: 1px !important;
	overflow: hidden !important;
	position: absolute !important;
	white-space: nowrap !important;
	border: 0 !important;
}

 
```
Javaで「mainメソッドとは」の動作を確認してみた

# 概要

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

https://www.javadrive.jp/start/const/index3.html

# 実装

以下のファイルを作成しました。
```Hello.java
class Hello{
  public static void main(String[] args){
    System.out.println("Hello");
  }
}
```

以下のコマンドを実行しました。
```
$ javac Hello.java 
$ java Hello 
Hello
```

# まとめ

何かの役に立てばと。
【PHP】Cookie管理「設定・取得・削除」

あえてCookieにデータ保持しなきゃいけないシチュエーションってそんなに多くない気もしますが...。

強いて言うならこれくらいな気がします。
- ``HttpOnly``属性でセキュアにしたい
- データごとに保持期限を変えたい

そこで今回は、PHPでのCookieの設定・取得・削除についてまとめてみました。

PHP標準関数とSymfonyが用意しているComponentを利用した2パターン紹介します。

## Cookie設定
### PHP標準関数の場合
```php
setcookie(
  'cookie_name',   // Cookieの名前
  'cookie_value',  // Cookieの値
  time() + 3600,   // 有効期限（例：1時間後）
  '/',             // パス
  null,            // ドメイン
  false,           // セキュア
  true,            // HttpOnly
)
```

### HttpFoundationを使う場合
```php
use Symfony\Component\HttpFoundation\Cookie;

// Cookieを作成
$cookie = new Cookie(
  'cookie_name',   // Cookieの名前
  'cookie_value',  // Cookieの値
  time() + 3600,   // 有効期限（例：1時間後）
  '/',             // パス
  null,            // ドメイン
  false,           // セキュア
  true,            // HttpOnly
  false,           // Raw
  ''               // SameSite
);

// レスポンスオブジェクトにCookieを追加
$response->headers->setCookie($cookie);
$response->send();
```

## Cookie取得
### PHP標準関数の場合
```php
echo $_COOKIE['cookie_name'];
```
### HttpFoundationを使う場合
```php
use Symfony\Component\HttpFoundation\Request;

// リクエストからCookieを取得
$request = Request::createFromGlobals();
echo $request->cookies->get('cookie_name');
```

## Cookie削除
### PHP標準関数の場合
[PHP公式ページ](https://www.php.net/manual/ja/function.setcookie.php)に記載している内容です。
**必ず有効期限を過去に設定しないといけないんですね。**
> 例2 setcookie() による削除の例
> クッキーを削除する場合には、ブラウザの削除機構を起動するために 必ず有効期限を過去に設定する必要があります。 次に、先ほどの例で送信したクッキーを削除する例を示します。
> ```php
> <?php
> // 有効期限を一時間前に設定します
> setcookie("TestCookie", "", time() - 3600);
> setcookie("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
> ?>
> ```

### HttpFoundationを使う場合
> **必ず有効期限を過去に設定しないといけないんですね。**

こっちも同じかい...。
```php
$cookie = new Cookie('cookie_name', null, time() - 3600);
$response->headers->setCookie($cookie);
$response->send();
```

## まとめ
基本的にSessionやLocalStorage等で間に合う要件が多いかと思いますが、以下のシチュエーションではCookieを使う場面も出てきますよね。
- ``HttpOnly``属性でセキュアにしたい
- データごとに保持期限を変えたい

## ついで。
### Cookieにオブジェクトは格納できません。
仮にオブジェクトをCookie保持場合はJSON形式にしましょう。（またはSerialize）
```php
// 設定時
$data = json_encode($object);
$data = serialize($object);

// 取得時
$data = json_decode($object);
$data = unserialize($object);
```


## Http Foundation インストール
```bash
composer require symfony/http-foundation
```
https://symfony.com/doc/current/components/http_foundation.html

## 参考
https://qiita.com/rana_kualu/items/f9d87279036626278e61

https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies

https://www.php.net/manual/ja/features.cookies.php
標準出力やエラーを Docker コンテナのログに出力する

こんにちは。 今回は、アプリケーションの標準出力等を Docker コンテナのログに出力する方法をご紹介します。

# 標準出力や標準エラー出力をコンテナにリダイレクトさせる
Docker コンテナの中に `main.py` というファイルがあったとします。
ここでファイルを実行し、発生する標準出力を `/proc/1/fd/1` にリダイレクトさせます。
```bash
python main.py > /proc/1/fd/1
```
もし標準エラー出力も Docker コンテナのログに出力させたい場合は、以下のようにします。
```bash
python main.py > /proc/1/fd/1 2> /proc/1/fd/2
```

`/proc/1/fd/1` の `fd` は "file descriptors" を意味します。これはプロセスが開いているファイルを表すディレクトリです。
そして、 `fd` の後の `1` や `2` といった番号は「ファイルディスクリプタ番号」と呼ばれるもので、プロセスに関連づけられた入出力に付けられた番号です。
`/proc/[pid]/fd/` ディレクトリには、そのプロセスが開いている全てのファイルディスクリプタがリストされています。
通常、Unix系のシステムでは以下のようになります：
```
0: 標準入力
1: 標準出力
2: 標準エラー
```
したがって、 `/proc/1/fd/1` は PID 1 のプロセスの標準出力を、`/proc/1/fd/2` は標準エラーを表します。

もし標準エラー出力を標準出力と同じファイルにリダイレクトさせたい場合は、以下のようにします。
```bash
python main.py > /proc/1/fd/1 2>&1

or

python main.py &> /proc/1/fd/1

or

python main.py >& /proc/1/fd/1
```

# （補足） Docker コンテナのログの仕組み
`/proc/1/fd/1` は、コンテナ内の PID 1 のプロセス（通常はコンテナのメインプロセス）の標準出力を表します。
Docker は、コンテナ内のメインプロセスの標準出力と標準エラー出力をキャプチャし、それをコンテナのログとして出力しているようです。
よって、今回のように `/proc/1/fd/1` にリダイレクトされた標準出力や標準エラー出力は、 PID 1 のプロセスの標準出力としてキャプチャされ、コンテナのログに出力されるという仕組みです。
**ただし、この方法は Docker の特有の設定に基づいており、通常の Linux 環境や他のタイプのコンテナ技術では、`/proc/1/fd/1` が同じ方法で機能するとは限りません。**
例えば、一般的な Linux システムでは、`/proc/1/fd/1` はシステムの init プロセスに関連付けられており、このファイルディスクリプタを介して出力をリダイレクトすることは一般的ではありません。
そのため、この手法をDocker以外で適用する場合は、環境の特性を十分に理解し、適切な方法を選択する必要があります。


# まとめ
今回は、Docker コンテナのログへアプリケーションの標準出力等を出力する方法を紹介し、
- Docker コンテナは PID 1 のプロセスの標準エラー出力や標準エラー出力をキャプチャし、出力している
- アプリケーションの標準出力や標準エラー出力も PID 1 にリダイレクトさせることで、コンテナのログに出力させる

ということが分かりました。
この記事が役に立てば幸いです。

# 参考資料
- [bashで標準出力と標準エラー出力の一括リダイレクト](https://qiita.com/r_plus/items/41fb31285fb64fb4be85)
オリジナルの関数を透過画像で保存する

スライドを作っているときに関数形の模式図が欲しい…けどパワポの図形でなかなか作れない…といった時にpythonで図形を描画し、線だけを背景透過で保存する方法です。

関数形の部分に好きな関数を書けば動くようになっているはず。
## コード
```python
import matplotlib.pyplot as plt
import numpy as np

def function(x):
    ### 関数を記述
    gaus = np.exp(-x**2)
    periodic = np.cos(x/0.15)**2
    
    return gaus*periodic


# 必要に応じて軸を定義
x = np.linspace(-2,2,500)

plt,ax = plt.subplots()
ax.plot(x,function(x))

ax.axis("off")
fig.savefig("image.svg",transparent=True)
```
### 解説
#### 関数の定義
f(x)の形でもいいですし、f()で引数を取らずに目的の関数の配列を返すようにしても良いと思います。今回は`x = np.linspace(-2,2,500)` のところで調整をしたかったので引数を取る形にしました
#### 関数だけプロットする
`ax.axis("off")` で軸などを非表示にしています。
#### svg形式での保存
パワポで使うときに描画図形と同じように編集できるので便利です。
#### 背景透過
`transparent=True`
AWS　PollyのSSMLタグ使ってみた

## 概要
Pollyを遊びで使ったので、SSMLの概要について簡単にまとめてみる

## 基本的なSSMLタグの使い方
:::note warn
SSMLを使うにはAPIを呼び出すタイミングでSSML形式であることを指定する必要があります。
詳細は適当な公式記事を参照してください。
:::

SSMLタグを使う際は、まず`<speak>`タグで対象のテキストを囲む必要があります。これにより、音声合成エンジンがSSMLタグを認識できるようになります。

```xml
<speak>
  これは、SSMLタグを使った音声合成の例です。
</speak>
```

次に、`<break>`タグを使って適切な箇所に一時停止を挿入し、聞きやすさを向上させましょう。

```xml
<speak>
  私は、山田太郎です。<break time="500ms"/>東京都出身の25歳で、現在はシステムエンジニアとして働いています。
</speak>
```

また、`<p>`タグと`
`タグを使って段落や文章間の切れ目を作ることで、より理解しやすい音声を生成できます。

```xml
<speak>
  <p>
    
今日は、音声合成について話します。

    
音声合成とは、テキストから人工的な音声を生成する技術です。

  </p>
  <p>
    
近年、AIの発展により、より自然な音声合成が可能になりました。

    
特に、ニューラル音声は従来の音声合成と比べて、感情豊かな音声を生成できます。

  </p>
</speak>
```

## 発音制御のためのSSMLタグ
`<phoneme>`タグを使って発音記号 (IPA, X-SAMPA) を指定することで、特定の単語の発音を制御できます。

```xml
<speak>
  私の名前は、<phoneme alphabet="ipa" ph="takasi">たかし</phoneme>です。
</speak>
```
:::note warn
実際にやってみると分かるのですが、これは「てぃけし」と読みます、、
意外とうまくいかないいこともあるので注意が必要なようです
:::

`<sub>`タグを使って頭字語や略語の発音を指定し、誤読を防ぐこともできます。

```xml
<speak>
  <sub alias="ワールドワイドウェブ">WWW</sub>は、インターネット上の情報を共有するシステムです。
</speak>
```

さらに、`<w>`タグで単語の品詞を指定することで、文脈に合った発音を実現できます。

```xml
<speak>
  <w role="amazon:VB">read</w>は動詞で、本を読むという意味です。
  一方、<w role="amazon:NN">read</w>は名詞で、読むこと自体を表します。
</speak>
```

## 表現力を高めるためのSSMLタグ
`<prosody>`タグを使って音量と話速を調整し、抑揚をつけることで、より表現力豊かな音声を生成できます。

```xml
<speak>
  <prosody volume="loud" rate="slow">この部分は、ゆっくりと大きな声で読み上げられます。</prosody>
  <prosody volume="soft" rate="fast">この部分は、小さな声で速く読み上げられます。</prosody>
</speak>
```

また、`<amazon:effect name="drc">`タグでダイナミックレンジ圧縮を施すことで、聞き取りやすさを改善できます。

```xml
<speak>
  <amazon:effect name="drc">
    この部分は、ダイナミックレンジ圧縮が適用され、聞き取りやすくなります。
  </amazon:effect>
</speak>
```

## より高度なSSMLタグの活用
`<lang>`タグを使って外国語の発音を指定することで、より自然な発音を実現できます。

```xml
<speak>
  私は、<lang xml:lang="en-US">Hello</lang>と言って、彼女に挨拶しました。
</speak>
```

`<say-as>`タグを使って数字や単位、日時などの発音方法を指定することもできます。

```xml
<speak>
  今日は、<say-as interpret-as="date" format="ymd">2023-04-26</say-as>です。
</speak>
```

さらに、`<mark>`タグでカスタムタグを埋め込むことで、音声合成のメタデータを活用できます。

```xml
<speak>
  これは、<mark name="example"/>SSMLタグの使用例です。
</speak>
```

## まとめ
簡単にやってみましたが、
```xml
<speak>
  私の名前は、<phoneme alphabet="ipa" ph="takasi">たかし</phoneme>です。
</speak>
```
が曲者でしたね、、、
アルファベットで指定するとむしろ読み方がうまくいかないとは、、

とはいえ音声合成をいじれて楽しいのでもう少し遊んでみようと思います

## 参考サイト
https://docs.aws.amazon.com/ja_jp/polly/latest/dg/supportedtags.html#prosody-tag
Windows 11 のスタート メニューの広告を止めるレジストリ設定

# これは何？
Windows 11 のスタートメニューで広告が入るようになったようですがそれを非表示とするレジストリ設定です。

# 特定方法
Process Monitor でレジストリを特定するだけでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48302/86e25d37-e55a-10d6-9ebd-27d3865a5031.png)

# というわけで
Key : HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced

Start_IrisRecommendations (DWORD)
 0 : 無効
 1 : 有効

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48302/6983cdf0-dde7-a9a9-63ef-3c8a3cba53f8.png)

これで無効化されるはずです。

 # 補足
GUI で制御したいならこちら。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48302/ef624dc3-0183-1fc4-0710-0e41d390a9e2.png)
【Rails】画像のExif情報を削除する方法【ActiveStorage】

`config/application.rb`の`config.active_storage.variant_processor`が`:vips`に設定されている場合には、`saver: { strip: true }`を記述すると画像のExif情報を削除できます。

```rb:app/models/user.rb
class User < ApplicationRecord
  has_one_attached :avatar do |attachable|
    attachable.variant :large, resize_to_fill: [256, 256], saver: { strip: true }
    attachable.variant :medium, resize_to_fill: [128, 128], saver: { strip: true }
    attachable.variant :small, resize_to_fill: [64, 64], saver: { strip: true }
  end
  
 # ...
end

```
《プログラミングの基礎》をReScriptで読む 第6章-第7章

[《プログラミングの基礎》](https://www.amazon.co.jp/dp/4781911609/ "Amazonへのリンク")はとても良い本です。
サンプルプログラムをReScriptで書いて、プログラミングの基礎とReScriptを学びます。
# 環境
* macOS Sonoma(バージョン 14.4.1)
* ReScript 11.1.0-rc.8
* @rescript/core 1.2.0
# 第6章
エラーの説明だけです。
# 第7章
組が紹介されます。タプルと呼ぶ方が一般的な気がします。
```OCaml:OCaml
match 式 with
　　パターン -> 式
```
```ReScript:ReScript
switch 式 {
| パターン => 式
｝
```
OCamlの`match`は、ReScriptの`switch`になります。
```ReScript:Ex07_1.res
// 目的：５教科の点数の合計点と平均点を組にして返す
// goukei_to_heikin : int -> int -> int -> int -> int -> int * int
let goukei_to_heikin = (kokugo, suugaku, eigo, rika, shakai) =>
  (kokugo + suugaku + eigo + rika + shakai,
    (kokugo + suugaku + eigo + rika + shakai) / 5)

// テスト
Console.log(goukei_to_heikin(80, 100, 90, 85, 75) == (430, 86))
Console.log(goukei_to_heikin(90, 70, 95, 65, 90) == (410, 82))
Console.log(goukei_to_heikin(60, 50, 70, 55, 65) == (300, 60))
```
```ReScript:Ex07_2.res
// 目的：名前と成績の組を受け取ったら、その評価文を返す
// seiseki : string * string -> string
let seiseki = (pair) => switch pair {
| (namae, seiseki0) => namae ++ "さんの成績は " ++ seiseki0 ++ " です。"
}

//テスト
Console.log(seiseki(("浅井", "C")) == "浅井さんの成績は C です。")
Console.log(seiseki(("中村", "A")) == "中村さんの成績は A です。")
Console.log(seiseki(("出原", "B")) == "出原さんの成績は B です。")
```
```ReScript:Ex07_3.res
// 目的：組で表された平面座標を受け取ったら x 軸に対称な点の座標を返す
// taisho_x : float * float -> float * float
let taisho_x = (point) => switch point { 
| (x, y) => (x, -. y) 
}
 
// テスト
Console.log(taisho_x((0.0, 0.0)) == (0.0, 0.0))
Console.log(taisho_x((2.3, 5.1)) == (2.3, -5.1)) 
Console.log(taisho_x((-3.8, -2.4)) == (-3.8, 2.4))
```
```ReScript:Ex07_4.res
// 目的：組で表された平面座標をふたつ受け取ったら、その中点の座標を返す
// chuten : float * float -> float * float -> float * float
let chuten = (point1, point2) => switch point1 { 
| (x1, y1) => switch point2 { 
	|	(x2, y2) => ((x1 +. x2) /. 2.0, (y1 +. y2) /. 2.0) 
  }
}

// テスト
Console.log(chuten((0.0, 0.0), (1.0, 2.0)) == (0.5, 1.0))
Console.log(chuten((2.3, 5.1), (7.6, 1.7))/* == (4.95, 3.4) */)
Console.log(chuten((-3.8, -2.4), (3.4, -1.2))/* == (-0.2, -1.8) */)
```
GtkLabelの座標からテキスト位置を取得

[github](https://github.com/katsuko0303/gtk-examples/tree/main/example15)に、C言語も含めたソースコードをあげてあります。
よろしかったら、そちらもご覧ください。

----

`GtkLabel`の座標(例えば、マウスでクリックした位置)から、そこに書かれているテキストを抜き出すサンプルです。

```python
# coding: utf-8

import sys, os
import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk, Pango, GObject

#----------------------------------------------------------------------
#	window

@Gtk.Template(filename=os.path.join(os.path.dirname(__file__), 'window.ui'))
class Window(Gtk.Window):
	__gtype_name__ = 'MyWindow'

	@GObject.Property(type=GObject.TYPE_STRING)
	def result(self):
		return self._result if hasattr(self, '_result') else ''
	@result.setter
	def result(self, value):
		self._result = value

	@Gtk.Template.Callback('on_released')
	def _on_released(self, gesture, n_press, x, y):
		label = gesture.get_widget()
		layout = label.get_layout()
		lx, ly = label.get_layout_offsets()
		inside, index, trailing = layout.xy_to_index(Pango.SCALE * (x - lx), Pango.SCALE * (y - ly))
		if inside:
			self.result = f'{index}: {repr(layout.get_text().encode("utf-8")[index:].decode("utf-8"))}'
		else:
			self.result = '(clicked outside)'

#----------------------------------------------------------------------
#	main

def on_activate(app):
	window = Window(application=app)
	window.set_visible(True)

if __name__ == '__main__':
	app = Gtk.Application()
	app.connect('activate', on_activate)
	sys.exit(app.run(sys.argv))

```

まぁわかれば大した話ではありませんが、

1. `gtk_label_get_layout`メソッドで、Pangoレイアウトを取得
2. `gtk_label_get_layout_offsets`メソッドで、ウィジェット内のレイアウトの描画位置を取得
3. `pango_layout_xy_to_index`メソッドで、レイアウト内の座標から文字のインデックスを取得

という手順なんですが、注意する点としては以下の点です。

* マークアップを使っている場合は、`GtkLable::label`プロパティは属性を含んだテキストなので使わない。
* レイアウトの位置を考慮する。(2.の話)
* Pangoでの座標は`PANGO_SCALE`を単位とする。
* `pango_layout_xy_to_index`で取得する文字位置は**byte-index**なので、Pythonの場合はいったんUTF-8に変換する。

## おまけ: GtkLabel::attributes

`GtkLabel::attributes`プロパティは、ラベルの文字属性を指定するプロパティ、というのはなんとなくわかるのですが、[マニュアル](https://docs.gtk.org/gtk4/property.Label.attributes.html)にはほとんど説明がなくて、どうやって指定するんだ？と思っていたのだけど、どうやら[`pango_attr_list_to_string`](https://docs.gtk.org/Pango/method.AttrList.to_string.html)メソッドの説明に書かれているように指定するらしいです。

```xml
					<object class="GtkLabel">
						<property name="attributes">0 -1 size 24576, 0 -1 weight bold</property>
						<property name="label" bind-source="MyWindow" bind-property="result" />
					</object>
```

属性を複数指定する場合には、「`,`」で区切ります。

一つの属性は、「&lt;文字開始位置&gt; &lt;文字終了位置&gt; &lt;属性タイプ名&gt; &lt;属性値&gt;」というように指定します。
文字終了位置は、「-1」を指定すると、文字の終わりを意味します。
属性タイプ名は、`PangoAttrType`列挙型のnick_nameを指定します。

で、最後に引っかかったのは文字のサイズである「size」属性の指定の仕方。
いろいろとやってもエラーになるのだけど、どうやら「xx-large」とか「120%」などの指定はできず、Pangoの単位での値(上の例である「`24576`」は「`24 * PANGO_SCALE`」の値です)でなければいけないようです。
個人開発記録　2024/04/25

# 目的

* とにかくやりきることが一番の目的
* 毎日発信することで、発信する習慣作り
* 個人開発をやりきることで、実績作り


# 開発するもの

X(旧Twitter)のパクリ

# 構成

* バックエンド
    * python
    * django REST framework
* DB
    * postgreSQL
* フロントエンド
    * React

# 本編

会員登録画面を作成する予定だったが、TypeScriptで作成することにしたのでそれの導入をしていく。
ことにしたが、`bulletproof-react`で作っていくにあたってろくに調査せずやったので、インストール関連がわけわからんくなった。。

https://github.com/alan2207/bulletproof-react

# 感想
2時間くらいかけて、reactプロジェクトを作り直し`bulletproof-react`をコピペして動かそうとしたが失敗。
そもそもnodeとかreactのことわかってない素人がもりもりでやろうとしすぎた。。
`bulletproof-react`はあきらめて簡単にかつ、素早くできるやり方でやることとする。
とにかくやりきる。