OmniAICreator/Qiita-1.07M huggingface dataset:
【Tableau】健康的な食生活を送っている都道府県を調べる：地理的特性編

Viz投稿②：健康的な食生活

最近は超絶不健康な食生活を送っており、自身の将来を憂いているakindです。
ふとした時に健康な食生活を遅れてる人ってどれぐらいいてるんやろかと気になったので
前回に引き続きTableauを使用して地域特性＋食性を分析しました。



https://public.tableau.com/app/profile/akira.sugimoto/viz/_17408511233260/1


![ダッシュボード 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037041/a4f51f11-9d9f-45b9-b61d-0941a8679a15.png)


今回は[穀物][野菜][肉][魚介類]の4種類にフォーカスしました。
一体どの都道府県が健康的な食生活を送っているのでしょうか。

＜ランクづけの定義＞
ESETのデータを使用し、各食材の消費量のTOP10を算出して各地域に色付けしました。
使用した機能はフィルターだけです。特に関数は使用していません。

＜穀物＞
穀物の一位は「新潟県」でした。
これは予想通りですね。さすがは日本の米処ですね。
他には石川県、富山県、滋賀県、京都府が消費量の多い都道府県でした。

＜魚介類＞
魚介類の一位は「富山県」でした。
北陸といえば肥沃な日本海で育った海の幸を堪能できる素敵な場所ですよね。
県民の方の生活に根付いていたり、観光客で賑わっている地域での消費が活発だったりと
いろいろな理由が考えられそうですね。
他には石川県、新潟県、京都府、静岡県が消費量の多い地域でした。

どの場所も海鮮好きにはたまらない場所ですね。
個人的には北海道がそこまでランクインしていなかったことが意外でした。

＜肉＞
肉の一位は「京都府」でした。
正直なところ京都は豆腐や魚介のイメージが強かったので完全に予想外でした。
他の地域は関西全県、広島県、福岡県、熊本県でした。
関西人がエネルギッシュなのは肉をたくさん食べているからなんでしょうか...
(かくいう僕も関西人で肉が好きでバイタリティに溢れてますので正しいかも...)

＜野菜＞
野菜の一位は「新潟県」でした。
北陸地方が３冠を達成！！
めちゃくちゃ健康的な食生活を送っていますね。
僕も見習っていろいろな食材を日々の食事に取り入れて健康になります。

ここまで読んでいただき、ありがとうございました。
Let's Encryptを用いた、SSL証明書の更新

# はじめに
AWSを用いて、自作のシステムを外部公開していたのですが、
SSL証明書の期限が月末までだったので、更新した時のメモです。
また、証明書の発行の手順も忘れていたので、付随して記入します。

### 筆者の状況
- AWSでEC2を使用中
- 独自ドメインを持っている（Route53で発行）
- 「Let's Encrypt」でSSL証明書を発行している
（AWS上だと、ドメイン取得費用以外に追加コストがかかることを後から知ったため。）
- Nginxを使用中


# 証明書の発行
前提として、

- 独自ドメインを持っている
- Nginxを使用中

で進めていきます。
<br>

まずはcertbotをインストールしていきます。

:::note info
Certbot（サーットボット）は、無料でSSL証明書を発行できるクライアントツールです。認証局であるLet's Encryptと連携して、SSL証明書の作成やWebサーバーの設定などを自動で行います。﻿
:::

```bash:
# 1. 必要なパッケージのインストール
sudo dnf update -y  # まずシステムを更新

# 2. Nginxプラグイン用のリポジトリ設定
sudo dnf install -y epel-release

# 3. Certbotとそのプラグインをインストール
sudo dnf install -y certbot certbot-nginx

# インストールの確認
certbot --version
```
インストールが確認できたら、証明書の取得を行います。

```bash:
sudo certbot --nginx -d 自分のドメイン.com
```
<br>

以下のようなメッセージが来ると発行完了です。
"This certificate expires on 2025-03-27."から、
「2025年3月27日までが期限だよ」ということが分かります。
```bash:
Successfully received certificate.
Certificate is saved at: ~自分のドメイン.com/fullchain.pem
Key is saved at:         ~自分のドメイン.com/privkey.pem
This certificate expires on 2025-03-27.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for 自分のドメイン.com to ~
Congratulations! You have successfully enabled HTTPS on https://自分のドメイン.com
```

# 証明書の更新
次に、証明書の更新を行います。
以下のサイトで証明書の期限を見ることができるので、併せて確認してみてください。
https://www.en-pc.jp/tech/checkssl/


```bash:
# 1. 有効期限の確認
sudo certbot certificates

# 2. 有効期限の更新
sudo certbot renew
```

更新が終わり、もう一度有効期限の確認をすると、"Expiry Date"を確認すると期限が延長されていると思うので確認して見てください。

# さいごに
途中Nginxの設定で証明書が発行できなかったりしたので手こずりました。
発行や更新自体は簡単なので、ぜひ参考にしてもらえると。
Fuggingfaceでポートができても起動判定にならないときの対処法


# GradioやFlaskの起動時に発生するエラーの原因と対処法

## エラーの原因

Gradioを使用している場合、基本的にこのようなエラーは発生しませんが、以下のような場合に発生することがあります：

- **Flaskなどで起動した場合**
- **Gradioでホストが設定されている場合**
- **起動するポートが7860でない場合**

## 原因の特定

### 1. モードが **Docker** の場合

起動しているポートが7860でない可能性があります。以下のようなログが出力される場合は、使用されているポート番号をDockerfileに追加します。

ログの例：
```
* Running on local URL:  http://0.0.0.0:ポート番号, with SSR ⚡
```

### README.mdの修正
README.mdに`app_port:ポート番号`として追加します。

```
---
sdk: docker
app_port: ポート番号
他の設定....
---
```

### 2. モードが **GradioやStreamlit** の場合

GradioやStreamlitを使用して起動した場合、Dockerモードと同様に`README.md`に`app_port`を設定できません。そのため、以下の点を確認します：

- `host` や `port` の設定が変更されていないかを確認。
- 通常、`README.md`の`app_file`に`host`や`port`の設定が記載されています。
- ポート番号の設定を **7860** に、ホストの設定を **0.0.0.0** に設定してください。

### 3. **Flask** などで起動した場合

- `port` を **7860** に、 `host` を **0.0.0.0** に設定してください。
[Python] Google AI Studio の APIキーをWindowsの環境変数に保存してPythonで使用する方法

# 目的
Google AI StudioのAPIキーをWindowsの環境変数に保存してPythonスクリプトで使用する方法を保存しておく。

参考情報
<a href="https://zenn.dev/cloud_ace/articles/e5c13b4fdaeb42">Google AI Studio & Vertex AI Studio：Gemini API 利用方法の違い</a>

# Google AI StudioのAPIキーを取得してWindowsの環境変数に保存する。
1.Googleアカウントを作成
2.<a href="https://aistudio.google.com/prompts/new_chat">Google AI Studio</a>にアクセスしてログインする
3.左上のGet API KeyをおしてAPIキーを取得する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111514/6c3f9202-897b-4d79-87fe-00c7908cc98f.png)
4.Windowsのシステム環境変数にAPIキーの文字列を保存する。コマンドラインではなく手動でAPI Keyを保存した方が簡単だった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111514/5394367c-dad2-458d-9442-33ab513d56b1.png)

# 環境構築
1. 仮想環境の作成, pipのアップデート, google-genaiの追加
```
$python -m venv .venv
$pip install --upgrade pip
$pip install -q -U google-genai --break-system-packages
``` 

# スクリプト

``` hello_gemini.py
# Google AI StudioのAPIキーを用いる簡単なサンプルプログラム
# このプログラムを実行する前に、Windowsのシステム環境変数にGEMINI_API_KEYを保存しておく。

import os  # OS（オペレーティングシステム）に関連する機能を利用するためのモジュールをインポート
from google import genai  # Googleの生成AI（genai）ライブラリをインポート
from google.genai import types  # Googleの生成AIライブラリの型定義をインポート

# 環境変数からAPIキーを取得
my_key = os.getenv("GEMINI_API_KEY")  # os.getenv()で、環境変数"GEMINI_API_KEY"に設定されたAPIキーを取得し、変数my_keyに格納

# Gemini APIクライアントの初期化
client = genai.Client(api_key=my_key)  # 取得したAPIキーを使って、genai.Client()でGemini APIのクライアントを初期化

# テキスト生成リクエストの送信
response = client.models.generate_content(  # client.models.generate_content()でテキスト生成をリクエスト
    model="gemini-2.0-flash",  # 使用するモデルを指定（ここでは"gemini-2.0-flash"モデルを使用）
    contents="Hello, Gemini!",  # モデルに与えるプロンプト（入力テキスト）を指定
    config=types.GenerateContentConfig(  # 生成設定を指定
        max_output_tokens=500,  # 生成されるテキストの最大トークン数を500に設定
        temperature=0.1,  # 生成されるテキストのランダム性を0.1に設定（0に近いほど決定的なテキストが生成される）
    )
)

# 生成されたテキストの表示
print(response.text)  # response.textで生成されたテキストを取得し、print()でコンソールに出力
```
pythonでcausalimactを使おうとしたら詰まった

# pythonでcausalimpactを使おうとしたら詰まったので、同様の人に向けて共有。
結論：google colabなら実行できる。ローカル環境なら微妙。
## 背景
金本拓著の書籍「因果推論」の7章にてcausalimpactのハンズオンをやっていた。
環境はローカルにまっさらな仮想環境を構築。
- python==3.10.12

## 詰まったところ
```zsh
pip install tfcusalimpact==0.0.13
```
ライブラリをインストールし、インポート中にエラー
```zsh
from causalimpact import CausalImpact

#出力
This version of TensorFlow Probability requires TensorFlow version >= 2.18;
Detected an installation of version 2.16.2. Please upgrade TensorFlow to proceed.
```
TensorFlowのバージョンが2.18以上が必要らしい。
ここで、TensorFlowの安定版は2.16.2(2025年3月16日時点)であり、pipではインストールできないらしい。
理由としてはPyPI（Python Package Index） と呼ばれる公開リポジトリに2.16.2までしか置いてないらしい。（2.18はまだ開発段階っぽい？）

開発段階でもいいので強引にインストールしたく、下記を実行。
```zsh 
pip install tf-nightly

# 出力
ERROR: Could not find a version that satisfies the requirement tf-nightly (from versions: none)
ERROR: No matching distribution found for tf-nightly
```
そんなものはないらしいです。。。。

tf-nightlyについては下記を参考にすればいいかもしれませんが、深みにハマりそうなので一旦STOPしました。
https://www.tensorflow.org/probability/install?hl=ja

## 別のcusalimpactパッケージ
pythonのcusalimpactパッケージには`pycausalimpact`というものがあるらしいので、そちらを試してみた。
前評判は下記の記事を参考に。
（すでにgithub repoからは消えており、またtfcausalimpactやRのcausalimpactパッケージとそれぞれ結果が違うらしい。）

https://tomtom58.hatenablog.com/entry/2025/02/10/210737
https://tjo.hatenablog.com/entry/2023/12/04/170000
途中経過を省きますが、ハンズオンの手本の結果と同じことを確認しました。
```python 
#推定結果の要点を出力
print(ci.summary())

#出力
osterior Inference {Causal Impact}
                          Average            Cumulative
Actual                    64.97              1884.2
Prediction (s.d.)         50.82 (0.5)        1473.82 (14.58)
95% CI                    [49.8, 51.77]      [1444.07, 1501.21]

Absolute effect (s.d.)    14.15 (0.5)        410.38 (14.58)
95% CI                    [13.21, 15.18]     [382.99, 440.13]

Relative effect (s.d.)    27.84% (0.99%)     27.84% (0.99%)
95% CI                    [25.99%, 29.86%]   [25.99%, 29.86%]

Posterior tail-area probability p: 0.0
Posterior prob. of a causal effect: 100.0%

For more details run the command: print(impact.summary('report'))
```
がしかし、プロットは縦軸が調整できない。
```python 
ci.plot()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/933066/def578e2-acd9-4473-a54c-2cb759fbd52c.png)
縦軸を調整しようとしたが、github ripoにもplot()のコードの中身がないので、断念しました。
＊わかる人教えてください。。。

本当はこんなプロットになるはず（google colab版）
![スクリーンショット 2025-03-16 16.18.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/933066/c7b1c8f6-5178-48a8-a002-afec6133d648.png)

## 展望
causalimpactを使用するときは、google colabもしくはRでやろうと思います。google colabだと安定版じゃないTensolFlowを使用しているから、使用できるんですかね。後々再現できないとかならないだろうか。
TensolFlow==2.18の安定版がpip installできたら、またチャレンジしようと思います。
schedule

htlmでのスケジュール表
```html
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="utf-8">
</head>

<style>
table {
border: solid 1px; 
color: black;
border-collapse:  collapse;
}

th {
width:60px;
border: solid 1px; 
background-color: lightgreen
}

td{
width:60px;
border: solid 1px; 
background-color: white;
}
</style>

<body>
<!--説明 -->
</br>
説明文</br>
説明文</br>
説明文</br>

<!--種類 -->
</br>
<b>A</b>

<!--テーブル -->
<table>
<tbody>
<tr>
<th>M0</th>
<th>M1</th>
<th>M2</th>
</tr>
<!--1行目 -->
<tr>
<td>M0-1</td>
<td>-</td>
<td>M2-1</td>
</tr>
<!--2行目 -->
<tr>
<td>-</td>
<td>-</td>
<td>M2-2</td>
</tr>
<!--3行目 -->
<tr>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
<tbody>
</table>

</body>

</html>
今話題のMCPを使って確定申告をラクにしてみた

# 確定申告RTA 2025：税理くんの開発日記

あ、ナルほど！ナル先生です。

年が明けたら、また来ましたね確定申告の季節。毎年やってますが、この季節になるといつも「どうにかラクにできないか？」って考えてました。

というわけで今年は思い切って『確定申告RTA』に挑戦してみてますｗ

https://x.com/GOROman/status/1901102426889089238

今年の申告期限は3月17日（月）。普段はギリギリで焦る派だけど、今回は珍しく余裕アリ！この余裕を活かして、AIを使った自動化を色々試してみました。



## とりあえずChatGPTに聞いてみた

まずは軽くChatGPTに質問を投げてみました。

https://x.com/GOROman/status/1901083908999180555

ぶっちゃけ「適当な返事が返ってくるんだろうな」って思ってたけど、予想以上にまともな回答がきてちょっと驚いた。


「青色申告の控除受けるには？」みたいな質問にもそれなりに正確な返事が来て、自分でもビビりました。税理士ほど細かいところまでは難しいけど、基本的な質問は余裕っぽいです。

## イメージキャラクターを作る

Gemini 2.0 Flash でイメージキャラクターを作りました。
https://x.com/GOROman/status/1901093446561263649

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30621/48338737-850a-4564-b593-5cf3513951c9.png)

## 「税理くん」に相談

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30621/fb756957-88ff-4b1d-b3b6-11c2e61338dc.png)


## 「税理くん」爆誕：SQLでデータ集計する税務AI

じゃあもうちょっと進めて、データベースに経費とか収入ぶち込んでサクッと集計できるようにしよう！と思い付きました。

そんなノリで誕生したのが「SQL分かる税理くん」。こいつに「去年の交通費いくら？」とか聞くと即座に答えてくれるんです。

https://x.com/GOROman/status/1901147430000918779

「クライアントごとの売上いくら？」とか「接待費の合計は？」なんて質問も一瞬で返ってくるので、Excelで悩むのが嫌いな自分には革命的でした。

## 調子に乗ってAWSも連携させた

調子に乗ってAWSとの連携にもチャレンジ。領収書の整理や入力がほぼ自動化できるようになったんで、これはガチでタイム大幅更新できそうｗ

https://x.com/GOROman/status/1901190089654300816

## PostgreSQLのスキーマはこんな感じ

スキーマも税理くんに適当に作ってもらいました。
https://gist.github.com/GOROman/617d553b94a4314658d7e5369ea4fff8

## PostgreSQL MCP Server で Claude対応

MCP(Model Context Protocol)対応で、自然言語でSQLクエリできるように。

https://x.com/GOROman/status/1901190089654300816

経費種別とか月別の集計も簡単に取れるのでめちゃ便利。

他にも色々応用できそう

これ税務だけじゃなくて、経理業務や売上レポート作成とか、予算管理にも使えそうです。

https://x.com/GOROman/status/1901150023515336840

## 調子に乗ってカスタムGPT公開した

せっかくなので、税務特化型のカスタムGPT「能力特化税理くん」を公開しました。税務知識、SQL処理、AWS連携ができます。

https://x.com/GOROman/status/1901159659400294643

興味あれば、触ってみてください。
↓↓↓
https://chatgpt.com/g/g-67d629d5747c819190a90deab58a245e-haihayou-neng-shui-li-seirikun

実際に使ってみると、「去年これどこ書いたっけ？」とかの疑問が即解決して、今年は楽勝の予感がしてます。あと30時間くらいあるし。

## 今後の展望

将来的にはe-Tax連携や自動申告書作成機能、税理士チェックも実現したいところ。データの集計から提出までほぼ完全自動化するのが目標です。OpenAI の CUA や Anthropic の Computer Use、Opera の　Agent あたりでできそうです。

## 最後に

確定申告って面倒だけど、こういうテクノロジー使ってさくっと片付けちゃいましょう。みなさんの工夫もぜひコメントで教えてください。一緒に記録更新しましょう！あ、なるほど！
🚀 オープンソースプロジェクト『Open Portfolio』 - データベース不要のポートフォリオサイト

![](https://storage.googleapis.com/zenn-user-upload/d82fa0eb266a-20250316.png)

近年、ポートフォリオサイトは個人のスキルや実績を示す重要なツールとなっています。そこで、**Open Portfolio**は、データベース不要でNext.jsをベースにしたモダンなポートフォリオサイトのテンプレートとして登場しました。今回は、オープンソースリポジトリとして公開している本プロジェクトに、ぜひ多くの開発者やデザイナーの方々に参加いただきたく、プロジェクトの概要と魅力を紹介いたします。

**構築できるサイトはこちら👇**
https://open-portfolio.bedev.site

## プロジェクト概要

**Open Portfolio**は、下記のような特徴を持つポートフォリオサイトです：

- **あなたのスキルの掲載**  
  職務経験、スキル、制作実績など、一般的なポートフォリオサイトに必要な情報をシンプルにまとめています。

- **モダンなデザインと豊富なカラーテーマ**  
  [shadcn/ui](https://ui.shadcn.com/)を利用した洗練されたデザインと、ダークモード・ライトモードの切り替えに対応。多彩なカラーテーマで自分好みにカスタマイズ可能です。

- **多言語化対応**  
  英語、日本語、中国語など、複数の言語でサイトを表示できるため、グローバルなアピールも可能です。

- **技術ブログサービスとの連携**  
  QiitaやZennなどのプラットフォームと連携し、技術記事を自動で取り込み、ポートフォリオ内で紹介する機能を備えています。

## クイックスタート

プロジェクトのセットアップはとてもシンプルです。まず、[Open Portfolio GitHubリポジトリ](https://github.com/bessho-ikuya/open-portfolio)をフォークしていただき、以下の手順でローカル環境に構築してください：

```bash
npm install
cp .env.example .env
npm run dev
```

実行後、ブラウザで [http://localhost:3000](http://localhost:3000) にアクセスして、動作を確認できます。  
※ インストール前に、Node.jsがインストールされていることをご確認ください。（[Node.js公式サイト](https://nodejs.org/en/download/)）

## カスタマイズとデプロイ

- **設定のカスタマイズ**  
  [ja_setting.json](src/i18n/dictionaries/ja_setting.json) のコメントを参考に、必要な設定値を変更していただけます。

- **Vercelへのデプロイ推奨**  
  GitHubと連携し、環境変数設定を `.env.example` を参考に行うことで、Vercelへのデプロイがスムーズに実現できます。

## 貢献とコミュニティ

このプロジェクトはオープンソースとして公開しており、皆さんからの貢献を大歓迎しています。コードの改善、デザインの提案、ドキュメントの整備など、どんな形でも構いません。  
詳しくは [Contribution Guide](CONTRIBUTING.md) をご参照ください。

また、プロジェクトに関するフィードバックや質問は以下のコミュニティチャネルで受け付けています：

- [Github Discussion](https://github.com/bessho-ikuya/open-portfolio/discussions)
- [GitHub Issues](https://github.com/bessho-ikuya/open-portfolio/issues)

## 今後の展望

Open Portfolioは、オープンソースコミュニティの力を借りながら、さらなる機能拡張とユーザーエクスペリエンスの向上を目指しています。あなたのスキルやアイディアが、このプロジェクトの未来を作ります。ぜひ参加して、一緒に「より良いポートフォリオサイト」を作り上げましょう！

---

**GitHubでスターを押して、最新情報をキャッチアップ！**  
[Open Portfolio GitHubリポジトリ](https://github.com/bessho-ikuya/open-portfolio)

皆さんのご参加を心よりお待ちしております。
JestHookの実行順序について

# ■はじめに

最近、JestでUnitテストを書くことが多かったため、その中でよく使う「JestHook」の実行順序に関してログを残そうと思います。

# ■JestHookとは

テストを実行する前にセットアップをしたり、テストが終わったあとにクリーンアップしたりする場合があります。

その際に使えるのが「JestHook」です。

JestHookには

- beforeEach
- afterEach
- beforeAll
- afterAll

があります。

例えば、DBを用いたテストを実施するには、テストを実行前にデータベースと接続して、テストに必要なデータの準備を行う必要があります。

他にも、`new Date()`などテストを実行するタイミングで動的に変わる値を固定するなども、テスト実行前に実施する必要があります。

また、テスト終了後には、セットアップで行ったモックや、DBへ追加したデータが、他のテストに影響を与えないよう、元の状態に戻す必要があります。

これらの処理はテストで共通して実行するため、全てのテストで同じ処理を何度も書くのは効率が悪いです。

そこで、「JestHook」を用いて、共通化して行うことがあります。

# ■JestHookの実行順序

### ◆今回実行するテストコード

```tsx
describe('外側のテスト', () => {
	beforeEach(() => {
		console.log('beforeEach - ①');
	});

	afterEach(() => {
		console.log('afterEach - ①');
	});

	beforeAll(() => {
		console.log('beforeAll - ①');
	});

	afterAll(() => {
		console.log('afterAll - ①');
	});

	it('テスト①', () => {
		console.log('テスト①の中身');
	});

	it('テスト②', () => {
		console.log('テスト②の中身');
	});

	describe('内側のテスト', () => {
		beforeEach(() => {
			console.log('beforeEach - ②');
		});

		afterEach(() => {
			console.log('afterEach - ②');
		});

		beforeAll(() => {
			console.log('beforeAll - ②');
		});

		afterAll(() => {
			console.log('afterAll - ②');
		});

		it('テスト③', () => {
			console.log('テスト③の中身');
		});

		it('テスト④', () => {
			console.log('テスト④の中身');
		});
	});
});

```

今回、検証で実行するテストコードは、こちらになります。

### ◆実行結果

```tsx
beforeAll - ①

beforeEach - ①
テスト①の中身
afterEach - ①

beforeEach - ①
テスト②の中身
afterEach - ①

beforeAll - ②
beforeEach - ①
beforeEach - ②
テスト③の中身
afterEach - ②
afterEach - ①

beforeEach - ①
beforeEach - ②
テスト④の中身
afterEach - ②
afterEach - ①

afterAll - ②
afterAll - ①
```

実行結果はこの様になりました。

`beforeAll`や`afterAll`は、全てのテストが実行される前と後で、1回だけ実行されている事がわかります。

`beforeEach`や`afterEach`は、各テストが実行される前に、何度も実行されていることがわかります。

beforeEachは外側に書いたものから、内側に書いたものの順番で実行されています。

afterEachは内側に書いたものから、外側に書いたものの順番で実行されています。
AWS AIF（AWS Certified AI Practitioner）合格体験記【1000点】



# AWS AIF（AWS Certified AI Practitioner）合格体験記【1000点】  

## はじめに  
AWS Certified AI Practitioner（AIF）に合格したので、勉強方法や試験の感想を共有します！これから受験する方の参考になれば嬉しいです。  

## 受験時の自分の状況  
- **学歴・経歴**：文系出身、IT企業に就職して社会人3年目  
- **AWS 業務経験**：1年程度（Bedrock を使った RAG 構築経験あり）  
- **取得済み資格**：AWS Certified Cloud Practitioner（CLF）、AWS Certified Solutions Architect – Associate（SAA）、AWS Certified Developer – Associate（DVA）、AWS Certified: SAP on AWS – Specialty（PAS）、AWS Certified Solutions Architect – Professional（SAP）  

## 学習方法  
基本的には SAP 受験時と同じく、**「問題演習を通じて弱点を把握する」** ことを重視しました。  

### 1. CloudLicense の模擬試験を活用  
- [CloudLicense](https://cloud-license.com/membership-registration/membership-login/) の模擬試験を利用  
- 8 割以上正解できるまで繰り返し学習  
- 学習時間は **約3日**  

### 2. 解説の深掘り  
- 解説を読んでもわからない部分は、検索してブログや AWS の公式ドキュメントを参考にする  
- サービスの概要を知りたいときはブログ、詳細な情報を知りたいときは AWS の公式ドキュメント

## 試験の感想  
- **生成 AI の分野は業務で触れている部分もあり、簡単に感じた**  
- **機械学習は知識ゼロだったので、用語が難しく感じた**  
- **基礎的な内容が多く、試験範囲は広くないため取得しやすい試験だった**  

## 試験結果  
- **スコア**：1000点（満点）  
- **分野別の評価**  
  - **【分野 1】複雑な組織に対応するソリューションの設計**：コンピテンシーを満たしている  
  - **【分野 2】新しいソリューションのための設計**：コンピテンシーを満たしている  
  - **【分野 3】既存のソリューションの継続的な改善**：コンピテンシーを満たしている  
  - **【分野 4】ワークロードの移行とモダナイゼーションの加速**：コンピテンシーを満たしている  

## まとめ  
AIF は AWS の生成 AI や機械学習の基礎を問う試験で、**範囲が広くないため比較的取得しやすい資格** だと感じました。  
**特に生成 AI に興味がある方は、AWS Bedrock などと絡めて学習すると理解しやすい** かもしれません！  

これから受験する方、頑張ってください！💪
社会人3年目、AWS SAP に合格！勉強方法＆試験のポイント

# AWS SAP 合格体験記 🎉  

## はじめに  
AWS Certified Solutions Architect - Professional（SAP）に合格したので、勉強方法や試験の感想を共有します！これから受験する方の参考になれば嬉しいです。  

## 受験時の自分の状況  
- **学歴・経歴**：文系出身、IT企業に就職して社会人3年目  
- **AWS 業務経験**：1年程度  
- **取得済み資格**：AWS Certified Cloud Practitioner（CLF）、AWS Certified Solutions Architect – Associate（SAA）、AWS Certified Developer – Associate（DVA）、AWS Certified: SAP on AWS – Specialty（PAS）

## 勉強方法  
SAP は範囲が広いため、1からサービスを学ぶより **「問題演習を通じて自分の弱点を把握する」** ことを重視しました。  

### 1. CloudLicense の問題集・模擬試験を活用  ※プロフェッショナルプランを利用
- [CloudLicense](https://cloud-license.com/) の模擬試験を利用  ※プロフェッショナルプランを利用
- 8 割以上正解できるまで繰り返し学習  
- 何度も解いたことで **時間配分には問題なし！**  

### 2. 解説の深掘り  
- 解説を読んでもわからない部分は、検索してブログや AWS の公式ドキュメントを参考にする  
- サービスの概要を知りたいときはブログ、詳細な情報を知りたいときは AWS の公式ドキュメント
  

### 3. 試験対策のポイント  
✅ **問題をしっかり読む！**  
  - **SAA などの試験と比べて、問題文も選択肢も長い** ため、丁寧に読まないと間違える  

✅ **フラグを活用して時間を有効に使う**  
  - わからない問題は **フラグをつけて後回し！**  
  - 時間が足りなくなるのを防ぐため、解ける問題を優先  

## 試験の感想  
- **問題が長文＆選択肢も長い** → 素早く読んで内容を把握する力が必要  
- **時間配分は問題なし** →CloudLicense での模擬試験が役立った！ 見直しに1時間くらい残せた
- **選択肢の迷いどころが多い** → 「どれも正しいが、最適な解決策はどれか？」を考える力が問われる  
- **手ごたえは半々** → 「受かっているか微妙…」という気持ちだった  

## 試験結果  
- **スコア**：791点  
- **分野別の評価**  
  - **【分野 1】複雑な組織に対応するソリューションの設計**：コンピテンシーを満たしている  
  - **【分野 2】新しいソリューションのための設計**：コンピテンシーを満たしている  
  - **【分野 3】既存のソリューションの継続的な改善**：コンピテンシーを満たしている  
  - **【分野 4】ワークロードの移行とモダナイゼーションの加速**：コンピテンシーを満たしている  

## まとめ  
SAP は難易度が高いですが、問題演習を繰り返して **「どのサービスをどう使うのがベストか？」** を考える習慣をつけると、実務にも活かせる知識が身につきます！これから受験する方、頑張ってください！💪
Docker ComposeでWordPressを立ち上げた後、ポートを変更する方法

# 概要
下記の公式手順に従ってWordPressをDockerComposeにて構築すると、サイトのURLが`http://"IPアドレス":8000`となる。
https://docs.docker.jp/compose/wordpress.html
80にポートを変更する方法を記載する。
# 環境
プラットフォーム：さくらVPS
OS:AlmaLinux9
Dockerバージョン：Docker version 28.0.1, build 068a01e
WordPressバージョン：6.7.2

# 手順
## WordPressの管理画面にログイン
`http://"IPアドレス:8000"/wp-admin`にアクセス
## WordPressアドレス(URL)とサイトアドレス(URL)を変更
1. 設定 > 一般
1. WordPressアドレス(URL)とサイトアドレス(URL)を以下のように変更
    - `http://"IPアドレス":8000` > `http://"IPアドレス"`
1. 変更を保存をクリック
## docker-compose.ymlを編集
以下を変更
```
(一部抜粋)
変更前
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "80:8000"
     restart: always
変更後
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "80:80"
     restart: always     
```
保存
## dockerを再起動
停止
```
$ sudo docker compose down
```
起動
```
$ sudo docker compose up -d
```
## 再度WordPress管理画面にアクセス
`http://"IPアドレス"/wp-admin`でアクセスできるようになっているはずだが、できない場合はブラウザのキャッシュを削除してアクセス。
Subversion (SVN) とは？ Git との違いを解説！

## **はじめに**

バージョン管理というと `Git` を思い浮かべる人が多いかもしれません。

しかし、案件によっては `Git` ではなく `Subversion (SVN)` を使うこともあります。

そこで、SVN とは何か？ Git と何が違うのか？ を調べてみました。

---

## **Subversion (SVN) の特徴**

SVN は **「集中型バージョン管理システム」** であり、中央のリポジトリサーバーで全ての変更履歴を管理します。

### **🔹 SVN のリポジトリ構造**

SVN では、通常 **「trunk」「branches」「tags」** というディレクトリを使います。

| ディレクトリ名 | 役割 | Git の対応するもの |
| --- | --- | --- |
| `trunk` | メイン開発用のブランチ | `main` または `master` |
| `branches` | 開発中のブランチを格納するフォルダ | `feature-branch` など |
| `tags` | リリース版のスナップショットを格納するフォルダ | `git tag` |

Git のような `GitHub` や `GitLab` のようなホスティングプラットフォームはなく、また `リモートブランチ` の概念もありません。

---

## **Subversion (SVN) の運用の流れ**

SVN の基本的な開発フローを見てみます。

### **① `trunk` の最新をコピーして `branches/feature-xxx` ブランチを作成**

```bash
svn copy <リポジトリURL>/trunk <リポジトリURL>/branches/feature-branch -m "新機能開発用のブランチ作成”
```

### **② 作業ブランチをチェックアウト**

```bash
svn checkout <リポジトリURL>/branches/feature-branch
```

これで `branches/feature-branch` の最新コードをローカルに取得できます。

### **③ 修正作業を行う**

変更があるファイルを編集します。

### **④ `branches/feature-xxx` にコミット**

```bash
svn add 修正したファイル  # 新規追加のファイルを SVN に登録
svn commit -m "機能追加: ○○の処理を実装"
```

Git の `git push` のような操作は不要で、`commit` した時点でリモートに反映されます。

### **⑤ テスト環境で動作確認（必要に応じて `trunk` と比較）**

```bash
svn diff <リポジトリURL>/trunk <リポジトリURL>/branches/feature-branch
```

これにより、trunk との差分を確認できます。

### **⑥ `trunk` にマージ**

まず `trunk` の最新状態を取得します。

```bash
svn checkout <リポジトリURL>/trunk
svn update
```

次に、ブランチの変更を `trunk` にマージします。

```bash
svn merge <リポジトリURL>/branches/feature-branch
```

競合が発生した場合は、手動で解決します。

```bash
svn status  # 競合があるか確認
svn resolve --accept=theirs-full <ファイル名>  # ブランチの変更をそのまま適用
svn resolve --accept=mine-full <ファイル名>   # 自分の変更を優先
```

最後にマージ結果をコミットします。

```bash
svn commit -m "feature-branch の変更を trunk にマージ"
```

SVN では **`commit` すると変更が中央リポジトリに反映** されます。

---

## **タグ (`tags`) の使い方**

SVN では、タグ (`tags`) はリリース時に `svn copy` を使って作成します。

```bash
svn copy <リポジトリURL>/trunk <リポジトリURL>/tags/release-1.0.0 -m "バージョン 1.0.0 リリース"
```

Git の `git tag` とは異なり、SVN のタグは **単なるコピー** です。

---

## **SVN と Git の違い**

### **🔹 SVN のメリット**

✅ **シンプルな運用**

- Git のように `ローカルリポジトリ` や `リモートリポジトリ` を意識せずに運用できる。
✅ **中央管理なので統制しやすい**
- **管理者が「誰が何を変更したか」を把握しやすい**。
✅ **履歴の改変ができない**
- Git の `rebase` や `reset` のように履歴を書き換えられないため、**過去の変更履歴が厳密に管理できる**。

### **🔹 SVN のデメリット**

❌ **ブランチの切り替えが遅い**

- Git は `git checkout` でブランチを切り替えられるが、SVN は `checkout` し直す必要があるため遅い。
❌ **リモートブランチがない**
- Git の `git push origin feature-branch` のような運用ができない。
❌ **GitHub のようなプラットフォームがない**
- SVN には `GitHub` や `GitLab` のようなプラットフォームがないため、**コード管理がしづらい**。

---

## **まとめ**

✅ SVN は **「集中型バージョン管理システム」** で、中央リポジトリが唯一の履歴管理場所。

✅ Git のような `リモートブランチ` はなく、変更は `commit` した時点でリモートに反映される。

✅ **`trunk`・`branches`・`tags`** の3つのディレクトリ構造で運用する。

✅ **Git に比べるとブランチの切り替えが遅く、リモート運用がしづらい** というデメリットもある。

✅ しかし **中央集権的な管理がしやすい** ため、大規模な企業システムでは今も採用されることがある。

SVN は Git とは違う考え方のバージョン管理ですが、基本的な運用フローは似ています。

案件で SVN を使う場合も、基本を押さえておけば問題なく対応できると思います！

---

## **あとがき**

SVN は Git ほど使われなくなってきていますが、企業によっては今でも採用されています。

今回調べてみて、**Git と SVN の概念の違いを理解できた** ので、実務でも活かせそうです！

もし間違いがあれば、ご指摘いただけると嬉しいです！

以上、`Subversion (SVN)` の解説でした！
SwiftUIでbodyの中にprintを書く方法

SwiftUIで実装中にprintで軽くデバッグしてみたい時に便利です。
`print(text)`だけだとエラーになってしまいます。

```.swift
struct TestView: View {
     var text = "表示"
    var body: some View {
        let _ = print(text)
    }
}
```

この様にするとprintデバッグできるようになります。
エンジニア1年目に読んだ書籍 5選


こんにちは！

普段は書籍よりも、Udemyや技術記事、YouTubeなどオンライン中心で学ぶことが多いのですが、実際に読んでみて役立った内容をアウトプットも兼ねて記事にまとめました。

# 1.リーダブルコード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836145/c6390ab8-f8fe-410c-8683-6e7f42928d8f.png)
必須中の必須ですね。読みやすいコードとは何かを教えてくれる本でした。

# 2. 改訂2版 わかばちゃんと学ぶ Git使い方入門〈GitHub、SourceTree、コマンド操作対応〉
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836145/b55109e1-0784-4b80-8dfb-c11234aa1652.png)
業務でgitを使うことになったので、現場リーダーに勧められて購入。とても読みやすく、gitについて体系的に学べたのがとても良かったです。


# 3. 楽々ERDレッスン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836145/604c9f55-a904-4a6b-8f07-1a4cfbd0ee3f.png)

チーム開発でDB設計を担当することになったので購入。実践向け書籍なこともあり、手を動かすことでDBに対する理解が向上しました。

# 4. なぜネットワークはつながるのか
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836145/3aa1508c-554c-4ade-9a69-ab2438c80bc2.png)

2024年4月ぐらいに読みました。プログラムの構造が歴史とともに解説されており、興味深かったです。

# 5. 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836145/c41f22a4-b408-448f-8580-b5691ade6351.png)

チーム開発に挑戦するときに、セキュリティ関連の本を読んでおこうと思い購入。アプリケーションに対する様々な攻撃パターンや防御パターンが記載されており、どこかのタイミングでもう一度読み直したい本でした。
論文グラフの視認性向上：データが重なるときの色、マーカー、エラーバーの工夫

## はじめに

論文や技術系の記事で使われるグラフでは、色だけでなくマーカーの形も変えてデータを区別することがあります。これは単なるデザインではなく、データの識別性を向上させるための重要な工夫です。

自分で論文の図を作成する中で「データ点が重なるときにマーカーの形を変えると視認性が向上する」という気づきがあったため、その理由と実装例を紹介します。

## なぜ「色＋マーカー」を使うのか？

### 1. 色だけでは区別しにくい場合がある
色は違いを示すのに便利ですが、赤と緑などは色覚異常の方には区別が難しい場合があります。青とオレンジ、紫と黄色のような組み合わせは、色相や明度差が大きいため、より認識しやすくなります。色覚異常者向けのカラーパレットについては以下の記事が参考になります。

https://qiita.com/odashi_t/items/cab9005ae9bb32dabf7d

### 2. データ点が重なるときの視認性向上
異なる年の観測データなど、同じ座標に複数のデータ点が重なる場合、色だけでは区別しづらくなります。マーカーの形を変えれば、データが重なっていても識別しやすくなります。


## Python（matplotlib）での実装例

以下は、異なる年代のデータを「色」と「マーカーの形」の両方で区別した例です。

```python
import matplotlib.pyplot as plt

# データ（観測年・X座標・Y座標）
years = [2010, 2015, 2020]
x_values_list = [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
y_values = [0, 0, 0]
markers = ['o', '*', '^']

plt.figure(figsize=(6, 4))

# 各データセットをマーカーのみでプロット
for i in range(len(years)):
    plt.scatter(x_values_list[i], y_values, marker=markers[i], label=f'{years[i]}')

plt.xlabel('x')
plt.ylabel('y')
plt.legend(title='year')
plt.show()
```

![maker.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1599258/3f19b60d-7707-49d3-b772-406af0e1471a.png)
このように色だけでなくマーカーの形を変えることで、データが重なっていても区別しやすくなります。


## 補足：エラーバーが重なるときの対策

エラーバーを追加すると、データ点が密集している場合に見えにくくなることがあります。その場合、以下のような工夫が有効です。

- キャップ (`capsize`) を調整して端を見やすくする
- 透明度 (`alpha`) を下げて重なりを軽減する
- データを少し横にずらして重なりを避ける。ただし、オフセットを入れることで本来のデータの特徴が変化する可能性があり、その意図と適用したオフセット値を入れた方が良い場合もあります。

```python
import matplotlib.pyplot as plt

# データ（観測年・X座標・Y座標）
years = [2010, 2015, 2020]
x_values_list = [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
y_values = [0, 0, 0]
markers = ['o', '*', '^']

plt.figure(figsize=(6, 4))

# 各データセットをマーカーのみでプロット
for i in range(len(years)):
    plt.errorbar(x_values_list[i], y_values, yerr=[0.2, 0.3, 0.1], fmt=markers[i], capsize=5, alpha=0.7, label=f'{years[i]}')

plt.xlabel('x')
plt.ylabel('y')
plt.legend(title='year')
plt.show()
```

![maker_err.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1599258/996f2553-cb78-44b0-8de1-467e61158ce9.png)

キャップサイズを調整することでエラー範囲を明確にし、透明度を調整することで重なったマーカーの識別が容易になります。これにより、視認性が向上し、データの読み取りがしやすくなります。

## まとめ
- データが重なるときは色だけでなくマーカーの形で区別
- エラーバーはキャップや透明度を調整すると見やすくなる

グラフのデザインは、情報を視覚的に伝えやすくするために重要です。論文のグラフには著者の意図や工夫が反映されることが多いため、そうした視点で読み解くと新たな発見があるかもしれません。
私はAIを使った面白いオンライン翻訳ツールを無料で作成するためにこのウェブサイト，を作りました

[givemetranslator.com](https://givemetranslator.com)
![screenshot-20250316-141131.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876724/fabff46f-6a72-491a-b236-fa88d0162814.png)
![20250316-141102.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876724/ff620a32-2c11-4651-bdf4-fa60810bb627.jpeg)

翻訳の夢を実現するための遊び場です！
単調な「Hello→Hola」で満足するより、「Hello→アーッ、元気かい、陸の者よ！」のような訳があった方が楽しいでしょう！

ほんの数語で、あなたは：

簡単な自然言語を使って個性的な翻訳ツールを作成できます

テキストを海賊風、シェイクスピア調、またはあなたが思いつくどんなスタイルにも変換できます

あなたの作品を友達と共有して、彼らの笑顔を見ることができます

いくつか翻訳ツールを作ってみて、このツールがあなたを幸せにしたかどうか教えてください！
Lynx開発環境をandroid(pixel)上で実行してみる

# はじめに
自分の備忘録のために調べたことと参照先をまとめていきたい。
Android端末上に構築した環境でLynxを試してみたい。
下記環境へのnode.js npmの構築は以下前述
参照：https://qiita.com/Shanuki/items/5c40d25f7f594b92a49a

# 目次
- [環境](#環境)
- [初期状態で実行](#初期状態で実行)
- [編集してみる](#編集してみる)

# 環境
- 端末：pixel6a(Androidスマートフォン)
- アプリ：ターミナル
- Linux仮想環境：debian
  (Android Virtualization Framework)
- debianバージョン：Linux localhost 6.1.0-29-avf-arm64 #1 SMP Ubuntu 6.1.123-1 (2025-01-02) aarch64 GNU/Linux
参照：https://news.yahoo.co.jp/articles/d3473c2e2a2cd2d4e084b2e4b65d2d9953d0277f

# 初期状態で実行
参照：https://lynxjs.org/guide/start/quick-start.html#ios-simulator-platform=macos-arm64,explorer-platform=ios-simulator

### 1.プロジェクト作成
lynxSmpというディレクトリを作成して進める。
```bash
npm create rspeedy@latest
```

対話形式で生成するプロジェクトの名称･言語･linterを聞かれるので設定していく。
```bash:対話内容
> npx
> create-rspeedy

◆  Create Rspeedy Project
│
◇  Project name or path
│  lynxSmp #生成するディレクトリ名称
│
◇  Select language
│  TypeScript #言語選択
│
◇  Select additional tools (Use <space> to select,
<enter> to continue)
│  none #lintツール選択
│
◇  Next steps ─────────────╮
│                          │
│  1. cd lynxSmp           │
│  2. git init (optional)  │
│  3. npm install          │
│  4. npm run dev          │
│                          │
├──────────────────────────╯
│
└  All set, happy coding!

```

実行結果
![1000005658.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4035685/bfa5e0d3-4072-4d27-b0cb-c5778650ad2f.png)

### 2.実行環境のインストール
公式サイトQRコードから実行ツールをインストール
![1000005659.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4035685/26be6202-9cb7-4392-b1d7-9e69aad4e07a.png)

### 3.実行
```bash
cd lynxSmp
npm install
npm run dev
```

ポートへのアクセス許可が出ますので許可します。
![1000005662.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4035685/90d94cc6-581a-4d2f-86b5-b6a21bf000e4.png)

### 4.実行結果
![1000005664.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4035685/ee23b7db-5a23-4c86-bb88-a808f20f14ea.png)

先程インストールしたlynxExploreでQRコードを読み込む。今回は同じ端末上でやっているので出力されたURLを直接入力するとアプリの初期画面が出力されます。
![1000005661.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4035685/60e2d4e7-27a5-4258-a1a2-296059fc60d7.png)

実行することが出来ました。
![1000005649.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4035685/58092ef6-a866-408e-a984-a5c70343171c.png)

# 編集してみる
以下のファイルを編集して実行してみます。
```tsx:src/App.tsx
<text className="Title">ここを編集しました。</text>
```

再度実行してみる
```bash
npm install
npm run dev
```

実行結果
![1000005663.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4035685/4969a050-602d-4168-85ef-6d754fb32139.png)

環境自体は問題なさそうですが、実際に動かしながら何か作るとなるとデバッグ等で苦戦しそうです。
つぎはTypeScriptの勉強がてらテーマを見つけて何か作ってみたいと思います。
RISE with SAP vs GROW with SAP

自分へのメモも含めて記載します。
RISE with SAP vs GROW with SAP
![S4HC.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3172525/82ad29fd-3c64-4b35-b6aa-9e56434ef9e6.jpeg)
#21.LTイベントで初登壇してきた。

# はじめに
昨日、LTイベントで初の登壇をさせていただいたのでそちらの感想になります。

https://techbull.connpass.com/event/345494/
# 何で参加しようと思ったか？
私がLTで登壇しようと思った理由は以下の通りになります。
- **Kubernetesに勉強していたのでそのアウトプット**
- **会場にいるKubernetes熟練者から情報共有いただけるかもしれない**
- **人前で話すのに慣れるため**

他にも少し理由はあるのですが、主な理由はこんな感じになります。

実は以前からLTの登壇に興味があり、実際にconnpassで応募したLTイベントがあったのですが、
その時の仕事のスケジュールと開催地の都合により、キャンセルさせていただいたことがありました。
そんなときに私が加入しているTechbullコミュニティのSlackで「LTイベント開催するから出たい人」
みたいなメッセージをコミュニティオーナーの方が投稿してたので「前から出てみようと思ってたし出てみよう」ぐらいの感覚で応募しました。

# イベント開催まで
とりあえず話す内容は「Kubernetesのツールについて」とざっくり決まっていたのですが、話すツールの中には本や公式ドキュメントを読んで知っていたぐらいで、手を動かして動作を確認したことがなかったものもあったため、実際に動作を確認してみました。

実際の動作と自分の認識で乖離がなくなってきたなと思ったぐらいのタイミングでスライドを作成して、知り合いの方々にレビューいただきました。
**※レビューしてもらった方々には本当に感謝です**

気付いたらイベントの参加者もかなり増えていて、初のLTの登壇ということもあったので登壇1週間前ぐらいはかなり緊張してました。
しかも、スライドのページも多く作りすぎてしまい、1週間前ぐらいに用意してたスライドでは、発表を終えるのに時間が６～７分ぐらいをかけないと完走しきれなかったんですよね。
**※今回のLTイベントは5分間のLTでした**

その後は、開催日まで時間があったので余計なスライドを省いたりしてスライドの修正をしていました。

# イベント開催日
ついにイベント開催日を迎え、開催地のほうに向かいました。
同じコミュニティ内のイベント参加者の中で、実際にお会いしたことがない人ともご挨拶できたので良い機会でした。
会場にいる方々と挨拶しているうちにイベント開始時間となったので自分の登壇の順番が来るまでほかの方の発表を聞いて楽しんていました。
そうこうしているうちに自分の順番が回ってきてついに登壇させていただきました。

登壇を終えての感想としては、**とりあえずやり切った**という感じでしたね。

もちろん緊張はしていたのですが、気づいたら何も感じない「無」の状態になってました。
※緊張している状態が平常になっていたのかもしれないです。

自分がちゃんと内容を伝えきれていたかはわからないのですが、この**やり切った**という感覚はなかなか経験できないものだと思うので良い経験だったなと思います。
時間も5分以内に収まっていたのでその点も良かったです。

■発表資料

https://speakerdeck.com/nayaaaa/kuberneteswoshou-yuan-dexue-bou-chu-xin-zhe-xiang-kerokaruhuan-jing-nosusume

# まとめ
とりあえずイベントも無事終えてひと段落ついたなぁといった感じです。

今後もまた登壇者として参加してみたいと思っているLTイベントがあるのと、機会があれば今回のイベント内でも話があった6/4のイベントにも参加しようと思っているので何かテーマを考えておこうと思います。

今回のイベントを開催するにあたり、ご協力いただいた運営の皆さま、そしてご参加いただいた皆さま、本当にありがとうございました！


https://x.com/adachin0817/status/1901112518095065548
GCPのCEでECSみたいなサービスを作りました。

## はじめ
こにちは。
ClassMethodの説明会聞いてECSを多く使うと感じて一度作りたいと思って挑戦しました。
## なぜAWSではないGCPを選択したのか？
GCPのCreditが残っていたから使ってみました。

## アーキテクチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3981722/d5102034-f319-40b8-956a-cd4e05ae41de.png)



1. **接近方法**
VPCは接近ができなくて、publicVPCにpublic-nginxのサーバーを作って、このpublic-nginxのreverse　proxyを通じて、frontendに接近できるようにしました。
frontendでbackendに要請を送る時はpublic-nginxを通じてprivate-nginxに接近できるようにしました。
private-nignxではbackendにreverse proxyで接近ができます。<br><br>

2. **Load Balancing構築**
LoadBalancing作るには動的IPの割り当てる必要ですが、それを解決するためにconsulを使いました。<br>
**consul**について
consulをServer-based使ってconsul-agentでIPを登録と照会することでService Discoveryの技能を中心に使いました。
consulを通じて動的IPの割り当てることができます。
このIPとconsul-templateを使ってnignxで自動的にnginx.configを作るようにしてLoadBalancing構築しました。<br>
consulと似たようなサービスで、NetflixのEurekaもいます。<br>
【Link】
consul_main_page : https://www.consul.io/
consul_github : https://github.com/hashicorp/consul <br><br>

 3. **Auto Scailing構築**
GCPのMIGというサービスを使ってサーバーのResourceの問題が発生した時にCEを作りshell　scriptを使ってサーバーを構築して、consulにIPを登録します。
それでnginxからtrafficをもらうことでサーバーの問題を解決できるようにしました。




## 勉強になったこと


1. backendではlocalhost:8080/api/v1/readみたいに作る理由について知ることができました。
理由はnginxで接近できる経路を食別ができるようにするためと
k8sでrollingとかのDeployの方法のためです。<br><br>
2. dockerのcontainerはすべてlatestではない
今回使った技術のconsulではlatestですればerrorが発生します。
必ずVersionを名称する場合もあると知りました。<br><br>
3. サーバーを構築する時使ったコマンドをAutoScailingとか作る時使うことができるのでメモするとかshellscriptで作る必要があると知りました。<br><br>
4. 私みたいにVimが難しく感じる人もあると思います。
それならnanoというものを使ってみてください。
Vimより便利です。<br>
Laravel基礎

## 前提
- 筆者はPHPすら触ったことがない
- pythonの野良コードしか書いたことがなく、システムを組んだことはない。

## 本を読んで新しく学んだこと
### 1. Laravel、というかMVCアーキテクチャ
```mermaid
    flowchart TD
    User[User] -->|① request| Routing[Routing]
    Routing -->|② index| Controller[Controller]
    Controller -->|③ index| View[View]
    Controller -->|④ getOrderBy| Model[Model]
    Model -->|⑤ orderBy, get| Server[Server]
    Server -->|response| Model
    Model -->|response| Controller
    View -->|response| User

```

### 2. ルーティング：特定のアドレスにアクセスしたとき、どの処理を呼び出して実行するか
- `routes`フォルダの`web.php`にどんどん書いていく
- ルートパラメータにて処理に引数を渡す


### 3. コントローラ：具体的に実行すべき処理を担う
- 名前空間：クラスを階層的に整理するための仕組み
### 4. ビュー：テンプレートをレンダリングして表示する
- PHPのソースコードをそのままテンプレートする
    - `resources`フォルダ内の`views`というフォルダに適当な名前のフォルダを切って、phpファイルを配置
    - クエリー文字列(url/tekitou?id=watashi)やルートパラメータで引数を渡す
- Bladeと呼ばれるテンプレートエンジンを使用する
    - `~~.blade.php`ファイルで保存する
    - formをPOSTにて作れる
    -`@if`, `@for`などで"ディレクティブ"を作れる
    - `resources/views\layouts`にベースレイアウトを作成し、それを継承（@section, @extends）した継承レイアウトを作成する
- サービスプロバイダ（ビューコンポーザ）：ビューのビジネスロジックを入れるためのオブジェクト
    - `artisan make:provider 名前`にてServiceProviderを継承して`App\Providers\名前`を作成
    - `config\app.php`にパスを記述
### 5. モデル
- DBクラスをそのまま使用
    - パラメータ結合等を利用して、SQLっぽく記述
- Eloquent（ORM）を使用し、オブジェクト指向っぽく操作
    - スコープ：その条件下のレコードを集めているクラスを作成
- マイグレーション：データベースの履歴管理機能。これを使って違う環境でも同じデータベースを構築する
- シーディング：初期テーブルの作成インサート文を記述
### 6. リクエスト・レスポンスを補完
1.  ミドルウェア：Model・Controller・Viewの間でリクエスト・レスポンスの補完を行うもの
    - `artisan make:middleware 名前`にて`App\Http\Middleware`に作成
    - `App\HTTP\Kernel.php`にパスを記述
    - ルーティングの時にmiddleware()で呼び出して、処理を補完する
1. バリデーション：にて型間違え等を補完
    1. controllerのvalidateメソッド
    1. `artisan make:request 名前`にて`App\HTTP\Requests`内に作成。フォームリクエスト。
    1. validatorクラスのメソッドを使用
    1. オリジナルのValidatorを`App\Http_Validator`に作成

### 5. ユニットテスト
- PHPUnitを利用
    - `php artisan make:test HelloTest`にて、`tests\Feature\HelloTest`を作成
        - test~関数を作成し内容をassertで記述
        - test~という関数名のモノは自動的にテストされる
- テスト用データベースを作成したほうがいい。
    
## 参考文献
- PHPフレームワーク Laravel入門 掌田 津耶乃 著 [URL](https://www.shuwasystem.co.jp/book/9784798060996.html)
LinuxサーバーでダイナミックDNSを使う方法（Duck DNS編）

# ダイナミックDNSとは
## DNSとは
DNS(Domain Name Service)とは、IPアドレスとドメイン名を紐づけするサービスのことです。これによって、ユーザーはサーバーにアクセスするときに、無機質な数字の羅列である「IPアドレス」を入力する代わりに、意味を持った文字列である「ドメイン名」を入力することでサーバーにアクセスできるようになります。

## ダイナミックDNSとは
このように、現在のインターネットでは欠かすことのできないDNSですが、自宅サーバーなどでプロバイダーからの動的なIPアドレスを使用している場合、ちょっと困った事情が発生します。専用回線とは違い、動的IPアドレスは不定期に変化するので、サーバーのIPアドレスが変化したときに、ドメイン名と紐づけられているIPアドレスも更新することが必要になります。そこで登場するのがダイナミックDNSです。
ダイナミックDNSでは、自宅サーバー側から定期的にIPアドレスをDNS側に通知して、IPアドレスが変化したときにはドメイン名とIPアドレスを紐づけをし直すことによってこの問題を解決します。これにより、自宅サーバー側のIPアドレスが変化しても、同じドメイン名でアクセスすることができるようになります。

# Duck DNS
Duck DNSは現在注目を集めているダイナミックDNSサーバーの一つで、無料で利用することができます。

## ドメインの取得
まず、Duck DNSのサイトにアクセスして任意の方法でサインインします。
[https://www.duckdns.org/](https://www.duckdns.org/)
サインインしたら登録したいサブドメインを入力して、「add domain」ボタンをクリックしてドメインを取得します。入力したサブドメインが"mydomain"の場合、取得できるドメイン名は"mydomain.duckdns.org"となります。取得できるドメインは5つまでです。

## IP通知
### IP通知プログラムのインストール
先に書いたとおり、ダイナミックDNSでは自宅サーバー側からDDNS側に定期的にIPアドレスを通知する必要があります。
Arch Linuxでは、AURにDuck DNSのIP通知に特化したパッケージ"duckdns"が存在します。ここでは、IPv6にも対応している"duckdns-ipv6"パッケージをインストールします。
```shell-session:shell
$ yay -S duckdns-ipv6
```
### 設定ファイルの編集
つぎに、設定ファイルを編集します。duckdnsパッケージのデフォルト設定ファイルは、/etc/duckdns.d/default にあるので、これを編集します。
```shell:/etc/duckdns.d/default
DOMAINS="mydomain"
TOKEN="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
```
ここで*mydomain*には先程取得したサブドメイン名を、*TOKEN*には自身のDuck DNSのTOKENを記入してください。

### IP通知プログラムの起動
設定が終わったら、IP通知プログラムを起動します。
```shell-session:shell
$ sudo systemctl enable duckdns.timer
$ sudo systemctl start duckdns.timer
```
これで、10分毎にDuck DNSサーバーへ自宅サーバーのIPアドレスが通知され、自宅サーバーのIPアドレスが変化しても、常に取得したドメイン名でアクセスできるようになります。

# まとめ
ダイナミックDNSは、動的にIPアドレスが変化する環境でも、常に同じドメイン名でアクセスできるようにするとても便利なものです。プロバイダからの動的IPアドレスを使って自宅サーバーを立てている場合にはぜひとも活用したいツールと言えるでしょう。
それでは、よいLinuxサーバーライフを。
Windowsの仮想デスクトップ（Taskview,Multitask）のメモ

Windowsデスクトップで仮想デスクトップ（タスクビュー）を利用する際に、マイクロソフト公式的なドキュメントがどこにあったかよくわからなくなるのでメモ。

仮想デスクトップ、Virtual Desktopで検索すると、Azure Virtual DesktopやWindows Virtual Desktopなどが検索にひっかかり紛らわしく。

その流れで、タスクビューだったりマルチタスクって呼び方もあった事に気が付くといった流れを繰り返しているのでメモ。

## Configure Multiple Desktops in Windows

[Configure Multiple Desktops in Windows](https://support.microsoft.com/en-us/windows/configure-multiple-desktops-in-windows-36f52e38-5b4a-557b-2ff9-e1a60c976434)

仮想デスクトップ（タスクビュー）利用時のタスクバーの表示設定について。

アプリを開いた時のタスクバーへの表示設定について記載がある。

- 現在開いているデスクトップのタスクバーのみに表示させる
- 関係なくすべてのデスクトップ上のタスクバーに表示させる

## Windows 10とWindows 11のWindowsキーボードショートカットに着目した資料。

[Keyboard shortcuts in Windows](https://support.microsoft.com/en-us/windows/keyboard-shortcuts-in-windows-dcc61a57-8ff0-cffe-9796-cb9706c75eec#desktop)

この中のMultiple desktop keyboard shortcutの項目に記載がある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/5e385d83-63fa-4d3b-8b7e-60c0faab4bd3.png)

## How to Multitask in Windows

[How to Multitask in Windows](https://support.microsoft.com/en-us/windows/how-to-multitask-in-windows-b4fa0333-98f8-ef43-e25c-06d4fb1d6960)

仮想デスクトップの使い方についてのドキュメント。

## 総評

普段、仮想デスクトップとして認識していますが、タスクビューやマルチタスクって検索した方が多分マイクロソフト公式のドキュメントにはヒットしやすいきがする。

毎回、同じことを思い出しているのでメモ
【Web】画面サイズによって使用するコンポーネントを切り替える方法

# はじめに
最近はもっぱらWebの開発に勤しんでいます。
TypeScript、Reactの組み合わせで開発していますが、先日レスポンシブ対応の一環で画面サイズによってUIを切り替える必要が出てきました。
その際実装方法を調べて実装したのですが、利用頻度の多い実装なので備忘録の為に実装方法を残しておきたいと思います。

# 実装方法
まず、表示している画面サイズを調べ返却する為のカスタムフックを作成します。

```useWindowSize.tsx
import { useState, useEffect } from "react";

const useWindowSize = () => {
  const [windowSize, setWindowSize] = useState({
    width: 0,
    height: 0,
  });

  useEffect(() => {
    const handleResize = () => {
      setWindowSize({
        width: window.innerWidth,
        height: window.innerHeight,
      });
    };

    window.addEventListener("resize", handleResize);
    handleResize();

    return () => window.removeEventListener("resize", handleResize);
  }, []);

  return windowSize;
};

export default useWindowSize;
```
useEffect内ではウィンドウサイズが変更される度に実行され、最後メモリーリーク防止の為コンポーネントがアンマウントされたときにイベントリスナーを削除するようにしています。

また、初回レンダリング時に一度だけ呼び出されるよう、Listenerに登録後handleResizeを呼び出すようにしています。

次に上記を利用する際のサンプルです。

```ProfileCard.tsx
import useWindowSize from "@/hooks/useWindowSize";
import ProfilePC from "./ProfilePC";
import ProfileMobile from "./ProfileMobile";

const ProfileCard = () => {
  const { width } = useWindowSize();
  const isMobile = width < 768; 

  return isMobile ? <ProfileMobile /> : <ProfilePC />;
};

export default ProfileCard;
```
利用方法としては以上になります。
useWindowSizeを通して画面サイズを取得し、比較してコンポーネントを使い分けるようにしています。

# さいごに
花粉がとんでもない量飛んでいそうですね、早めに薬を飲み始めていたのですがそれでも目が痒すぎる・・・
一つのアプリでSFM～Gaussian splattingを遊べるアプリ作りました

# 一つのアプリでStructure from MotionからGaussian Splatting

1つのアプリケーションで、画像のメタデータチェック、キーポイント抽出、マスク生成、マッチング、3次元構成、そしてGaussian Splattingまでの3D再構築処理を一元管理できるツールを作りました。

## Githubレポジトリ
https://github.com/inuex35/splat_one

## 概要

これまで、3D再構築を行う際は、各処理を個別のツールで実施していました。今回作成したアプリは、以下の一連の処理を1つのアプリケーション内で完結できるようにしています。

- **画像のメタデータチェック**  
  画像ファイルから必要なメタデータを確認します。

- **キーポイント抽出**  
  画像から特徴点を抽出し、後続のマッチング処理に備えます。

- **マスク生成**  
  必要に応じて、画像に対してマスク処理を行います。

- **マッチング**  
  抽出した特徴点を用いて、画像間の対応関係を算出します。

- **3次元構成**  
  マッチング結果から、カメラ位置やシーンの3D構造を再構築します。

- **Gaussian Splatting**  
  再構成された3Dデータを、Gaussian Splatting技術によりレンダリングします。

![ezgif-170e0f4a09aed3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659798/a370e969-b37d-4155-8202-27feba9477c4.gif)


  ## 使用技術

本プロジェクトでは、以下のオープンソースプロジェクトを活用しています。

- [OpenSfM](https://github.com/inuex35/ind-bermuda-opensfm/)
- [Gsplat](https://github.com/inuex35/gsplat/)

これらの技術を組み合わせることで、高精度な3D再構築とリアルタイムレンダリングを実現しています。

## Dockerでの動かし方

環境構築が不要な Docker イメージ `inuex35/splat_one` を利用すれば、簡単に動作させることができます。以下のコマンドを実行してください。

```bash
docker run --gpus all \
    -e DISPLAY=host.docker.internal:0.0 \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v ${PWD}/dataset:/source/splat_one/dataset \
    -v C:\Users\$env:USERNAME\.cache:/home/user/.cache/ \
    -p 7007:7007 \
    --rm -it \
    --shm-size=12gb \
    inuex35/splat_one
```
コンテナに入ったら
```bash
python main.py
```
でGUIが起動します。

## 最後に
開発中なのでバグ等あります。issueに挙げてもらえばなるべく早く直しますが、個人開発なので修正したらプルリクいただけると助かります。
Amazon CloudWatch

## CloudWatchとは
AWSの監視および管理ツールで、リソースとアプリケーションのパフォーマンスデータを収集・可視化できるサービス

## 構成要素
### CloudWatch Metrics(メトリクス)
AWSサービス（EC2、S3、RDS、Lambdaなど）のパフォーマンスデータを定期的に収集し、時間軸で可視化します

### CloudWatch Logs(ログ)
アプリケーションやAWSサービスからのログデータを収集し、保存・管理します

### CloudWatch Alarms(アラーム)
メトリクスに基づいて条件を設定し、指定したしきい値を超えると通知を送信したり、特定のアクションをトリガーします

### CloudWatch Dashboards(ダッシュボード)
複数のメトリクスを一つの画面で可視化するためのカスタムダッシュボードを作成します

### CloudWatch Events(イベント)
 AWSサービスで発生する特定のイベントに基づいてアクションを実行するためのルールを設定します

### CloudWatch Console(コンソール)
Webインターフェースから、メトリクスの確認、ログの検索、アラームの設定などを行うことができる管理コンソールです

### CloudWatch Logs Insights
 ログデータの分析ツールで、クエリを使用してログデータを迅速に検索・集計できます

## オブザーバビリティとは
システムの未知の問題を発見し、どこで、いつ、何が起こっているのかの原因を特定する能力

### モニタリングとの違い
モニタリングは事前に決めた項目を監視し、アラートを発します
主にメトリクスとログが使われます

### オブザーバビリティの3つの主要要素
#### メトリクス
｢何が起きているのか？｣を把握します
##### 機能
CloudWatch Metrics
##### 具体例
- CPU使用率
- メモリ消費量
- HTTPリクエスト数

#### ログ
｢どこで起きているのか？｣を特定します
##### 機能
CloudWatch Logs
##### 具体例
- アプリケーションエラーログ
- リクエストログ
- デバッグログ

#### トレース
｢なぜ発生したのか？｣を特定します
##### 機能
AWS X-Ray
##### 具体例
- マイクロサービス間のリクエスト経路
- 処理時間の分析

## 機能
### リアルタイム監視-Metrics
CPU使用率、ディスクI/O、ネットワークトラフィックなどを監視

### カスタムメトリクスの作成-Metrics
ユーザーが独自のメトリクスを作成し、データを送信

### ログの収集とフィルタリング-Logs
アプリケーションやシステムのログを保存し、特定の条件でフィルタリング

### アラームの設定と通知-Alarms
しきい値を超えたときにSNSやLambdaを使って通知・自動対応

### 異常検知 (Anomaly Detection)-Metrics,Alarms
機械学習を活用し、異常な動作を検出

### イベント駆動のアクション-Events
特定のイベントが発生したときにLambda実行やSNS通知をトリガー

### スケジュール実行-Events
指定時間にLambda関数やEC2の起動・停止を自動実行

### ダッシュボード作成-Dashboards
重要なメトリクスを一画面で可視化し、監視を効率化

### ログ分析-Logs Insights
SQLライクなクエリを使用し、ログデータを検索・分析

## まとめ
CloudWatchは、AWSリソースとアプリケーションの監視・管理を行うサービスで、メトリクス、ログ、アラーム、イベント、ダッシュボードなどの機能を提供します。オブザーバビリティの観点から、メトリクスで「何が起きているか」、ログで「どこで起きているか」、トレースで「なぜ発生したのか」を分析し、システムの健全性を維持できます
Perplexity AI（1. 2022年ごろ：Perplexity AI創設、Perplexity Ask、Bird SQL）

## Perplexity AI創設
2022年8月Aravind Srinivas氏は検索エクスペリエンスを向上させるというビジョンを掲げ、Perplexityを共同設立した[^2][^3]。

> Artificial Intelligence would be the ultimate version of Google.
>>*Google翻訳*
>>人工知能は Google の究極版となるでしょう。
>>
>["Founding CEO of Google Inc". The Academy of Achievement Interview, www.achievement.org. October 28, 2000](https://achievement.org/achiever/larry-page/#interview)

Aravind Srinivas氏は、2018年にOpenAIで強化学習、2019年にはDeepMindで対照学習、2020年からGoogleで勤務、2021年にカリフォルニア大学バークレー校で博士号を取得した後、再度OpenAIでDALLE-2開発に携わるなど、強力なAI・データサイエンスのバックグラウンドを持つ。同氏は、博士過程時にGoogleのLarry Page氏の上記の言葉に感銘を受け、最も効率的な方法で人々に情報を提供するという検索の使命を本当に解決できるのは、AIを完全に解決した場合のみであるということとし[^1]、Perplexity AI設立にあたっては最先端のAIモデルを組み込んで、関連性の高い、パーソナライズされた正確な結果を提供することで、従来の検索エンジンから脱却することが掲げられている[^2]。

> ![](https://cdn.prod.website-files.com/66bf05dee8c5f0991d608526/67361143440407316e139ddd_9215bb41-5bb6-4bb6-b1cd-3b7340ffb788.png)
[What Is Perplexity AI? How It Works & How to Use It](https://www.meetjamie.ai/blog/what-is-perplexity-ai)


[^1]:[How Perplexity is revolutionizing the way people find information](https://www.nea.com/blog/perplexity-qa-revolutionizing-search)
[^2]:[Aravind Srinivas: Pioneering the Future of AI with Perplexity Search Engine](https://foundermagazine.in/aravind-srinivas-pioneering-the-future-of-ai-with-perplexity-search-engine/)
[^3]:[Perplexity blog](https://www.perplexity.ai/hub/blog/announcing-our-series-a-funding-round-and-mobile-app-launch)

## Perplexity Ask, Bird SQL

2022年12月7日、新しい検索インターフェイスであるPerplexity Askを発表した[^3][^11][^13]。Perplexity Askは、従来の検索エンジンのようにリンクのリストを表示するのではなく、あらゆる質問に直接回答する、すなわち検索結果を要約し、しかも引用を含めることで、提供された情報の正確性を簡単に確認できるようにされている。言語モデルとしてOpenAI社のGPT-3.5、検索エンジンとしてMicrosoft社のBingが利用されていた。

>![スクリーンショット 2025-03-15 20.17.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982238/177d708e-9392-4484-b9f1-f15a17f6c90f.png)
[X post by *Perplexity* at 3:04 AM · Dec 8, 2022](https://x.com/perplexity_ai/status/1600551871554338816)

またその9日後の12月16日には、Twitter検索インターフェースであるBird SQLが発表された[^12]。OpenAI社のCodexを利用して自然言語をSQLへ変換してTwitterの検索を行うことで、ユーザビリティに問題のあったTwitter検索の問題を解決しようとしている[^14]。


[^10]:[Perplexity AI CEO Believes No Publisher Should Own the Right to Reported Facts](https://observer.com/2024/11/perplexity-ceo-respond-to-plagiarism-allegation/)
[^11]:[Perplexity AIとは？日本語での使い方とCopilotやChrome拡張機能を解説](https://tcd-theme.com/2023/08/perplexity-ai.html)
[^12]:[X post by *Perplexity* at 2:25 AM · Dec 16, 2022](https://x.com/perplexity_ai/status/1603441221753372673?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1603441221753372673%7Ctwgr%5E365ef2483cc69c471df496ff1228b6c139f31bea%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Fanalyticsindiamag.com%2Fai-news-updates%2Fperplexity-ai-improves-twitter-search-with-birdsql%2F)
[^13]:[X post by *Perplexity* at 3:04 AM · Dec 8, 2022](https://x.com/perplexity_ai/status/1600551871554338816)
[^14]:[Perplexity AI Improves Twitter Search with BirdSQL](https://analyticsindiamag.com/ai-news-updates/perplexity-ai-improves-twitter-search-with-birdsql/)

---
続きはこちら

https://qiita.com/akagi_hayato/items/6593aedc24b085d80138
ほぼ6ヶ月でAWS12冠した方法

#ほぼ6ヶ月でAWS12冠した方法

##勉強方法
問題集を解く。
ことAWSの資格に関しては、問題集を解くのが一番早いです。
ハンズオンとか、参考書を読むとか色々勉強法はあると思いますが、それは余裕があればやる程度で大丈夫です。

##使用したサイト
Cloud Lisence
このサイトの問題を解けるようになれば普通に合格できます。
Eclipseのデバッグ中にDTOの値を変更する方法

## やり方
仕事でやったら少し躓いてしまったので、備忘録として残す。

Eclipseの変数タブで直接DTOなどの値を変更する際、~~import文を記載することができないため、フルパスを記載する必要がある。~~
→デバッグ時に、実行中のコードにインポートされていないライブラリを使用する場合は、フルパスを記述する必要がある。


次のようにコードを記述することで、DTOに値を格納することができる。
※本コードのDTOの各パラメータはpublicであることを前提とする

```
jp.co.test.dto.copy.GroupDTO groupDTO = new jp.co.test.dto.copy.GroupDTO();
jp.co.test.dto.copy.UserDTO userDTO = new jp.co.test.dto.copy.UserDTO();

userDTO.name = "testUser";
userDTO.age = 18;

java.util.List<UserDTO> userList = new java.util.ArrayList<>();
userList.add(userDTO);

groupDTO.groupName = "testGroup";
groupDTO.users = userList;
groupDTO.additionalInfo = "hogehoge";

return groupDTO;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203506/dc70a315-9adb-4671-94f7-54c97d548fb2.png)


これで次のように上手くいく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203506/9446eb65-97cc-47fd-964e-ea51c1ca5cd5.png)

## サンプルコードのDTO
### GroupDTO

```
package jp.co.test.dto.copy;

import java.util.List;

public class GroupDTO {
    public String groupName;
    public List<UserDTO> users;
    public String additionalInfo;
}

```

### UserDTO

```
package jp.co.test.dto.copy;

public class UserDTO {
    public String name;
    public int age;
}
```
【Clipy】の神コピペ機能

# はじめに
本記事では、Mac用のクリップボード拡張アプリ「**Clipy**」を活用することで、いかに生産効率を大幅に向上できるかを紹介します。

僕は、Clipyのおかげで生産効率が爆上がりしました！
知らなかった人は、この記事を読んでぜひ活用してみて下さい。

なお、私はXで機械学習やデータサイエンスに関する情報発信も行っていますので、ご興味ある方はぜひフォローして下さい。

https://x.com/tarantula_ds_/


# Clipyとは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584936/c4722533-8a1b-486f-b134-dc2396fb1c44.png)

Clipyとは、macOSで動作するクリップボード管理アプリの中でも特に使いやすいツールの一つです。

通常、コピーした内容を貼り付ける際には「command + V」を押すだけですが、これでは最後にコピーしたものしか呼び出せないという弱点があります。そこで大きな助けとなるのが、Clipyの「**shift + command + V**」機能です。

これを使えば、上図にありますように複数のコピー履歴を簡単に一覧表示でき、一度コピーしたテキストやコードをすぐに呼び出せるようになります。過去の履歴から選択して貼り付けるだけなので、作業のミスを減らしながらスピードも上がるのが大きな魅力です。

さらに、導入が非常に簡単なのもClipyの特徴です。公式サイトからアプリをダウンロードし、インストール後に起動するだけで基本的な機能はすぐに使えます。シンプルなインターフェースと直感的な設定画面を備えているため、初心者でも迷うことなく使い始められると思います。

普段から頻繁にコピー＆ペーストを行う人にとっては、手放せないアプリになるはずです。実際、コピー履歴を管理するだけでなく、スニペット機能や定型文の登録など、多彩な機能を活用すれば、さらに快適かつ生産的な作業環境を実現できると思います！

# 使い方
Clipyの使い方は非常にシンプルです。まずは公式サイトからアプリをダウンロードし、ダウンロードしたファイルをダブルクリックしてインストールを進めるだけで準備は完了。

https://clipy-app.com/

特別な設定をしなくても、インストール直後からすぐに基本機能を使えます。

インストール後、早速「**shift + command + V**」を押してみると、これまでコピーしてきた複数のテキスト履歴を一覧表示できるはずです。コピー＆ペースト作業を頻繁に行う方であれば、何度も同じ文章をコピーし直す手間がなくなるため、その便利さをすぐに実感できるはずです。

必要に応じて設定画面で履歴の保存数やスニペットの管理などを調整すれば、より快適なペースト作業が可能になります。

# おわりに
最後まで読んでいただき、ありがとうございます。**Clipy**は、ちょっとした工夫で作業効率を格段にアップしてくれる便利なアプリです。

もし本記事が少しでも役に立ったと感じていただけたら、ぜひ「いいね」や「ストック」をしていただけると嬉しいです。

また、私はXでデータサイエンスやプログラミング、機械学習に関する情報を発信していますので、興味のある方はぜひフォローしてみてください。

https://x.com/tarantula_ds_/

日々の作業が少しでも快適になるよう、今後もさまざまな効率化ツールやテクニックを紹介していきたいと思います。今後ともどうぞよろしくお願いいたします。