OmniAICreator/Qiita-1.07M huggingface dataset:
akippaの予約CSVからGoogleカレンダーに転記するLambda関数 #1

バックオフィスが生成AIでがんばるシリーズですが、今回はプライベートで利用しているサービスの自動化についてやっていきます。
# やりたいこと
[akippa（アキッパ）](https://www.akippa.com/)の駐車場予約情報CSVをオーナーサイトからダウンロードして予約情報をGoogleカレンダーに転記します。

# 方針
以下の処理を行うAWSのLambda関数を作成して実現させます。
1. akippaのオーナーサイトにログインします
1. 予約一覧のページにあるCSVダウンロードのリンクから予約一覧CSVをダウンロードします
1. CSVから1行ごとの予約情報をパースして、Googleカレンダーに Google calendar API を使用して転記します

なおコードをクリーンにするため、akippaオーナーサイトのログイン情報（ID/Pass）及びGoogleカレンダーIDやAPIのトークン（JSON）はLambda関数の環境変数に保存します。
今回コードはChatGPT 4o に作成させ、テストしながらデバッグしていきました。
# Googleカレンダーの準備
まずは、新しいカレンダーを作成します。設定画面の下のほう「カレンダーの統合」にあるカレンダーIDを取得して控えます。
# Google Calendar API の準備
1. [GCP](https://console.cloud.google.com/)にログインして、新しいプロジェクトを作成します。プロジェクト名は任意のものを使用してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840360/fbc7b3a5-71d9-3d54-100f-7d19b745c252.png)

1. 「APIとサービス」から「+APIとサービスを有効にする」をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840360/1e0f83f6-506a-045e-f1ca-6496170dff53.png)
1. "calendar"等で検索してGoogle Calendar APIを探し、有効にします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840360/86b974fc-33bc-39a7-7760-01915ab01734.png)
1. 「IAMと管理」から「サービスアカウント」を選択し、新しいサービスアカウントを作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840360/ee334fe8-917f-c389-4358-b9f56500d6ec.png)
1. サービスアカウント名は任意のものを設定し、メールアドレスをコピーして控え、完了ボタンを押します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840360/323cf15b-22bf-1a84-b378-29ffe6f1cc27.png)
1. 作成したサービスアカウントの右端の「操作」から「鍵を管理」を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840360/8b420e0a-a6d7-96e6-5cbb-341cbda652c2.png)
1. 「鍵を追加」から「鍵を作成」を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840360/b8754092-0bfd-3dfe-102a-ca2f4e7d7bf8.png)
1. 秘密鍵の作成で、JSONを選択して作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840360/f79cce0f-e920-9fcf-b131-aa0fd15af67e.png)
1. すると自動的にJSON形式の鍵がダウンロードされますので、安全に保管します
1. これでGoogle Calendar API の準備は完了です。カレンダーIDとJSONの内容を後で使用しますので控えておきましょう
# Lambda関数の準備
1. AWSコンソールよりLambda関数を作成します。「関数を作成」ボタンから作成してください
1. 今回はpythonで作成します。「一から作成」を選択し、関数名は任意のもので、ランタイムは Python を選択します。右下の「関数の作成」を押下してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840360/9f4f0906-2abc-ff1f-7ef3-a849f4cb3cc6.png)
関数が作成できたら、環境変数を設定します。
# Lamda関数の環境変数の設定
先ほど作成した関数を表示し、設定タブの中の「環境変数」から環境変数を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840360/a58d3295-2609-2106-c263-1e19cf8d11e6.png)
具体的には下記の環境変数を追加し、値のほうに適切な値を設定します。
* GOOGLE_APPLICATION_CREDENTIALS_JSON
    ⇒　GCPからダウンロードしたJSONファイルを開いて中身をコピペ
* calendar_id
    ⇒　作成した Google Calender の カレンダーID
* username
    ⇒　akippaのユーザーネーム（ID)
* pass
    ⇒　akippaのパスワード

ここまで出来たらChatGPTに生成してもらったコードを貼り付けていきますが、今回はここまで。
# まとめ
今回はGoogleカレンダーAPIの準備を行いました。
次回はLambda関数を作成し、実際にakippaとのサイトからCSVをダウンロードして転記する処理に進みたいと思います。
Chrome内蔵AIの成果！ブラウザ内蔵人工知能「Gemini」を試す

人工知能の発展が日進月歩で進む中、多くのテクノロジー企業がAI技術を日常的な製品に組み込み、ユーザーに対してスマートなサービスを提供する方法を模索しています。最近、Googleは開発者版のChromeブラウザに人工知能モデル「Gemini Nano」を内蔵し、ブラウザ本体にAIを搭載するという先駆的な試みを実現しました。

ここでは、私の試用経験を基に、ブラウザ内蔵AIウェブページ「ChromeAI」の使用体験について紹介します：

簡単な動作環境：ChromeAIはブラウザ内で直接動作し、追加のプラグインやソフトウェアは不要です。https://chromeai.org のサイトを開くだけで、Geminiとの対話を開始できます。非常に便利です。

親しみやすいインターフェース：チャット形式でテキストを入力することで、AIモデルと本当の意味での「対話」が可能です。インタラクティブで自然な感覚を提供します。

迅速な応答速度：私の簡単なテストでは、Gemini Nanoは200〜300ms程度の高速なフィードバックを実現し、スムーズな対話体験を提供してくれました。

多岐にわたる内容のカバー：簡単な質問応答から、意味の理解、即時の反応まで幅広く対応し、日常使用に十分な表現力を持っています。将来的には、さらに多くの応用シナリオと機能のサポートが期待されます。

個人情報の保護：ChromeAIは完全にローカルで動作し、ユーザーデータを一切アップロードしません。実行効率を確保しつつ、安全性と信頼性も兼ね備えています。

総じて、ブラウザ内蔵AIは非常に期待できる方向性です。より多くの人々がAIを体験し活用する手助けとなり、AIがより広範囲にわたって生活に浸透することを促進するでしょう。この技術によるスマートなアプリケーションは、きっと誰もが知る製品となるでしょう。

サイトのアドレス：https://chromeai.org
GitHubのアドレス：https://github.com/debugtheworldbot/chromegemini
Podman(Docker)コンテナのRockyLinux日本語環境構築

## PodmanでOSイメージの取得
```
podman pull rockylinux:9
```

## イメージからコンテナの起動
```
podman run --name=Template -ti docker.io/library/rockylinux:9 /bin/bash
```

## 各種パッケージのインストール
```
dnf install systemd
dnf install langpacks-ja
dnf install glibc-langpack-ja
dnf install NetworkManager
dnf install zip unzip
dnf install wget
dnf install cronie
```

## コンテナを抜けて、イメージを作成、/sbin/initで起動を行う
```
podman commit <コンテナ名 or コンテナID> <イメージ名>
podman rm <コンテナ名 or コンテナID>
podman run --name=Template -tid <イメージ名 or イメージID> /sbin/init
```

## 日本語設定
```
localectl set-locale LANG=ja_JP.UTF-8
timedatectl set-timezone Asia/Tokyo
```
上場とは【就活生必見】

## はじめに
　就活をしている方は企業を調べる時，よく**上場**という言葉を目にすることがあると思いますが，ほとんどの方は上場についてよく知らないと思います．私自身もこの記事を書くまでは「上場している企業は業績が良い企業」というイメージくらいしかありませんでした．この記事では上場について解説します．上場について理解するとともに，企業への理解もさらに深めていただきたいです．

## 上場とは
　**上場**とは，企業が発行する株式を証券取引所で売買できるように，証券取引所が資格を与えることで，上場企業はこの資格を得た企業を指します．

### 株式とは
　**株式**がわからない方は，株式会社の仕組みから理解する必要があります．この記事では深く解説しませんが，簡潔にまとめると以下のようになります．

・株式とは出資してくれた人に発行する証券
・株式会社とは株式を通して資金を集めて経営を行う会社

### 証券取引所とは
　日本には東京・名古屋・福岡・札幌の4つの証券取引所があります．中でも東京証券取引所(通称：東証)が日本で最も大きな証券取引所となっています．東証の株式市場は`プライム市場`・`スタンダード市場`・`グロース市場`の3つの区分があります．日本取引所グループによると，それぞれの区分についてのコンセプトは以下のようになっています．
#### プライム市場
>多くの機関投資家の投資対象になりうる規模の時価総額（流動性）を持ち、より高いガバナンス水準を備え、投資者との建設的な対話を中心に据えて持続的な成長と中長期的な企業価値の向上にコミットする企業向けの市場
#### スタンダード市場
>公開された市場における投資対象として一定の時価総額（流動性）を持ち、上場企業としての基本的なガバナンス水準を備えつつ、持続的な成長と中長期的な企業価値の向上にコミットする企業向けの市場
#### グロース市場
>高い成長可能性を実現するための事業計画及びその進捗の適時・適切な開示が行われ一定の市場評価が得られる一方、事業実績の観点から相対的にリスクが高い企業向けの市場

このコンセプトに従って，具体的な基準が設けられています．区分を簡単にまとめると以下のようになります．

||プライム|スタンダード|グロース|
|:-:|:-:|:-:|:-:|
|**概要**|国内外の投資家から高い評価を受ける企業|十分な流動性が維持されている企業|高い成長性を有するベンチャー企業|
|**規模**|大|中|小|
|**数**|1,644|1,604|589|

### 上場の凄さ
　上場はどの企業でもできるわけではありません．証券取引所による厳格な審査をパスした企業だけが上場できます．日本における上場企業の数は，3950社で，日本にある株式会社のうちの0.2%程です．また，プライム市場には1644社，スタンダード市場には1604社，グロース市場には589社の会社が上場しています．このデータから，上場がどれだけすごいことかおわかりいただけたと思います．

## 上場によるメリット
### 1. 資金調達が容易になる
上場すると，証券会社を通して全世界の投資家たちが株式を購入できるようになります．
### 2. 社会的信用を得られる
上場すると，知名度が上がるため，信用を得やすくなります．その結果，上場企業には多くの就活生が集まります．
### 3. 会社の価値を把握しやすい
上場すると，株価を参考にして会社の価値を把握することができます．

## 上場によるデメリット
### 1. 社会的責任を伴う
上場企業は多くの人の注目を集めるため，何か問題を起こせばただ事では済みません．また，投資家に向けて様々な企業情報を一般に公開しなければなりません．会社規模が大きくなり，経営の自由度が低くなりやすいです．
### 3. 株式を買い占められる可能性がある
株式会社では，より多くの株式を保有する人に経営権があります．株式を小数の人に買い占められてしまうと，会社を支配されてしまうこともあります．
### 3. コストがかかる
上場するには，多くの手続きが必要であり，多額の費用がかかります．また，上場後も毎年証券会社に費用を支払う必要があります．


## おわりに
　上場について少しでも理解していただけましたら幸いです．気になっている企業が上場しているか，していたらどこの市場に上場しているのかを調べてみると企業の理解も深まると思います．また，上場企業のホームページには株主向けに作成した**IR資料**が掲載されています．このIR資料にはその企業に関することがわかりやすくまとまっているので必見です．
就活大変ですが頑張りましょう！！

## 参考文献

https://www.jpx.co.jp/tse-school/learn/03a.html

https://www.freee.co.jp/kb/kb-ipo/listing/

https://www.jpx.co.jp/listing/co/index.html

:::note warn
記事内のデータ及び文献は2024/07/26に閲覧したものを参考にしております．
:::
Streamlitでtailwindcssを使う

お久しぶりです。
# やりたいこと
streamlit上にある程度スタイルされたhtmlを表示したい！
`st.html()`ではJavascriptが効かないため、スタイルが当たらず悩んでいた。

以下の記事を参考にしたらちゃんとスタイルが効いた！！
感動したので記事を残しておく。

https://qiita.com/Nate0928/items/4d8b9abef3e520293a4a

# 実装
今回は、TailwindをCDNで読み込みます。
```html:templates/top.html
<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://cdn.tailwindcss.com"></script>
    </head>
    <body>
        <h1 class="bg-gradient-to-r from-blue-600 via-green-500 to-indigo-400 text-3xl font-bold text-white">
            Hello world!
        </h1>
    </body>
</html>
```

```py:main.py
import streamlit as st
import streamlit.components.v1 as stc

with open("templates/top.html", "r", encoding="utf-8") as file:
    top_html = file.read()
stc.html(top_html)
```

ちゃんと表示されたあああ！嬉しいので虹色にしちゃう。:rainbow:

![スクリーンショット 2024-07-29 15.55.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416489/1c5bcff2-a55d-6d2f-6a8c-d07f88023123.png)

# 紆余曲折
最初は、`st.html()`でやろうと思ってたのだけど、公式にある通り、JavaScriptを実行できないので、スタイルが当たらなかった。
> st.html content is not iframed. Executing JavaScript is not supported at this time.


https://docs.streamlit.io/develop/api-reference/utilities/st.html


## `components.html()`とは？

+ HTMLコードを文字列で渡すと、iframe内にHTMLとして表示
+  CSSやJavaScriptも含めて、好きなようにHTMLをカスタマイズ可能
+  `st.text`や`st.markdown`では難しかった複雑なレイアウトが可能！
+  コンポーネントのサイズもピクセル単位で指定できる
+  iframeのスクロールも`scrolling`パラメータで制御できる

上の例では、他ファイルからHTMLを読み込んだけど、最低限は以下
```py
# カスタムHTMLコンテンツ
html_content = """
<div style="background-color: #f0f0f0; padding: 20px; border-radius: 10px;">
    <button onclick="alert('ボタンがクリックされました！')">クリックしてください</button>
    <h2 style="color: #333;">カスタムHTMLコンポーネント</h2>
</div>
"""

# HTMLコンテンツの表示
stc.html(html_content, width=400, height=200)
```

ちゃんとJavascriptが効いてる〜:beers:

![スクリーンショット 2024-07-29 16.09.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416489/322c4dd5-2681-8ff0-68b6-9785db4478ed.png)
# まとめ
単純にHTMLを表示するだけなら`st.html`でいいけど、スタイル効かせたいときはいいね！
wordpress 新規投稿ができない

# ワードプレスの新規投稿ができない(こまる)
書き換えはできる。複製もできる。ファイルをアップロードすると名無しのファイルができる。（FTPにはアップロードされている）
新規投稿をしようとすると
```
Warning: Attempt to read property "post_type" on null in hogehoge/wp-includes/post.php on line 7502
Warning: Attempt to read property "ID" on null in hogehoge/wp-includes/post.php on line 7507
Warning: Attempt to read property "ID" on null in hogehoge/wp-includes/post.php on line 5448
Fatal error: Uncaught Error: Attempt to assign property "post_content" on null in hogehoge/wp-admin/includes/post.php:795 Stack trace: #0 hogehoge/wp-admin/post-new.php(66): get_default_post_to_edit() #1 {main} thrown in hogehoge/wp-admin/includes/post.php on line 795
```
みたいな感じで、いろいろとnullになっている旨のエラーがでる。
だって新規投稿なんだもん…nullじゃないの…？
## 原因を探る
ファイルはFTPにアップされていることから、データベースでうまくIDやpostが追加されていないんじゃないかと考えphpMyAdminをチェック。
wp_postsにIDやらなんやらがすべて空のレコードを確認。
エラーが発生するまでのwp_postsには順番にIDがふられているので、順番にIDを振ってあげれば解決しそう？

## 解決する
データベースのバックアップを取って、wp_postsを修正します。
下記のSQLクエリを実行しました。

```
ALTER TABLE `wp(接頭辞)_posts`
MODIFY `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`ID`);
```

:::note warn
今回はこれで直りましたが、[うまくいかなかった方](https://teratail.com/questions/s1ech480xs0ilz)もいるみたいです。この方はテーブルを差し替えて解決したそうです。
:::

データベースを少し編集した際に発生したエラーですが、変更前のバックアップを戻してもエラーが解消されませんでした。
IAM Roles for Service Accountsの認証情報をCamel Spring-bootで利用する方法

## 概要
Spring Boot 環境において、AWS IAM Roles and Service Account (IRSA) を使用した認証情報で、s3やsqs などのAWS リソースにアクセスするのに、情報が少なかったので記載しておきます。

## 前提
必要なIAM ロールや、ポリシー、OIDCプロバイダの設定、k8s ServiceAccount リソースはすでに作成済みの前提で、Spring Boot 環境で実装する部分についてのみ記載します。  
必要な IAM ロール、 ServiceAccount が設定され、Deployment と紐づけられた場合、Pod 内の環境変数として、AWS_ROLE_ARN, AWS_WEB_IDENTITY_TOKEN_FILE の環境変数が設定されます。
[参考](#参考) からの更新部分になりますので、アーキテクチャについては参照元をご確認ください。

## pom.xml
WebIdentityTokenFileCredentialsProvider プロバイダを使用する場合は、AWS STS モジュールも必要となります。
※ STS モジュールの依存関係が設定されていない場合、「WebIdentityTokenCredentialsProvider(): To use web identity tokens, the 'sts' service module must be on the class path.」というエラーがpod のログに表示されます。

```XML:pom.xml
<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-aws2-s3-starter</artifactId>
    <version>${camel.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-aws2-sqs-starter</artifactId>
    <version>${camel.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-aws2-sts-starter</artifactId>
    <version>${camel.version}</version>
</dependency>

```

## application.properties
2024/7/27 現在、デフォルトの認証プロバイダチェーンに WebIdentityTokenFileCredentialsProvider が[含まれています](https://github.com/aws/aws-sdk-java-v2/blob/353e45af31e99c5f7004a24a4ed5c98fbafcc3c7/core/auth/src/main/java/software/amazon/awssdk/auth/credentials/DefaultCredentialsProvider.java#L96)ので、useDefaultCredentialsProvider を true に設定します。  
  > DefaultCredentialsProvider では、system, environment, WebIdentity の順に認証チェーンをたどります。 WebIedntityTokenFileCredentialsProvider では、環境変数 AWS_ROLE_ARN および AWS_WEB_IDENTITY_TOKEN_FILE が存在する場合、AWS_WEB_IDENTITY_TOKEN_FILE で指定されたフルパスのディスク上のトークンを使用して、AWS_ROLE_ARN で指定されたロールの引き受けを試みます。環境変数が使用された場合、プロバイダーは AWS_ROLE_SESSION_NAME 環境変数からセッションの設定を試みます。

ここでは、-starter バージョンを使用しているので、自動構成用のオプションを使用していますが、pom.xml でaws2-s3/aws2-sqs コンポーネントを使用している場合は、useDefaultCredentialsProviderで設定します。 （ [参考 5](#参考) , [参考 6](#参考) ） 


```application.properties
camel.component.aws2-s3.use-default-credentials-provider=true
camel.component.aws2-sqs.use-default-credentials-provider=true
```

## 参考
1. [【SpringBoot】AmazonS3にファイルをアップロード&ダウンロードする方法](https://qiita.com/tamorieeeen/items/051eb30f278e03f4ceff)
1. [IAM Roles for Service Accountsの認証情報をAWS SDKで利用する方法](https://qiita.com/toro_ponz/items/15723cd72a260e401a48)
1. [Kubernetes サービスアカウントに対するきめ細やかな IAM ロール割り当ての紹介](https://aws.amazon.com/jp/blogs/news/introducing-fine-grained-iam-roles-service-accounts/)
1. [詳解: IAM Roles for Service Accounts](https://aws.amazon.com/jp/about-aws/whats-new/2019/09/amazon-eks-adds-support-to-assign-iam-permissions-to-kubernetes-service-accounts/)
1. [AWS S3 Storage Service](https://www.angusyoung.org/arquivos/camel-new-website/public/components/next/aws2-s3-component.html)
1. [AWS Simple Queue Service (SQS)](https://www.angusyoung.org/arquivos/camel-new-website/public/components/next/aws2-sqs-component.html)
CiscoSWのファームウェア更新方法

# 2960Xのファームウェア更新をやってみた

1. PCのIPを192.168.0.200に設定
1. SWのIPを192.168.0.201
    ```cmd
    sw#conf t
    sw(conf)#int vlan 1
    sw(conf-if)#ip address 192.168.0.２ 255.255.255.0
    ```
1. TFTPDの起動
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609333/49da406d-a462-6169-5f08-6b2d625da2a2.png)

1.CurrentDirをc2960x-universalk9-tar.152-7.E9.tarの置いてあるディレクトリに設定
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609333/db18452d-a4da-c49b-0a7a-64e535dd0a6d.png)

1. SWからこの↑ファイルを指定してあげる
    ```cmd
    #archive download-sw /overwrite tftp://192.168.0.200/c2960x-universalk9-tar.152-7.E9.tar
    ```

1. ダウンロード終わったらreload→別に保存しないでOK

## 上手く行かない時は・・・
* sw側からpingが通るか確認してね
* LANケーブルはつながっているか
Flutterビルド時に突然`Framework 'Pods_Runner' not found`でビルドできなくなった時の対処法

# 問題
FlutterアプリをiOSで起動させようとした時、以下のエラーがXcodeで表示されたビルドができなくなってしまった
```
Framework 'Pods_Runner' not found
```

# 試したこと

**flutter clean**
```shell
flutter clean
```

**Podfile.lock削除 -> pod install**

```shell
cd ios
rm -f Podfile.lock && pod install
```

**Xcodeのキャッシュを消す**
```shell
rm -rf ~/Library/Caches/com.apple.dt.Xcode/
```

**Xcodeの中間生成物を消す**
```shell
rm -rf ~/Library/Developer/Xcode/DerivedData/
```

=> 効果なし

# 解決方法
0. Podfileの内容をコピーしておく
1. `ios/Podfile`を削除
    ```shell
    cd ios && rm -f Podfile
    ```

2. flutter clean と pub getを実行
    ```shell
    flutter clean && flutter pub get
    ```

3. Podfileにコピーした内容を貼り付ける

4. pod install

    ```shell
    pod install
    ```

私はこれで解決できました!

# 参考記事
https://stackoverflow.com/questions/77304874/framework-pods-runner-not-found
(自分用)バックアップをとったリポジトリのgitを新しく管理する手順

1.まずバックアップをとっているディレクトリのふるいgitを切り離す。
rm -rf .git
このコードで現在のディレクトリからgitを一旦削除することができる。

次に、新しくgitリポジトリを作成。

mkdir "ディレクトリ名"
git init

これで完了。

次に、リモートリポジトリ(github)の設定
git remote add origin <リモートリポジトリのURL>

これで、git add . して　コミット、プッシュすれば完了。
Pythonでbiplot関数を改良

<a href="https://qiita.com/murasaki1994/items/45bbe937b26338b67f83">前回</a>作った改良型のbiplotを目的変数で分かりやすくした関数を作りました。

# 関数
```Python3
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def biplot_spv(df, y_name):
    y = df[y_name]
    x = df.drop(y_name, axis=1)
    ss = StandardScaler()
    ss.fit(x)
    sx = ss.transform(x)
    model = PCA()
    model.fit(sx)
    tx = model.transform(sx)
    evr = model.explained_variance_ratio_
    com = model.components_
    fac = []
    for i in range(len(evr)):
        fac.append(np.sqrt(evr[i])*com[i])
    fig, ax = plt.subplots()
    ax1 = ax.twinx()
    ax2 = ax.twiny()
    ax1.scatter(tx[:, 0], tx[:, 1], c=y, cmap="brg")
    xlim = [abs(min(fac[0])), abs(max(fac[0]))]
    ylim = [abs(min(fac[1])), abs(max(fac[1]))]
    ax2.set_xlim(-max(xlim), max(xlim))
    ax2.set_ylim(-max(ylim), max(ylim))
    for i in range(len(x.columns)):
        ax2.annotate("", xytext=[0, 0], xy=[fac[0][i], fac[1][i]],
                     arrowprops=dict(shrink=0, width=1, headwidth=6, 
                                    headlength=10, connectionstyle='arc3',
                                    facecolor='red', edgecolor='red'))
        ax2.text(fac[0][i], fac[1][i], x.columns[i])
    plt.show()
```
## 使用例
```Python3
import pandas as pd

df = pd.read_csv("wine.csv")
biplot_spv(df, "Wine")
```
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2782889/776eee0e-3bdf-f956-c6c2-7d9aeba2965a.png)

```Python3
df = pd.read_csv("boston.csv")
biplot_spv(df, "PRICE")
```
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2782889/33bee0ba-d368-1e0b-3712-83a0b8679ebf.png)
メールを送信するための組織のデフォルトの No-Reply メールアドレスの作成および検証 (リリース更新)


https://help.salesforce.com/s/articleView?id=release-notes.rn_general_verify_return_email_address.htm&release=250&type=5

+ [Salesforce Winter ‘25 Release: What to Expect and How to Prepare](https://www.salesforceben.com/salesforce-winter-25-release-what-to-expect-and-how-to-prepare/)

強化されたメールセキュリティ標準に準拠するには、組織は [組織のメールアドレス] 設定で [デフォルトの No-Reply アドレス] を作成して検証する必要があります。

+ [メール通知のためのデフォルトの No-Reply アドレスを検証する](https://help.salesforce.com/s/articleView?id=000389009&type=1)

[設定] から、[クイック検索] ボックスに「組織の共有アドレス」と入力し、それを選択します。[専用の組織の共有メールアドレス] を見つけ、デフォルトの No-Reply アドレスとして希望するメールアドレスを入力します。次に、メール受信トレイに送信された手順に従って、組織のデフォルトの No-Reply アドレスを検証します。

組織が保持できる未検証のメールの数に制限はありませんが、一度に検証できるのは 1 つだけです。新しいメールアドレスを検証すると、以前に検証されたものが置き換えられ、削除されます。これが、検証されたメールアドレスを削除するための唯一の方法です。これにより、最初のメールアドレスを設定した後、組織には検証されたメールが常に存在することが保証されます。

+ [組織の共有メールアドレスを使用する場合の考慮事項](https://help.salesforce.com/s/articleView?id=sf.emailadmin_orgwide_addresses_considerations.htm&type=5)

No-Reply メール専用の組織の共有メールアドレスを作成するか、既存の組織の共有メールアドレスをデフォルトの No-Reply アドレスとして使用できます。No-Reply 用の検証済みの組織の共有メールアドレスは一度に 1 つのみ持つことができます。No-Reply アドレスは、作成された後に削除できません。

**実際にやってみると...**

「組織の共有アドレス」でなくて、「組織のメールアドレス」になっていますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/5d6af025-97d9-c579-6f09-f619fbea8fa7.png)


検証用の通知が届かなかったので、アドレスを変更しようとしましたが、保存できません。
メールログを見ると送信、受信がある。もしかして拒否されているのかも...


そこで一旦削除して作り直しますが、表示名を変えてもエラーになる。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/9362998d-1f0e-d0ae-fa90-5a801b034f66.png)

既に使っているアドレスがあると同じアドレスは使えないみたいですね。

今まではユーザ選択だけで使っていたので、ユーザー選択およびデフォルトのNo-Replyアドレスを選べばいいということかな？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/305b0972-7e20-a7ee-b0c3-fea04e8b0c75.png)


# 複数のプロファイルを選択する方法

+ [Organisation wide Addresses - unable to select for 2 or 3 profiles](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cmTkg)

:::note
コントロールキーを押しながら選択する
:::


# 関連資料

+ [noreply@salesforce.com on behalf of の表示を消す](https://qiita.com/Keiji_otsubo/items/744115a05764fada4aa0)
+ [Salesforceからのメール送信が迷惑メール扱いになる](https://qiita.com/Keiji_otsubo/items/c44167f32e4a694d882d)
+ [テクサポ 日本](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ifstR)
paiza の問題でコードゴルフをしてみた part2 @uni928

paiza×Qiita記事投稿キャンペーンで
「プログラミング問題をやってみて書いたコードを投稿しよう！」
というお題が出ているのを見て
ふと皆でコードゴルフをしてみたくなり
投稿してみる事にしました。

コードゴルフとは問題文に対して
「より短いコード」を目指す遊びです。
正常に動作するならば
35 文字のコードより
34 文字のコードが優れているという事です。

「もっと短くできるよ！」
というのがあればコメント頂けると幸いです。

対戦よろしくお願いします。

***

条件

項目「じゃんけんの手の出し方 (paizaランク A 相当)」で最短のコードを探す。
使用する言語「paiza で使える任意の言語(なるべく短く済む言語を使用する)」
成功条件「paiza が用意しているチェックに全て通過する(paiza が用意していない入力で正常に動作しない分にはかまいません)(理論上 95% 以上の確率で、全てのチェックを通過するコードである必要があります。)」

タブと改行と空白文字は 1 文字相当でお願いします。
cシャープの Main メソッドや php の "＜？php ？＞ も文字数にカウントして下さい。

問題文の URL 
https://paiza.jp/works/mondai/a_rank_skillcheck_sample/janken

***

問題文

### 下記の問題をプログラミングしてみよう！

あなたはこれから友人と N 回じゃんけんをします。しかし、あなたは全てを見通す千里眼の持ち主なので、友人がこれから出す N 回のじゃんけんの手が全て分かってしまいました。

ただただ全勝してしまうのは面白くないので、あなたは、N 回のじゃんけんで出した指の本数の合計がちょうど M 本になるようにじゃんけんをすることにしました。このとき、あなたは最高で何回じゃんけんに勝つことができるでしょうか。

ここで、上の文中に出てくる「出した指の本数」というのは、じゃんけんで出した手の何本の指が立っていたか、ということであり、グー、チョキ、パーそれぞれ

- グー のとき ... 0 本
- チョキのとき ... 2 本
- パー のとき ... 5 本

の指を出していたということになります。

例えば、あなたが 4 回のじゃんけんで グー、パー、チョキ、グー と出したとすると、出した指の本数の合計は、

0 + 5 + 2 + 0 = 7

で 7 本となります。

---

入力例:

```
4 7
CGPC
```

出力例:

```
4
```

入力例:

```
5 10
GPCPC
```

出力例:

```
3
```

---
***

私の回答(Python3)

```python:私の回答(Python3)
a=int(input().split(" ")[1])
b=input()
o=len(b)
m=0
for i in range(o):
    for j in range(o):
        k=o-i-j
        if 5*i+2*j==a and i+j<=o:
            m=max(m,min(k,b.count("C"))+min(i,b.count("G"))+min(j,b.count("P")))
print(m)
```

これはあくまでもコードゴルフなので
試行回数が長いコードになってしまっています。

コードを長くすれば処理時間を短く出来ますが
今回は paiza のチェックを通過する事ができるコードで
短いコードを作成する事が目的なので
このコードでいきます。

また正確には
range(o): の部分は
range(o+1): が正しいです。
私の回答はレギュレーションの穴を付いたコードなので
レギュレーションによっては
range(o+1): にして下さい。

***

私の回答はいかがでしたか？

私は色んな言語を使ってみて
233 文字より短くすることが出来ませんでした。

paiza で使えるならば
どんな言語でも良いため
もっと短くできるという意見があれば
コメント頂けると幸いです。

個人的にコードゴルフの記事は大好物なので
paiza×Qiita記事投稿キャンペーンを機に
コードゴルフのゴルフの記事が増えたら嬉しいです。

皆でこのお題を楽しんでいきましょう。

この記事が皆さんの暇つぶしになりますように。
閲覧ありがとうございました。

***

追記

コメント欄で、かなり文字数が短いコードを頂けました。
この問題はこんなに文字数を削れるのかと驚愕しました。

是非コメント欄も閲覧頂けると助かります。
TCP/IP　ネットワーク基礎 #1

https://www.amazon.co.jp/%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0TCP-IP%E2%80%95%E5%85%A5%E9%96%80%E7%B7%A8%E2%80%95-%E7%AC%AC6%E7%89%88-%E4%BA%95%E4%B8%8A-%E7%9B%B4%E4%B9%9F/dp/4274224473/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=YJFQCAD23JML&dib=eyJ2IjoiMSJ9.H60kBIj9F-tJhGGuyH8XS-a54VWvKcv_iG3iMe84mvRLPpRyC3sDY_Owj8HnyqOjEde3zJgBNJTLtv137veWSyGW92Yh253QKJ0NjForxnklILE1EECZEaMjz8qSW062CH2fAPrcxxyhqQnyq5_fJRrWQ-lwVNd_utGFneBLd3jw5fQaMS7dZnxT5bEFwkhswyDmwRmW9y_toOK-bYpQn1HrlY60h42HHl1JTo-l68E.w91S0SnOd1x1nqdsy-HTX7O7qX7V7qYiRD1y1DqKV-8&dib_tag=se&keywords=TCP%2FIP&qid=1710221779&s=books&sprefix=tcp%2Fip%2Cstripbooks%2C247&sr=1-2

ネットワークを本格的に学びたいと思い, 上記リンクの書籍「マスタリングTCP/IP」を購入した. そのアウトプットとして主に単語のメモを書いていこうと思う.

### LAN「ラン」
LAN（Local Area Network）は、会社とか学校とか, 比較的狭い地域の中でのネットワークのこと.

### WAN「ワン」
WAN（Wide Area Network）は, 地理的に離れた広範囲のネットワークのこと.

### インターネットの普及
メーカーが異なるコンピュータを相互に接続し, 安価にシステムを構築していこうというものが, ダウンサイジング, マルチベンダ（異機種間接続）接続の流れであった.マルチベンダとは機器やソフトウェアを組み合わせてネットワークを構築するというもので, これに使われたのが, インターネットの通信技術だった.

### バス型ネットワーク・スター型ネットワークの相違
まずは,  イメージ図を用いて構造の違いを示す.
![スクリーンショット 2024-07-29 14.19.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674514/c8c633bf-95fd-a9fc-700b-db0498eca200.png)

1. 構造
- バス型：1本の共通ケーブル（バス）に全てのデバイスが接続されている.
- スター型：中央のハブやデバイスに全てのデバイスが直接接続されている.

2. データ伝送
- バス型：データは共有のバス上を流れており,  全てのデバイスがそのデータを受信する.
- スター型：データは中央ハブを経由して,  特定の宛先にのみデータが伝送される.

3. 拡張性
- バス型：デバイスの追加は容易だが,  バスの長さに制限がある.
- スター型：中央ハブのポート数に制限があるが,  ハブを追加することで拡張可能.

4. 信頼性
- バス型：1つのデバイスの問題があると,  他の全てのデバイスに影響がある可能性がある.
- スター型：1つのデバイスに問題があっても,  他のデバイスには影響がない.

5. パフォーマンス
- バス型：デバイスの数が増えるとパフォーマンスが低下する傾向にある.
- スター型：中央ハブの性能次第だが,  基本的にバス型よりは高いパフォーマンスを発揮する.

上記の5つで僕が気になったのが,  両者の拡張性について.
バスをもう1本用意することと,  中央ハブをもう1つ用意すること,  どちらが容易なのか.  初心者にしてみると,  スター型の論理はバス型にも通用するのではないか？ということは,  ハブ型もハブを増やせば拡張が容易で可能なのか？
このような疑問をCloude先生に聞いてみた.  そして返ってきた内容をまとめると, 

「バスをもう1本増やすことは可能だが,  複数のハブでの同期が大変で複雑性が増す.  一方スター型は,  基本的なネットワーク構造が同じ中央ハブを用意すれば柔軟に拡張ができて管理もしやすい. また, 現代のネットワークでは,  スター型が一般的である」

ということらしい.
ビジュアル化もしてもらった.  ビジュアルシンカー寄りの僕にとっては,  下図のようにイメージを机上におこしてくれるのは助かる.
![スクリーンショット 2024-07-29 14.48.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674514/d095ffaf-b92b-f672-7152-c37a2933093b.png)
この図からもわかるように,  バス型はバス同士を繋ぐ(同期)作業がなんだか複雑そうで特別な作業って感じがするけど,  スター型は,  中央ハブが元から拡張されることを前提にポートか何かを用意していて,  必要になったらもう1つのハブと接続できるように設計されている,  というようなことを連想させてくれて,  そりゃあスター型の方が柔軟だわ,  って納得がいく(実際,  このイメージが間違っている可能性もあるが...).

### プロトコル
プロトコルとは, コンピュータ同士がネットワークを利用して通信を行う際の「約束ごと」という意味になる.

### イーサネット
イーサネットとは,  バス型ネットワーク構造を用いてLANを実装する標準である.
イーサネットの名前は,  同軸ケーブルを使ってマシンを接続する設計に由来する. これは,  PCを接続する一般的な方法である.
Salesforce リリース更新インベントリ 


+ [(2024年7月26日) Salesforceの運用に関する重要なお知らせ](https://successjp.salesforce.com/article/NAI-000959)
+ [Salesforce リリース更新インベントリ](https://help.salesforce.com/s/articleView?id=000397088&type=1)

# 2024/07/02

+ このインベントリは、Salesforceリリース更新の実施スケジュールを追跡します。 
+ Salesforceリリース ノートは、リリース更新を含むすべての Salesforce 機能の信頼できる情報源であり続けます。ただし、Salesforce リリース更新インベントリでは、リリース ノートが更新される前に、変更に関する早期通知が提供される場合があります。
+ 次回は 2024/08/01

適用済み: Salesforce は、Summer '24 で次の更新を適用する予定です。

|名前| リリースノート|
|:-------------------------|:---------------------------|
|ボットユーザーコンテキストでフローを実行する|[ボット ユーザー コンテキストでフローを実行する (リリース更新)](https://help.salesforce.com/s/articleView?id=release-notes.rn_einstein_bots_release_update_flows.htm&language=en_US&release=250&type=5)|
|信頼できる組織間リダイレクトのみを許可する|[信頼できる組織間リダイレクトのみを許可する (リリース更新)](https://help.salesforce.com/s/articleView?id=release-notes.rn_security_other_crossorg_redirections_ru.htm&language=en_US&release=250&type=5)|
|組織全体のプロファイル設定を尊重するために EmailSimple 呼び出し可能アクションを有効にする|[組織全体のプロファイル設定を尊重するために EmailSimple 呼び出し可能アクションを有効にする (リリース更新)](https://help.salesforce.com/s/articleView?id=release-notes.rn_automate_flow_release_update_enable_emailsimple_invocable_action_to_respect_org_wide_profile_settings.htm&language=en_US&release=250&type=5)|
|複数構成の SAML フレームワークへの移行|[複数構成の SAML フレームワークへの移行 (リリース更新)](https://help.salesforce.com/s/articleView?id=release-notes.rn_security_saml_release_update.htm&language=en_US&release=250&type=5)|


+ [Winter'25 で強制ログインが永久に無効に](https://help.salesforce.com/s/articleView?id=release-notes.rn_security_forced_login.htm&release=250&type=5)

セキュリティを強化するため、'25 Winter 以降、ログイン URL のクエリ文字列パラメーターとしてユーザー名とパスワードを渡して Salesforce にログインする「強制ログイン」が無効になります。この変更により、URL 経由の強制ログインを使用している実装やサードパーティインテグレーションや、直接ログイン (自動ログイン) リンクが壊れます。サービスの中断を避けるため、強制ログインを使用しているインテグレーション機能を更新してください。
Workato：Recipe function by Workatoコネクタでレシピ開発や運用を効率化する

# Recipe function とは

Recipe function by Workato (以下Recipe function) は、「レシピの中から呼び出し可能なレシピ」で、プログラミングのソースコードにおけるサブルーチンやユーザー関数のような役割を持つレシピです。

https://docs.workato.com/ja/connectors/recipe-functions.html

# Recipe functionを利用するメリット

## 良く使う処理を共通化（モジュール化）して再利用可能

良く使う機能をRecipe functionとして用意し、その機能を必要とするレシピから参照することで、複数のレシピで同じ処理をコピペ実装する必要が無くなります。

また、その機能に対するレシピの修正も、Recipe functionを利用する全てのレシピを修正する必要は無く（複数のレシピを修正する必要は無く）、Recipe functionで用意された１つのレシピの修正のみで済みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/5023de16-1178-6b56-e271-7d206dd596cd.png)

## 複雑な処理やコードの抽象化が可能

複雑な処理やRuby, Python, JavaScriptで書かれたコードは、エンジニアではないユーザーにとっては非常にハードルが高いものとなります。Recipe functionを利用することで、そのような処理を抽象化して提供することが可能となります。

また、エンジニアはRecipe functionで高度なレシピを実装して提供する、非エンジニア（ビジネスユーザー）はその処理を利用して自ら必要とするレシピを実装して提供するといった形で役割分担をすることで、効率的なレシピ開発・運用が期待できますし、非エンジニアにおけるWorkatoに対するユーザー体験の向上にも繋がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/86da0eae-332e-082c-8bc3-91d68f5374be.png)

## ループ内の処理の可視化に使える

Workatoではループごとの実行結果をログ上で確認することはできませんが、次のようにRecipe functionをループに配置することで、ループごとに実行された結果を呼出先のレシピ側で確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/6ad1304c-c8cd-8b02-1bd6-6523ee585cf6.png)

## 単体テストがしやすくなる

Recipe functionは呼出元に制限されず、かつそれ単体でテストを実行することが可能です。例えば、テスト用のレシピを用意し、そのレシピから各Recipe functionを呼び出すことで、単体テストを自動化することも可能です。

## レシピの見通しが良くなる

Recipe functionで適宜処理を分ける（適切なスコープで処理を分ける）ことで、レシピの見通しが良くなり、メンテナンス性の向上に繋がります。

## 処理ごとの分業の実現

Workatoは同じレシピを複数ユーザーで編集することができません。1名がレシピを編集（開発）している間、その他のレシピ開発者は同じレシピを編集できない状態となります。レシピのロジックを、Recipe functionで機能ごとに分けることで、処理ごとの分業が可能になります。

# 注意事項

## Recipe functionアクション自体のタスク消費に注意

Recipe functionがアクションで実行されると、Recipe function内の処理で発生するタスクに加え、Recipe functionを呼び出す親のアクションのタスクもカウントされます。

例えば、Recipe function内のタスクが「5」である場合、1つのRecipe functionが実行される際に発生するタスクは「6」になります。

よって、あらゆる処理にRecipe functionを適用するのではなく、必要性のある処理に対してRecipe functionを検討した方が良いでしょう。

## なるべく他のレシピに依存しない（それ単体で動作する）ことを心がける

Recipe functionからRecipe functionを呼び出すようなれRecipe function同志で依存関係が生じるレシピは、レシピのスパゲッティ化を引き起こし、将来のメンテナンス性低下につながる恐れがあるため、なるべく避けた方が良いでしょう。

もしやむを得ずそのようなレシピを作成する必要がある場合は、依存関係が分かるようレシピの設計情報をドキュメントとしてしっかりと残すことをお勧めします。

## 過剰なRecipe function化は避ける

前述の通り、Recipe functionを利用し適切なスコープで分割を行うことでレシピ全体の見通しが良くなり、メンテナンス性が良くなります。反面、細かすぎるスコープでレシピを分割するような過剰なRecipe function化は、かえってメンテナンス性を悪化させる恐れがあります。

よって、Recipe function化の検討に際しては、分割しようとしているスコープが適切であるか、なぜそのスコープで分割する必要があるのかを判断しながら進めていくのが良いでしょう。
TechRAMEN 2024 Conference 前夜祭＋本祭＋後日祭＋合宿企画に参加しました。

今回TechRAMEN 2024 Conferenceに参加したので初めてカンファレンスの参加レポートを書いてみたいと思います。
カンファレンス自体は、PHPカンファレンス北海道2024ぶりの2回目の参加です。

## TechRAMEN 2024 Conference
**内容**
前夜祭＋本祭＋後日祭

**場所**
北海道旭川市大雪クリスタルホール

**時間**
前夜祭：2024/7/26(金) 16:00-20:00
本　祭：2024/7/27(土) 10:00-18:00
後日祭：2024/7/28(日) 10:00-18:00

## 面白かった登壇
「ひとりのプログラマ、問題解決者としての原理原則とワークフロー」
和田卓人  X＠t_wada

1時間の講演の中で
勉強になるお話しかなくずっとメモとっていました。

お昼には和田さんから直接「テスト駆動開発」の本とサインをいただきました。

https://x.com/kengo20_03/status/1817346319591387431

本当にありがとうございます。

## 非公式合宿企画「炒飯セット」
2泊3日で美瑛町地域人材育成研修交流センターに宿泊しました。

https://town.biei.hokkaido.jp/culture/asahi/

施設の中は綺麗で設備も充実しており、とても快適に過ごせました。
ラーメン、メロンとスイカなど上川地方の名物をたくさんいただきました。

## 謝辞
このようなイベントを開催するにあたって動いていただいた、
TechRAMEN 2024 Conference運営の皆様
合宿企画を開催していただいた方々
施設を貸していただいた美瑛町

このような機会を作っていただき、ありがとうございます。

## 次のカンファレンスに向けて
8月にはフロントエンドカンファレンス北海道2024があり、初めてコアスタッフとして参加するのでカンファレンスの運営を手伝わせていただく中で様々なことを勉強していきたいと思います。
SRA Toolkit 導入


# SRA Toolkitの導入および使用ガイド

このガイドでは、SRA Toolkitの手動インストールから`prefetch`および`fasterq-dump`を使用したデータのダウンロードおよび変換方法を説明します。

## 1. SRA Toolkitのダウンロード

事前に下記コマンドで使用するサーバーのOSを確認してください
```
cat /etc/os-release
```
https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/current/
から自身の環境に適したファイルのpathを確認してください
```bash
# ダウンロードディレクトリに移動
cd /path/to/download/directory

# wgetを使用してSRA Toolkitをダウンロード　(CentOSの場合)
wget https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/current/sratoolkit.current-centos_linux64.tar.gz
```

## 2. SRA Toolkitのインストール

ダウンロードしたアーカイブを解凍し、インストールします。

```bash
# アーカイブを解凍
tar -xvzf sratoolkit.current-centos_linux64.tar.gz

# 解凍されたディレクトリに移動
cd sratoolkit.*

# バイナリのディレクトリにパスを通す
export PATH=$PATH:$PWD/bin
```

## 3. 環境変数の設定

SRA Toolkitのバイナリパスを恒久的に設定するために、`~/.bashrc`や`~/.bash_profile`に追加します。

```bash
echo 'export PATH=$PATH:/path/to/sratoolkit.3.1.1-centos_linux64/bin' >> ~/.bashrc
source ~/.bashrc
```

## 4. 動作確認

SRA Toolkitが正しくインストールされたことを確認するために、以下のコマンドを実行します。

```bash
which prefetch
vdb-config --interactive
```

## 5. ファイルサイズの確認 (やらなくても可)

念のため、ダウンロードするファイルのサイズを事前に確認します。

```bash
vdb-dump -R1 --info SRR23448013
vdb-dump -R1 --info SRR23448014
```

出力例:
```
acc    : SRR00000001
path   : https://sra-pub-run-odp.s3.amazonaws.com/sra/SRR23448013/SRR23448013
size   : 51,631,104,399
...

acc    : SRR00000002
path   : https://sra-pub-run-odp.s3.amazonaws.com/sra/SRR23448014/SRR23448014
size   : 43,629,994,005
...
```

## 6. `prefetch`によるダウンロード
一般的には下記コマンドで動く
```
prefetch SRR00000001
```

ファイルサイズが50Gを超える場合などは、ファイルサイズの制限を設定してダウンロードします。

```bash
# SRR23448013のダウンロード
prefetch --max-size 100G SRR23448013

# SRR23448014のダウンロード
prefetch --max-size 100G SRR23448014
```

## 7. `fasterq-dump`でFASTQファイルに変換

ダウンロードが完了したら、`fasterq-dump`を使用してFASTQファイルに変換します。
single-end
```
fasterq-dump SRR00000001
```

pair-endを取り出す場合
```bash
# SRR23448013の変換
fasterq-dump --split-files SRR23448013

# SRR23448014の変換
fasterq-dump --split-files SRR23448014
```

以上で、SRA Toolkitの導入からデータのダウンロードおよびFASTQファイルへの変換が完了します。
【Unity】見下ろし視点追従

見下ろし視点でのカメラ追従は、cinemachineで実装。
VirtualCameraを生成して、Follow、LookAtに動かすキャラを設定。
Bodyの設定で、カメラ位置を調整。
Aimの設定をDo nothingにして、カメラの向く方向が固定されるように調整。

![miorosi.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666230/24f02356-788f-80ed-90ea-e17be06142ad.jpeg)


参考にさせていただいたサイト
https://www.youtube.com/watch?v=Odf9g67L4TU
https://nekojara.city/unity-camera-follow
WordPressに独自のHTMLを使用してメンテナンス画面を表示

WordPressにメンテナンス画面を設置するには、プラグインを使用する方法と手動で設定する方法の2つがあります。
独自のHTMLを使用してメンテナンス画面を表示するためには、手動で設定する方法が適しています。以下にその手順を説明します。


# 手動でメンテナンスモードを設定する
### 手順1 メンテナンス用のHTMLファイルを作成する
まず、メンテナンス画面として表示したいHTMLファイルを作成します。
例えば、以下のような内容です
```<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>メンテナンス中</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            background-color: #f2f2f2;
            font-family: Arial, sans-serif;
        }
        .container {
            text-align: center;
        }
        h1 {
            font-size: 2em;
            margin-bottom: 0.5em;
        }
        p {
            font-size: 1.2em;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>メンテナンス中です</h1>
        <p>現在、メンテナンス作業を行っています。しばらくお待ちください。</p>
    </div>
</body>
</html>

```
このファイルをmaintenance.htmlとして保存します。

### 手順2 maintenance.htmlをサーバーにアップロードする
作成したmaintenance.htmlファイルをWordPressのルートディレクトリ（wp-contentフォルダと同じ階層）にアップロードします。

### 手順3 maintenance.phpファイルを作成する
次に、maintenance.phpという名前のファイルを作成し、以下のコードを記述します
```<?php
// IPアドレスを指定して、特定のIPアドレスからのアクセスを許可する
$allowed_ips = ['123.456.789.000']; // ここに許可するIPアドレスを追加

if (!in_array($_SERVER['REMOTE_ADDR'], $allowed_ips)) {
    // メンテナンス中のHTMLファイルのパス
    $maintenance_file = dirname(__FILE__) . '/maintenance.html';
    // メンテナンス画面を表示
    if (file_exists($maintenance_file)) {
        include($maintenance_file);
        exit;
    }
}
?>

```
このファイルをWordPressのルートディレクトリにアップロードします。

### 手順4 .htaccessファイルを編集する
WordPressのルートディレクトリにある.htaccessファイルを開き、以下のコードを追加します
```
<IfModule mod_rewrite.c>
    RewriteEngine On

    # メンテナンスモードを有効にする
    RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000$  # ここに許可するIPアドレスを追加
    RewriteCond %{REQUEST_URI} !/maintenance\.html$ 
    RewriteRule ^.*$ /maintenance.php [R=302,L]
</IfModule>

```
この設定により、指定したIPアドレス以外からのアクセスはmaintenance.phpファイルを経由してmaintenance.htmlが表示されます。
yfinanceでエラー発生

株価の取得を毎週行っていたところエラーが発生。
バージョンは「0.2.41」。
どうやら色々バグがある模様だったのでgoogle colabにて直前バージョンの「0.2.40」を指定してインストールしたところ従前どおりの動作が確認できました。
pandas_datareaderと相性が悪い？
ERROR 500 trailheadにアクセスするとエラーになる


急にこのエラーの投稿が増えているような...

+ [Facing ERROR 500 while accesing trails DATE[27-07-2024]](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cmSBVSA2)
+ [getting error 500 while accessing Trailhead trails??](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cmSp1)
+ [HTTP 500 error when trying to return to a trail that I have in progress.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007eqSQTSA2)

2024/07/30現在では解決したみたい
safariだと画像が縦に伸びる現象

# はじめに
imgタグの画像がchromeでは正常に表示されるのに、safariだとなぜか縦に伸びて表示されてしまうのでその解決策を載せていきます。

# 問題
chromeでは問題なく画像が表示されているのに、safariではなぜか画像が縦に伸びてしまう(バイトで遭遇したのでサンプルコードだけ載せます)。

```html
<div style="display: flex">
  <img src="XXXXXXX">
  <img src="XXXXXXX">
</div>
```

# 解決策
safariではdisplay:flex;配下の画像は縦に伸びてしまうみたいです。この場合imgタグをdivなど他のタグで囲ってあげると解消されます。

```html
<div style="display: flex">
  <div><img src="XXXXXXX"></div>
  <div><img src="XXXXXXX"></div>
</div>
```
align-items: flex-start;を付与してあげるやり方もあるそうです。

```html
<div style="display: flex,align-items: flex-start">
  <img src="XXXXXXX">
  <img src="XXXXXXX">
</div>
```


# おわりに
safariだとchromeで見れてた画像がぼやけたり、ブラウザバックの挙動が少し違ったりするので少し大変ですね。

# 参考

https://higashidadan.com/web/css/safari-flexbox.html

https://irodori-design-web.com/blog/blog-2299/
【Powershell】IP自動取得へ切替（Win11版/HP限定？）No.２


## 落とし穴２

**人知れず変更を加えるのはやさしさなのか？**　の巻

今日は別のシステム不調で全く違う観点からお話を進めていって,
Netがつながらない原因を考えていきたいと思います。弊社では「暗号化技術を用いた安全な通信経路」を確保するリモートアクセスというサービスを使って使っています。リモートアクセスの接続がうまくいかないということで、アプリ開発業者と電話で話す機会がありました。電話の中で支指示を受けながらやっている作業は今のIPの切り替えの作業とまったく同じで、入っているIPを抜くという作業でした。**※間違っていないことは少し確信できました。**

電話による指示で伝えられたのは**対処３**まであるのですが、対処３はHP社のPCだけは
その記事によると

>https://faq01-fb.fujifilm.com/faq/show/48887?site_domain=default


>ネットワーク自動切換えツールの影響により、リモートアクセス接続の通信が切断されている可能性があります。
>HP(ヒューレット・
パッカード)製PCをご利用の場合、ネットワーク自動切り替えツールは下記名称で表示されているようです。
> 
>・HP LAN/WLAN/WWAN Switching UWP Service
>・LAN/WLAN/WWAN Switching Service
>・LanWlanSwitchingService

【上記ネットワーク自動切換ツールの一時無効化】

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/5b5032f0-44db-faed-b62b-74cade7f2bff.png)


名前欄に「services.msc」と入力し、「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/5098f40b-057d-2c45-60a3-1932562074cb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/734493bc-345e-97ab-0c53-5a7e42740fc4.png)

以上で、ネットワーク自動切換えツールの一時無効化は完了です。
リモートアクセス接続が可能になるか、ご確認ください。
※無効にしたネットワーク自動切換えツールは、PCを再起動することで、有効状態に戻ります。


-----------------------------
なるほど
他のPCでは起こらないことが起こっていたんですね。
----------------------------

次回はいったん出来上がったコマンドを他の機体でも実証して報告していきます。

-----------------
<font color=red>ネットワーク自動切換ツールをHPに問い合わせた上でより完成度の高いWi-Fi接続コマンドのツールを作ります。コマンドの公開はもう少しお待ちください。</font>
----------------

## 追記

まず上記の件（HP社のPCのIP自動切換えツール）の件はお問い合わせの予約をいれてHP社の技術マンの方とお話しました。

結果　<font color="red">**そのような仕組みになっていない**</font>とのお返事をいただきました。

もともとそのような動きはWirelessのドライバー自身にその機能があり、サイトに上がっていた情報には誤記があるとのことでした。

再起動では有効に戻ってしまうこともあり、真偽の確認までにはいたりませんでした。

No.3へ
TransCG 透明物体の把持のためのデータセットの例

これも、透明物体の把持のためのデータセット

pdf [TransCG: A Large-Scale Real-World Dataset for Transparent Object Depth Completion and A
Grasping Baseline](https://arxiv.org/pdf/2202.08471)

github https://github.com/Galaxies99/TransCG
transcg dataset https://graspnet.net/transcg


TransCG: TransCG is the first large-scale real-world dataset for transparent object depth completion and grasping. We provide the original RGB-D images as well as the refined ground-truth depth images in the dataset. The transparent object pose, transparent object mask, the ground-truth surface normals and transparent object models are also provided.


Intel RealSense D435 camera and an Intel RealSense L515 camera.

![Screenshot from 2024-07-29 11-59-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/d44e2c4e-a974-460d-10ed-a3d0b701a3ee.png)

![Screenshot from 2024-07-29 12-01-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/8d2984b0-f01d-4992-afd3-e85d7f5ed903.png)

![Screenshot from 2024-07-29 12-01-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/ef9d30e7-0332-45de-6987-b73f7eefe6e9.png)

![Screenshot from 2024-07-29 12-01-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/f35e398f-f0f3-3e4d-c312-33ef028474f6.png)

![Screenshot from 2024-07-29 12-02-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/7cb8ee62-4464-c5e8-08f4-f91765ad686a.png)


![Screenshot from 2024-07-29 12-11-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/5d5082f4-dc71-9f93-6f4e-ba5fdc61d86c.png)

Fig. 3 の中で、３D scannerを別途使用している。
> we temporarily wrap the transparent object with some    opaque materials that can preserve the shape of objects, and    obtain its 3D model with a Shining3D EinScan-SP scanner2. 
透明な物体を、物体の形状を保持できる不透明な材料で仮包し、Shining3D EinScan-SPスキャナ2 を使って3Dモデルを取得する。

問題を扱いやすくするために、fixer with markerを使っている。
それを使うことで、姿勢の算出がしやすくなっっている。

3D　scanner

https://www.einscan.jp/se-sp

```
    |   |-- rgb1.png                    # RGB image of perspective 0 (D435 camera) (if exists)
    |   |-- depth1.png                  # Raw depth image of perspective 0 (D435 camera) (if exists)       
    |   |-- depth1-gt.png               # Refined ground-truth depth image of perspective 0 (D435 camera) (if exists)  
    |   |-- depth1-gt-mask.png          # Transparent object mask for depth image of perspective 0 (D435 camera) (if exists)
    |   |-- depth1-gt-sn.png            # Ground-truth surface normals of perspective 0 (D435 camera) (if exists)
```
データセットのファイル構成については https://graspnet.net/transcg  に記載がある。


## DFNet
- この論文中で提案しているdepth算出のアルゴリズム
![Screenshot from 2024-07-29 12-23-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/bf012857-1468-77c2-5bda-6ae19fbf3531.png)

ClearGrasp, LIF-Rfine, TranspareNet, DFNet との比較を実施している。

DFNet では、model size が小さく Inference Timeも少ない。(Table II)

Error Mapの値が小さいものがよい。(Fig. 5)

DFNetのアルゴリズムの中では、RGB画像と不十分なdepthデータをもとに、refined Depthを算出している。
(Fig. 4)
bun testでエラーが出力されます

初めてのOSS開発に挑戦しました。

react-hook-form/resolverをコントリビュートするため、ドキュメントに沿って環境構築を行いましたがエラーが発生しました。

## 目次
[実行環境](#実行環境)
[やったこと](#やったこと)
[解決](#解決)
[解決方法](#解決方法)
[原因](#原因)
[今後](#今後)

## 実行環境
macOS Sonoma14.4.1 
Bun 1.1.21 
zsh 5.9 (x86_64-apple-darwin23.0)

## やったこと
まずリポジトリをForkしてローカルにcloneしました。 
私のPCにbunが導入されていないのでbunを導入しました。 `/resolvers`ディレクトリに移動して、`bun install`を実行するとうまくいきました。

しかし`bun test`を実行すると、`test`が必要とエラーが出力されました。 
このリポジトリのtestが入っているのは`/__test__`というディレクトリです。
エラーの内容は以下のものです。
```
% bun test
bun test v1.1.21 (70ca2b76)
The following filters did not match any test files:
296 files were searched [51.00ms]
note: Tests need ".test", "_test_", ".spec" or "_spec_" in the filename (ex: "MyApp.test.ts")
Learn more about the test runner: https://bun.sh/docs/cli/test
```

## 解決
このエラーを解決するために package.jsonを参照すると、テストフレームワークに`Vitest`を使用していると確認しました。 試しにnpm run testを実行してみると、正常にテストが行われました。
そこで`bun run test`を実行してみるとうまくテストが実行されました。

## 解決方法
`bun test`=>`bun run test`
間に`run`を入れることによってテストが正常に実行されました。

## 原因
前者のコマンドだと組み込みのtestが呼び出されてしましい、scriptsのtestを動かすためには後者のコマンドを実行する必要があるみたいです。

## 今後
現段階では、リポジトリのドキュメントの記載ミスなのかbun側の問題なのか特定の環境のみで起こる問題なのか解明できていないので、解決次第必要であればプルリクを送りたいと思います。
【CSS】webit-appearanceでWebKitベースのデフォルト解除

# -webkit-appearance: none
**-webkit-appearance: none**は、CSSのプロパティで、WebKitベースのブラウザ（Google ChromeやSafari）において、デフォルトのスタイルを削除して、要素をカスタムスタイルするために使用する。

# 実装理由
◎カスタマイズ
デフォルトの見た目を取り除き、自分のデザインを適用するため。

◎一貫性
WebKitベースのブラウザでの表示を他のブラウザと一貫させるため。

# 使用例

## テキスト入力フィールド
```css:
.form input[type="text"],
.form input[type="email"],
.form textarea {
    width: 100%;
    margin-bottom: 17px;
    padding: 12px 20px 14px;
    border: solid 1px #CDD6DD;
    box-sizing: border-box;
    border-radius: 0;
    -webkit-appearance: none;
}
```

## ドロップダウンリスト

```css:
select {
    -webkit-appearance: none;
    background: #fff;
    border: 1px solid #ccc;
}

```

# 注意

**-webkit-appearance**はベンダープレフィックス付きプロパティであり、他のブラウザ（例：FirefoxやInternet Explorer）には異なるプレフィックスが必要な場合がある（例：-moz-appearance）。
SharePoint サイトのタイムゾーンを取得する方法

SharePoint サイトのタイムゾーンを確認するには、「サイトの設定」にアクセスする方法がありますが、もしあなたに「サイトの設定」にアクセスする権限がない場合は、 JavaScript を使って確認することができます。


## JavaScript コードとその使い方

タイムゾーンを確認したい SharePoint Online サイトにアクセスし、そのサイトにあるなにかしらのリストにアクセスします。

そして、ブラウザの DevTools を開き、以下のスクリプトを実行します。

``` JavaScript
(async function(){
  let response = await fetch(
    _spPageContextInfo.webServerRelativeUrl + "/_api/web/RegionalSettings/TimeZone",
    {
      method: 'GET',
      headers: {
        'Accept': 'application/json;odata=verbose',
        'Content-Type': 'application/json;odata=verbose'
      },
      credentials: 'same-origin'
    }
  );
  if (!response.ok) {
    throw new Error('Network response was not ok ' + response.statusText);
  }
  let data = await response.json();
  console.log(data);
})();
```

すると以下のような値が返ってきます。

``` json
{
  "d": {
    "__metadata": {
      "id": "https://sample.sharepoint.com/sites/SampleSite/_api/web/RegionalSettings/TimeZone",
      "uri": "https://sample.sharepoint.com/sites/SampleSite/_api/web/RegionalSettings/TimeZone",
      "type": "SP.TimeZone"
    },
    "Description": "(UTC-08:00) 太平洋標準時 (米国およびカナダ)", // タイムゾーン
    "Id": 13,
    "Information": {
      "__metadata": {
        "type": "SP.TimeZoneInformation"
      },
      "Bias": 480, // 時差を分換算した値
      "DaylightBias": -60,
      "StandardBias": 0
    }
  }
}
```
議事録で押さえるべきポイント、要点【議事録、書き方】

# ■ 概要
今回の記事では、議事録をまだ取ったことがない方々や不慣れな方々に向けて

**「議事録として充分機能させるために、とにかくここを押さえておけ！」**

という要点、ポイントについて説明します。

<font color="gray">（企業など所属する組織によってフォーマットがあったり、細かいポイントに違いはあるかもしれませんが、大体どれも今回説明する内容に収束している感じはありますし、これらの項目を押さえておいて注意されるようなことはないかと個人的には思ってます。）

# ■ 「議事録」で押さえるべきポイント
大枠としてはこの6つの要点です。

**① 議題**
**② 日時、場所**
**③ 参加者（担当者）**
**④ 内容**
**⑤ ネクストアクション**
**⑥ ※次回開催日**


## ① 議題

その会議の議題（何について議論し、何を決定する会議なのか）の他に、案件名やプロジェクト名も記載しましょう。

## ② 日時、場所

日時は西暦から。あと例えばオフィスでの会議であればそのオフィスの名称と、会議室の名称も可能であれば記載しておきましょう。

## ③ 参加者（担当者）

先方、当方含めてその会議に参加した全てのメンバーを記載しましょう。

## ④ 内容

議論された内容を記載することはもちろんですが、特に決定事項（その会議において決定したこと）を**明確に記載する**ことを心がけましょう。

## ⑤ ネクストアクション

「誰が」「いつまでに」「何をするか」を整理して記載するようにしましょう。これが書けない（決まっていない）場合は、その会議中に確認して記載するところまで実行しましょう。

## ⑥ ※次回開催日

こちらは決定していれば日時、場所まで記載をしましょう。

# ■ 最後に （感想）

今回は議事録で抑えるべきポイントについて簡潔に説明しました。しかしこれらの要点の内容部分の書き方などは色々工夫が必要です。どうすれば内容が充実して、かつ見やすい議事録をとることができるか。トライアンドエラーで試行錯誤して、都度アップデートしていく必要があると思います。

最後までご覧いただき、ありがとうございました。
Git for Windowsで複数の認証情報を扱うときのTips

## 前説

Git for Windows には Credential Manager が同梱されている
Gitリポジトリへの認証情報を都度入力する手間から解放してくれるイケメン


問題はGitリポジトリへの認証情報が複数存在する場合

例としてAWSの複数環境でCodeCommitを利用する場合などに発生する

このとき「GitリポジトリAに対しては認証情報A」「GitリポジトリBに対しては認証情報B」のように、個別に Credential Manager を効かせる方法のメモを残す


## 手順

1．git clone する際に一意な credential.namespace を指定する
```bash
git -c credential.namespace=aaa clone https://myproject-A.git
```

2．Credential Manager がポップアップするので認証情報を登録する

3．cloneした後、対象のディレクトリ内で使用する credential.namespace を設定
```bash
cd myproject-A
git config --local credential.namespace aaa
```

以降 myproject-A ディレクトリ内でのGit操作においては、手順2で登録した認証情報が使用される
gitで特定のファイルの変更差分を取り消す方法

業務でコードレビューをしていただいた際に、特定の差分だけ取り消して前の状態に戻したい、、、と感じたので、今回やり方を調べてみました。

# 手順

### 1.`log`コマンドでコミット履歴からコミットIDをメモする

`git log`コマンドを使えば、コミット履歴が検索できるので、コミット履歴を調べてみます。
前提として、どのファイルを前の状態に戻したいかはわかっていると思うので、下のコマンドで変更履歴を見てみます。
```
git log -p <fileパス>
```

:::note
`<fileパス>`は、.gitがあるルートディレクトリからの絶対パスを指定してください
GitHubでは、`FilesChanged`からパスがコピーできるのでそのパスを指定してください
:::

おそらく下のような履歴が出てくると思います。
```diff
commit aaaaaaaaaaaaaaaa
Author: MAOZ <maooz4426@gmail.com>
Date:   Wed Jul 10 03:51:33 2024 +0900

    コメント

diff --git a<fileパス> b<fileパス>
index f9ce3e1..2ad20fe 100644
--- a<fileパス>
+++ b<fileパス>

-
+ test
```
`commit`の右に書いてある`aaaaaaa`にあたる部分がコミット履歴のコミットIDになるので、これをメモします。

:::note
上の場合、testというコードを消したい場合は、このコミット履歴より前のコミット履歴のハッシュ値を指定する必要があります。
:::

### 2.`checkout`コマンドで、特定のファイルのコミット履歴に戻す

コミットIDをメモしたところで、`git checkout`を使って特定ファイルのコミットを戻します。
```
git checkout <コミットID> <fileパス>
```
:::note
上の例でいうと<コミットID>はaaaaaaaaaaaaaaaaにあたります。
:::

ここまで終わると変更が特定の履歴に戻っていると思います。

### 3.本当に戻っているか`status`コマンドで確認する
`git status`コマンドを使えば、どのファイルが変更されたか見ることができます。
しかし、通常だとどのファイルが変更されたしか見ることは出来ず、ファイルの変更部分は見ることができません。
したがって、-vオブションで中身を表示させます。
```
git status -v
```
下のような感じで表示されると思います。
```diff
- test
+
```

ここで自分の戻したい履歴に戻っていたら終了です。
この記事がお役に立てたら嬉しいです。
iOS 17でディベロッパモードが表示されない問題と解決方法


## はじめに

XCodeでApple Watchアプリの実機テストを行う際、iPhoneとApple Watch両方でディベロッパモードを有効にする必要があります。しかし、iOS 17環境下でディベロッパモードの設定項目が表示されないという問題に遭遇しました。この記事では、その問題の解決方法を共有します。

## 環境

| 項目 | バージョン |
|------|------------|
| iOS  | 17.5.1     |
| watchOS | 10.5    |
| Xcode | 15.4      |
| macOS | Sonoma 14.5 |

## 問題の詳細

以下の参考サイトをもとに設定を進めていましたが、iPhoneの「設定」アプリ内の「プライバシーとセキュリティ」にディベロッパモードの項目が表示されず、設定を行うことができませんでした。

![スクリーンショット 2024-07-29 12.31.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846493/49fd3675-f8ca-7e71-aff0-98b8066724cf.png)

参考サイト

https://qiita.com/shintaro_aw/items/69b79f64d4ffe849f626

## 解決手順

以下の手順で問題を解決しました。

1. **個人情報安全性チェック**
   - 以下サイトを参考に、個人情報とセキュリティに関する設定を確認しました。

https://createdevelopmentnote.com/ios16_developer_mode/

![スクリーンショット 2024-07-29 12.32.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846493/811a3226-e9ab-55a1-28b7-5b382dbe5843.png)
2. **Apple Watchのディベロッパモードを先に有効化**
   - iPhoneでは表示されなかったものの、Apple Watchではディベロッパモードの項目が表示されたため、先にApple Watch側で有効化およびデバイス再起動を行いました。
![incoming-2851C677-6AA8-4E37-9E25-E4330A8A6909.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846493/5986db2c-dd3a-03b3-de2f-a67507161f1a.png)
3. **デバイスの再接続と再起動**
   - 上記の手順を行っても状況が改善しなかったため、以下のデバイスを再起動しました
     - iPhone
     - Apple Watch

## 結果

これらの手順を実行した後、iPhoneの「設定」アプリ内に無事ディベロッパモードの項目が表示され、設定を行うことができました。
![IMG_1828.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846493/800ae474-812d-ec05-ad73-397678eab43a.jpeg)


## まとめ

iOS 17環境下でディベロッパモードが表示されない問題は、Apple Watchとの連携や各デバイスの再起動により解決できる可能性があります。同様の問題に直面した方々の参考になれば幸いです。
Apple Notesをウェブサイトに変えるウェブサイトを作りました

こんにちは皆さん、私はインディーハッカーで、昨年の10月にマイクロソフトのソフトウェアエンジニアとしての仕事を辞めて自分のビジネスを始めました。多くの人と同じように、私はApple Notesがとても好きです。仕事を辞めてから最初にリリースした製品は https://quotion.co です。これは、Apple Notesを美しいブログやポートフォリオ、ポータルに変えるウェブサイトです。

あなたのノートをQuotionのサブドメインまたはあなた自身のドメインに自動で公開します。高速なページ読み込み、SEO対応、組み込みのアナリティクスがあり、見た目も素晴らしいです。デザインやコーディングのスキルは不要です。

質問やフィードバックがあればお知らせください。
![apple-notes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848191/c58494e0-b2c2-d1ee-4ba6-dc4505036a08.png)
![design.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848191/ef929d32-7390-e32d-e72a-4a451de33527.png)
![analytics.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848191/ce3dcc5a-1d8d-141e-0613-02b7343a3e03.png)